{"version":3,"sources":["webpack:///./wwwroot/scripts/neo-richpirates.min.js","webpack:///webpack/bootstrap e8e143c67411b599e76b","webpack:///./Engine/Game/GameApp.ts","webpack:///external \"NeoCommon\"","webpack:///external \"NeoGames\"","webpack:///./Engine/Common/Strings.ts","webpack:///./Engine/Common/AppContext.ts","webpack:///./Engine/Game/Components/StageController.ts","webpack:///./Engine/Game/Utils/Scaling.ts","webpack:///./Engine/Game/Utils/FrameTimer.ts","webpack:///./Engine/Game/AnimationFrame/AnimationFrame.ts","webpack:///./Engine/Game/AnimationFrame/Types.ts","webpack:///./Engine/Game/Components/Elements/Graphics/BaseElement.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ShapeElement.ts","webpack:///./Engine/Game/Components/ComponentTypes.ts","webpack:///./Engine/Game/Components/Effects/Tweens.ts","webpack:///./Engine/Game/Components/Effects/GsapEffects.ts","webpack:///./~/gsap/src/uncompressed/TweenMax.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./Engine/Game/Components/Managers/StyleManager.ts","webpack:///./Engine/Game/Utils/Attributes.ts","webpack:///./Engine/Game/Utils/CustomUtils.ts","webpack:///./Engine/Game/AnimationFrame/Pool.ts","webpack:///./Engine/Game/Utils/FrameTimerPool.ts","webpack:///./Engine/Game/Channels/Common/Bonuses/Jackpot.ts","webpack:///./Engine/Game/Channels/Common/Jackpot/JackpotCounter.ts","webpack:///./Engine/Game/Utils/Languages.ts","webpack:///./Engine/Game/Channels/Common/Jackpot/JackpotHistoryDialog.ts","webpack:///./Engine/Game/Channels/Common/Datas/JackpotData.ts","webpack:///./Engine/Game/Channels/Common/Datas/GameData.ts","webpack:///./Engine/Game/Managers/DataManager.ts","webpack:///./Engine/Game/Managers/GameManager.ts","webpack:///./Engine/Game/Managers/BetManager.ts","webpack:///./Engine/Game/Managers/ModuleManager.ts","webpack:///./Engine/Game/Managers/BalanceManager.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/CashierDialog.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/Dialog.ts","webpack:///./Engine/Game/Channels/Common/Bonuses/FreeRoundBonus.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/FreeRoundBonusDialog.ts","webpack:///./Engine/Game/Components/Sounds/PlayList.ts","webpack:///./Engine/Game/Components/Managers/SoundManager.ts","webpack:///./Engine/Game/Utils/RetentionPanel.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/BetHigherThanMinDialog.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/FreeRoundBonusIcon.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/ResponsibleDialog1.ts","webpack:///./Engine/Game/Managers/MessageManager.ts","webpack:///./Engine/Game/GameComponents/Base/BaseModel.ts","webpack:///./Engine/Game/Channels/Common/Actions/BaseActions.ts","webpack:///./Engine/Game/HTMLComponents/HtmlController.ts","webpack:///./Engine/Game/HTMLComponents/UserAction.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/QuickspinDialog.ts","webpack:///./Engine/Game/CustomComponents/PageVisibilityHandler.ts","webpack:///./Engine/Game/Channels/Common/Paytable/Paytable.ts","webpack:///./Engine/Game/Components/Configuration.ts","webpack:///./Engine/Game/Channels/Common/SimilarGames/SimilarGames.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/LimitDialog.ts","webpack:///./Engine/Game/Managers/NotificationManager.ts","webpack:///./Engine/Game/Utils/WebSocketClient.ts","webpack:///./Engine/Game/Utils/WebSocketClientHub.ts","webpack:///./Engine/Game/Channels/Common/Platforms/Playtech/SessionTimer.ts","webpack:///./Engine/Game/Channels/Common/Jackpot/JackpotGame.ts","webpack:///./Engine/Game/Components/Effects/CustomEase.ts","webpack:///./Engine/Game/Utils/AmbientBackground.ts","webpack:///./Engine/Game/Utils/Focus.ts","webpack:///./Engine/Game/Components/Managers/PreloaderProvider.ts","webpack:///./Engine/Game/Components/Resources/XmlResource.ts","webpack:///./Engine/Game/Components/Resources/Resource.ts","webpack:///./Engine/Game/Components/Managers/CanvasManager.ts","webpack:///./Engine/Game/Components/ActionSet.ts","webpack:///./Engine/Game/Components/ComponentAttributes.ts","webpack:///./Engine/Game/Components/Managers/ConfigurationManager.ts","webpack:///./Engine/Game/Components/Managers/HtmlManager.ts","webpack:///./Engine/Game/Channels/Common/UserControls/UserControls.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlContainerElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlElement.ts","webpack:///./Engine/Game/Channels/Common/Actions/ActionSet.ts","webpack:///./Engine/Game/Components/Managers/ActionManager.ts","webpack:///./Engine/Game/ClientHost/ClientHostConsumer.ts","webpack:///./Engine/Common/GameDefinition.ts","webpack:///./Engine/Common/GameConfiguration.ts","webpack:///./Engine/Game/Managers/PlatformsManager.ts","webpack:///./Engine/Game/Channels/Common/Actions/FreespinsActions.ts","webpack:///./Engine/Game/Channels/Common/Actions/GambleActions.ts","webpack:///./Engine/Game/Channels/Common/Actions/GameActions.ts","webpack:///./Engine/Game/Channels/Common/Actions/PickActions.ts","webpack:///./Engine/Game/Channels/Common/Actions/TerminalActions.ts","webpack:///./Engine/Game/Channels/Common/UserControls/GambleUserControls.ts","webpack:///./Engine/Game/GameComponents/Gamble/GambleController.ts","webpack:///./Engine/Game/GameComponents/Controller.ts","webpack:///./Engine/Game/GameComponents/Gamble/GambleModel.ts","webpack:///./Engine/Game/GameComponents/Gamble/GambleView.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ContainerElement.ts","webpack:///./Engine/Game/Channels/Desktop/DesktopBaseUserControls.ts","webpack:///./Engine/Game/GameComponents/Base/BaseController.ts","webpack:///./Engine/Game/GameComponents/Base/BaseView.ts","webpack:///./Engine/Game/GameComponents/Paylines.ts","webpack:///./Engine/Game/GameComponents/PaylinesDefinitions.ts","webpack:///./Engine/Game/GameComponents/Payline.ts","webpack:///./Engine/Game/Components/Elements/Graphics/SwitchElement.ts","webpack:///./Engine/Game/Components/Elements/Styles/SwitchStyle.ts","webpack:///./Engine/Game/Components/Elements/Styles/Style.ts","webpack:///./Engine/Game/Components/Elements/Graphics/AnimationElement.ts","webpack:///./Engine/Game/Components/Elements/Texts/TextElement.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ParticleElement.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ImageElement.ts","webpack:///./Engine/Game/Components/Elements/Styles/ParticleStyle.ts","webpack:///./Engine/Game/GameComponents/PaylinesSelector.ts","webpack:///./Engine/Game/GameComponents/Symbols.ts","webpack:///./Engine/Game/GameComponents/Symbol.ts","webpack:///./Engine/Game/GameComponents/WinAnimator.ts","webpack:///./Engine/Game/Components/Elements/Graphics/TimelineElement.ts","webpack:///./Engine/Game/Components/Elements/Texts/ImageTextCounterElement.ts","webpack:///./Engine/Game/Components/Elements/Texts/ImageTextElement.ts","webpack:///./Engine/Game/Components/Sounds/Song.ts","webpack:///./Engine/Game/GameComponents/Machine.ts","webpack:///./Engine/Game/GameComponents/Reel.ts","webpack:///./Engine/Game/GameComponents/Reel2.ts","webpack:///./Engine/Game/CustomComponents/TeasingComponent.ts","webpack:///./Engine/Game/CustomComponents/Settings.ts","webpack:///./Engine/Game/CustomComponents/MinigameElement.ts","webpack:///./Engine/Game/CustomComponents/TeasingBonus.ts","webpack:///./Engine/Game/Channels/Desktop/DesktopFreespinsUserControls.ts","webpack:///./Engine/Game/GameComponents/Freespins/FreespinsController.ts","webpack:///./Engine/Game/GameComponents/Freespins/FreespinsView.ts","webpack:///./Engine/Game/GameComponents/Freespins/FreespinsModel.ts","webpack:///./Engine/Game/Channels/Desktop/DesktopGambleUserControls.ts","webpack:///./Engine/Game/Channels/Desktop/DesktopPickUserControls.ts","webpack:///./Engine/Game/GameComponents/Pick/PickController.ts","webpack:///./Engine/Game/GameComponents/Pick/PickModel.ts","webpack:///./Engine/Game/GameComponents/Pick/PickView.ts","webpack:///./Engine/Game/CustomComponents/WinAnimatorPick.ts","webpack:///./Engine/Game/Channels/FireBird/FireBirdBaseUserControls.ts","webpack:///./Engine/Game/Channels/FireBird/FireBirdPaytable.ts","webpack:///./Engine/Game/Channels/FireBird/FireBirdHelp.ts","webpack:///./Engine/Game/Channels/FireBird/FireBirdTypes.ts","webpack:///./Engine/Game/Channels/FireBird/FireBirdFreespinsUserControls.ts","webpack:///./Engine/Game/Channels/FireBird/FireBirdGambleUserControls.ts","webpack:///./Engine/Game/Channels/Mobile/MobileBaseUserControls.ts","webpack:///./Engine/Game/Channels/Mobile/MobileFreespinsUserControls.ts","webpack:///./Engine/Game/Channels/Mobile/MobileGambleUserControls.ts","webpack:///./Engine/Game/Channels/Mobile/MobilePickUserControls.ts","webpack:///./Engine/Game/Components/Elements/Graphics/BaseElementParticle.ts","webpack:///./Engine/Game/Components/Elements/Graphics/LinkedElement.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ParticleGroupElement.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ProtonElement.ts","webpack:///./Engine/Game/Components/Elements/Graphics/VibrationElement.ts","webpack:///./Engine/Game/Utils/Vibration.ts","webpack:///./Engine/Game/Components/Elements/Styles/AnimationStyle.ts","webpack:///./Engine/Game/Components/Elements/Styles/ContainerStyle.ts","webpack:///./Engine/Game/Components/Elements/Styles/ProtonStyle.ts","webpack:///./Engine/Game/Components/Elements/Styles/ShapeStyle.ts","webpack:///./Engine/Game/Components/Elements/Styles/TimelineStyle.ts","webpack:///./Engine/Game/Components/Resources/SndResource.ts","webpack:///./Engine/Game/CustomComponents/EllipseElement.ts","webpack:///./Engine/Game/CustomComponents/ImageGroupElement.ts","webpack:///./Engine/Game/CustomComponents/ImageTextCounterElement2.ts","webpack:///./Engine/Game/CustomComponents/MachineExtended.ts","webpack:///./Engine/Game/CustomComponents/ReelExtended.ts","webpack:///./Engine/Game/CustomComponents/SymbolExtended.ts","webpack:///./Engine/Game/CustomComponents/PathElement.ts","webpack:///./Engine/Game/CustomComponents/PathElementNodeMoveto.ts","webpack:///./Engine/Game/CustomComponents/PathElementNode.ts","webpack:///./Engine/Game/CustomComponents/PathElementNodeLineto.ts","webpack:///./Engine/Game/CustomComponents/PathElementNodeCurvetoQuadratic.ts","webpack:///./Engine/Game/CustomComponents/PathElementNodeCurvetoBezier.ts","webpack:///./Engine/Game/CustomComponents/PathElementNodeArcto.ts","webpack:///./Engine/Game/CustomComponents/PathElementNodeClosepath.ts","webpack:///./Engine/Game/CustomComponents/PlaneRopeElement.ts","webpack:///./Engine/Game/CustomComponents/PlaneRopeStyle.ts","webpack:///./Engine/Game/CustomComponents/PolygonElement.ts","webpack:///./Engine/Game/CustomComponents/RopeElement.ts","webpack:///./Engine/Game/CustomComponents/SoundElement.ts","webpack:///./Engine/Game/CustomComponents/TilingImageElement.ts","webpack:///./Engine/Game/CustomComponents/WinAnimatorExtended.ts","webpack:///./Engine/Game/GameComponents/Pick/Spot.ts","webpack:///./Engine/Game/HTMLComponents/Custom/HtmlBetSelectorContainerElement.ts","webpack:///./Engine/Game/HTMLComponents/Custom/HtmlBetSelectorContainerElement2.ts","webpack:///./Engine/Game/HTMLComponents/Custom/HtmlDenomContainerElement.ts","webpack:///./Engine/Game/HTMLComponents/Custom/HtmlHideButtonElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlButtonElement.ts","webpack:///./Engine/Game/HTMLComponents/Custom/HtmlLanguageContainerElement.ts","webpack:///./Engine/Game/HTMLComponents/Custom/HtmlSoundContainerElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlAutoplayButtonElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlAutoplayItemButtonElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlAutoplayDialogContainerElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlCanvasElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlCheckboxElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlCustomContainerElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlDataSliderElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlLabelElement.ts","webpack:///./Engine/Game/HTMLComponents/Elements/HtmlText.ts","webpack:///./Engine/Game/HTMLComponents/Styles/HtmlContainerStyle.ts","webpack:///./Engine/Game/HTMLComponents/Styles/HtmlStyle.ts","webpack:///./Engine/Game/PixiSettings.ts"],"names":["e","a","i","this","modules","installedModules","__webpack_require__","moduleId","exports","module","id","loaded","call","m","c","p","Object","prototype","hasOwnProperty","_m","args","slice","fn","b","apply","concat","__extends","d","__","constructor","create","neo_common_1","libraryInitialize","gameApp","neo_common_2","neo_games_1","Strings_1","StageController_1","PreloaderProvider_1","Languages_1","ClientHostConsumer_1","GameDefinition_1","GameConfiguration_1","AppContext_1","GameData_1","HtmlController_1","GameManager_1","DataManager_1","PlatformsManager_1","FreeRoundBonus_1","Scaling_1","RetentionPanel_1","GameApp","_super","arguments","main","urlInfo","UriHelper","parseUrl","window","location","href","language","RetentionPanel","initialize","load","defineProperty","get","_gameClient","enumerable","configurable","exit","Platforms","gameClosing","AppContext","gameConfiguration","ExitUrl","userAction","url","history","closeRealityCheck","createGameClient","options","gameClient","Communication","Game","GameClient","key","FreeRoundBonus","pauseAnimations","StageController","resumeAnimations","createPreloaderProvider","PreloaderProvider","createGameDefinition","definition","GameDefinition","createGameConfiguration","configuration","GameConfiguration","createAppContext","gameDefinition","createClientHostConsumer","GameClientHostConsumer","requireStrings","createStage","quality","size","color","width","height","initClientHost","PlatformsManager","Promise","resolve","parseLoadResult","loadResult","result","status","GameEngine","Types","AppLoadStatus","Failure","error","message","stack","finalizeLoad","loadingSucceed","current","volume","getVolume","Utils","isNullOrUndefined","CurrentStepNo","HtmlController","setSound","Scaling","resizeRoot","versionBuild","DataManager","updateGameDataFromModule","GameData","DataBuildVersion","configureGameData","canPlay","GameManager","startGame","gameReady","loadingScreen","document","getElementById","element","classList","add","innerHTML","Strings","Languages","getRid","sendPlayerLogError","_loadResult","gameFailed","onblur","onfocus","PIXI","sound","muteAll","openGameRoundHistory","isGUI","StringUtils","isNullOrEmpty","GUIHistoryUrl","openGameRoundHistoryHome","toLowerCase","RCIHistoryUrl","gotoHistory","target","handleOpenHistoryPage","open","gameKey","getGameKey","timeZoneOffset","Date","getTimezoneOffset","serverUrl","token","substring","lang","historyUrl","openGameRoundHistoryFromUrl","HistoryUrl","beforeExit","leaveGame","handleStringsLoadCompleted","RidElements","length","updateText","languageElements","querySelectorAll","setAttribute","GameAppBase","json","ArgValidator","ensureIsNotNullOrUndefined","_json","getWithValues","tmpl","_i","value","regexFormat","matchCnt","exec","idx","replace","match","val","equals","NumberUtils","valueToNumber","UseCoins","ShowDecimalPlaces","GameApp_1","_current","clientHost","setHideAmounts","hideAmounts","updateSharedSetting","toString","getHideAmounts","HideAmountsEnabled","getSharedSetting","parseBoolean","AppContextBase","ModuleManager_1","Focus_1","Pool_1","PageVisibilityHandler_1","Renderer","textureManager","updateTexture","texture","_noWebGL","getTextureByResourceId","utils","TextureCache","resourcePath","PreloaderInfo","instance","getResourcePathById","Logger","errorGroup","handleLostWebGLContext","_contextLost","Autoplay","PageVisibilityHandler","Enabled","pauseAll","dispatchActionAllowed","GameModules","ModuleManager","disableChannelModule","showDialog","special","canvasId","Width","Height","canvas","loading","rendererOptions","view","roundPixels","backgroundColor","autoDetectRenderer","CanvasRenderer","settings","GC_MODE","GC_MODES","AUTO","body","appendChild","Stage","Container","scale","Focus","focus","handle","style","display","addEventListener","redrawStage","addChild","_pauseAnimations","AnimationFramePool","draw","baseStage","baseStageContainer","freespinStage","freespinsStageContainer","render","requestAnimationFrame","log","s","UpdatedTextures","FPS","FrameTimer_1","Jackpot_1","EventEmitter","Root","Screen","IsIOs","test","navigator","platform","IsIOsTablet","IsIOsWebview","indexedDB","IOsResizeTimer","CreateFrameTimer","on","FrameTimerEvents","Complete","bind","Emitter","onresize","onResizeRoot","isSafari","isIosChrome","setupIOs","event","ClientHostType","diff","timeStamp","lastTouch","preventDefault","stopPropagation","evt","MouseEvent","dispatchEvent","setTimeout","delayed","preventEmitEvent","inIframe","stop","start","IOsResizeDelay","overflow","Plugins","StatusBar","updateHeight","sab","parseInt","getComputedStyle","documentElement","getPropertyValue","innerHeight","StatusBarHeight","innerWidth","StatusBarWidth","ratioWidth","LeftPanelWidth","ratioHeight","Jackpot","top","left","transform","enabledPortrait","UsePortraitMode","remove","portraitRatio","PortraitRatio","PortraitMobileRatio","contains","scrollTop","emit","EventResize","isPortrait","preventPropagation","preventMovePropagation","parentElement","ua","userAgent","vendor","self","onLoadComplete","AnimationFrame_1","FrameTimerPool_1","Progress","FrameTimer","timerName","_useFrames","_playing","_paused","valueOrDefault","generateUuid","_timerName","_uid","_timerCounter","_finalTimerCounter","frame_onFrame","conclude","super2","duration","_this","FrameTimerPool","frame_stop","count","_startTime","getTime","_timer","paused","pause","clearTimeout","currentTime","isPlaying","unpause","frame_start","AnimationFrameEventEmitter","Types_1","AnimationFrameClass","Superclass","sc","AnimationFrame","_frame_stopped","_frame_starting","_frame_stopping","_frame_uid","frame_draw","Error","frame_name","frame_log","msg","isError","registerFrame","unregisterFrame","EventEmmiterClass","AnimationFrameBaseElement","BaseElementClass","BaseElement_1","EventEmmiterDescendant","BaseElementDescendant","BaseElement","__decorate","decorators","desc","r","getOwnPropertyDescriptor","Reflect","decorate","ShapeElement_1","ComponentTypes_1","Tweens_1","Attributes_1","_cloned","__destroyed","componentName","getDebugInfo","_tweenEngine","set","engine","__componentName__","destroy","assertDestroyed","_destroyOptions","internalDestroy","children","Tweens","removeTweens","clone","removeAndDestroyChildren","_removeAndDestroyChildren","destroyOptions","removeChildren","method","markAsCloned","_markAsCloned","_create","node","createByNode","updateByNode","name","nodeName","alpha","Attributes","assignFloatAttribute","BaseElementAttributes","ALPHA","hasAttribute","ROTATION","rotation","degrees2radians","parseFloat","getAttribute","START_ROTATION","Math","floor","random","SKEW_X","skew","x","SKEW_Y","y","SCALE_X","SCALE_Y","SCALE","position","assignIntAttribute","X","Y","pivot","PIVOT_X","PIVOT_Y","visible","assignBooleanAttribute","VISIBLE","MASK","next","firstElementChild","shapeElement","ShapeElement","mask","nextElementSibling","BITMAP_MASK","image","maskSprite","Sprite","BITMAP_MASK_X","BITMAP_MASK_Y","BITMAP_MASK_SHOW","BITMAP_MASK_SCALE_X","BITMAP_MASK_SCALE","BITMAP_MASK_SCALE_Y","TWEEN_ENGINE","TWEEN_PERSISTENT","runAlphaTween","runPositionTween","runRotationTween","runScaleTween","runSkewTween","runTween","updateByNodeInherited","logError","ALPHA_TWEEN","alphaTween","alphaTweenPosition","assignStringAttribute","ALPHA_TWEEN_POSITION","ALPHA_TWEEN_POSITION_VALUE","RELATIVE","ArrayUtils","numberArray","map","SMOOTH","alphas","tweenEase","ALPHA_TWEEN_EASE","tweenDuration","ALPHA_TWEEN_DURATION","tweenDelay","ALPHA_TWEEN_DELAY","tweenDelayArray","split","round","tweenLoop","ALPHA_TWEEN_LOOP","keyTimes","ALPHA_TWEEN_KEY_TIMES","POSITION_TWEEN_X","POSITION_TWEEN_Y","positionTweenX","positionTweenY","positionTweenPosition","POSITION_TWEEN_POSITION","POSITION_TWEEN_POSITION_VALUE","tweenX","tweenY","POSITION_TWEEN_EASE","POSITION_TWEEN_DURATION","POSITION_TWEEN_DELAY","POSITION_TWEEN_LOOP","POSITION_TWEEN_KEY_TIMES","positionTween","SKEW_TWEEN_X","SKEW_TWEEN_Y","skewTweenX","skewTweenY","skewTweenPosition","SKEW_TWEEN_POSITION","SKEW_TWEEN_POSITION_VALUE","SKEW_TWEEN_EASE","SKEW_TWEEN_DURATION","SKEW_TWEEN_DELAY","SKEW_TWEEN_LOOP","SKEW_TWEEN_KEY_TIMES","skewTween","ROTATION_TWEEN","rotationTween","rotationTweenPosition","ROTATION_TWEEN_POSITION","ROTATION_TWEEN_POSITION_VALUE","radians2degrees","degrees","ROTATION_TWEEN_EASE","ROTATION_TWEEN_DURATION","ROTATION_TWEEN_DELAY","ROTATION_TWEEN_LOOP","ROTATION_TWEEN_KEY_TIMES","SCALE_TWEEN_X","SCALE_TWEEN_Y","SCALE_TWEEN","scaleTweenX","scaleTweenY","scaleTween","tweenValues","_getPointsFromPointsAttribute","scaleTweenPosition","SCALE_TWEEN_POSITION","SCALE_TWEEN_POSITION_VALUE","scaleXValue","scaleYValue","SCALE_TWEEN_EASE","SCALE_TWEEN_DURATION","SCALE_TWEEN_DELAY","SCALE_TWEEN_LOOP","SCALE_TWEEN_KEY_TIMES","TweensAttributes","TWEEN","tweens","stringArray","TWEEN_VALUES","tween","formatTweenValues","TWEEN_DURATION","TWEEN_EASE","TWEEN_DELAY","TWEEN_LOOP","customTween","values","property","push","pointsString","valuesPair","PI","radians","engineComponent","ComponentTypes","DisplayObject","ABSOLUTE","DEBUG","ROTATION_TWEEN_DEGREES","StyleManager_1","CustomUtils_1","_x","_y","_color","StyleManager","Styles","ShapeElementAttributes","STYLE","redraw","clear","beginFill","_fillAlpha","lineStyle","_lineWidth","_lineColor","_lineAlpha","drawRect","_width","_height","endFill","LINE_COLOR","LINE_WIDTH","LINE_ALPHA","COLOR","FILL_ALPHA","BLEND_MODE","blendMode","CustomUtils","getBlendMode","POSITION_X","POSITION_Y","WIDTH","HEIGHT","tint","Graphics","Element","HtmlElement","PlayList","Song","Style","HtmlStyle","Controller","LinkedElement","ActionSet","GsapEffects_1","registerTween","uid","tweenArray","getRegisteredTweens","keys","removeTweenFromRegistry","splice","restartTweens","restart","object","undefined","kill","_a","shift","GsapEffects","alphaTween_Tweenlite","alphaTween_TimelineLite","objectName","Array","positionTween_Tweenlite","positionTween_TimelineLite","skewTween_Tweenlite","skewTween_TimelineLite","rotationTween_Tweenlite","rotationTween_TimelineLite","scaleTween_Tweenlite","scaleTween_TimelineLite","prepareTweenData","tween_Tweenlite","tween_TimelineLite","colorTween","colorTween_Tweenlite","colorTween_TimelineLite","data","stringValueToFormatedArray","numberValueToFormatedArray","TickTime","partDuration","defaultValue","isArray","gsap_1","isNaN","tweenDurationPerPart","tweenPaused","tweenEaseArray","getEaseing","alphaTimeline","TimelineLite","useFrames","UseFrames","delay","forEach","to","ease","callbackFunction","callbackType","eventCallback","callbackParams","callbackScope","alphaTweenLite","TweenLite","positionTimeline","skewTimeline","positionTweenLite","tweenBezier","bezier","skewTweenLite","roundProps","rotationTimeline","degree","rotationTweenLite","scaleTimeline","tweenValue","scaleTweenLite","timeline","colorProps","format","tweenlite","tweenProperty","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","global","_gsScope","_gsQueue","_gsDefine","Animation","SimpleTimeline","_slice","l","_applyCycle","vars","targets","alt","cycle","TweenMax","_cycle","_yoyo","yoyo","_repeat","repeat","_repeatDelay","repeatDelay","_dirty","_tinyNum","TweenLiteInternals","_internals","_isSelector","isSelector","_isArray","_blankArray","version","_gc","killTweensOf","killDelayedCallsTo","getTweensOf","lagSmoothing","ticker","invalidate","_uncache","updateTo","resetDuration","curRatio","ratio","immediate","immediateRender","_timeline","_time","_enabled","insert","_delay","_initted","_notifyPluginsOfEnabled","_firstPT","_onPluginEvent","_duration","prevTime","_totalTime","_init","endValue","inv","pt","_next","time","suppressEvents","force","isComplete","callback","cycleDuration","type","pow","rawPrevTime","totalDur","totalDuration","_totalDuration","prevTotalTime","prevCycle","prevRawPrevTime","_rawPrevTime","_ease","_calcEnd","getRatio","_reversed","autoRemoveChildren","lazy","_active","_easeType","_easePower","_onUpdate","_callback","lazyTweens","_lazy","_startAt","onStart","f","t","onRepeat","from","runBackwards","fromTo","fromVars","toVars","startAt","staggerTo","allTo","stagger","onCompleteAll","onCompleteAllParams","onCompleteAllScope","copy","finalComplete","onComplete","onCompleteScope","fromCycle","selector","reverse","staggerFrom","allFrom","staggerFromTo","allFromTo","delayedCall","params","scope","onCompleteParams","onReverseComplete","onReverseCompleteParams","overwrite","isTweening","_getChildrenOf","includeTimelines","cnt","_first","getAllTweens","_rootTimeline","_rootFramesTimeline","killAll","complete","delayedCalls","timelines","isDC","allTrue","totalTime","killChildTweensOf","parent","curParent","tl","tweenLookup","parentNode","_changePause","resumeAll","globalTimeScale","_timeScale","frame","progress","totalProgress","_labels","smoothChildTiming","_sortChildren","onUpdate","v","join","indexOf","_swapSelfInParams","align","_lazyTweens","_lazyRender","lazyRender","_globals","globals","_copy","_pauseCallback","pauseCallback","_forcingPlayhead","_hasPause","Engine","_parseTimeOrLabel","exportRoot","ignoreDelayedCalls","root","_remove","curTime","child","beforeRawTime","addLabel","rawTime","_pauseTime","removeLabel","skipDisable","last","_last","append","offsetOrLabel","insertMultiple","appendMultiple","label","addPause","getLabelTime","timeOrLabel","appendIfAbsent","ignore","charAt","Number","substr","seek","gotoAndPlay","play","gotoAndStop","internalForce","pauseTween","prevStart","prevTimeScale","prevPaused","_hasPausedChild","_prev","endTime","getChildren","nested","ignoreBeforeTime","disabled","_contains","recent","_recent","shiftChildren","amount","adjustLabels","labels","_kill","changed","enabled","ignoreTimeline","uncapped","timeScale","prev","end","max","usesFrames","Ease","TimelineMax","_easeNone","addCallback","removeCallback","removePause","tweenTo","abs","tweenFromTo","fromPosition","toPosition","dur","_locked","backwards","wrap","recTotalTime","recCycle","recRawPrevTime","recTime","getActive","all","isActive","getLabelAfter","getLabelsArray","getLabelBefore","sort","currentLabel","_RAD2DEG","_r1","_r2","_r3","_corProps","Segment","da","ca","ba","_correlate","cubicToQuadratic","q1","q2","q3","q4","mab","mbc","mcd","mabc","mbcd","m8","_calculateControlPoints","curviness","quad","basic","correlate","p1","p2","p3","seg","m1","m2","mm","cp2","qb","r1","r2","ii","cp1","_parseAnchors","prepend","tmp","bezierThrough","quadratic","j","seamless","obj","props","first","unshift","sqrt","_parseBezierData","cur","inc","soft","_addCubicLengths","steps","resolution","d1","bez","index","_parseLengthData","lengths","total","threshold","segments","curLS","BezierPlugin","plugin","propName","priority","API","init","_target","_func","_mod","_props","_timeRes","timeResolution","isFunc","second","autoRotate","orientToBezier","_autoRotate","_overwriteProps","_beziers","_segCount","ld","_length","_lengths","_segments","_l1","_li","_s1","_si","_l2","_curSeg","_s2","_prec","_initialRotations","_startRatio","curIndex","curSeg","func","notStart","b2","x1","y1","x2","y2","conv","ar","atan2","_autoCSS","quadraticToCubic","_cssRegister","CSSPlugin","_parseToProxy","_setPluginRatio","CSSPropTween","_registerComplexSpecialProp","parser","prop","cssp","pluginValues","setRatio","_transform","_enableTransforms","_gsTransform","proxy","_onInitTween","_tween","lookup","op","TweenPlugin","_hasPriority","_suffixMap","_cs","_specialProps","defaultTransformPerspective","defaultSkewType","defaultSmoothOrigin","suffixMap","right","bottom","fontSize","padding","margin","perspective","lineHeight","_autoRound","_reqSafariFix","_isSafari","_isFirefox","_isSafariLT6","_ieVers","_index","_numExp","_relNumExp","_valuesExp","_NaNExp","_suffixExp","_opacityExp","_opacityValExp","_alphaFilterExp","_rgbhslExp","_capsExp","_camelExp","_urlExp","_camelFunc","g","toUpperCase","_horizExp","_ieGetMatrixExp","_ieSetMatrixExp","_commasOutsideParenExp","_complexExp","_DEG2RAD","_forcePT","_doc","_createElement","createElementNS","createElement","_tempDiv","_tempImg","_agent","_supportsOpacity","RegExp","$1","cssText","opacity","_getIEOpacity","currentStyle","filter","_log","console","_prefixCSS","_prefix","_checkPropPrefix","_getComputedStyle","defaultView","_getStyle","getStyle","cs","calc","dflt","rv","_convertToPixels","convertToPixels","sfx","recurse","pix","cache","horiz","neg","precise","clientWidth","clientHeight","_gsCache","removeChild","cacheWidths","_calculateOffset","calculateOffset","dim","_getAllStyles","tr","_transformPropCSS","_transformProp","_getTransform","skewX","scaleX","scaleY","_supports3D","z","rotationX","rotationY","scaleZ","filters","_cssDif","s1","s2","forceLookup","mpt","difs","MiniPropTween","firstMPT","_dimensions","_margins","_getDimension","getBBox","_isSVG","offsetWidth","offsetHeight","_parsePosition","recObj","oxp","oyp","oxr","oyr","ox","oy","_parseChange","_parseVal","_parseAngle","directionalEnd","cap","dif","isRelative","min","_colorLookup","aqua","lime","silver","black","maroon","teal","blue","navy","white","fuchsia","olive","yellow","orange","gray","purple","green","red","pink","cyan","transparent","_hue","h","_parseColor","parseColor","toHSL","wasHSL","_formatColors","temp","colors","_colorExp","charIndex","parsed","colorStringFilter","combined","lastIndex","defaultStringFilter","_getFormatter","clr","collapsible","multi","formatter","dColor","dVals","pfx","delim","numVals","dSfx","vals","_getEdgeParser","parse","str","mod","xs0","xs1","shallow","xp","firstPT","bpt","oldForce","rxp","n","pr","_addNonTweeningNumericPT","overwriteProp","_parseComplex","parseComplex","clrs","xi","ni","bv","ev","bnums","enums","bn","hasAlpha","cv","useHSL","ea","autoRound","appendXtra","xfirst","pad","SpecialProp","prefix","keyword","defaults","_registerPluginProp","pluginName","pluginClass","com","greensock","plugins","bi","ei","kwd","registerSpecialProp","onInitTween","useSVGTransformAttr","_useSVGTransformAttr","_transformProps","_transformOriginProp","Transform","force3D","defaultForce3D","_SVGElement","SVGElement","_createSVG","container","attributes","reg","setAttributeNS","_docElement","_forceSVGTransformAttr","svg","rect","chrome","getBoundingClientRect","_parseSVGOrigin","local","decoratee","absolute","smoothOrigin","skipRecord","xOrigin","yOrigin","tx","ty","determinant","xOriginOld","yOriginOld","tm","_getMatrix","_identity2DMatrix","xOffset","yOffset","_canGetBBox","getCTM","force2D","isDefault","dec","none","rnd","_removeProp","getTransform","rec","invX","zOrigin","t1","t2","t3","cos","sin","a11","a21","a31","a41","a12","a22","a32","a42","a13","a23","a33","a14","a24","a34","a43","angle","k","removeAttribute","_setIETransformRatio","ang","dx","dy","w","clip","xPercent","yPercent","marg","mult","ieOffsetX","ieOffsetY","_setTransformRatio","set3DTransformRatio","setTransformRatio","comma","zero","sx","sy","sz","isSVG","skewType","tan","skewY","parsingProp","_lastParsedTransform","swapFunc","has3D","hasChange","dr","matrix","originalGSTransform","endRotations","transformOriginString","parseTransform","orig","transformOrigin","svgOrigin","transformPerspective","directionalRotation","shortRotation","rotationZ","shortRotationX","shortRotationY","_transformType","ea1","es2","bs2","bs","es","en","esfx","bsfx","rel","hn","vn","em","pct","overlap","src","bp","backgroundPositionX","backgroundPositionY","clipTop","clipRight","clipBottom","clipLeft","bw","_setIEOpacityRatio","skip","xn1","isAutoAlpha","zoom","removeProperty","_setClassNameRatio","_gsClassPT","difData","cnpt","cnptLookup","_classNamePT","_setClearPropsRatio","clearTransform","transformParse","nodeType","_vars","pt2","zIndex","tpt","threeD","_addLazySet","className","WebkitBackfaceVisibility","_linkCSSP","pop","sp","isStr","strictUnits","xs2","xn2","xs3","xn3","xs4","xn4","xs5","lazySet","autoAlpha","visibility","_getChildStyles","childNodes","cascadeTo","results","_reservedProps","reservedProps","_targets","activate","RoundPropsPlugin","_roundLinkedList","blob","_onInitAllProps","rp","rpt","_propLookup","pg","_add","_addTween","finals","useRadians","SteppedEase","RoughEase","_createElastic","GreenSockGlobals","gs","_2PI","_HALF_PI","_class","C","_easeReg","register","_wrap","EaseOut","EaseIn","EaseInOut","aliases","easeOut","easeIn","easeInOut","EasePoint","gap","_createBack","overshoot","_p1","_p2","config","Back","SlowMo","linearRatio","power","yoyoMode","_p","_p3","bump","pnt","taper","points","randomize","clamp","template","strength","invert","def","amplitude","period","asin","find","moduleName","_exports","_ticker","_tickerActive","_namespace","ns","_emptyFunc","array","_defLookup","Definition","dependencies","gsClass","_classes","check","cl","hasModule","missing","_baseParams","extraParams","_type","_power","_params","_easeMap","names","types","na","ta","easing","pw","linear","Linear","swing","Quad","EventDispatcher","_listeners","_eventTarget","useParam","listener","list","wake","up","removeEventListener","_reqAnimFrame","_cancelAnimFrame","cancelAnimationFrame","_getTime","now","_lastUpdate","fps","useRAF","_fps","_req","_id","_gap","_nextTime","_self","_useRAF","_lagThreshold","_adjustedLag","_tickWord","_tick","manual","dispatch","elapsed","tick","adjustedLag","sleep","visibilityState","Ticker","events","reversed","_checkTimeout","atTime","resume","includeDelay","startTime","includeSelf","includeRepeats","pauseTime","raw","prevTween","st","targ","jquery","_overwrite","_overwriteLookup","defaultOverwrite","_siblings","_register","_applyOverwrite","css","_plugins","_overwrittenProps","defaultEase","autoSleep","$","jQuery","_lazyLookup","_numbersExp","_setRatio","fp","_blobDif","startNums","endNums","num","nonNumbers","currentNum","_applyPT","_addPropTween","funcParam","stringFilter","getterName","blobDif","_tweenLookup","_tweenLookupNum","onUpdateParams","onUpdateScope","onStartParams","onStartScope","onReverseCompleteScope","onRepeatParams","onRepeatScope","easeParams","autoCSS","onOverwrite","auto","concurrent","allOnStart","preexisting","true","false","_nextGCFrame","_updateRoot","scrub","_gsTweenID","_onOverwrite","overwrittenTween","overwritingTween","killedProps","mode","siblings","curTween","globalStart","overlaps","oCount","zeroDur","_checkOverlap","reference","ts","initPlugins","startVars","_initProps","propLookup","overwrittenProps","_priority","_onDisable","_onEnable","killProps","record","killed","simultaneousOverwrite","_tempKill","onlyActive","_propName","_roundProps","overwriteProps","initAll","Plugin","__webpack_amd_options__","cleanup","HtmlStyles","parseElements","startNode","nodes","getNodesList","EngineComponentFactory","isTypeOf","nodeList","attribute","radix","updateSpineData","spineData","spineTextData","JSON","stringify","pool","framesPool","frame_uid","item","JackpotCounter_1","JackpotHistoryDialog_1","JackpotGame_1","ProgressiveBonusId","WidgetRoot","GameRoot","BonusId","createCounters","createHistoryDialogs","bindElements","getBonusInfo","initJackpotDataReceived","setBonusId","clearJackpot","reinitialize","Offline","refreshBonusInfo","refreshCounters","show","Counters","CountersCount","createCurrency","getDataById","DataCurrency","HistoryDialogs","updateDataWithCurrency","getHeight","jackpotWidget","jackpotGame","getCustomContent","createLogo","holder","counter","JackpotCounter","contentUrl","logo","background","dialog","JackpotHistoryDialog","createBonusGame","JackpotGame","refreshWithReset","showError","useResetAnim","RefreshTimerId","jackpotDataReceive","refreshBonusInfoInMiniGame","overrideLevelData","overrideLeveldata","refreshBonusInfoWithWinValue","fromMiniGame","code","refreshBonusInfoBeforeSpin","spinCallback","getBonusInfoBeforeSpin","customData","sendProgressiveBonusGetInfoRequest","then","response","RefreshInterval","refreshInterval","levels","timestamp","winOverride","updateReponseData","assign","lastWinAmount","_loop_1","getRoot","toggleHistoryDialog","i_1","showHistoryDialog","this_1","hideHistoryDialog","closeAllHistoryDialogs","closeDialog","dispatchAction","TouchEvent","openDialog","isOpen","initMiniGame","autostart","startMiniGame","hasStartedGame","hasActiveGame","hasInitializedGame","hasMiniGame","countersInError","gameResponse","ticket","disableMiniGameAutostart","disableAutostart","waitForMiniGameInitialization","ProgressiveBonusTicketConstraint","tag","rootElem","elem","hasError","success","StaticContentUrl","theme","ProgressiveBonusTheme","UseJackpotLocalization","JackpotTheme","staticContentUrl","spbFolder","img","resetCallback","DecimalPlaces","createBaseLayout","createDigits","createDecimalPoint","currentCounterValue","previousCounterValue","lastWinValue","lastWinCount","overridedLastWinValue","winAnimationDelay","winAnimationFinished","mainTween","digitTween","winFromMinigame","lastUpdateTime","reset","level","currency","jackpotCurrencyLetters","getElementsByClassName","textContent","digitsHolder","digitsArray","digits","digit","Length","UseThousandsSeparator","hasThousandsOffset","decimalDot","serverTimestamp","currentData","nextValue","normalizeValue","nextDate","nextTimestamp","previousValue","oldValuesReset","MaxNextTimeDiff","inError","removeError","isCounting","refresh","resetMainTween","resetDigitTween","errorResetAnim","oldValue","formatValue","newValue","animateDigits","DigitAnimDuration","checkError","hasWin","resetDigitsTween","MinResetAnimCount","useBitmap","checkFirstDiff","shuffle","firstDigitIndex","oldDigit","newDigit","animateDigit","fromValue","toValue","direction","setTransformY","setDigitValue","LeadingZeroLetter","initWinAnimation","resetDigitsToBasePosition","availableTime_1","idleValue","availableTime","onRefreshTweenUpdate","refreshCounter","resetAnimCount","resetCounter","resetFinished","length_1","currentLastWin","currentWinCount","winCount","startWinAnimation","showWinAnimation","WinFromMinigameAnimDuration","WinAnimDuration","forceWinValue","formattedValue","formatText","FormatMoney","normalizedValue","leading","onlyCallback","currentValue","rid","ridType","text","filterText","ridFilter","FilterNoZero","JackpotData_1","historyDataElements","initData","createDataSections","initialized","section","dataHolder","closeBtn","createDataElement","JackpotData","DataCode","createTextElement","DataHighestWinDate","DataHighestWinAmount","assingData","DataWinCount","DataLastWinDate","DataLastWinAmount","showWins","lastData","lastWinDate","highestWinAmount","highestWinDate","dataId","date","zerosPad","getDate","getMonth","getFullYear","winSections","titleSections","noWinSections","DataNoWins","DataTicker","DataRoundId","DataBalanceReal","DataBalanceBonus","DataBalanceTotal","DataBalanceRealDenom","DataBalanceBonusDenom","DataBalanceTotalDenom","DataDenomination","DataCurrentWin","DataTotalWin","DataTotalWinDenom","DataCoinSize","DataCointCount","DataPaylineCount","DataBet","DataBetPosition","DataGambleCurrentWin","DataGambleColorWin","DataGambleCurrentWinDenom","DataGambleColorWinDenom","DataAutoplayCount","DataFreeSpinTotalWin","DataFreeSpinTotalWinDenom","DataFreeSpinsCount","DataFreeSpinsCountMultiplier","DataFreeSpinsRemainingCount","DataFreeSpinsWonCount","DataFreeSpinsMultiplier","DataGambleAttempts","DataHelpGameLimit","DataHelpGambleLimit","DataHelpGambleCountLimit","DataHelpRTP","DataHelpMaxPayoutProbability","DataHelpMaxPayoutFrequency","DataHelpMinBet","DataHelpMaxBet","DataHelpVersion","DataExpirationResolveHours","DataFrbRemainginCount","DataFrbAssignedCount","DataFrbRulesLink","DataFrbValidTo","DataFrbExpiryTime","DataFrbWin","DataGameTitle","DataHelpJackpotVisibleLimit","DataHelpJackpotQualifyingBetsMin","DataHelpJackpotQualifyingBetsMax","BetManager_1","BalanceManager_1","UserAction_1","QuickspinDialog_1","GameEvents","ClientHost","_autoplay","AutoplayStarted","autoplayStarted","autoplayFinished","autoplayCount","AutoplayCount","autoplayLossLimit","AutoplayLossLimit","autoplayWinLimit","AutoplayWinLimit","controlAutoplay","setAutoplay","autoplayEnabled","AutoplayModeEnabled","AutoplayEnabled","quickspinEnabled","gameEnableQuickSpin","QuickspinEnabled","GameEnableReelsStop","MinGameRoundDuration","GameRoundMinSpan","GameEnableQuickSpin","quickspinSet","updateDataElement","UserAction","ActionQuickspinToggle","quickSpinEnabled","quickspinStopped","_quickstopTimes","QuickSpinDialogCount","timeDiff","QuickSpinDecayDelay","QuickspinDialog","vibrationSet","GameEnableVibration","VibrationEnabled","ActionVibrationToggle","updateResponseData","GameRoundClosed","status_1","limits","GameLimit","isLastFrb","winPayMethod","BalanceManager","setBalance","initResponse","BetManager","initializeBet","configureHelpData","balance","bonus","Bet","changeBetColor","updateDataElements","roundId","elements","GameRoundIdVisible","updateTotalWin","poolingBalance","offline","inFrb","totalWin","CoinSize","devide","updateTotalGain","calculate","customWin","totalGain","TOTAL_GAIN","bet","subtract","statusBar","getInstance","resize","hasActiveWidget","DisplayCurrencies","rawPair","parsedPair","_gameData","customValue","getServerTime","sendServerTimerRequest","serverTimeReceived","UseServerTime","ApplicationGatewayUrl","utcTime","serverTimeResponseTimestamp","clockSync","serverTimeOffset","serverTime","getFormattedTime","year","month","day","hours","getHours","minutes","getMinutes","seconds","getSeconds","milliseconds","getMilliseconds","getTimeData","getUTCTime","machineLocalTimeZone","utcResponseTimestamp","lastResponseDiff","toISOString","getGameTime","utcTimestamp","offset","getNonUTCGameTime","showTime","UIShowTime","today","timeData","hFixed","mFixed","showSessionTime","GUIShowSessionTime","sec_num","hoursS","minutesS","secondsS","pre","StatusBarMessage","StatusBarData","hideDataElements","hasSettingsMenu","gameTitle","gameHeadline","showDataElements","gambleResponse","HelpDataGameLimit","HelpShowGameLimit","HelpDataGambleLimit","rtp","totalRtp","progressiveBonusRtp","ridTotalRTP","statusBarRtp","HelpShowRTP","setDataElements","RTP","HelpShowGameModuleVersion","MaxPayoutProbability","HelpShowMaxPayoutProbabilityFrequency","HelpShowMaxPayoutProbability","ProgressiveBonusHelpShowCumulativeWinLimit","TotalBets","ProgressiveBonusContributeOnlyQualified","ProgressiveBonusVisibleMax","ProgressiveBonusHelpShowMaxVisibleLimit","ProgressiveBonusMinQualifyingBet","ProgressiveBonusMaxQualifyingBet","AutoplayMode","ShowHomeButton","ShowGameRoundsHistory","ExpirationResolveHours","cls","cleanUpElements","hideSettingsButton","addTrustedUserAction","actionId","TrustedUserActions","groupActionId","getGroupActionId","getTrustedUserAction","ActionElements","btn","stopAutoplayIfLossLimit","lossLimit","baseResponse","updateLossLimit","win","toNumber","stopAutoplayIfWinLimit","gameState","state","messageId","unpaidWin","gameRoundId","gameEvent","PrimaryGameEscrow","PrimaryGameStarted","PrimaryGameEnded","SecondaryGameEntered","SecondaryGameEscrow","SecondaryGameStarted","GameCollectEscrow","SecondaryGameCollectEscrow","SecondaryGameEnded","GameEnded","SecondaryGameHalved","AutoPlayStarted","AutoPlayEnded","GamePlayDisabled","GamePlayEnabled","GameLoaded","BonusGameEnded","BonusGameEscrow","BonusGameStarted","BonusGameTriggered","notifyEventFromGame","Collectable","AutoplayAfterGamble","BackSoundsPlayingFromGame","ResponsibleDialog1_1","MessageManager_1","SimilarGames_1","LimitDialog_1","NotificationManager_1","Paytable_1","SessionTimer_1","app","onErrorResponse","errorReceived","isBackgroundMusicEnabled","getBackgroundMusic","NotificationManager","_app","connectModules","wasInitialized","showGame","Paytable","openAtStart","disableUi","setupGame","parseResponses","initModules","SimilarGames","showFreeRounds","requestSend","initializeFreeRounds","initReceived","softInit","softInitReceived","collect","Gamble","canExit","_collectModule","collectReceived","GUIShowSessionTimeStartValue","MessageManager","postpone","continueInitReceived","gameDataLoaded","PlayerTokenId","HomeUrl","ClientToken","GameName","SessionData","SessionBalance","TotalWin","TotalBet","CurrencyCode","Balance","real","rendererType","freespinsEnabled","freespinsActive","pickEnabled","pickActive","Base","LimitDialog","restoreGameRound","openOther","continueCollectReceived","collectInModule","apiError","requestName","requestInfo","request","localizedText","httpStatusCode","errorId","actions","ignoreShowDialog","hasMessages","callbackFnc","isFatalError","resource","messages","ultraSpecial","collectPartial","spbSufix","SessionTimer","prepareData","error_code_for_platforms","disconnect","handleShowErrorDialog","Freespins","freespinsResponse","Pick","pickResponse","collectable","gambleActive","endMsgDisplayed","ResponsibleDialog1","showResponsibleDialog1OnCollect","responsibleDialog1Data","disableBase","disableGamble","resetWinAnimator","exitOnCollect","showResponsibleDialog1","disablePlay","disableOnCollect","disableGamePlay","enablePlay","dontEnableGamePlay","openConfirmationDialog","dialogData","closeResponsibleDialog1","BetHigherThanMinDialog_1","SpinBet","BetType","betSettings","totalBets","coins","Coins","lastBet","betType","Total","totalBet","getDenomination","changeDenom","changeDefaultDenom","coinSize","coinCount","CoinCount","multiply","recalculateDenomBalance","initNewBet","BetHigherThanMinDialog","getGameStartedWithoutFeature","updateBetPosition","DenomContainer","addValues","CoinCountContainer","BetContainer","changeBet","decrease","enableUi","unHideValues","cycleCoinCount","maxCoinCount","findMax","jj","maxBetAction","sortNumber","lowestDenom","setDenomination","ResetCoinCountOnDenomChange","found","changeBetByValue","changeCoinCount","coinSizes","credit","minBet","maxBet","HideButtons","unHide","createBetForSpin","GameStatuses","GameModuleStatus","registerGameModule","_gameModules","registerChannelModule","_channelModules","allChannelsHaveController","addController","initIntro","gambleEnabled","AutoplayGambleEnabled","Active","enableGamble","enable","startGamble","outroModule","startPick","endPick","introModule","enableFreespins","enablePick","disable","startFreespins","endFreespins","disablePick","animate","long","intro","outro","action","setActiveSceneInBasegame","setActiveSceneBackground","sceneIndex","setSceneAnimations","updatePaytable","cycleHelp","setAutoplayAfterFeature","tf","primaryGameEnded","toggleModuleSounds","toggleSounds","resetSceneAsOnCollect","getActiveGameModules","activeModulesArray","Disabled","pickStartButton","freeSpinsStartButton","freeSpinsConfiguratorContinue","enableConfiguratorButtons","_enableConfiguratorButtons","disableConfiguratorButtons","_disableConfiguratorButtons","overlayFsBoard","removeOverlayFsBoard","CashierDialog_1","fixBalance","winDenom","realDenom","betDenom","denom","totalRealBalance","totalBalance","hasCredit","onSpin","CashierDialog","opened","onClose","ShowCashierMessage","clientError","PollCredit","_poolBalance","refreshBalance","forced","balanceReceived","balanceUpdated","Dialog_1","PlayList_1","dialogOpened","_element","_cashierButton","onclick","onCashier","_refreshButton","CashierMessageShowRefreshBalanceButton","onRefreshBalance","_closeButton","_closeButtonIcon","Dialog","DisabledClass","CashierUrl","gotoCasier","reason","handleOpenCashierPage","otherOfferes","BaseModel_1","_elementHeading","_elementCode","_elementText","_elementButton","_elementButtonReload","_elementCustomButtons","_elementInfo","_elementError","onClickError","onClickRefresh","_customData","errorString","errorValue","InfoClass","ErrorClass","handleCustomActions","setOpenedStatus","dialogRequest","errorMessageTitle","exitHandler","endGame","gameReloading","handleGameReload","reload","hideAllButtons","buttons","imageWidthCorrection","baseWidth","baseFontSize","maxWidth","currentAction","button","currentWidth","getButtonTextWidth","onClickContinue","onClickClose","onClickHistory","onClickReload","onClickRestore","newFontSize","firstChild","BaseModel","spinContinue","FreeRoundBonusDialog_1","FreeRoundBonusIcon_1","sendFreeRoundsOffersRequest","getCurrentOfferReceived","err","activateOffer","featureStarted","FreeRoundBonusIcon","showIcon","setOfferId","sendFreeRoundsActivateOfferRequest","activateOfferReceived","declineOffer","FreeRoundBonusDialog","hideDialog","hideAllIcons","sendFreeRoundsDeclineOfferRequest","declineOfferReceived","refreshCurrentOffers","featureInit","countDown","playing","frbSpin","reopenFreeRounds","validTo","countDownDate","distance","revalidateOtherGames","countDownOther","endFreeRounds","finishFreeRounds","featureFinished","remainingFrbCount","roundsAssigned","roundsPlayed","roundsStarted","hasFeature","featureName","expiredFreeRounds","termsUrl","currentOffer","remainingCount","winType","hasBuyFeature","buyFeatureName","otherOffers","valid","assignedCount","rulesLink","blockFrbExpiration","days","enableGame","hasNewActiveOffer","updateRemainingCount","canInitDynamicFRB","softInitialize","enabledUi","isDisabled","disableActiveIcon","enableActiveIcon","revalidate","enableFrbExpiration","DialogContentOther","DialogContentOther2","DialogContentOtherList","DialogContentOtherList2","DialogContentNew","DialogContentActive","DialogContentEnd","DialogContentExpired","ConfirmationDialog","DialogButtonPlay","DialogButtonPostPone","DialogButtonDeny","DialogButtonOk","DialogButtonYes","DialogButtonNo","bindEvents","setupFRBDialogByConfiguration","hideAllContents","closeMenu","showElement","isConfirmationDialogOpened","refillOtherGames","ShowSimilarGames","setConfirmationDialog","setPointerEventsButtons","pointerEvents","hideElement","onPlay","onPostPone","onDeny","onOk","onYes","onNo","disableElement","restoreDialog","otherOffersKeys","createItem","gameCode","noClick","itemHolder","itemLoading","itemLoadingIcon","itemLogo","selectGame","newUrl_1","gameChange","handleChangeGame","FRBShowDenyButton","hideFRBDenyButton","FRBShowPostponeButton","hideFRBPostPoneButton","infoMsg","dialogActive","SoundManager_1","addToPlayList","song","Songs","SoundManager","fadeIn","onProgress","loop","fadeOut","stopAll","stopAllInGroup","group","toggle","toggleGroup","playList","PlayLists","screen","panel","icons","lastCount","createPanel","canShow","hasActiveIcon","panelWidth","showPeakHelpIcon","peakHelp","querySelector","peakActive","peakHelpIcon","peakHelpIconBackground","backgroundImage","peakHelpIconBackgroundSize","initRevalidateTimeout","panelParentId","content","createContentPlaceholder","createIconsPlaceholder","contentHolder","iconsHolder","updateCount","currentCount","slots","portraitMaxIconCount","landscapeMaxIconCount","iconsSlotsCount","iconsCountAvailable","isMultiIcon","iconChildren","iconChild","canNotifyBetHigherThanMin","_wasOpened","_reopenDialog","getMinBet","_isOpened","canOpenDialog","NotifyBetHigherThanMin","isMinBet","_gameStartedWithFeature","gameFeatureActive","_gameStarted","IconNew","IconActive","toggleCumulative","handleIconClick","onNew","onActive","isDis","RCIInfo","getRealityCheckInfo","openDialogContinue","info","onContinue","elementWin","elementLost","_continueButton","_historyButton","onHistory","RCIShowHistoryButton","onGameRoundHistory","interval","toFixed","elementRciIntervalInfo","RCIIntervalInfo","title","getElementsByTagName","buttonsHolder","step","updateDialogData","resetDialogData","removeAllButtons","createButton","actionContinue","actionExit","actionHistory","actionReload","actionCashier","actionLink","sendPluginMessage","BaseActions_1","controller","startReceived","spin","GameRequest","callBackFcn","spinReceived","roundStarted","freeRound","BaseActions","ActionSpin","endFreespin","endReceived","currentWin","ActionSpinStop","ActionAutoplay","ActionAutoplayStop","ActionBetPlus","ActionBetMinus","ActionBetCycle","ActionMaxBet","ActionBaseCollect","ActionSelectPayline","ActionDenomSelect","ActionDenomSelectValue","ActionCoinCountSelect","ActionCoinCountSelectValue","ActionBetSelect","ActionBetSelectValue","ActionFsConfiguratorTreasure","registerActionElement","registerUiActionElement","UiActionElements","registerUiDispatchElement","UiDispatchElements","registerActionsHoldersElement","ActionsHoldersElements","registerUiActionDispatchElement","UiActionDispatchElements","registerDataElement","DataElements","updateUI","SoundContainer","dispatchUiAction","setLevel","ActionToggleSound","ele","volumeAll","setVolume","gameCloseMenu","playSound","ContainerElementsById","autoplaySelector","recalculateHeight","autoplayDialog","ActionExit","clearListeners","disableAllUiDispatchers","changeUiAcionDispatchers","ActionMenuOn","ActionMenuOff","ActionPaytableOff","ActionHelpOff","ActionHelpTerminal","ActionGameRoundReport","ActionToggleBet","toggleUiAction","ActionTogglePaytable","ActionHelpOn","updateDataValues","ActionToggleMenu","ActionToggleMenuBack","gotoHelp","ActionPaytableOn","gotoPaytable","ActionSettingsOn","gotoSettings","ActionSettingsOff","ActionQuickspinDialogOff","ActionSwitchControls","currencyNoZero","setText","gameData","parsedValue","toggleElementsByClass","updateActionElements","actionData","changeState","updateActionElement","Configurations","SHOW_BONUS_BALANCE","initializeDialog","_opened","_container","quickSpinDialog","hidden","visibilityChange","mozHidden","msHidden","webkitHidden","isIos","Timer","context","audioContext","unmuteAll","Configuration_1","prewPageButton","nextPageButton","prewPage","nextPage","_pages","_paginations","Configuration","maxValue","payoutPage","attrCounts","attrValues","counts","PAYTABLE_COUNT_PREFIX","PAYTABLE_COUNT_POSTFIX","getPaytableValue","PaytableUseValue","i_2","updateFontSize","customContent","valueSepratator","valueArray","PAYTABLE_VALUE_PREFIX","PAYTABLE_VALUE_POSTFIX","conversionRate","_defaultWidth","_defaultFontSize","defaultWidth","_maxBet","whiteSpace","fontConversion","activeIndex","disableElementsAndReturnActive","setPage","page","scrollIntoView","newGameRound","shouldOpen","hasBeenDisplayed","dipatchElementId","dipatchElement","openPayoutPage","isSpin","ShowPaytableAtStart","GeneralConfigurationAttributes","REEL_COUNT","REEL_X","REEL_Y","SYMBOL_WIDTH","SYMBOL_HEIGHT","SYMBOL_BOTTOM_COUNT","SYMBOL_TOP_COUNT","VISIBLE_SYMBOL_COUNT","WINS_MULTIPLIERS","WINS_ANIMATIONS","ReelConfigurationAttributes","PRE_ROLL","PRE_ROLL_SPEED","POST_ROLL","POST_ROLL_SPEED","SPEED","FORCE_SPEED_MULTIPLER","MachineConfigurationAttributes","MIN_SPIN_ROTATION","MIN_SPIN_ROTATION_LONG","START_DELAY","STOP_DELAY","REEL_CONFIGURATION","TEASINGS","TEASING_SYMBOLS","TEASING_STOP_DELAY","_paging","_actualPage","getSimilarGamesList","_holder","_pagesHolder","_pagingHolder","createPages","SimilarGamesList","filterArray","createNextPage","createPageItem","exitBtn","ShowExitGameButton","newPage","newPageChild","newPaging","disableAllPages","_openTimer","_limit","_closeTimer","WebSocketClient_1","WebSocketClientHub_1","webSocketClientHub","WebSocketClientHub","webSocketClient","WebSocketClient","bindMessages","closeSession","updateStatusBar","onReceiveMessage","messageReceiver","sendMessage","methodName","isConnectionEstablished","addMessage","invokeCommand","reject","receiver","application","service","updateServerTime","connected","hubConnection","GameClientHub","GameClientHubConnection","getToken","callbackFn","ClientHubConnection","ClientHub","UpdateTokenRequest","stackedMessages","connectionEstablished","clientHubConnection","webSocketsInitialized","sendStackedMessages","jwtToken","tokenChanged","currentToken","updateToken","createIntervals","intervalHolder","disableAllButtons","intervals","intervalIndex","resetRealityCheck","onActionContinueReceived","onActionExitReceived","buttonMinus","buttonPlus","changeInterval","intervalDisplay","innerText","insertBefore","increase","CustomEase_1","AmbientBackground_1","createAnimations","stopTimer","spinStop","buzzerTimer","buzzerTimeFinished","showWinDelay","updateWin","gameInitialized","gameStarted","showHandPayDialog","assetsLoaded","startAfterLoad","CustomEase","reel","hintContainer","arrows","arrow","firework","titles","winContainer","initSymbols","createSymbols","sendInitBonusGameRequest","initFinished","sendSpinBonusGameRequest","spinStart","fromMachine","fromServer","stoppedFromMachine","stoppedFromServer","isStopping","closeMiniGame","outroFinished","setBaseGameSound","clearJackpotGameResponse","clearJackpotGame","lastEvent","currentOffset","currentSymbols","currentSymbolsHeight","sendMaxPowerBonusInitRequest","sendMaxPowerBonusSpinRequest","setGameData","bounceCounters","BuzzerDuration","introFinished","AmbientBackground","changeAmbientBackground","setStageVisibility","createSpinBtn","updateBalance","openHandPayDialog","game","CollectOnUnCalculatedWin","stripIndex","Strip","rootHeight","getElementHeight","symbolId","symbolsHeight","SymbolsCount","symbol","SpinPreRollSymbolCount","addSymbolToReel","getReelOffset","updateSymbols","updatePostRollSymbols","spinRoll","winSymbolId","symbols","MiddleSymbolIndex","finishStripIndex","SpinPostRollSymbolCount","spinPostRoll","removeOffScreenSymbols","spinBtn","MinSpinDuration","spinPreRoll","nextOffset","symbolStepOffsets","getSymbolStepOffsets","SpinPreRollDuration","onSpinPostRollUpdate","getSpinRollDuration","createLevelDataOverride","spinComplete","SpinPostRollDuration","limit","createWinValue","collected","uncollectedWin","collectedWin","newOffset","updateCallback","winValue","childs","charCodeAt","SpinRollSpeed","middleSymbolIndex","appendBefore","createSymbol","symbolHolder","userControls","parent_1","handleSpaceStart","winData","keyCode","winSymbol","blured","countersHolder","countersLogo","extension","_svgPathExp","_scientific","_needsParsingExp","_bezierError","_getRatio","setData","_bezierToPoints","x3","y3","x4","y4","x12","y12","x23","y23","x34","y34","x123","y123","x234","y234","x1234","y1234","d2","d3","_pathDataToBezier","command","segment","startX","startY","prevCommand","difX","difY","path","relativeX","relativeY","closed","_findMinimum","_normalize","originY","point","nx","cx","cy","a1","a2","prevPoint","precision","closest","fast","rawBezier","newBackgroundName","base","transition","transitionDuration","transitionDelay","onBlur","onFocus","onClick","onFullscreenChange","FullscreenOnClick","handleFullscreen","requestFullscreen","webkitRequestFullscreen","clicked","fullscreen","fullscreenElement","MuteOnLostFocus","XmlResource_1","CanvasManager_1","ConfigurationManager_1","HtmlManager_1","ActionManager_1","DOCUMENT_TYPE","PIXI_EVENTS","Load","RESOURCE_FLAGS","_resourceLoader","PIXIResourceLoader","_audioResourceLoader","addLoadingElementFunction","fnc","_loadingElements","isGroupLoaded","_loadedGroups","XmlResource","prepareFileList","resources","gambleIsDisabled","lodash","gambleResource","resourceHasFlag","removeRes","loadCompleted","onLoadCompleted","loadSucceed","onUpdateProgress","loadProgress","onProgressUpdate","loadGroupCompleted","debugGroup","handleGroupError","parseCurrentElements","xmlItems","Items","tempElements","el","prio","orderBy","ConfigurationManager","ActionManager","parseActionSets","CanvasManager","HtmlManager","emptyItems","PreloaderProviderBase","audio","loader","loaders","Loader","_hasPreloaderVersionId","_loadingErrorCount","_loadingErrorFiles","_resourcesWithNoId","handleBeforeLoad","handleLoad","handleError","handleComplete","handleGroupComplete","updateTextureAfterLoad","_loadCompletedCallback","_updatedTextures","_preloaderVersionId","xmlsResourceLoaded","acceptedAsXmlResource","beforeResourcesLoad","use","isImage","baseTexture","hasLoaded","imageUrl","noId","setTimeStamp","xhrType","xmlRoot","_loadSingleCompletedCallback","exists","soundSprite","isEmpty","sprites","addSprites","spritemap","removeAllListeners","loadError","loadAllGroupsCompleted","loadResources","resolveSingleCallback","resolveCallback","CanvasFallback","preloader","versionId","once","PreloaderResourceLoader","Resource_1","items","doc","Resource","ActionSet_1","ElementsToLink","noGamble","_addElementToParent","_handleElementController","controllerAttribute","elementController","startInitialization","ComponentAttributes_1","actionElements","cases","RegisterActionSet","actionSetNode","elementNode","actionCase","ActionSetAttributes","CASE","ActionSets","DispatchEvent","linkedElement","classAttribute","AnimationElementAttributes","ANCHOR","DEBUG_INFO","PLAY","RANDOM_START_FRAME","REVERSE","STYLE2","TINT","AnimationStyleAttributes","ANIMATION","FRAMES","START_FRAME","END_FRAME","LOOP","STOP","ButtonElementAttributes","ACTION","EVENT","ACTION_SET","HIT_AREA","ContainerElementAttributes","MULTIPLY","CHILDS","ImageElementAttributes","FROM_FRAME","CACHE","FRAME","IMAGE","ImageTextCounterElementAttributes","DURATION","ROUND","FORCE","VALUE","ImageTextElementAttributes","TEXT","FONT","TEXT_ALIGN","TEXT_ALIGN_VALUE","CENTER","RIGHT","TEXT_BASELINE","TEXT_BASELINE_VALUE","MIDDLE","BOTTOM","LinkedElementAttributes","LINKED_TO_ID","ParticleElementAttributes","EMIT_ONCE","START_TYPE","EXTEND_STYLE","START","STOPPING","ATTR_COUNT","ATTR_TIME","ATTR_MIN","ATTR_MAX","ATTR_FROM_FRAME","ATTR_IMAGES","ATTR_TYPE","ATTR_X","ATTR_Y","ATTR_RANDOM_X","ATTR_RANDOM_Y","ATTR_WIDTH","ATTR_HEIGHT","ATTR_VALUES","ATTR_VALUE","SwitchElementAttributes","SwitchStyleAttributes","SwitchStyleCaseAttributes","NEXT_CASE","TIMER","HANDLER","TextElementAttributes","SIZE","LEFT","TimelineElementAttributes","CLONE","SOUNDS","UserControls_1","customRoot","getPrototypeOf","UserControls","HtmlContainerElement_1","_key","_actions","getComponentName","getAllActions","_uncollectedWin","_collectedWin","flashBet","_betValue","_betLabel","_freeBetLabel","_betLabelFS","_freeBetLabelFS","_betPlus","_betMinus","playCollectSound","changeWinBox","HtmlContainerElement","HtmlElement_1","childrenHolderClass","childrenClass","actionEnabled","_overId","_clickId","CustomClick","onCustomClick","Over","onOver","Out","onOut","dataset","touchScroll","enableScrollOnTouchmove","allowScrollUp","allowScrollDown","lastY","scrollHeight","touches","pageY","down","recalculateChildrenHeight","holders","paddingTop","paddingBottom","holdersChildren","itemHeight","TouchStart","TouchEnd","tagName","texts","setName","owner","_setName","_owner","_batchUpdatesActive","_readonly","registerActions","registerAction","changeActionState","getActionState","batchUpdates","disableAllActions","invokeOnChange","_onChange","onChange","checkForReadonly","beginBatchUpdates","endBatchUpdates","hasChanges","updateFn","notExist","changeActionStates","actionsOrValue","actionNames","hasValue","exist","readonly","cloned","_dialog","handleAction","actionGroup","ClientHostActionGroup","Default","Terminal","handleShowDialog","ClientHostDialogType","Responsible1","errorCode","handleShowEndGameDialog","removeAll","outerHTML","handleCloseDialog","handleRefreshAccount","handleBlockRequest","blocked","handlePaytableRequest","handleAccountUpdate","forceShow","handleAutoplayAction","AutoplayAction","Stop","Enable","Disable","handleGameplayAction","GamePlayAction","terminateOnCollect","GameClientHostConsumerBase","getValue","GameDefinitionBase","key_GameEnableReelsStop","key_GameEnableQuickSpin","key_QuickSpinDialogCount","key_QuickSpinDecayDelay","key_MinGameRoundDuration","key_GameRoundMinSpan","key_UIShowTime","key_GUIShowSessionTime","key_GUIShowSessionTimeStartValue","key_UseServerTime","key_UseHtmlAudio","key_FullscreenOnClick","key_UseCoins","key_AutoplayGambleEnabled","key_AutoplayMode","key_AutoplayCounts","key_AutoplayLossLimit","key_AutoplaySingleWinLimit","key_HelpShowGameLimit","key_HelpShowRTP","key_ShowGameRoundsHistory","key_ExpirationResolveHours","key_AutoplayModeSpeed","key_HideAmountsEnabled","key_AutoplayModeEnabled","key_ResetCoinCountOnDenomChange","key_CollectOnUnCalculatedWin","key_PluginUrl","key_PluginOrigin","key_Platform","key_PollCredit","key_ShowDecimalPlaces","key_SelectorRolloutDuration","key_DisplayCurrencies","key_CanvasFallback","key_GameRoundIdVisible","key_MuteOnLostFocus","key_ShowCashierMessage","key_CashierMessageShowRefreshBalanceButton","key_CashierUrl","key_DisableUntrustedClicks","key_PlayerSessionReconnectionInterval","key_ApplicationGatewayUrl","key_EventTrackerEnabled","key_GameEnableVibration","key_PaytableUseValue","key_GUI_HistoryUrl","key_RCI_HistoryUrl","key_RCI_Info","key_RCI_IntervalInfo","key_RCI_ShowHistoryButton","key_FeatureAutoPlay","key_FeatureAutoPick","key_ShowSimilarGames","key_SimilarGamesList","key_ShowExitGameButton","key_StaticContentUrl","key_ShowHomeButton","key_UsePortraitMode","key_FRBShowDenyButton","key_FRBShowPostponeButton","key_StatusBar","key_StatusBarData","key_ProgressiveBonusId","key_ProgressiveBonusContributeOnlyQualified","key_ProgressiveBonusMinQualifyingBet","key_ProgressiveBonusMaxQualifyingBet","key_ProgressiveBonusVisibleMax","key_ProgressiveBonusHelpShowMaxVisibleLimit","key_ProgressiveBonusHelpShowCumulativeWinLimit","key_ProgressiveBonusTicketConstraint","key_UseJackpotLocalization","key_ProgressiveBonusTheme","key_SessionBalance","key_TotalBet","key_TotalWin","key_PlayerTokenId","key_ClientToken","key_MaxBetEnabled","key_ShowMaxBetMessage","key_HelpShowGameModuleVersion","key_NotifyBetHigherThanMin","key_ShowPaytableAtStart","key_HelpShowMaxPayoutProbability","key_HelpShowMaxPayoutProbabilityFrequency","GameConfigurationBase","pluginOrigin","PluginOrigin","getTimeDataFnc","getGameTimeFnc","createEmitter","eventEmitter","AutoplayStop","stopAutoplay","RestoreAutoplay","autoplayData","restoreAutoplay","ResizeGame","resizeGame","RefreshBalance","GamePlayStop","disableChannel","gamePlayStop","GamePlayResume","gamePlayResume","GamePlayFreeze","gamePlayFreeze","GamePlayUnfreeze","gamePlayUnfreeze","GameAudioEnable","gameAudioEnable","GameAudioMute","gameAudioMute","GameAudioSet","gameAudioSet","GameQuickSpin","gameQuickSpin","ShowHelp","showHelp","HideHelp","hideHelp","ToggleHelp","toggleHelp","ShowPaytable","showPaytable","HidePaytable","hidePaytable","TogglePaytable","togglePaytable","PlatformCloseMenu","platformCloseMenu","PlatformCloseGame","platformCloseGame","PlatformUpdateUI","platformUpdateUI","PlatformErrorMessageDismissed","platformErrorMessageDismissed","CreateNotification","createNotification","Platform","PluginUrl","clientHub","canSpinOnCollect","EventTrackerEnabled","FreespinsActions","ActionStart","ActionBack","GambleActions","ActionGambleStart","ActionGambleRed","ActionGambleBlack","ActionGambleHalve","ActionGambleCollect","GameActions","ActionSpinOrStop","PickActions","ActionConfirm","ActionSpot","TerminalActions","GambleActions_1","GambleController_1","Color","GambleUserControls","_collectedWinValue","_collectDelay","_allowStart","_gambleTickerDefault","_gambleTickerHalveLimit","_gambleTickerSoftLimit","_gambleTickerGameLimit","_screen","_controller","GambleController","StartReceived","SelectReceived","selectReceived","HalveReceived","halveReceived","WinCalculationFinished","winCalculationFinished","AllWinsFinished","allWinsFinished","Lose","lose","IntroFinished","OutroFinished","roundEnded","balanceAfter","prepareNewGameRound","colorWin","halve","select","Black","Red","softLimit","halveEnabled","Controller_1","GambleModel_1","GambleView_1","GambleView","_view","_model","GambleModel","gambleSelect","gambleHalve","ContainerElement_1","_revealTimer","reveal","_revealBackTimer","revealBack","_winTimer","_loseTimer","_introDelayTimer","introDelayed","_introSoundTimer","introSoundStart","_outroDelayTimer","outroDelayed","_gambleControls","_gambleActualCard","_gambleCardBack","_gambleWin","_gambleWin2","_gambleRedBtn","_gambleBlackBtn","_previousCards","card","previousCards","currentCard","reAnimate","_actualColor","ContainerElement","setTint","runTintTween","tintColor","_tint","TINT_TWEEN","tintTween","tintTweenPosition","TINT_TWEEN_POSITION","TINT_TWEEN_POSITION_VALUE","TINT_TWEEN_EASE","TINT_TWEEN_DURATION","TINT_TWEEN_DELAY","TINT_TWEEN_LOOP","TINT_TWEEN_KEY_TIMES","elementMask","GameActions_1","BaseController_1","DesktopBaseUserControls","_wasCalclulated","_unColectedWin","_machineStopped","longIntro","_afterWinDelay","_autoplayDelay","autoplayDelayed","_unColectedWinDelay","unColectedWinDelay","_userControls","_fsUserControls","_prepareNewGameRound","_userControlsShowDelay","userControlsShowDelay","BaseController","SpinReceived","MachineStopped","machineStopped","QuickWinCalculationFinished","quickWinCalculationFinished","_userControls_supreme","_paytable","autoplay","autoplayStop","checkJackpotMiniGame","balanceTotal","inSpin","spinStarted","ShowMaxBetMessage","MaxButton","isHighWin","spinEnded","startConfigurator","prepareJackpotMiniGame","MaxBetEnabled","roundInit","self_1","_b","BaseView_1","BaseView","disableLogo","EndReceived","selectPayline","ConfiguratorStart","ConfiguratorContinue","Paylines_1","PaylinesSelector_1","Symbols_1","WinAnimator_1","Machine_1","MinigameElement_1","TeasingBonus_1","SwitchElement_1","TeasingComponent_1","_wasFinished","_outroDelay","_teasingBonus","TeasingBonus","Paylines","_paylines","PaylinesSelector","_paylinesSelector","Symbols","_symbols","Machine","_machine","WinAnimator","_winAnimator","MinigameElement","_minigame","TeasingComponent","SwitchElement","addElementInstance","teasingFront","teasingParticles","_transition","_wildContainer","BaseViewAttributes","TRANSITION_ALPHA_TWEEN","transitionAlphaTween","TRANSITION_ALPHA_TWEEN_KEY_TIMES","transitionAlphaTweenKeyTimes","TRANSITION_ALPHA_TWEEN_EASE","transitionAlphaTweenEase","TRANSITION_ALPHA_TWEEN_DELAY","transitionAlphaTweenDelay","TRANSITION_ALPHA_TWEEN_DURATION","transitionAlphaTweenDuration","reels","ReelStopped","onReelStopped","teasing","FinishWinCalculation","finishWinCalculation","FinishWinAnimator","finishWinAnimator","FinishQuickWinCalculation","finishQuickWinCalculation","showSymbols","wildContainer","setStoppedSymbolsArray","showInitWins","wins","toggleElements","respin","runTransitoinTweens","hide","actualReelStopped","forceStop","goToCase","inHighWins","resetTimer","PaylinesDefinitions_1","Payline_1","configs","configurate","Payline","setSpecialContainer","_specialContainer","_paylineIDs","paylineDefinition","PaylinesDefinitions","initializePaylineDefinitions","showPaylinesLabel","goToWin","CaseWin","CaseNormal","caseType","paylineGroupId","_paylineGroupsDefinitions","getPaylineDefinitionsById","paylineId","PaylineAttributes","Z_INDEX","CaseSelect","CaseNowin","CaseSingleCycle","CaseCycle","CaseCycleNonActive","SwitchStyle_1","AnimationElement_1","ParticleElement_1","center","timer","_symbolWidth","_symbolHeight","getChildElementByName","hasElements","getChildElements","hasCase","getCase","getCurrentCase","emitEvent","animationComplete","FinishAnimation","arr","ParticleElement","getRandomDurationMultiplier","AnimationElement","AnimationComplete","RANDOM","dataArray","getRandom","Style_1","SwitchStyle","nextCase","textureArray","Texture","EMPTY","shared","update","UPDATE_PRIORITY","HIGH","_startFrame","_randomStartFrame","_timerDelay","animationDelay","deltaTime","_style","startFrame","endFrame","_endFrame","_stop","frames","texture_1","textures_1","frameName","textures","_movieClipComplete","animationSpeed","BLEND_MODES","NORMAL","_reverse","animation","speed","DynamicTint","anchor","CONTINUE","_continue","playMe","DELAY","range","getMovieClip","debugInfo","changeAnimationSpeed","_printDebugInfo","extras","AnimatedSprite","TextElement","fontFamily","fill","Text","ImageElement_1","ParticleStyle_1","_pool","addParticles","_blendMode","_created","_stopping","_emitOnce","_preGenerate","_startType","_maxEmit","PRE_GENERATE","_styleName","createParticles","MAX_EMIT","stopping","RESET","CLEAR","images","calculateElements","particle","createParticle","createParticleResource","setupParticle","setupPosition","addBehaviour","resourceId","getRandomResource","ImageElement","localBounds","getLocalBounds","setVisibility","usedInPool","positionZone","ParticleStyle","ZoneRectangle","centerX","centerY","innerCenterX","innerX","innerCenterY","innerY","correctX","ZoneTarget","ZoneLine","ZoneEllipse","radianDegrees","startAngle","radian","innerRadius","radius","minInnerRadius","radiusB","minInnerRadiusB","innerRadiusB","setTargetElement","particleLife","maxLife","minLife","addPathBehaviour","addScaleBehaviour","addRotationBehaviour","addAlphaBehaviour","life","addRectanglePathBehavior","addEllipsePathBehavior","pathValues","pointsX","pointsY","valueX","valueY","randomX","relative","randomY","pathEase","pathKeyTimes","removeFromPool","minRadius","minRadiusB","finalX","finalY","adjustedX","adjustedY","scaleValues","scalePoints","Point","scaleEase","scaleKeyTimes","rotationValues","randomValue","rotationEase","rotationKeyTimes","alphaValues","alphaEase","alphaKeyTimes","tabActive","getFromPool","getFreeParticleIndex","emitOnce","startType","removeAllFromPool","ATTR_RADIUS","ATTR_POSITION_RADIUS","ATTR_RANDOM_POSITION_ANGLE","ATTR_MIN_RADIUS","ATTR_INNER_RADIUS","ATTR_ANGLE","ATTR_SHOW_ANGLE","IMAGE_MASK","_cache","frameStr","anchorPoints","getBlendModeByString","CLEAR_MASK","maskImage","doNotHide","SHOW_MASK","spr","bezierType","bezierCurviness","bezierPoints","bezierObject","POSITION_TWEEN_BEZIER_POINTS","POSITION_TWEEN_BEZIER_TYPE","POSITION_TWEEN_BEZIER_CURVINESS","formatPoints","_assertDestroyed","ADD","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","LUMINOSITY","formatPoint","useGlobal","getGlobalPosition","regex","pointArray","objectPoint","_count","_minLife","_maxLife","_images","_subParticleStyle","_positionZone","_pathEase","_pathValues","_pathKeyTimes","_scaleEase","_scaleValues","_scaleKeyTimes","_rotationEase","_rotationValues","_rotationKeyTimes","_alphaEase","_alphaValues","_alphaKeyTimes","extendStyle","parseChildrenNodes","NodeCount","initializeCount","NodeLife","initializeLife","NodeImages","initializeImages","NodePosition","initializePosition","NodePath","initializePath","NodeScale","initializeScale","NodeRotation","initializeRotation","NodeAlpha","initializeAlpha","elementsPerSecond","elementsWithLife","ParticleStyleAttributes","ATTR_RANDOM_START_FRAME","ATTR_SUB_PARTICLE_STYLE","ATTR_INNER_X","ATTR_INNER_Y","ATTR_INNER_WIDTH","ATTR_INNER_HEIGHT","ZoneDynamic","ATTR_RADIUS_B","ATTR_MIN_RADIUS_B","ATTR_MIN_INNER_RADIUS","ATTR_INNER_RADIUS_B","ATTR_MIN_INNER_RADIUS_B","ATTR_START_ANGLE","ATTR_EASE","ATTR_KEY_TIMES","NodeValue","ATTR_RELATIVE","coordinates","ATTR_VALUE_RANDOM","ElementsReserve","ATTR_RANDOM_PASSES","Symbol_1","symbolsData","Symbol","createSymbolsData","createObjectPool","caseElement","rotationBitmap","blurBitmap","CaseRotation","CaseBlur","_getBitmapByCaseElement","objectPool","objectContainer","getSymbol","returnSymbol","CaseEmpty","offsetX","offsetY","hasWinFrame","SymbolAttributes","OFFSET_X","OFFSET_Y","OFFSET","TYPE","symbolWidth","symbolHeight","CaseIdle","CaseWinAll","CaseTeasing","CaseStart","CaseImpact","CaseImpactNowin","CaseImpactTease","CaseTeaser","TimelineElement_1","ImageTextCounterElement_1","WinAnimatorAttributes","CONFIGS","configure","reelCount","reelX","reelY","symbolCount","multipliers","animationNames","paylines","noWinSymbolsContainer","symbolsContainer","createTimer","createPaylines","reelsData","reelIndex","currentReels","removeCurrentSymbol","addCurrentSymbol","currentWins","resetAnimations","currentMultiplierIndex","showCustomWin","showFirstWins","startTimer","Idle","getInitialIdleDelay","allSymbolsGoToCase","allPaylinesGoToCase","winSymbolsGoToCase","winPaylineGoToCase","startAnimation","finishFirstWins","currentCycle","cycleWins","showCustomInitWin","showFirstInitWins","finishFirstInitWins","CycleWins","getCycleWinsDelay","showLastSymbols","lastMultiplierIndex","currentAnimationIndex","currentAnimationFinished","stopAnimation","timerStatus","onTimerComplete","idle","symbolIndex","allSymbolsGoToReset","allowSymbolGoToCase","currentCaseType","noWin","winIndex","useValue","trigger","WinTrigger","winSymbolsGoToCaseAsPayline","Scatter","winSymbolsGoToCaseAsScatter","Way","winSymbolsGoToCaseAsWay","winSymbolsGoToCaseAsCustom","ImageTextCounterElement","Round","animationsContainer","animations","onAnimationFinished","TimelineElement","onAnimationComplete","onCalculationFinished","getAnimationIndex","goToOutro","getIdleDelay","getIdleActiveElementsCount","Song_1","_frameCounter","_loop","_outroDelayPlay","outroDelayPlay","_elements","_winValue","_winValueFrom","_framesArray","childOfChild","startAnimate","winValueFrom","stopAnimate","outroSounds","node2","SongAttributes","SONG","intValue","FADEIN","_delayPlayElement","FADEOUT","goToFrame","childElementCount","framesSounds","EMIT","ImageTextElement_1","finalValue","FROM","TO","ACTION_VALUE","onCountTo","bitmapText","realign","font","textAlign","textBaseline","BitmapText","ImageTextElement","TOP","alias","ALIAS","GROUP","VOLUME","pan","PAN","fade","fadeStartTime","fadeEndTime","StereoFilter","playInstance","stopInstance","sprite","onFadeIn","onFadeOut","off","Reel_1","Reel2_1","elementInstance","_reels","_stoppedSymbolsArray","_stoppedFromServer","_stoppedFromMachine","_stoppedFromLegal","_stoppedReelIndexes","_stopTimer","_reelsContainer","MachineAttributes","_reelCount","_reelX","_reelY","_visibleSymbolCount","_minSpinRotation","_minSpinRotationLong","_startDelay","_stopDelay","_reelConfiguration","createReels","Reel2","Reel","teasingComponent","_teasingComponent","longRotation","_startSpinTime","verifyMinGameRoundDurationConditions","legal","_legalStopTimer","getLegalRemainingSpinDuration","rta_1","reelTeasingAttributes","checkOnInit","stoppedSymbols","teasingEnabled","stopDelay","calculateRemainingSpinDuration","minTime","reelStopDuration","getReelStopDuration","getStopDuration","preRoll","preRollSpeed","postRoll","postRollSpeed","forceSpeed","previousReel","nextReel","strip","positionX","positionY","symbolTopCount","symbolBottomCount","startDelay","onStopTimerComplete","shouldBeStopping","stoppingCounter","isTeasing","teasingSymbols","symbolCase","rollSpeed","customDelay","ReelStopping","stoppingSymbols","spinTease","updateReel","isReelStopping","Settings_1","ReelTeasingActions","DO_NOTHING","SPIN_STOP","TEASE","FORCE_SPIN_STOP","SymbolTeasingActions","NO_CHANGE","NOWIN","IMPACT","IMPACT_NOWIN","IMPACT_TEASE","teasingSymbol","impactSymbols","teasingEnabledForce","reelsTeasingAttributes","symbolsTeasingAttributes","teasingStopDelay","minimumSymbolsForTeasing","countSymbolsOnReelsAndRows","canPlayTeaserSound","wasPlayedTeaserSound","wasPlayedTeaserWinSound","wasPlayedTeaserFailSound","finishTeasing","teasable","TeasingComponentAttributes","stoppedSymbolsArray","isEnoughtForStartTeasing","reelIndexStart","reelIndexStop","countSymbols","Settings","SymbolTeasing","isReelTeasable","firstOccurrenceOfSymbol","precedingReelsWithSymbols","getCountSymbolsOnReelsAndRows","getTeasingSymbol","checkSymbolsPerReel","countOfSymbol","animateTeasing","removeTeasing","SymbolsImpact","SymbolsNoTrim","_data","boardElements","boardCounters","boardButtons","introElements","outroElements","activeElements","MinigameElementAttributes","name_1","ACTIVE_ELEMENTS","BOARD_CONTAINER","board","BOARD_ELEMENT_NAMES","boardElementNames","BOARD_COUNTER_NAMES","boardCounterNames","INTRO_ELEMENT_NAME","showBoard","EventIntroFinished","OUTRO_ELEMENT_NAME","hideBoard","EventOutroFinished","HTML_ELEMENT_NAME","htmlElement","_htmlElement","DATA_RESET","silent","CaseEndSilent","CaseEnd","counterText","failed","CaseNoWinSilverSilent","CaseFailedSilent","CaseNoWinSilver","CaseFailed","CaseWinSilverSilent","CaseOnSilent","CaseWinSilver","CaseOn","flareMulti","getActiveElementByName","CaseNoWinGoldSilent","CaseNoWinGold","CaseWinGoldSilent","CaseWinGold","flareCount","CaseOff","setActiveElementCase","score","hideScore","activeElementsCase","EventButtonAction","BOARD_BUTTON_NAMES","DATA","_impactScatterCounter","_stopScatterCounter","_delayedTeasingFaildSound","delayedTeasingFaildSound","additionalDelay","preceeding","reelNo","symbolNo","FreespinsController_1","FreespinsActions_1","DesktopFreespinsUserControls","WinType","_backDelay","back","_backButtonDelay","backButton","_baseUserControlsShowDelay","baseUserControlsShowDelay","_fsEnterEnableDelay","fsEnterEnableDelay","_fsBoards","FreespinsController","ConfirmReceived","confirmReceived","_baseUserControls","finished","fsCount","freeSpins","hasScatterFreespinWin","Cash","isLastFreespin","getRetriggerCount","multiplier","totalCount","FreespinsView_1","FreespinsModel_1","FreespinsView","FreespinsModel","confirm","_actualFsCount","_actualFsMultiplier","_fsMessageHideDelay","_fsMessageStart","_fsConfiguratorText","_timerDelayUpdateCountMulti","updateNumberCountAndMultiplier","_timerDelayEnableConfiguration","enableConfiguration","_noWinContainer","_fsCounter","_fsMultiplier","_fsMessageEnd","_fsMessageEndNoWin","FreespinsViewAttributes","setCustomData","showCounterMultiplier","fsMessageEnd","hideCounterMultiplier","DELAY_NUMBER_FS_COUNT_AND_MULTIPLIER","DELAY_SHOW_NOWIN_CHESTS","DELAY_CLICK_CHESTS","DELAY_FS_START_MESSAGE","freespin","GambleUserControls_1","DesktopGambleUserControls","PickActions_1","PickController_1","DesktopPickUserControls","_pickCount","_pickMultiplier","PickController","UpdateCounters","updateCounter","UpdateCountersValues","updateCounterValues","SelectComplete","selectComplete","Intro","Outro","_fsCount","spots","remainingPicks","fsCount_1","fsMultiplier_1","PickModel_1","PickView_1","PickView","PickModel","spotId","fsMessageStart","updateCounters","updateCountersValues","pickSelect","WinAnimatorPick_1","PickRoundSpotStatus","PickRoundSpotValueType","_introDuration","_outroDuration","_startDuration","_fsMessageStartDelay","_statusTimer","statusTimerComplete","_introDelay","_pickStartButtonDelay","pickStartButtonDelay","_selectCompleteDelay","selectCompleteDelay","WinAnimatorPick","_bottomContainer","_topContainer","_spots","_background","_logo","showSpots","_status","enabledSpots","showWin","showPickWins","spotData","setSpotsData","contentVisibility","progressFn","progressInt","winStepDuration","currentCash","currentMultiplier","_picksTotal","_pickSelected","_actualReel","createSpots","oldCash","oldCount","oldMultiplier","wasAnimation","spotsData","currentSpots","removeCurrentSpot","addCurrentSpot","spotGoToCase","spotIndex","valueType","String","Count","Multiplier","toCase","CaseDisabledCash","CaseDisabledCount","CaseDisabledMultiplier","Revealed","CaseRevealedCash","CaseRevealedCount","CaseRevealedMultiplier","Shown","CaseShownCash","CaseShownCount","CaseShownMultiplier","currentRound","newPicks","spot","out","Start","SelectUpdate","Select","ShowWin","CaseDisabled","CaseEnabled","Selected","CaseSelected","CaseRevealed","CaseShown","CaseDisabledInit","CaseDisabledCashInit","CaseDisabledCountInit","CaseDisabledMultiplierInit","CaseEnabledInit","CaseSelectedInit","CaseRevealedInit","CaseRevealedCashInit","CaseRevealedCountInit","CaseRevealedMultiplierInit","CaseShownInit","CaseShownCashInit","CaseShownCountInit","CaseShownMultiplierInit","CaseStartInit","WinAnimatorPickAttributes","TerminalActions_1","FireBirdPaytable_1","FireBirdHelp_1","FireBirdTypes_1","FireBirdBaseUserControls","_autoplayAfterGamble","_autoplayAfterFeature","_featureAutoStarted","_wasPrimaryGameEnded","_wasGameEnded","ledStripe","_terminalActions","_featureAutoStartTimer","featureAutoStartDelayed","_fsConfigurator","handleClientHostReload","StyxClientHostEvents","Reload","creditBox","betBox","setLEDStripe","actionsUpdated","getAllTerminalActions","configuratorStart","terminalActions","Payout","BackToLobby","StartWithCollect","BetOrGamble","FireBirdPaytable","_help","FireBirdHelp","AutoplayModeSpeed","denomSelectValue","coinCountSelectValue","betSelectValue","changeValue","selectFromConfigurator","bounceLogo","totalwin","_c","_d","startFeatureAutoStart","FeatureAutoPick","preDuration","FeatureAutoPlay","_payoutsElements","_countsElements","_valuesElements","_values","payoutElement","countElement","countBox","countsForValues","valueElement","calculateValue","updatePaytableData","calculateValue_1","payoutIdsMap","payoutId","countsMap","symbolsMap","payoutIds","payoutName","fsCountElement","_actualHelpPage","pagingElements","FireBirdFreespinsUserControls","_featureAutoEnded","ledStripes","_featureAutoEndTimer","featureAutoEndDelayed","_featureAutoPlayTimer","featureAutoPlayDelayed","_fsRetrigger","_wildMultiplierCountActiveDelay","setCountHolderActive","setLedStripe","startFeatureAutoPlay","_updateRetriggerCountDelay","_wildMultiplierCountDelay","startFeatureAutoEnd","quick","active","FireBirdGambleUserControls","ActionLeft","ActionRight","MobileBaseUserControls","_betSettings","MobileFreespinsUserControls","MobileGambleUserControls","MobilePickUserControls","BaseElementParticle","_positionTweenOnCreate","_scaleTweenOnCreate","_rotationTweenOnCreate","_alphaTweenOnCreate","particles","ParticleContainer","nodeAttributes","mainElement","ParticleGroupElement","DynamicKey","startSelected","resetSelected","particleKey","protonProto","ProtonElement","_animationName","_emitting","_animationSpeed","_emitters","_proton","onProtonUpdate","onParticleCreated","onParticleUpdate","onParticleDead","transformSprite","alphaDead","scaleDead","delayStartTimer","delayStoppingTimer","delayStopTimer","emitter","Proton","emitterNext","rate","Rate","rateStart","rateEnd","Span","createInitializers","createBehaviours","addEmitter","_renderer","runAction","startCanRange","durationCanRange","stoppingCanRange","stopCanRange","startByParam","stoppingByParam","stopByParam","durValueArray","durValue","emitValue","ProtonElementAttributes","isFrameStopped","removeChilds","emmiter0","_textures","Pool","textureCacheIds","particleSprite","dead","resetParticles","removeEmitter","imageTarget","addImageTarget","addInitialize","addAnimationTarget","addRadius","mass","addMass","addLife","addPosition","velocity","addVelocity","arrTextures","ImageTarget","fromFrame","Mass","Radius","Life","zone","Position","getZone","rpan","thapan","rpanSpan","thapanSpan","Velocity","rectZoneX","rectZoneY","rectZoneWidth","rectZoneHeight","RectZone","lineZoneX","lineZoneY","lineZoneWidth","lineZoneHeight","lineZoneDirection","LineZone","circleZoneX","circleZoneY","circleZoneRadius","CircleZone","addAlpha","addScale","rotate","addRotate","addColor","crossZone","addCrossZone","randomDrift","addRandomDrift","gravity","addGravity","age","applyBehaviour","energy","Alpha","startSpan","endSpan","Scale","Rotate","driftX","driftY","RandomDrift","Gravity","endArr","endColor","hexColor","CrossZone","Vibration_1","VibrationElement","VibrationElementAttributes","PATTERN","pattern","Vibration","vibrate","AnimationStyle","ContainerStyle","ProtonStyle","ShapeStyle","lineWidth","TimelineStyle","SndResource","getSongById","Sounds","EllipseElement","EllipseElementAttributes","CX","CY","RX","_rx","RY","_ry","drawEllipse","ImageGroupElement","maskElement","imageElement","ImageGroupElementAttributes","imageName","imageNode","parseChild","maskNode","addChildAt","tempNode","keyPrefix","attributePrefix","attributeName","MASK_ELEMENT","MASK_ELEMENT_STYLE","IMAGE_ELEMENT","IMAGE_ELEMENT_STYLE","ATTR_CLASS","ATTR_PIVOT_X","ATTR_PIVOT_Y","ATTR_POSITION_X","ATTR_POSITION_Y","ATTR_ROTATION","ATTR_SCALE","ATTR_SCALE_X","ATTR_SCALE_Y","ATTR_SKEW_X","ATTR_SKEW_Y","ImageTextCounterElement2","imageText","glowAsHighWin","glowAsWin","ReelExtended_1","MachineExtended","teaseOnDelay","_forceStop","ledConfig","ledStripeTeasing","ledStripeNormal","getReel","currentReel","_allowTeasing","ReelExtended","onReelStopping","tease","setTeasing","SymbolExtended_1","teaseDelayTimer","SymbolExtended","CaseTeasingBlur","hasDice","isReelTeasing","getChild","CasePulse","PathElementNodeMoveto_1","PathElementNodeLineto_1","PathElementNodeCurvetoQuadratic_1","PathElementNodeCurvetoBezier_1","PathElementNodeArcto_1","PathElementNodeClosepath_1","PathElement","_path","_pathTweenArray","_pathTweenFrom","_pathTweenTo","PathElementAttributes","PATH","parsePath","runPathTween","input","lastNode","lastMoveto","pathArray","pathData","lastWasAbsolute","parseNode","PathElementNodeMoveto","lastPoint","noCommand","parsePair","l1","PathElementNodeLineto","PathElementNodeCurvetoQuadratic","c1","c2","c3","PathElementNodeCurvetoBezier","a3","PathElementNodeArcto","PathElementNodeClosepath","pair","PATH_TWEEN","_pathTweenLastIndex","lastPath","PATH_TWEEN_POSITION_VALUE","anyChange","equalTo","PATH_TWEEN_EASE","PATH_TWEEN_DURATION","PATH_TWEEN_DELAY","PATH_TWEEN_LOOP","PATH_TWEEN_KEY_TIMES","_pathTweenIndex","setInterpolatedTo","PATH_TWEEN_POSITION","PathElementNode_1","graphics","moveTo","PathElementNode","lineTo","cx1","cy1","quadraticCurveTo","cx2","cy2","bezierCurveTo","arcTo","PlaneRopeElement","_points","_originalPoints","_labelText","_canvasPadding","running","_planeOrRope","_numberOfPointsX","_numberOfPointsY","_amplitude","_wavelength","_speed","_axisOfWaves","_debug","_curtainSpeed","_curtainAmplitude","_curtainCount","_actualFrame","_typePosition","_typeFrames","_timerAnimate","_delayStopTimer","PlaneRopeElementAttributes","NUMBER_OF_POINTS_X","NUMBER_OF_POINTS_Y","TYPE_FRAMES","TYPE_POSITION","_framesPositionPointsArrayX","xArray","_framesPositionPointsArrayY","yArray","previousDefinedFrameIndex","nextDefinedFrameIndex","prevFrame","nextFrame","diffFrames","ArrayPrevValuesX","ArrayNextValuesX","ArrayPrevValuesY","ArrayNextValuesY","newFrame","newFrameValuesStringX","newFrameValuesStringY","diffValue","_resource","AMPLITUDE","WAVELENGTH","TYPE_ANIMATION","AXIS_OF_WAVES","CURTAIN_SPEED","CURTAIN_AMPLITUDE","CANVAS_PADDING","createMesh","_mesh","_meshVerticesBackup","vertices","ropeLength","mesh","Rope","canvasPadding","Plane","drawMode","DRAW_MODES","LINE_LOOP","_originalVertices","_graphics","_debugTextColor","renderPointsRope","renderPointsPlane","row_index","valueOf","col_index","drawCircle","DEBUG_TEXT_COLOR","PlaneRopeStyle","nextChild","PolygonElement","PolygonElementAttributes","POINTS","lastPoint_1","drawPolygon","RopeElement","_rope","_pointsCount","_bezierPoints","_pointsData","_pointsDataBuffer","_animationStyle","_hasAnimationStyle","_frame","_curviness","_isPlaying","_pointsAnimationAmplitude","_pointsAnimationSpeed","_pointsAnimationWavelength","_angleCount","_delayStartTimer","RopeElementAttributes","POINTS_COUNT","POINTS_ANIMATION_AMPLITUDE","POINTS_ANIMATION_SPEED","POINTS_ANIMATION_WAVELENGTH","CURVINESS","pointsData","bezierData","getBezierStepPoints","textureName","_texture","addPoints","getPoints","XMLpointsData","REVERSE_POINTS","updatePoints","GLOBAL_POINTS","currentFrame","animateMeshPoints","updateMeshPoints","segmentLength","pointPerSegment","bezierStepPoints","sum","dataX","dataY","cX","bX","aX","cY","bY","aY","TIME","SoundElement","soundName","_reset","_scheduledPlay","_scheduledStop","_fadeInTime","_fadeOutTime","SoundElementAttributes","schedulePlay","FADE_IN","FADE_OUT","NAME","newName","scheduleStop","TilingImageElement","tintIn","TilingImageElementAttributes","TilingSprite","TILE_POSITION_X","TILE_POSITION_Y","TILE_SCALE_X","TILE_SCALE_Y","WinAnimatorExtended","isFS","_paylineWinDelay","_paylineWinEndDelay","_paylineCycleDelay","_paylineEvaluation","WinAnimatorExtendedAttributes","PAYLINE_EVALUATION_TYPES","TOGETHER","_winScaleConstantAdditive","_winScaleConstantMultiplicative","_winScaleDuration","_winScaleEase","_winScaleKeyTimes","_activeElementsNames","_activeElements","_cycleAnimationName","_counterPlayed","starTimerStack","_scatterDelay","_scatterTimeout","_preRoll","_preRollSpeed","_inCycleWin","elementName","softOutro","PAYLINE_WIN_DELAY","PAYLINE_WIN_END_DELAY","PAYLINE_CYCLE_DELAY","PAYLINE_EVALUATION","eValue","WIN_SCALE_CONSTANT_ADDITIVE","WIN_SCALE_CONSTANT_MULTIPLICATIVE","WIN_SCALE_DURATION","WIN_SCALE_EASE","WIN_SCALE_KEY_TIMES","newTimes","CYCLE_ANIMATION","IS_FS_ANIMATOR","wasForce","sta_1","ret","startStarAnimation","setActiveElementCaseArray","CasePrefixFreeSpins","CasePrefixNormal","CaseHighWin","CaseNoWin","currentCounterStep","ShowFirstWinsStep","EndFirstWinsStep","putSymbolsOnTop","showFirstWinsStep","SEPARATE","runCounterStep","FinishWin","endFirstWinsStep","finishWin","runCounterOutro","endDelay","skipCycle","stopStarAnimation","activeCase","getActiveElementCase","caseReg","CaseSuffixCycle","CaseSuffixOutro","CaseReset","outroPlayed","_loop_2","rowIndex","respinReset","_activeElementsCase","amountFrom","amountTo","scaleFrom","scaleTo","finishHighWins","getCurrentMultiplierIndex","row","_loop_3","lastIndexOf","star_1","this_2","rand","sortChildrenByZindex","star","len","PAYLINE_DURATION","Spot","delayedTimer","delayedGoToCase","delayedCase","delayedToCase","HtmlBetSelectorContainerElement","_popup","block","createTimeout","popupItem","onValueClick","popupItemValue","currentTarget","clearTimeOut","timeout","SelectorRolloutDuration","HtmlBetSelectorContainerElement2","HtmlDenomContainerElement","HtmlButtonElement_1","HtmlHideButtonElement","_hideClass","HtmlButtonElement","uiaction","setTestAttributes","Click","onTouchStart","onTouchEnd","MouseOver","onMouseOver","renameTestAttributeValue","isGamblePortraitButton","registerEvents","isTrusted","DisableUntrustedClicks","touchLockTimer","touchLock","HtmlLanuageContainerElement","_flags","languages","getAllowedLanguages","flag","getCurrentLanguage","changeLanguage","actual","setLanguage","HtmlSoundContainerElement","_levels","_levelsClasses","_soundButton","_backgroundSound","backgroundSoundChild","onBackgroundClick","isMuteVolumeAllowed","changeSoundButton","setBackgroundMusic","HtmlAutoplayItemButtonElement_1","HtmlAutoplayButtonElement","createBasicMode","createSimpleMode","createAdvancedMode","removeOtherMode","_simpleAutoplayCounts","AutoplayCounts","HtmlAutoplayItemButtonElement","HtmlAutoplayDialogContainerElement","_autoplayDialogCounts","_autoplayDialogLossLimit","_autoplayDialogWinLimit","_loss","_win","createCounts","createLossLimits","createWinLimits","_lossValueElement","_winValueElement","_button","runAutoplay","itemValue","onCountClick","onLossClick","AutoplaySingleWinLimit","onWinClick","resetCounts","resetLossLimits","resetWinLimits","enableCounts","enableLossLimits","enableWinLimits","removeNoLimit","noLimit","enabledNoLimit","calculatedValue","HtmlCanvasElement","HtmlCheckboxElement","checkbox","createCheckBox","onCheckbox","checked","HtmlCustomContainerElement","_withGamble","_withoutGamble","HtmlDataSliderElement","HtmlLabelElement","createLabel","toggleSwitch","htmlFor","HtmlText","HtmlStyle_1","HtmlContainerStyle","ios","PRECISION"],"mappings":";CACC,SAASA,EAAGC,GAAK,IAAI,GAAIC,KAAKD,GAAGD,EAAEE,GAAKD,EAAEC,IAAMC,KAAe,SAAUC,GCA1E,GAAAC,KAGA,SAAAC,qBAAAC,GAGA,GAAAF,EAAAE,GACA,MAAAF,GAAAE,GAAAC,OAGA,IAAAC,GAAAJ,EAAAE,IACAC,WACAE,GAAAH,EACAI,QAAA,EAUA,OANAP,GAAAG,GAAAK,KAAAH,EAAAD,QAAAC,IAAAD,QAAAF,qBAGAG,EAAAE,QAAA,EAGAF,EAAAD,QAcA,MATAF,qBAAAO,EAAAT,EAGAE,oBAAAQ,EAAAT,EAGAC,oBAAAS,EAAA,GAGAT,oBAAA,IDKW,SAASF,GAEnB,IAAI,GAAIF,KAAKE,GACZ,GAAGY,OAAOC,UAAUC,eAAeN,KAAKR,EAASF,GAChD,aAAcE,GAAQF,IACtB,IAAK,WAAY,KACjB,KAAK,SAEJE,EAAQF,GAAM,SAASiB,GACtB,GAAIC,GAAOD,EAAGE,MAAM,GAAIC,EAAKlB,EAAQe,EAAG,GACxC,OAAO,UAAUlB,EAAEsB,EAAET,GACpBQ,EAAGE,MAAMrB,MAAOF,EAAEsB,EAAET,GAAGW,OAAOL,MAE9BhB,EAAQF,GACV,MACD,SAECE,EAAQF,GAAKE,EAAQA,EAAQF,IAKhC,MAAOE,KAGF,SAASK,EAAQD,EAASF,GAE/BA,EAAoB,GACpBA,EAAoB,GACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,GACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EA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AC7BA,EAAW,IAAM,EAAG,EAAG,EAAG,EAAG,GAC7BA,EAAW,IAAM,EAAG,EAAG,EAAG,EAAG,GAC7BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,GAC9BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAAG,EAC9B,MACJ,KAAK,MACDA,EAAW,IAAM,EAAG,EAAG,EAAG,GAC1BA,EAAW,IAAM,EAAG,EAAG,EAAG,GAC1BA,EAAW,IAAM,EAAG,EAAG,EAAG,GAC1BA,EAAW,IAAM,EAAG,EAAG,EAAG,GAC1BA,EAAW,IAAM,EAAG,EAAG,EAAG,GAC1BA,EAAW,IAAM,EAAG,EAAG,EAAG,GAC1BA,EAAW,IAAM,EAAG,EAAG,EAAG,GAC1BA,EAAW,IAAM,EAAG,EAAG,EAAG,GAC1BA,EAAW,IAAM,EAAG,EAAG,EAAG,GAC1BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,GAC3BA,EAAW,KAAO,EAAG,EAAG,EAAG,EAE3B,MACJ,SAII,OAGR5F,KAAKm4H,0BAA0BD,GAAkBtyH,GAU9C+xH,oBAAAS,0BAAP,SAAiCC,EAAmBH,GAChD,MAAsC,OAAlCl4H,KAAKm4H,2BACiD,MAAlDn4H,KAAKm4H,0BAA0BD,IACkC,MAA7Dl4H,KAAKm4H,0BAA0BD,GAAgBG,GACxCr4H,KAAKm4H,0BAA0BD,GAAgBG,GAgB3D,MASIV,oBAAAnlH,IAAf,SAAmBC,KAzPJklH,oBAAAQ,6BA8PnBR,uBA/Pat3H,GAAAs3H,oBAAmBA,GhGkr2B1B,SAASr3H,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GiGps2BjE5Z,EAAAzB,EAAgC,GAChCmzH,EAAAnzH,EAA8B,IAC9B0b,EAAA1b,EAA+B,IAC/B4b,EAAA5b,EAA2B,IAQ3Bm3H,EAAA,SAAAp0H,GAA6B3B,EAAA+1H,QAAAp0H,EAezB,SAAAo0H,WACIp0H,EAAAzC,KAAAT,MAHJA,KAAAuhD,OAAiB,EAiBrB,MALI+1E,SAAAx2H,UAAA2c,aAAA,SAAaD,GACTta,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,GAEnBxd,KAAKuhD,OAASxlC,EAAA+B,WAAWC,qBAAqBP,EAAMnd,EAAAi4H,kBAAkBC,QAASv4H,KAAKuhD,SA1BjF+1E,QAAAkB,WAAqB,SAErBlB,QAAAU,WAAqB,SACrBV,QAAAmB,UAAoB,QACpBnB,QAAAS,QAAkB,MAClBT,QAAAoB,gBAA0B,eAC1BpB,QAAAqB,UAAoB,QAGpBrB,QAAAsB,mBAA6B,mBAZxCtB,QAAAj8G,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBjGmt2BxBqvG,UiGlt2BqBhE,EAAAmB,cAAhBp0H,GAAAi3H,QAAOA,EAgCPj3H,EAAAi4H,mBAMTC,QAAS,WjGur2BP,SAASj4H,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GkGpv2BjE5Z,EAAAzB,EAAyD,GACzD8a,EAAA9a,EAA4B,IAE5B04H,EAAA14H,EAAuD,IACvDkoB,EAAAloB,EAA6B,IAC7B24H,EAAA34H,EAAiC,KACjCyS,EAAAzS,EAA2E,GAC3E0b,EAAA1b,EAA+B,IAC/B44H,EAAA54H,EAAgC,KAahCs0H,EAAA,SAAAvxH,GAAmC3B,EAAAkzH,cAAAvxH,EAoB/B,SAAAuxH,iBACIvxH,EAAAzC,KAAAT,MAGAA,aAAY,OACZA,KAAKg5H,QAAS,EAEdh5H,KAAKi5H,MAAQrmH,EAAAa,iBAAiB,SAmTtC,MAhTI5S,QAAAkD,eAAW0wH,cAAA3zH,UAAA,elGot2BNkD,IkGpt2BL,WACI,MAAOhE,MAAKk5H,clGst2BX78G,IkG/s2BL,SAAuBzP,GACnB5M,KAAKk5H,aAAetsH,GlGit2BnB1I,YAAY,EACZC,cAAc,IkGvt2BnBtD,OAAAkD,eAAW0wH,cAAA3zH,UAAA,gBlG0t2BNkD,IkG1t2BL,WACI,MAAOhE,MAAKm5H,elG4t2BX98G,IkGrt2BL,SAAwBzP,GACpB5M,KAAKm5H,cAAgBvsH,GlGut2BpB1I,YAAY,EACZC,cAAc,IkGrt2BnBtD,OAAAkD,eAAW0wH,cAAA3zH,UAAA,elGwt2BNkD,IkGxt2BL,WACI,MAAwB,OAAjBhE,KAAK4oE,UAA4C,MAAxB5oE,KAAK4oE,SAAS++B,QlG0t2B7CzjG,YAAY,EACZC,cAAc,IkGxt2BZswH,cAAA3zH,UAAAs4H,sBAAP,SAA6Bz7G,GACzB,MAAI3d,MAAKq5H,YACEr5H,KAAK4oE,SAAS++B,OAAOhqF,GAGzB,MAGJ82G,cAAA3zH,UAAAw4H,iBAAP,WACI,MAAOt5H,MAAK4oE,SAAS++B,QASzB8sB,cAAA3zH,UAAA2c,aAAA,SAAaD,GACTta,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,GAEfA,EAAKU,aAAa7d,EAAAs4G,wBAAwB9vF,SAC1C7oB,KAAK0R,MAAqB2W,EAAAK,aAAaC,OAAOnL,EAAKe,aAAale,EAAAs4G,wBAAwB9vF,QACtE,MAAd7oB,KAAK0R,OAEuB,MAAxB1R,KAAK0R,MAAMwmC,YAEP16B,EAAKU,aAAa7d,EAAAs4G,wBAAwBU,QAC1Cz3G,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAAs4G,wBAAwBU,QAEnEr5G,KAAK4oE,SAAW5oE,KAAK0R,MAAMwmC,UAAUn7B,QAErC/c,KAAK4oE,SAAW5oE,KAAK0R,MAAMwmC,UAE/Bl4C,KAAK8R,SAAS9R,KAAK4oE,YAS3BprD,EAAKU,aAAa7d,EAAAs4G,wBAAwBxE,OAC1Cn0G,KAAK+2H,SAASv5G,EAAKe,aAAale,EAAAs4G,wBAAwBxE,QAIhEsgB,cAAA3zH,UAAA4c,aAAA,SAAaF,GACTta,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,GAEfA,EAAKU,aAAa7d,EAAAs4G,wBAAwBxE,OAC1Cn0G,KAAK+2H,SAASv5G,EAAKe,aAAale,EAAAs4G,wBAAwBxE,QAUhEsgB,cAAA3zH,UAAAy4H,QAAA,SAAQ9mH,GACJ,MAAqB,OAAdzS,KAAK0R,OAAqC,MAApB1R,KAAK0R,MAAMmiG,OAAiB7zG,KAAK0R,MAAMmiG,MAAMphG,IAS9EgiH,cAAA3zH,UAAA04H,QAAA,SAAQ/mH,GACJ,MAAkB,OAAdzS,KAAK0R,OAAqC,MAApB1R,KAAK0R,MAAMmiG,OAAiB7zG,KAAK0R,MAAMmiG,MAAMphG,GAC5DzS,KAAK0R,MAAMmiG,MAAMphG,GAErB,MAGJgiH,cAAA3zH,UAAA24H,eAAP,WACI,MAAOz5H,eAUXy0H,cAAA3zH,UAAAi2H,SAAA,SAAStkH,EAAWinH,EAA4BrrG,GAK5C,GALgB,SAAAqrG,OAAA,GACZA,GACA15H,KAAK25H,oBAGS,MAAd35H,KAAK0R,OAAqC,MAApB1R,KAAK0R,MAAMmiG,OAAiB7zG,eAAcyS,IAC9C,MAAdzS,KAAKi5H,QACLj5H,KAAKi5H,MAAM7mB,mBAAmBx/F,EAAAe,iBAAiBC,UAC/C5T,KAAKi5H,MAAM/jH,QAGXlV,KAAKu5H,QAAQ9mH,IAAI,CACjB,GAAI+K,GAAgBxd,KAAK0R,MAAMmiG,MAAMphG,EACrC,IAAY,MAAR+K,EAAc,CAWd,GAJIA,EAAKU,aAAa,kBAClBle,KAAKiX,KAAKw9G,cAAcmF,iBAGxBvrG,EAAQ,EAGR,MAFAruB,MAAKi5H,MAAMvlH,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK+2H,SAASljH,KAAK7T,KAAMyS,EAAGinH,QACrE15H,MAAKi5H,MAAM9jH,MAAMkZ,EAIrB,IAAIjlB,GAAO,MACXpJ,cAAYyS,CAGZ,KAFA,GAAIsN,GAAgBvC,EAAKwC,kBACrB65G,KACW,MAAR95G,GACH85G,EAAInyG,KAAK3H,EAAKnC,UACdxU,EAAUpJ,KAAK4oE,SAAS++B,OAAO5nF,EAAKnC,UACrB,MAAXxU,IACAA,EAAQuW,SAAU,EAWlBvW,EAAQsU,aAAaqC,IAazBA,EAAOA,EAAKK,kBAGhB,KAAK,GAAIhb,KAAOpF,MAAK4oE,SAAS++B,OAAQ,CAClC3nG,KAAK4oE,SAAS++B,OAAOviG,GAAKgtG,oBAG1B,KAAK,GADD72B,IAAiB,EACZx7E,EAAY,EAAGA,EAAI85H,EAAI9tH,OAAQhM,IAChCqF,IAAQy0H,EAAI95H,KACZw7E,GAAQ,EAGXA,KACGv7E,KAAK4oE,SAAS++B,OAAOviG,YAAgB2zH,GAAAe,gBACpC95H,KAAK4oE,SAAS++B,OAAOviG,GAAgC8P,OAC/ClV,KAAK4oE,SAAS++B,OAAOviG,YAAgB4E,MAAKie,gBACjDjoB,KAAK4oE,SAAS++B,OAAOviG,GAAKua,SAAU,IAIhD,GACInC,EAAKU,aAAa26G,EAAAhgB,0BAA0BC,YAC5C94G,KAAKu5H,QAAQ/7G,EAAKe,aAAas6G,EAAAhgB,0BAA0BC,YAEzD,GAAIt7F,EAAKU,aAAa26G,EAAAhgB,0BAA0BE,OAAQ,CACpD,GAAIp6F,GAAiB3e,KAAK+5H,4BAA4Bv8G,EAEtDxd,MAAKi5H,MAAMvlH,GACPd,EAAAe,iBAAiBC,SACjB5T,KAAK+2H,SAASljH,KAAK7T,KAAMwd,EAAKe,aAAas6G,EAAAhgB,0BAA0BC,aAEzE94G,KAAKi5H,MAAM9jH,MAAMO,SAAS8H,EAAKe,aAAas6G,EAAAhgB,0BAA0BE,QAAUp6F,OACzEnB,GAAKU,aAAa26G,EAAAhgB,0BAA0BG,UACnD5vG,EAAUpJ,KAAK4oE,SAAS++B,OAAOnqF,EAAKe,aAAas6G,EAAAhgB,0BAA0BG,UACvE5vG,GACAA,EAAQsK,GACJolH,EAAAkB,iBAAiBC,kBACjBj6H,KAAK+2H,SAASljH,KACV7T,KACAwd,EAAKe,aAAas6G,EAAAhgB,0BAA0BC,YAC5C,KAKZ94G,KAAK+2H,SAASv5G,EAAKe,aAAas6G,EAAAhgB,0BAA0BC,gBAG9D,IAAIt7F,EAAKU,aAAa26G,EAAAhgB,0BAA0BE,OAAQ,CACpD,GAAIp6F,GAAiB3e,KAAK+5H,4BAA4Bv8G,EAGtDxd,MAAKi5H,MAAMvlH,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK25H,kBAAkB9lH,KAAK7T,OACrEA,KAAKi5H,MAAM9jH,MAAMO,SAAS8H,EAAKe,aAAas6G,EAAAhgB,0BAA0BE,QAAUp6F,OACzEnB,GAAKU,aAAa26G,EAAAhgB,0BAA0BG,WACnD5vG,EAAUpJ,KAAK4oE,SAAS++B,OAAOnqF,EAAKe,aAAas6G,EAAAhgB,0BAA0BG,UACvE5vG,GACAA,EAAQsK,GAAGolH,EAAAkB,iBAAiBC,kBAAmBj6H,KAAK25H,kBAAkB9lH,KAAK7T,SAY/F05H,GACA15H,KAAK25H,qBAILlF,cAAA3zH,UAAAi5H,4BAAR,SAAoCv8G,GAChC,GAAItW,GAAiB,CACrB,IAAIsW,EAAKU,aAAa7d,EAAAs4G,wBAAwBuhB,QAAS,CACnD,GAAIC,GAAYv4H,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAs4G,wBAAwBuhB,QACjF,IAAIC,EAAUpuH,OAAS,EAAG,CACtB,GAAI6yB,GAAcu7F,EAAU,GACxB9oF,EAAc,CAEM,IAApB8oF,EAAUpuH,SACVslC,EAAM8oF,EAAU,GAChBv7F,EAAMyS,EAAM8oF,EAAU,GAAK9oF,EAAM8oF,EAAU,IAG/CjzH,EAASuX,KAAKoE,MAAM4xG,cAAc2F,UAAU/oF,EAAKzS,KAIzD,MAAO13B,IAGIutH,cAAA2F,UAAf,SAAyB/oF,EAAazS,GAClC,MAAOngB,MAAKE,UAAYigB,EAAMyS,GAAOA,GAQzCojF,cAAA3zH,UAAA64H,kBAAA,WACI35H,KAAKiX,KAAKw9G,cAAcwF,oBAQ5BxF,cAAA3zH,UAAAic,MAAA,WACI,GAAM3T,GAAyB,GAAIqrH,cAiBnC,OAfArrH,GAAQsI,MAAQ1R,KAAK0R,MACrBtI,EAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQuW,QAAU3f,KAAK2f,QAEvBvW,EAAQw/D,SAAW5oE,KAAK4oE,SAAS7rD,QACjC3T,EAAQ0I,SAAS1I,EAAQw/D,UAEzBx/D,UAAepJ,aAEfoJ,EAAQiU,eACDjU,GA1UJqrH,cAAAwF,kBAA4B,oBAC5BxF,cAAAmF,gBAA0B,kBAJrCnF,cAAAp5G,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBlGw92BxBwsG,gBkGv92B2Bx5G,EAAAG,YAAtB/a,GAAAo0H,cAAaA,EAoVbp0H,EAAAs4G,yBAOTxE,KAAM,OACNkF,MAAO,QACP3E,WAAY,YACZvsF,MAAO,QAQPU,MAAO,QAOPqxG,OAAQ,WlG0n2BN,SAAS55H,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GmGxg3BjE5Z,EAAAzB,EAAgC,GAChCk6H,EAAAl6H,EAAsB,IACtBktH,EAAAltH,EAAiC,IACjC0b,EAAA1b,EAA+B,IAwB/Bm6H,EAAA,SAAAp3H,GAAiC3B,EAAA+4H,YAAAp3H,EAO7B,SAAAo3H,eACIp3H,EAAAzC,KAAAT,MAEAA,KAAK6zG,SA2Cb,MAlCIymB,aAAAx5H,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,EAGb,KADA,GAAIuC,GAAgBvC,EAAKwC,kBACV,MAARD,GAAc,CACjB,OAAQA,EAAKnC,UACT,IAAK,WACD5d,KAAKk4C,UAAY,GAAIm1E,GAAA0B,iBACrB/uH,KAAKk4C,UAAUv2C,OAAOoe,EACtB,MACJ,KAAK,QAED,IADA,GAAIw6G,GAAoBx6G,EAAKC,kBACV,MAAZu6G,GACCA,EAASr8G,aAAa7d,EAAAw4G,0BAA0B1E,OAC0B,OAAtEn0G,KAAK6zG,MAAM0mB,EAASh8G,aAAale,EAAAw4G,0BAA0B1E,SAC3Dn0G,KAAK6zG,MAAM0mB,EAASh8G,aAAale,EAAAw4G,0BAA0B1E,OAASomB,GAY5EA,EAAWA,EAASn6G,mBAIhCL,EAAOA,EAAKK,qBAnDxBk6G,YAAAj/G,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe6C,QnG4h3BxByvG,cmG3h3ByBD,EAAAxvG,MAApBxqB,GAAAi6H,YAAWA,CAyDXj6H,GAAAw4G,2BACT1E,KAAM,OACN6E,QAAS,UACTF,UAAW,WACXC,MAAO,UnG6+2BL,SAASz4G,EAAQD,EAASF,GAE/B,YACA,IAAIkb,GAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW;AAChJ,MAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GoG5k3BjE5Z,EAAAzB,EAAwC,GACxC0b,EAAA1b,EAA+B,IAO/B0qB,EAAA,mBAAAA,UA2BA,MAlBIA,OAAA/pB,UAAAa,OAAA,SAAO6b,GACc,MAAbxd,KAAK2d,OACL3d,KAAK2d,KAAOH,EAAKI,WAUfiN,MAAA/pB,UAAA0R,IAAV,SAAcC,KAtBlBoY,MAAAxP,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe6C,QpGyl3BxBA,SoGxl3BKxqB,GAAAwqB,MAAKA,GpGgm3BZ,SAASvqB,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GqGpn3BjE5Z,EAAAzB,EAAwE,GACxEkoB,EAAAloB,EAA6B,IAE7B0b,EAAA1b,EAA+B,IAC/Byb,EAAAzb,EAA6B,IAC7B2b,EAAA3b,EAAmC,IACnC+B,EAAA/B,EAAgC,GAGhC4b,GAFA5b,EAA4B,KAE5BA,EAA2B,KAC3BmoB,EAAAnoB,EAA4B,IAC5ByS,EAAAzS,EAA2E,GAY3E65H,EAAA,SAAA92H,GAAsC3B,EAAAy4H,iBAAA92H,EAwClC,SAAA82H,oBACI,GAAIQ,IAAqCxwH,KAAKywH,QAAQC,MAEtDx3H,GAAAzC,KAAAT,KAAMw6H,GAAc,GACpBxwH,KAAKuoB,OAAOooG,OAAOrxH,IAAItJ,KAAK46H,OAAQ56H,KAAMgK,KAAK6wH,gBAAgBC,MAG/D96H,KAAK+6H,YAAc,EACnB/6H,KAAKg7H,mBAAoB,EAEzBh7H,KAAKgc,SAAU,EACfhc,KAAKic,aAAc,EAEnBjc,KAAKuY,KAAUvY,KAAKkc,cAAa,IAAIta,EAAAoG,MAAMqQ,eAS3CrY,KAAKozB,OAAS,EACdpzB,KAAKi7H,YAAcroH,EAAAa,iBAAiB,SACpCzT,KAAKi7H,YAAYvnH,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKk7H,eAAernH,KAAK7T,OAmrChF,MAltCIa,QAAAkD,eAAIi2H,iBAAAl5H,UAAA,erG8l3BCkD,IqG9l3BL,WACI,MAAOhE,MAAKoc,crGgm3BXlY,YAAY,EACZC,cAAc,IqGhk3BZ61H,iBAAAl5H,UAAA85H,OAAP,SAAcO,GACNn7H,KAAKgmF,SACL9iF,EAAApC,UAAM85H,OAAMn6H,KAAAT,KAACm7H,IAIdnB,iBAAAl5H,UAAAa,OAAP,SAAc6b,GACVxd,KAAKud,QAAQC,IASTw8G,iBAAAl5H,UAAAyc,QAAR,SAAgBC,GAAhB,GAAA1E,GAAA9Y,IA2BI,IA1BAA,KAAKyc,gBAAgB,aAWrBX,EAAAe,OAAOC,aAAa9c,KAAM,SAC1B8b,EAAAe,OAAOC,aAAa9c,KAAM,YAC1B8b,EAAAe,OAAOC,aAAa9c,KAAM,YAC1B8b,EAAAe,OAAOC,aAAa9c,KAAM,SAET,MAAbA,KAAK2d,OACL3d,KAAK2d,KAAOH,EAAKI,WAUjBJ,EAAKU,aAAa7d,EAAAm0G,2BAA2B3rF,QAC7CrL,EAAKU,aAAa7d,EAAAm0G,2BAA2BM,WAEzCt3F,EAAKU,aAAa7d,EAAAm0G,2BAA2B3rF,OAC7C7oB,KAAKo7H,OAAyB/yG,EAAAK,aAAaC,OAAOnL,EAAKe,aAAale,EAAAm0G,2BAA2B3rF,QACxFrL,EAAKU,aAAa7d,EAAAm0G,2BAA2BM,UACpD90G,KAAKo7H,OAAyB/yG,EAAAK,aAAaC,OAAOnL,EAAKe,aAAale,EAAAm0G,2BAA2BM,UAGhF,MAAf90G,KAAKo7H,QAAgB,CAiBrB,GAhB8B,MAA1Bp7H,KAAKo7H,OAAOC,WACZr7H,KAAK+6H,YAAc/6H,KAAKo7H,OAAOC,WAE/Br7H,KAAK+6H,YAAc,KAGK,MAAxB/6H,KAAKo7H,OAAOE,SACZt7H,KAAKu7H,UAAYv7H,KAAKo7H,OAAOE,SAE7Bt7H,KAAKu7H,UAAY,KAGG,MAApBv7H,KAAKo7H,OAAOlmH,OACZlV,KAAKw7H,MAAQx7H,KAAKo7H,OAAOlmH,MAGzBlV,KAAKo7H,OAAOK,OAAQ,CACpB,GAAIC,GACAC,IACJ37H,MAAKo7H,OAAOK,OAAOntG,QAAQ,SAACstG,EAAW77H,GACnC27H,EAAU1xH,KAAK+E,MAAMC,aAAa4sH,GACnB,MAAXF,IACS,GAAL37H,IACA+Y,EAAKlK,QAAU8sH,GAGnBC,EAASj0G,KAAKg0G,MAQtB17H,KAAK67H,SAAWF,EACZ37H,KAAK67H,SAAS9vH,OAAS,IACvB/L,KAAKi3B,WAAaj3B,KAAK87H,mBAAmBjoH,KAAK7T,MAE/CA,KAAKqsF,MAAO,EACZrsF,KAAK+7H,eAAiB,EACtB/7H,KAAKuqB,KAAO,SACZvqB,KAAKgqB,UAAYhgB,KAAKgyH,YAAYC,OAClCj8H,KAAK6d,MAAQ,EACb7d,KAAKk8H,UAAW,OAMjB,IAA8B,KAA1Bl8H,KAAKo7H,OAAOe,UAAkB,CACrC,GAAIvtH,GAAO,OACPitH,IACJ,IAAsB,MAAlB77H,KAAKu7H,UACL,IAAK,GAAIx7H,GAAIC,KAAK+6H,YAAah7H,GAAKC,KAAKu7H,UAAWx7H,IAAK,CACrD,GAAIoN,GAAMnN,KAAKohE,SAASrhE,EAAG,EAC3B6O,GAAU5E,KAAK+E,MAAMC,aAAahP,KAAKo7H,OAAOe,UAAYhvH,GAC3C,MAAXyB,IACI7O,GAAKC,KAAK+6H,cACV/6H,KAAK4O,QAAUA,GAGnBitH,EAASn0G,KAAK9Y,QAYnB,CAQH,GAAI8qB,GAAQ15B,KAAKohE,SAASphE,KAAK+6H,YAAa,EAC5CnsH,GAAU5E,KAAK+E,MAAMC,aAAahP,KAAKo7H,OAAOe,UAAYziG,GAC3C,MAAX9qB,IACA5O,KAAK4O,QAAUA,EACfitH,EAASn0G,KAAK9Y,IAItB5O,KAAK67H,SAAWA,EACZ77H,KAAK67H,SAAS9vH,OAAS,IACvB/L,KAAKi3B,WAAaj3B,KAAK87H,mBAAmBjoH,KAAK7T,MAE/CA,KAAKqsF,MAAO,EACZrsF,KAAK+7H,eAAiB,EACtB/7H,KAAKuqB,KAAO,SACZvqB,KAAKgqB,UAAYhgB,KAAKgyH,YAAYC,OAClCj8H,KAAK6d,MAAQ,EACb7d,KAAKk8H,UAAW,GAYA,MAApBl8H,KAAKo7H,OAAO/uC,OACZrsF,KAAKqsF,KAAOrsF,KAAKo7H,OAAO/uC,MAGH,MAArBrsF,KAAKo7H,OAAOgB,QACZp8H,KAAK+7H,eAAiB/7H,KAAKo7H,OAAOgB,OAASp8H,KAAKo7H,OAAO/jG,WAAe,IAGlD,MAApBr3B,KAAKo7H,OAAO7wG,OACZvqB,KAAKuqB,KAAOvqB,KAAKo7H,OAAO7wG,MAGC,MAAzBvqB,KAAKo7H,OAAOpxG,YACZhqB,KAAKgqB,UAAY1B,EAAA2B,YAAYC,aAAalqB,KAAKo7H,OAAOpxG,YAGjC,MAArBhqB,KAAKo7H,OAAOv9G,QACZ7d,KAAK6d,MAAQ7d,KAAKo7H,OAAOv9G,OAGF,MAAvB7d,KAAKo7H,OAAO/jG,UACZr3B,KAAKk8H,SAAWl8H,KAAKo7H,OAAO/jG,SAexC,GANAr3B,KAAKg7H,kBAAoBj/G,EAAA+B,WAAW8B,uBAChCpC,EACAnd,EAAAm0G,2BAA2BI,mBAC3B50G,KAAKg7H,mBAGLx9G,EAAKU,aAAa7d,EAAAm0G,2BAA2B10F,MAAO,CAEpD,IADA,GAAIC,GAAgBvC,EAAKlG,cAAc0I,kBACxB,MAARD,GAAc,CACjB,GAAIA,EAAKnC,WAAaJ,EAAKe,aAAale,EAAAm0G,2BAA2B10F,MAAO,CACtE,GAAIG,GAA6B,GAAIrE,GAAAsE,YACrCD,GAAate,OAAOoe,GACpB/f,KAAKmgB,KAAOF,EAEhBF,EAAOA,EAAKK,mBAGC,MAAbpgB,KAAKmgB,KAUb,GAAI3C,EAAKU,aAAa7d,EAAAm0G,2BAA2Bn0F,aAAc,CAC3D,GAAIC,GAAQpe,EAAAqD,gBAAgBuJ,uBACxB0O,EAAKe,aAAale,EAAAm0G,2BAA2Bn0F,aAGpC,OAATC,IACAtgB,KAAKugB,WAAa,GAAIvW,MAAKwW,OAAOF,GAC9B9C,EAAKU,aAAa7d,EAAAm0G,2BAA2B/zF,iBAC7CzgB,KAAKugB,WAAWnB,SAASN,EAAIR,WACzBd,EAAKe,aAAale,EAAAm0G,2BAA2B/zF,iBAGjDjD,EAAKU,aAAa7d,EAAAm0G,2BAA2B9zF,iBAC7C1gB,KAAKugB,WAAWnB,SAASJ,EAAIV,WACzBd,EAAKe,aAAale,EAAAm0G,2BAA2B9zF,iBAGhDlD,EAAKU,aAAa7d,EAAAm0G,2BAA2B7zF,oBAC9C3gB,KAAK8R,SAAS9R,KAAKugB,YACnBvgB,KAAKmgB,KAAOngB,KAAKugB,aAoB7BvgB,KAAK0d,aAAaF,IAQfw8G,iBAAAl5H,UAAA4c,aAAP,SAAoBF,GAUhB,IAAKA,EAED,WADAxd,MAAKwhB,SAAS,wCAIdhE,GAAKU,aAAa7d,EAAAm0G,2BAA2BO,MACc,MAAvDv3F,EAAKe,aAAale,EAAAm0G,2BAA2BO,MAC7C/0G,KAAKuqB,KAAO,KACkD,YAAvD/M,EAAKe,aAAale,EAAAm0G,2BAA2BO,MACpD/0G,KAAKuqB,KAAO7U,SAASskH,iBAAiBqC,YAAa,IAEnDr8H,KAAKuqB,KAAO7U,SAAS8H,EAAKe,aAAale,EAAAm0G,2BAA2BO,MAAO,IAG7E/0G,KAAKuqB,KAAO,SAGhBvqB,KAAK6d,MAAQ9B,EAAA+B,WAAWC,qBAAqBP,EAAMnd,EAAAm0G,2BAA2Bv2F,MAAOje,KAAK6d,OAEtFL,EAAKU,aAAa7d,EAAAm0G,2BAA2BC,UAC7Cz0G,KAAKs8H,OAAOx9G,EAAIR,WAAWd,EAAKe,aAAale,EAAAm0G,2BAA2BC,SACxEz0G,KAAKs8H,OAAOt9G,EAAIV,WAAWd,EAAKe,aAAale,EAAAm0G,2BAA2BC,SAG5E,IAAIr2F,GAAWrC,EAAA+B,WAAWuB,mBAAmB7B,EAAMnd,EAAAm0G,2BAA2Br2F,SAAUne,KAAKoe,SAuC7F,IAtCApe,KAAKoe,SAAWpe,KAAKqe,gBAAgBD,GAKjCZ,EAAKU,aAAa7d,EAAAm0G,2BAA2Bh2F,iBAEzChB,EAAKe,aAAale,EAAAm0G,2BAA2Bh2F,kBAC7Cne,EAAAm0G,2BAA2Bh2F,iBAE3Bxe,KAAKoe,SAAWK,KAAKC,MAAsB,IAAhBD,KAAKE,UAAkB,KAI1D3e,KAAKsR,MAAMwN,EAAI/C,EAAA+B,WAAWC,qBAAqBP,EAAMnd,EAAAm0G,2BAA2Bv1F,QAASjf,KAAKsR,MAAMwN,GACpG9e,KAAKsR,MAAM0N,EAAIjD,EAAA+B,WAAWC,qBAAqBP,EAAMnd,EAAAm0G,2BAA2Bt1F,QAASlf,KAAKsR,MAAM0N,GAEhGxB,EAAKU,aAAa7d,EAAAm0G,2BAA2Br1F,SAC7Cnf,KAAKsR,MAAMwN,EAAIR,WAAWd,EAAKe,aAAale,EAAAm0G,2BAA2Br1F,QACvEnf,KAAKsR,MAAM0N,EAAIV,WAAWd,EAAKe,aAAale,EAAAm0G,2BAA2Br1F,SAG3Enf,KAAKof,SAASN,EAAI/C,EAAA+B,WAAWuB,mBAAmB7B,EAAMnd,EAAAm0G,2BAA2Bl1F,EAAGtf,KAAKof,SAASN,GAClG9e,KAAKof,SAASJ,EAAIjD,EAAA+B,WAAWuB,mBAAmB7B,EAAMnd,EAAAm0G,2BAA2Bj1F,EAAGvf,KAAKof,SAASJ,GAClGhf,KAAKwf,MAAMV,EAAI/C,EAAA+B,WAAWuB,mBAAmB7B,EAAMnd,EAAAm0G,2BAA2B/0F,QAASzf,KAAKwf,MAAMV,GAClG9e,KAAKwf,MAAMR,EAAIjD,EAAA+B,WAAWuB,mBAAmB7B,EAAMnd,EAAAm0G,2BAA2B90F,QAAS1f,KAAKwf,MAAMR,GAClGhf,KAAK2f,QAAU5D,EAAA+B,WAAW8B,uBAAuBpC,EAAMnd,EAAAm0G,2BAA2B30F,QAAS7f,KAAK2f,SAG5FnC,EAAKU,aAAa7d,EAAAm0G,2BAA2B+nB,WAC7C36H,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAAm0G,2BAA2B+nB,YAEtEv8H,KAAKw8H,WAAY,EACjBx8H,KAAKy8H,UAELz8H,KAAKw8H,WAAY,EAIjBh/G,EAAKU,aAAa7d,EAAAm0G,2BAA2BG,OAC7C/yG,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAAm0G,2BAA2BG,OACxE,CAgBE,GAfA30G,KAAKw7H,OAAQ,EACbx7H,KAAKk8H,UAAW,EAEZ1+G,EAAKU,aAAa7d,EAAAm0G,2BAA2BK,UAC7CjzG,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAAm0G,2BAA2BK,YAEtE70G,KAAKk8H,SAAWt6H,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAAm0G,2BAA2BK,UACtF70G,KAAK+7H,eAAiB/7H,KAAK+7H,gBAAkB/7H,KAAKk8H,YAAgB,IAGlE1+G,EAAKU,aAAa7d,EAAAm0G,2BAA2BnY,SAC7Cr8F,KAAK+7H,eACDz9G,WAAWd,EAAKe,aAAale,EAAAm0G,2BAA2BnY,SAAWr8F,KAAKk8H,YAAgB,IAG5F1+G,EAAKU,aAAa7d,EAAAm0G,2BAA2BkoB,OAAQ,CACrD,GAAIC,GAAQn/G,EACPe,aAAale,EAAAm0G,2BAA2BkoB,OACxC95G,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,IACzB+vH,GAAM5wH,OAAS,IAAM6hB,MAAM+uG,EAAM,MAAQ/uG,MAAM+uG,EAAM,KACrD38H,KAAKozB,OAASupG,EAAM,GAAKl+G,KAAKE,UAAYg+G,EAAM,GAAKA,EAAM,IACvD38H,KAAKozB,OAAS,IACdpzB,KAAKozB,OAAS,IAGbxF,MAAM+uG,EAAM,MACb38H,KAAKozB,OAASupG,EAAM,IAO5B38H,KAAKozB,OAAS,GACdpzB,KAAKi7H,YAAY/lH,OACjBlV,KAAKi7H,YAAY9lH,MAAMnV,KAAKozB,SAE5BpzB,KAAKy8H,aAEkB,OAApBz8H,KAAK+6H,aAAyC,MAAlB/6H,KAAKu7H,YACxCv7H,KAAKw7H,OAAQ,EAGTh+G,EAAKU,aAAa7d,EAAAm0G,2BAA2BkoB,QAC7ChnH,SAAS8H,EAAKe,aAAale,EAAAm0G,2BAA2BkoB,UAEtD18H,KAAKozB,OAAS1d,SAAS8H,EAAKe,aAAale,EAAAm0G,2BAA2BkoB,SAGpE18H,KAAKozB,OAAS,GACdpzB,KAAKi7H,YAAY/lH,OACjBlV,KAAKi7H,YAAY9lH,MAAMnV,KAAKozB,SAE5BpzB,KAAKy8H,SAKb,IAAIj/G,EAAKU,aAAa7d,EAAAm0G,2BAA2Bc,QAC7Ct1G,KAAKi7H,YAAY/lH,OACjBlV,KAAKw7H,OAAQ,EACTx7H,KAAKgmF,SAAS,CACd,GAAIs1C,GAAW5lH,SAAS8H,EAAKe,aAAale,EAAAm0G,2BAA2Bc,MACrEt1G,MAAKy8H,OAAO7uG,MAAM0tG,MAAiBA,GAI3Ct7H,KAAKkhB,iBAAiB1D,GACtBxd,KAAKohB,cAAc5D,GACnBxd,KAAKmhB,iBAAiB3D,GACtBxd,KAAKihB,cAAczD,IAuBfw8G,iBAAAl5H,UAAAo6H,eAAR,WACIl7H,KAAKy8H,UAYTzC,iBAAAl5H,UAAA27H,OAAA,SAAO/iG,GAAA,SAAAA,UACE15B,KAAKw8H,WAAcx8H,KAAKgmF,UACrBhmF,KAAKw7H,MACDx7H,KAAKk8H,SACLl8H,KAAKg9B,YAAYh9B,KAAKu7H,WAElB7hG,OACA15B,KAAKg9B,YAAYtD,GAEjB15B,KAAKg9B,YAAYh9B,KAAK+6H,cAI1B/6H,KAAKg7H,mBAA0C,IAArBh7H,KAAK+6H,aAAuC,MAAlB/6H,KAAKu7H,YACzDv7H,KAAK+6H,YAAct8G,KAAKC,MAAMD,KAAKE,SAAW3e,KAAKu7H,YAGnDv7H,KAAKk8H,SACLl8H,KAAK88B,YAAY98B,KAAKu7H,WAEtBv7H,KAAK88B,YAAY98B,KAAK+6H,gBAatCf,iBAAAl5H,UAAA87H,aAAA,WACI,MAAO58H,OAQHg6H,iBAAAl5H,UAAAg7H,mBAAR,WACI97H,KAAKiX,KAAK+iH,iBAAiBC,oBASxBD,iBAAAl5H,UAAAogB,iBAAP,SAAwB1D,GAAxB,GAAA1E,GAAA9Y,IACI,KACKwd,EAAKU,aAAa7d,EAAAm0G,2BAA2BtxF,oBAC7C1F,EAAKU,aAAa7d,EAAAm0G,2BAA2BrxF,kBAE9C,OAAO,CAGX,IAAIC,GACAC,EAEAC,EAAgCvH,EAAA+B,WAAW8D,sBAC3CpE,EACAnd,EAAAm0G,2BAA2BjxF,wBAC3B,KAEAD,IAAyBjjB,EAAAm0G,2BAA2BhxF,8BAA8BzB,UAClFqB,EAAiBxhB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2BtxF,mBAAmBhB,IACpG,SAACtV,GAAU,MAAAA,GAAQkM,EAAKsG,SAASN,IAErCuE,EAAiBzhB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2BrxF,mBAAmBjB,IACpG,SAACtV,GAAU,MAAAA,GAAQkM,EAAKsG,SAASJ,KAE9BsE,GAAyBjjB,EAAAm0G,2BAA2BhxF,8BAA8BrB,QACzFiB,EAAiBxhB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2BtxF,mBACrFG,EAAiBzhB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2BrxF,mBACjFC,EAAerX,SACfqX,EAAe,GAAKpjB,KAAKof,SAASN,GAElCuE,EAAetX,SACfsX,EAAe,GAAKrjB,KAAKof,SAASJ,KAGtCoE,EAAiBxhB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2BtxF,mBACrFG,EAAiBzhB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2BrxF,mBAGzF,IAAMM,GAAwBL,MACxBM,EAAwBL,MACxBhB,EAAoBtG,EAAA+B,WAAW8D,sBACjCpE,EACAnd,EAAAm0G,2BAA2B7wF,oBAC3B,MAEEpB,EAAwBxG,EAAA+B,WAAWuB,mBACrC7B,EACAnd,EAAAm0G,2BAA2B5wF,wBAC3B,KAEAnB,EAAqB,CACzB,IAAIjF,EAAKU,aAAa7d,EAAAm0G,2BAA2B3wF,sBAAuB,CACpE,GAAIlB,GAAiCnF,EAChCe,aAAale,EAAAm0G,2BAA2B3wF,sBACxCjB,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,IAC7B6V,GAC8B,GAA1BE,EAAgB5W,OACV0S,KAAKoE,MAAMF,EAAgB,GAAKlE,KAAKE,UAAYgE,EAAgB,GAAKA,EAAgB,KACtFA,EAAgB,GAE9B,GAAMG,GAAqB/G,EAAA+B,WAAW8B,uBAClCpC,EACAnd,EAAAm0G,2BAA2B1wF,oBAC3B,MAEEd,EAA0BxF,EAAKU,aAAa7d,EAAAm0G,2BAA2BzwF,0BACvEniB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2BzwF,2BACpE,IAENjI,GAAAe,OAAOmH,cAAchkB,MAAQyjB,SAAQC,SAAQrB,YAAWE,gBAAeE,aAAYK,YAAWE,cAU3Fg3G,iBAAAl5H,UAAAsgB,cAAP,SAAqB5D,GAArB,GACQqI,GACAC,EACAC,EAHRjN,EAAA9Y,KAIQgmB,IAEAxI,GAAKU,aAAa7d,EAAAm0G,2BAA2B9uF,iBAC7CG,EAAcjkB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2B9uF,iBAGlFlI,EAAKU,aAAa7d,EAAAm0G,2BAA2B7uF,iBAC7CG,EAAclkB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2B7uF,iBAGlFnI,EAAKU,aAAa7d,EAAAm0G,2BAA2B5uF,eAC7CG,EAAai0G,iBAAiB/zG,8BAC1BzI,EAAKe,aAAale,EAAAm0G,2BAA2B5uF,cAIrD,IAAIM,GAA6BnK,EAAA+B,WAAW8D,sBACxCpE,EACAnd,EAAAm0G,2BAA2BruF,qBAC3B,KAGJ,IAAIJ,GAAcA,EAAWha,OACrBma,GAAsB7lB,EAAAm0G,2BAA2BpuF,2BAA2BrE,SAC5EiE,EAAcD,EAAW7D,IAAI,SAACtV,GAC1B,OACIkS,EAAGlS,EAAMkS,EAAIhG,EAAKxH,MAAMwN,EACxBE,EAAGpS,EAAMoS,EAAIlG,EAAKxH,MAAM0N,KAGzBkH,GAAsB7lB,EAAAm0G,2BAA2BpuF,2BAA2BjE,QACnF6D,EAAcD,EACVC,EAAYja,SACZia,EAAY,GAAGlH,EAAI9e,KAAKsR,MAAMwN,EAC9BkH,EAAY,GAAGhH,EAAIhf,KAAKsR,MAAM0N,IAGlCgH,EAAcD,MAEf,IAAIF,GAAeC,EAClBD,EAAY9Z,SAAW+Z,EAAY/Z,SAC/Bma,GAAsB7lB,EAAAm0G,2BAA2BpuF,2BAA2BrE,SAC5EiE,EAAcH,EAAY3D,IAAI,SAACmE,EAAqBtmB,GAChD,OACI+e,EAAGuH,EAAcvN,EAAKxH,MAAMwN,EAC5BE,EAAG8G,EAAY/lB,GAAK+Y,EAAKxH,MAAM0N,KAGhCkH,GAAsB7lB,EAAAm0G,2BAA2BpuF,2BAA2BjE,QACnF6D,EAAcH,EAAY3D,IAAI,SAACmE,EAAqBtmB,GAChD,OACI+e,EAAGuH,EACHrH,EAAG8G,EAAY/lB,MAGnBimB,EAAYja,SACZia,EAAY,GAAGlH,EAAI9e,KAAKsR,MAAMwN,EAC9BkH,EAAY,GAAGhH,EAAIhf,KAAKsR,MAAM0N,IAGlCgH,EAAcH,EAAY3D,IAAI,SAACmE,EAAqBtmB,GAChD,OACI+e,EAAGuH,EACHrH,EAAG8G,EAAY/lB,WAK5B,IAAI8lB,EACHK,GAAsB7lB,EAAAm0G,2BAA2BpuF,2BAA2BrE,SAC5EiE,EAAcH,EAAY3D,IAAI,SAACmE,EAAqBtmB,GAChD,OACI+e,EAAGuH,EAAcvN,EAAKxH,MAAMwN,EAC5BE,EAAGlG,EAAKxH,MAAM0N,KAGfkH,GAAsB7lB,EAAAm0G,2BAA2BpuF,2BAA2BjE,QACnF6D,EAAcH,EAAY3D,IAAI,SAACmE,EAAqBtmB,GAChD,OACI+e,EAAGuH,EACHrH,EAAGlG,EAAKxH,MAAM0N,KAGlBgH,EAAYja,SACZia,EAAY,GAAGlH,EAAI9e,KAAKsR,MAAMwN,IAGlCkH,EAAcH,EAAY3D,IAAI,SAACmE,EAAqBtmB,GAChD,OACI+e,EAAGuH,EACHrH,EAAGlG,EAAKxH,MAAM0N,SAIvB,KAAI8G,EA2BP,OAAO,CA1BHI,IAAsB7lB,EAAAm0G,2BAA2BpuF,2BAA2BrE,SAC5EiE,EAAcF,EAAY5D,IAAI,SAACoE,EAAqBvmB,GAChD,OACI+e,EAAGhG,EAAKxH,MAAMwN,EACdE,EAAGsH,EAAcxN,EAAKxH,MAAM0N,KAG7BkH,GAAsB7lB,EAAAm0G,2BAA2BpuF,2BAA2BjE,QACnF6D,EAAcF,EAAY5D,IAAI,SAACoE,EAAqBvmB,GAChD,OACI+e,EAAGhG,EAAKxH,MAAMwN,EACdE,EAAGsH,KAGPN,EAAYja,SACZia,EAAY,GAAGhH,EAAIhf,KAAKsR,MAAM0N,IAGlCgH,EAAcF,EAAY5D,IAAI,SAACoE,EAAqBvmB,GAChD,OACI+e,EAAGhG,EAAKxH,MAAMwN,EACdE,EAAGsH,KAQnB,GAAMjE,GAAoBtG,EAAA+B,WAAW8D,sBACjCpE,EACAnd,EAAAm0G,2BAA2BjuF,iBAC3B,MAEEhE,EAAwBxG,EAAA+B,WAAWuB,mBACrC7B,EACAnd,EAAAm0G,2BAA2BhuF,qBAC3B,KAEA/D,EAAqB,CACzB,IAAIjF,EAAKU,aAAa7d,EAAAm0G,2BAA2B/tF,mBAAoB,CACjE,GAAI9D,GAAiCnF,EAChCe,aAAale,EAAAm0G,2BAA2B/tF,mBACxC7D,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,IAC7B6V,GAC8B,GAA1BE,EAAgB5W,OACV0S,KAAKoE,MAAMF,EAAgB,GAAKlE,KAAKE,UAAYgE,EAAgB,GAAKA,EAAgB,KACtFA,EAAgB,GAE9B,GAAMG,GAAqB/G,EAAA+B,WAAW8B,uBAClCpC,EACAnd,EAAAm0G,2BAA2B9tF,iBAC3B,MAEE1D,EAA0BxF,EAAKU,aAAa7d,EAAAm0G,2BAA2B7tF,uBACvE/kB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2B7tF,wBACpE,IAEN7K,GAAAe,OAAOkJ,WAAW/lB,MAAQgmB,cAAa3D,YAAWE,gBAAeE,aAAYK,YAAWE,cASrFg3G,iBAAAl5H,UAAAqgB,iBAAP,SAAwB3D,GAAxB,GAAA1E,GAAA9Y,IACI,KAAKwd,EAAKU,aAAa7d,EAAAm0G,2BAA2B1vF,gBAC9C,OAAO,CAGX,IAAIC,GAEAC,EAAgCjJ,EAAA+B,WAAW8D,sBAC3CpE,EACAnd,EAAAm0G,2BAA2BvvF,wBAC3B,KAEAD,IAAyB3kB,EAAAm0G,2BAA2BtvF,8BAA8BnD,SAClFgD,EAAgBnjB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2B1vF,iBAAiB5C,IACjG,SAACtV,GAAU,MAAAA,GAAQkP,EAAAe,OAAOsI,gBAAgBrM,EAAKsF,YAE5C4G,GAAyB3kB,EAAAm0G,2BAA2BtvF,8BAA8B/C,QACzF4C,EAAgBnjB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2B1vF,iBAChFC,EAAchZ,SACdgZ,EAAc,GAAKjJ,EAAAe,OAAOsI,gBAAgBnlB,KAAKoe,YAGnD2G,EAAgBnjB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2B1vF,gBAGxF,IAAMM,GAAyBL,MAEzB1C,EAAoBtG,EAAA+B,WAAW8D,sBACjCpE,EACAnd,EAAAm0G,2BAA2BnvF,oBAC3B,MAEE9C,EAAwBxG,EAAA+B,WAAWuB,mBACrC7B,EACAnd,EAAAm0G,2BAA2BlvF,wBAC3B,KAEA7C,EAAqB,CACzB,IAAIjF,EAAKU,aAAa7d,EAAAm0G,2BAA2BjvF,sBAAuB,CACpE,GAAI5C,GAAiCnF,EAChCe,aAAale,EAAAm0G,2BAA2BjvF,sBACxC3C,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,IAC7B6V,GAC8B,GAA1BE,EAAgB5W,OACV0S,KAAKoE,MAAMF,EAAgB,GAAKlE,KAAKE,UAAYgE,EAAgB,GAAKA,EAAgB,KACtFA,EAAgB,GAE9B,GAAMG,GAAqB/G,EAAA+B,WAAW8B,uBAClCpC,EACAnd,EAAAm0G,2BAA2BhvF,oBAC3B,MAEExC,EAA0BxF,EAAKU,aAAa7d,EAAAm0G,2BAA2B/uF,0BACvE7jB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2B/uF,2BACpE,IAEN3J,GAAAe,OAAOkI,cAAc/kB,MAAQolB,UAAS/C,YAAWE,gBAAeE,aAAYK,YAAWE,cASpFg3G,iBAAAl5H,UAAAmgB,cAAP,SAAqBzD,GAArB,GAAA1E,GAAA9Y,IACI,KAAKwd,EAAKU,aAAa7d,EAAAm0G,2BAA2B/yF,aAC9C,OAAO,CAGX,IAAIC,GAEAC,EAA6B5F,EAAA+B,WAAW8D,sBACxCpE,EACAnd,EAAAm0G,2BAA2B3yF,qBAC3B,KAEAF,IAAsBthB,EAAAm0G,2BAA2B1yF,2BAA2BC,SAC5EL,EAAa9f,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2B/yF,cAAcS,IAC3F,SAACtV,GAAU,MAAAA,GAAQkM,EAAK+E,QAErB8D,GAAsBthB,EAAAm0G,2BAA2B1yF,2BAA2BK,QACnFT,EAAa9f,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2B/yF,cAC7EC,EAAW3V,SACX2V,EAAW,GAAK1hB,KAAK6d,QAGzB6D,EAAa9f,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2B/yF,aAGrF,IAAMW,GAAwBV,MAExBW,EAAoBtG,EAAA+B,WAAW8D,sBACjCpE,EACAnd,EAAAm0G,2BAA2BlyF,iBAC3B,MAEEC,EAAwBxG,EAAA+B,WAAWuB,mBACrC7B,EACAnd,EAAAm0G,2BAA2BhyF,qBAC3B,KAEAC,EAAqB,CACzB,IAAIjF,EAAKU,aAAa7d,EAAAm0G,2BAA2B9xF,mBAAoB,CACjE,GAAIC,GAAiCnF,EAChCe,aAAale,EAAAm0G,2BAA2B9xF,mBACxCE,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,IAC7B6V,GAC8B,GAA1BE,EAAgB5W,OACV0S,KAAKoE,MAAMF,EAAgB,GAAKlE,KAAKE,UAAYgE,EAAgB,GAAKA,EAAgB,KACtFA,EAAgB,GAE9B,GAAMG,GAAqB/G,EAAA+B,WAAW8B,uBAClCpC,EACAnd,EAAAm0G,2BAA2BzxF,iBAC3B,MAEEC,EAA0BxF,EAAKU,aAAa7d,EAAAm0G,2BAA2BvxF,uBACvErhB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAm0G,2BAA2BvxF,wBACpE,IAENnH,GAAAe,OAAO6E,WAAW1hB,MAAQoiB,SAAQC,YAAWE,gBAAeE,aAAYK,YAAWE,cAQxEg3G,iBAAA/zG,8BAAf,SAA6C0B,GACzC,MAAOA,GACF1a,QAAQ,MAAO,IACf2V,MAAM,KACNV,IAAI,SAAC0F,GACF,MAAO,QAAQ1U,KAAK0U,GAAcA,EAAW1mB,MAAM,MAAO0hB,MAAM,MAAQgF,EAAYA,KAEvF1F,IAAI,SAAC0F,GACF,OAAS9I,EAAGR,WAAWsJ,EAAW,IAAK5I,EAAGV,WAAWsJ,EAAW,QAUpEoyG,iBAAAl5H,UAAAsgE,SAAR,SAAiB7T,EAAa/mD,GAE1B,IADA,GAAIiM,GAAI86C,EAAM,GACP96C,EAAE1G,OAASvF,GAAMiM,EAAI,IAAMA,CAClC,OAAOA,IAQXunH,iBAAAl5H,UAAAic,MAAA,WACI,GAAI3T,GAA4B,GAAI4wH,iBAwCpC,OAtCA5wH,GAAQgyH,OAASp7H,KAAKo7H,OACtBhyH,EAAQ2xH,YAAc/6H,KAAK+6H,YAC3B3xH,EAAQmyH,UAAYv7H,KAAKu7H,UACzBnyH,EAAQoyH,MAAQx7H,KAAKw7H,MACrBpyH,EAAQ4xH,kBAAoBh7H,KAAKg7H,kBACjC5xH,EAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQgV,SAAWpe,KAAKoe,SACxBhV,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQuW,QAAU3f,KAAK2f,QACvBvW,EAAQ4gB,UAAYhqB,KAAKgqB,UACzB5gB,EAAQmhB,KAAOvqB,KAAKuqB,KACpBnhB,EAAQuU,KAAO3d,KAAK2d,KAEC,MAAjB3d,KAAK67H,UAAoB77H,KAAK67H,SAAS9vH,OAAS,IAChD3C,EAAQwF,QAAU5O,KAAK4O,QACvBxF,EAAQyyH,SAAW77H,KAAK67H,SACxBzyH,EAAQ6tB,WAAa7tB,EAAQ0yH,mBAAmBjoH,KAAKzK,GAClC,MAAfpJ,KAAKo7H,QAAsC,MAApBp7H,KAAKo7H,OAAO/uC,OACnCjjF,EAAQijF,KAAOrsF,KAAKo7H,OAAO/uC,MAE3BrsF,KAAK+7H,iBACL3yH,EAAQ2yH,eAAiB/7H,KAAK+7H,iBAOtC3yH,EAAQqzH,OAASz8H,KAAKy8H,OAAO5oH,KAAKzK,GAClCA,EAAQ8L,KAAOlV,KAAKkV,KAAKrB,KAAKzK,GAG9BA,EAAQiU,eAEDjU,GAMD4wH,iBAAAl5H,UAAAuc,aAAV,WACIrd,KAAKsd,iBAMT08G,iBAAAl5H,UAAAwc,cAAA,WACItd,KAAKyc,gBAAgB,mBACrBzc,KAAKgc,SAAU,GAcTg+G,iBAAAl5H,UAAAkc,yBAAV,WACIhd,KAAKid,6BAMT+8G,iBAAAl5H,UAAAmc,0BAAA,WACIjd,KAAKyc,gBAAgB,4BAErB,IAAIS,IACAN,UAAU,EAGd,IAAqB,MAAjB5c,KAAK4c,UAAoB5c,KAAK4c,SAAS7Q,OAAS,EAChD,IAAK,GAAIhM,GAAIC,KAAK4c,SAAS7Q,OAAS,EAAGhM,GAAK,EAAGA,IACnB,MAApBC,KAAK4c,SAAS7c,IACbC,KAAK4c,SAAS7c,GAAWyc,QAAQU,EAK9Cld,MAAKmd,kBAOC68G,iBAAAl5H,UAAA2b,gBAAV,SAA0BW,KAsB1B48G,iBAAAl5H,UAAA0b,QAAA,SAAQzX,GACJ/E,KAAKyc,gBAAgB,WAEjB7a,EAAAoG,MAAMC,kBAAkBlD,KACxBA,EAAUi1H,iBAAiBt9G,iBAG/B1c,KAAK2c,gBAAgB5X,GAEhBnD,EAAAoG,MAAMC,kBAAkBjI,KAAK4c,WAC9B1Z,EAAApC,UAAM0b,QAAO/b,KAAAT,MASjBA,KAAKic,aAAc,GAOb+9G,iBAAAl5H,UAAA6b,gBAAV,SAA0B5X,GACtB/E,KAAKi3B,WAAa,KAClBj3B,KAAK67H,UAAY7xH,KAAKywH,QAAQC,OAE9B5+G,EAAAe,OAAOC,aAAa9c,KAAM,SAC1B8b,EAAAe,OAAOC,aAAa9c,KAAM,YAC1B8b,EAAAe,OAAOC,aAAa9c,KAAM,YAC1B8b,EAAAe,OAAOC,aAAa9c,KAAM,UAQ9Bg6H,iBAAAl5H,UAAAqb,aAAA,WAMI,MAAO,IAOX69G,iBAAAl5H,UAAA+7H,UAAA,WAWI,MAAO,IAOXh8H,OAAAkD,eAAWi2H,iBAAAl5H,UAAA,UrGgw2BNkD,IqGhw2BL,WACI,MAAOhE,MAAKgc,SrGkw2BX9X,YAAY,EACZC,cAAc,IqGhw2BnBtD,OAAAkD,eAAWi2H,iBAAAl5H,UAAA,arGmw2BNkD,IqGnw2BL,WACI,MAAOhE,MAAKic,arGqw2BX/X,YAAY,EACZC,cAAc,IqG/v2BnBtD,OAAAkD,eAAWi2H,iBAAAl5H,UAAA,OrGkw2BNkD,IqGlw2BL,WACI,MAAOhE,MAAKuY,MrGow2BXrU,YAAY,EACZC,cAAc,IqG9v2BnBtD,OAAAkD,eAAWi2H,iBAAAl5H,UAAA,iBrGiw2BNkD,IqGjw2BL,WACI,MAAQhE,MAAauc,mBrGmw2BpBrY,YAAY,EACZC,cAAc,IqG5v2BZ61H,iBAAAl5H,UAAAud,gBAAP,SAAuB+G,GACnB,MAAOA,IAAW3G,KAAKoJ,GAAK,MAOzBmyG,iBAAAl5H,UAAAg8H,qBAAP,SAA4BV,GACxBp8H,KAAK+7H,eAAiBK,GAMhBpC,iBAAAl5H,UAAAi8H,gBAAV,SAA0Bx9D,EAAW/hD,KAoC3Bw8G,iBAAAl5H,UAAA0R,IAAV,SAAcC,KAWJunH,iBAAAl5H,UAAA0gB,SAAV,SAAmB/O,KA3uCZunH,iBAAAC,kBAA4B,oBAE5BD,iBAAAqC,YAAsB,SAyBtBrC,iBAAAt9G,iBACHE,UAAU,GA/BlBo9G,iBAAA3+G,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBrGy94BxB+xG,mBqGx94B8BhwH,KAAKgzH,OAAOC,eAArC58H,GAAA25H,iBAAgBA,EAqvChB35H,EAAAm0G,4BAOTv2F,MAAO,QACPwD,YAAa,aACba,iBAAkB,iBAClBI,kBAAmB,kBACnBF,qBAAsB,qBAItBS,sBAAuB,qBACvBF,iBAAkB,iBAClBlB,qBAAsB,qBACtBC,4BACIoG,SAAU,WACVnG,SAAU,WACVI,OAAQ,UAEZsyF,OAAQ,SAQRp0F,YAAa,aACbM,iBAAkB,iBAClBF,cAAe,cACfC,cAAe,cAMf67G,SAAU,WACV7nB,WAAY,YACZvsF,MAAO,QAQPrI,KAAM,OAONL,QAAS,SAOTC,QAAS,SAMTi1F,KAAM,OACN+nB,MAAO,QACPx5G,iBAAkB,iBAClBC,iBAAkB,iBAClBQ,oBAAqB,oBACrBC,wBAAyB,wBACzBC,qBAAsB,qBACtBN,wBAAyB,wBACzBC,+BACI0E,SAAU,WACVnG,SAAU,WACVI,OAAQ,UAEZ2B,oBAAqB,oBAIrBC,yBAA0B,wBAI1B6wF,mBAAoB,mBAOpBC,QAAS,UAOT12F,SAAU,WASV2G,eAAgB,gBAChBO,oBAAqB,oBACrBC,wBAAyB,wBACzBC,qBAAsB,qBACtBC,oBAAqB,oBAIrBC,yBAA0B,wBAC1BR,wBAAyB,wBACzBC,+BACIgD,SAAU,WACVnG,SAAU,WACVI,OAAQ,UAWZyD,YAAa,aACbF,cAAe,cACfC,cAAe,cACfY,iBAAkB,iBAClBE,kBAAmB,kBACnBD,qBAAsB,qBACtBE,iBAAkB,iBAIlBC,sBAAuB,qBACvBR,qBAAsB,qBACtBC,4BACI8B,SAAU,WACVnG,SAAU,WACVI,OAAQ,UASZlD,QAAS,SAQTC,QAAS,SAOTC,MAAO,QAOPX,eAAgB,gBAEhB69E,MAAO,QAOPiZ,KAAM,OACNzsF,MAAO,QACPisF,OAAQ,SAORC,KAAM,OAONl1F,QAAS,UAOTP,EAAG,IAOHC,EAAG,MrG8l2BD,SAASjf,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GsGrl5BjE5Z,EAAAzB,EAA6C,GAC7C0b,EAAA1b,EAA+B,IAC/BwzG,EAAAxzG,EAAsC,IAWtC+8H,EAAA,SAAAh6H,GAAiC3B,EAAA27H,YAAAh6H,EAK7B,SAAAg6H,eACIh6H,EAAAzC,KAAAT,MAEAA,KAAKu/D,KAAO,GAyLpB,MAzKI29D,aAAAp8H,UAAAa,OAAA,SAAO6b,GACc,MAAbxd,KAAK2d,OACL3d,KAAK2d,KAAOH,EAAKI,UAGjBJ,EAAKU,aAAay1F,EAAAsF,sBAAsBtC,QACxC32G,KAAK0R,MAAMyrH,WAAa3/G,EAAKe,aAAao1F,EAAAsF,sBAAsBtC,OAGpE32G,KAAK0d,aAAaF,IAQf0/G,YAAAp8H,UAAA4c,aAAP,SAAoBF,GACZA,EAAKU,aAAay1F,EAAAsF,sBAAsBvC,QACxC12G,KAAKu/D,KAAO/hD,EAAKe,aAAao1F,EAAAsF,sBAAsBvC,OAGpDl5F,EAAKU,aAAay1F,EAAAsF,sBAAsBrC,YAIxCp5F,EAAKU,aAAay1F,EAAAsF,sBAAsBjC,eAYxCx5F,EAAKU,aAAay1F,EAAAsF,sBAAsBC,QACxCl5G,KAAK0R,MAAMg4B,SAAWh0B,SAAS8H,EAAKe,aAAao1F,EAAAsF,sBAAsBC,QAGvE17F,EAAKU,aAAay1F,EAAAsF,sBAAsBh7F,SACxCje,KAAK6d,MAAQS,WAAWd,EAAKe,aAAao1F,EAAAsF,sBAAsBh7F,SAGhET,EAAKU,aAAay1F,EAAAsF,sBAAsB96F,YACxCne,KAAKoe,SAAW1I,SAAS8H,EAAKe,aAAao1F,EAAAsF,sBAAsB96F,YAGjEX,EAAKU,aAAay1F,EAAAsF,sBAAsBz6F,iBACpChB,EAAKe,aAAao1F,EAAAsF,sBAAsBz6F,kBAAoBm1F,EAAAsF,sBAAsBz6F,iBAClFxe,KAAKoe,SAAWK,KAAKC,MAAsB,IAAhBD,KAAKE,UAAkB,KAItDnB,EAAKU,aAAay1F,EAAAsF,sBAAsBh6F,WACxCjf,KAAKsR,MAAMwN,EAAIR,WAAWd,EAAKe,aAAao1F,EAAAsF,sBAAsBh6F,WAGlEzB,EAAKU,aAAay1F,EAAAsF,sBAAsB/5F,WACxClf,KAAKsR,MAAM0N,EAAIV,WAAWd,EAAKe,aAAao1F,EAAAsF,sBAAsB/5F,WAGlE1B,EAAKU,aAAay1F,EAAAsF,sBAAsB95F,SACxCnf,KAAKsR,MAAMwN,EAAIR,WAAWd,EAAKe,aAAao1F,EAAAsF,sBAAsB95F,QAClEnf,KAAKsR,MAAM0N,EAAIV,WAAWd,EAAKe,aAAao1F,EAAAsF,sBAAsB95F,SAGlE3B,EAAKU,aAAay1F,EAAAsF,sBAAsB35F,KACxCtf,KAAKof,SAASN,EAAIpJ,SAAS8H,EAAKe,aAAao1F,EAAAsF,sBAAsB35F,KAGnE9B,EAAKU,aAAay1F,EAAAsF,sBAAsB15F,KACxCvf,KAAKof,SAASJ,EAAItJ,SAAS8H,EAAKe,aAAao1F,EAAAsF,sBAAsB15F,KAGnE/B,EAAKU,aAAay1F,EAAAsF,sBAAsBx5F,WACxCzf,KAAKwf,MAAMV,EAAIpJ,SAAS8H,EAAKe,aAAao1F,EAAAsF,sBAAsBx5F,WAGhEjC,EAAKU,aAAay1F,EAAAsF,sBAAsBv5F,WACxC1f,KAAKwf,MAAMR,EAAItJ,SAAS8H,EAAKe,aAAao1F,EAAAsF,sBAAsBv5F,WAGhElC,EAAKU,aAAay1F,EAAAsF,sBAAsBp5F,WACxC7f,KAAK2f,QAAU/d,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAao1F,EAAAsF,sBAAsBp5F,WAGhFrC,EAAKU,aAAay1F,EAAAsF,sBAAsBlE,QACc,MAAlDv3F,EAAKe,aAAao1F,EAAAsF,sBAAsBlE,MACxC/0G,KAAK0R,MAAM0rH,KAAO,KAElBp9H,KAAK0R,MAAM0rH,KAAO1nH,SAAS8H,EAAKe,aAAao1F,EAAAsF,sBAAsBlE,MAAO,MAetFmoB,YAAAp8H,UAAAuc,aAAA,WACIrd,KAAKsd,iBAMC4/G,YAAAp8H,UAAAwc,cAAV,WACItd,KAAKyc,gBAAgB,kBACrBzc,KAAKgc,SAAU,GAYTkhH,YAAAp8H,UAAA2b,gBAAV,SAA0BW,KAY1Bvc,OAAAkD,eAAWm5H,YAAAp8H,UAAA,iBtG+g5BNkD,IsG/g5BL,WACI,MAAQhE,MAAauc,mBtGih5BpBrY,YAAY,EACZC,cAAc,IsG3g5BnBtD,OAAAkD,eAAWm5H,YAAAp8H,UAAA,OtG8g5BNkD,IsG9g5BL,WACI,MAAOhE,MAAKuY,MtGgh5BXrU,YAAY,EACZC,cAAc,IsG9g5BnB+4H,YAAAp8H,UAAAqb,aAAA,WAKI,MAAO,IAGX+gH,YAAAp8H,UAAA+7H,UAAA,WAMI,MAAO,IAhMfK,YAAA7hH,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBtGkt5BxBi1G,csGjt5ByBlzH,KAAKqzH,KAAzBh9H,GAAA68H,YAAWA,GtGyt5BlB,SAAS58H,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GuGlv5BjE5Z,EAAAzB,EAA6C,GAC7C0b,EAAA1b,EAA+B,IAC/Bm9H,EAAAn9H,EAA6B,KAC7B+B,EAAA/B,EAAgC,GAChC8a,EAAA9a,EAA4B,IAC5B2b,EAAA3b,EAAuB,IACvBkoB,EAAAloB,EAA6B,IAC7Bo9H,EAAAp9H,EAA8B,KAC9ByS,EAAAzS,EAA2E,GAC3EmoB,EAAAnoB,EAA4B,IAC5B24H,EAAA34H,EAAiC,KAIjC25H,EAAA,SAAA52H,GAAqC3B,EAAAu4H,gBAAA52H,EAwBjC,SAAA42H,mBACI52H,EAAAzC,KAAAT,MAEAA,KAAKw9H,SAELx9H,KAAKoZ,OAASxG,EAAAa,iBAAiB,iBAC/BzT,KAAKoZ,OAAO1F,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKy9H,aAAa5pH,KAAK7T,OAEjEA,KAAK09H,WAAa,EAClB19H,KAAK29H,UAAW,EAChB39H,KAAK49H,WAAY,EACjB59H,KAAKw7H,OAAQ,EACbx7H,KAAK69H,WAAY,EACjB79H,KAAK89H,cAAe,EACpB99H,KAAK+9H,WAAa,GAClB/9H,KAAKg7H,mBAAoB,EACzBh7H,KAAKg+H,SAAW,EAChBh+H,KAAK2f,SAAU,EACf3f,KAAKklC,QAAUllC,KAotBvB,MA7sBI85H,iBAAAh5H,UAAA2c,aAAA,SAAaD,GACJxd,KAAK29H,WACNz6H,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,GAGfA,EAAKU,aAAa7d,EAAAi3G,0BAA0BC,aAC5Cv3G,KAAK69H,UAAYj8H,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAAi3G,0BAA0BC,aAGtF/5F,EAAKU,aAAa7d,EAAAi3G,0BAA0B2mB,gBAC5Cj+H,KAAK89H,aAAel8H,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAAi3G,0BAA0B2mB,gBAGzFzgH,EAAKU,aAAa7d,EAAAi3G,0BAA0BvtF,cAC5C/pB,KAAK09H,WAAahoH,SAAS8H,EAAKe,aAAale,EAAAi3G,0BAA0BvtF,cAGvEvM,EAAKU,aAAa7d,EAAAi3G,0BAA0B1C,sBAC5C50G,KAAKg7H,kBAAoBp5H,EAAAyI,YAAY8D,aACjCqP,EAAKe,aAAale,EAAAi3G,0BAA0B1C,uBAKhDp3F,EAAKU,aAAa7d,EAAAi3G,0BAA0BzuF,QAC5CrL,EAAKU,aAAa7d,EAAAi3G,0BAA0BxC,WAExCt3F,EAAKU,aAAa7d,EAAAi3G,0BAA0BzuF,OAC5C7oB,KAAKo7H,OACD/yG,EAAAK,aAAaC,OAAOnL,EAAKe,aAAale,EAAAi3G,0BAA0BzuF,QAGpE7oB,KAAKo7H,OACD/yG,EAAAK,aAAaC,OAAOnL,EAAKe,aAAale,EAAAi3G,0BAA0BxC,SAIxE90G,KAAKk+H,WAAal+H,KAAKo7H,OAAOz9G,MAIlC3d,KAAKm+H,kBACLn+H,KAAK29H,UAAW,IAIxB7D,gBAAAh5H,UAAA4c,aAAA,SAAaF,GAUTta,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,GAEfA,EAAKU,aAAa7d,EAAAi3G,0BAA0B8mB,YAC5Cp+H,KAAKg+H,SAAWtoH,SAAS8H,EAAKe,aAAale,EAAAi3G,0BAA0B8mB,WACrEp+H,KAAKg+H,SAA2B,IAAhBh+H,KAAKg+H,SAEjBh+H,KAAKg+H,SAAW,IAChBh+H,KAAKg+H,SAAW,IAIpBxgH,EAAKU,aAAa7d,EAAAi3G,0BAA0BE,cAC5Cx3G,KAAK+9H,WAAavgH,EAAKe,aAAale,EAAAi3G,0BAA0BE,aAI9Dh6F,EAAKU,aAAa7d,EAAAi3G,0BAA0BI,QAC5C91G,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAAi3G,0BAA0BI,SAErE13G,KAAKmV,MAAMnV,KAAK69H,UAAW79H,KAAK+9H,YAIhCvgH,EAAKU,aAAa7d,EAAAi3G,0BAA0BK,WAC5C/1G,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAAi3G,0BAA0BK,YAErE33G,KAAKq+H,WAIL7gH,EAAKU,aAAa7d,EAAAi3G,0BAA0BhC,OAC5C1zG,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAAi3G,0BAA0BhC,QAErEt1G,KAAKkV,OAILsI,EAAKU,aAAa7d,EAAAi3G,0BAA0BgnB,QAC5C18H,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAAi3G,0BAA0BgnB,SAErEt+H,KAAKu6D,QAIL/8C,EAAKU,aAAa7d,EAAAi3G,0BAA0BinB,QAC5C38H,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAAi3G,0BAA0BinB,SAErEv+H,KAAK+oB,SAQN+wG,gBAAAh5H,UAAAq9H,gBAAP,WACI,GAAmB,MAAfn+H,KAAKo7H,QACqB,MAAtBp7H,KAAKo7H,OAAOoD,QAAkBx+H,KAAKo7H,OAAOoD,OAAOzyH,OAAS,EAG1D,IAAK,GAFDkN,GAAgBjZ,KAAK69H,UAAY79H,KAAKo7H,OAAOniH,MAAQjZ,KAAKo7H,OAAOqD,oBAE5D1+H,EAAY,EAAGA,EAAIkZ,EAAOlZ,IAAK,CACpC,GAAI2+H,GAA4C1+H,KAAK2+H,gBAErD3+H,MAAKw9H,MAAM91G,KAAKg3G,KAMxB5E,gBAAAh5H,UAAA69H,eAAR,WACI,GAAID,EAWJ,OAVAA,GAAW1+H,KAAK4+H,yBAEhB5+H,KAAK6+H,cAAcH,GAEf1+H,KAAK89H,eACL99H,KAAK8+H,cAAcJ,GACnB1+H,KAAK++H,aAAaL,IAGtB1+H,KAAK8R,SAAS4sH,GACPA,GAGH5E,gBAAAh5H,UAAA89H,uBAAR,WACI,GAAmB,MAAf5+H,KAAKo7H,OAAgB,CACrB,GAAItkD,GAA4C,KAC5CkoD,EAAah/H,KAAKi/H,mBAEtB,IAAID,EAAW7kG,QAAQ,WACnB28C,EAAW,GAAIwmD,GAAA4B,aAAah9H,EAAAqD,gBAAgBuJ,uBAAuBkwH,IACnEloD,EAAS9sD,UAAY1B,EAAA2B,YAAYC,aAAalqB,KAAK09H,gBAChD,IAAIsB,EAAW7kG,QAAQ,WAAc,CACxC,GAAI3c,GAAgBtU,SAAS6iC,cAAc,YAC3CvuB,GAAKrR,aAAa,SAAU6yH,GAC5BxhH,EAAKrR,aAAa,mBAAoBnM,KAAKg7H,kBAAkBjtH,YAC7D+oE,EAAW,GAAIgiD,GAAAkB,iBACfljD,EAASn1E,OAAO6b,GAGpB,GAAI2hH,GAAcroD,EAASsoD,gBAE3B,OADAtoD,GAASt3D,MAAMnD,IAAI8iH,EAAYz4H,MAAQ,EAAGy4H,EAAYx4H,OAAS,GACxDmwE,EAGX,MAAO,OAGHgjD,gBAAAh5H,UAAAm+H,kBAAR,WACI,MAAOj/H,MAAKo7H,OAAOoD,OAAO//G,KAAKC,MAAMD,KAAKE,SAAW3e,KAAKo7H,OAAOoD,OAAOzyH,UAOpE+tH,gBAAAh5H,UAAA+9H,cAAR,SAAsBH,GAIlB,MAHA1+H,MAAKq/H,cAAcX,GAAU,GAC7BA,EAASY,YAAa,EAEfZ,GAGH5E,gBAAAh5H,UAAAu+H,cAAR,SAAsBX,EAA2C/+G,GAC7D++G,EAAS/+G,QAAUA,EAEf++G,YAAoB5F,GAAAkB,mBAChBr6G,EACA++G,EAASjC,SAETiC,EAASxpH,SAKb4kH,gBAAAh5H,UAAAg+H,cAAR,SAAsBJ,GAClB,GAAIl0B,GAAS,EACTC,EAAS,CAEb,QAAQzqG,KAAKo7H,OAAOmE,aAAahrG,MAC7B,IAAKgpG,GAAAiC,cAAcC,cAIf,GAHAj1B,EAASxqG,KAAKo7H,OAAOmE,aAAazgH,EAAIL,KAAKE,SAAW3e,KAAKo7H,OAAOmE,aAAa74H,MAC/E+jG,EAASzqG,KAAKo7H,OAAOmE,aAAavgH,EAAIP,KAAKE,SAAW3e,KAAKo7H,OAAOmE,aAAa54H,OAE3E3G,KAAKo7H,OAAOmE,aAAavpH,gBAAoBhW,KAAKo7H,OAAOmE,aAAazpH,gBAAmB,CACzF,GAAI4pH,GAAU1/H,KAAKo7H,OAAOmE,aAAazgH,EAAI9e,KAAKo7H,OAAOmE,aAAa74H,MAAQ,EACxEi5H,EAAU3/H,KAAKo7H,OAAOmE,aAAavgH,EAAIhf,KAAKo7H,OAAOmE,aAAa54H,OAAS,EACzEi5H,EAAe5/H,KAAKo7H,OAAOmE,aAAaM,OAAS7/H,KAAKo7H,OAAOmE,aAAavpH,WAAa,EACvF8pH,EAAe9/H,KAAKo7H,OAAOmE,aAAaQ,OAAS//H,KAAKo7H,OAAOmE,aAAazpH,YAAc,EACxFkqH,EAAWvhH,KAAKE,SAAW;AAE3BqhH,EAEIx1B,EADAA,EAASk1B,EACA1/H,KAAKo6H,UACVwF,EAAqD,GAAtC5/H,KAAKo7H,OAAOmE,aAAavpH,WACxC0pH,EAA2C,GAAjC1/H,KAAKo7H,OAAOmE,aAAa74H,OAG9B1G,KAAKo6H,UAAU,EAAGwF,EAAqD,GAAtC5/H,KAAKo7H,OAAOmE,aAAavpH,YAInEy0F,EADAA,EAASk1B,EACA3/H,KAAKo6H,UACV0F,EAAsD,GAAvC9/H,KAAKo7H,OAAOmE,aAAazpH,YACxC6pH,EAA4C,GAAlC3/H,KAAKo7H,OAAOmE,aAAa54H,QAG9B3G,KAAKo6H,UAAU,EAAG0F,EAAsD,GAAvC9/H,KAAKo7H,OAAOmE,aAAazpH,aAK/E4oH,EAAS5/G,EAAI0rF,EACbk0B,EAAS1/G,EAAIyrF,CAEb,MACJ,KAAK8yB,GAAAiC,cAAcS,WACfz1B,EACIxqG,KAAKklC,QAAQpmB,EACbL,KAAKE,SAAW3e,KAAKo7H,OAAOmE,aAAa74H,MACzC1G,KAAKo7H,OAAOmE,aAAa74H,MAAQ,EACrC+jG,EACIzqG,KAAKklC,QAAQlmB,EACbP,KAAKE,SAAW3e,KAAKo7H,OAAOmE,aAAa54H,OACzC3G,KAAKo7H,OAAOmE,aAAa54H,OAAS,EAEtC+3H,EAAS5/G,EAAI0rF,EACbk0B,EAAS1/G,EAAIyrF,CACb,MACJ,KAAK8yB,GAAAiC,cAAcU,SAEf,KACJ,KAAK3C,GAAAiC,cAAcW,YACf31B,EAASxqG,KAAKo7H,OAAOmE,aAAazgH,EAClC2rF,EAASzqG,KAAKo7H,OAAOmE,aAAavgH,CAClC,IAAIohH,GAAgB3hH,KAAKC,MACrB1e,KAAKo6H,UAAUp6H,KAAKo7H,OAAOmE,aAAac,WAAYrgI,KAAKo7H,OAAOmE,aAAazjF,QAE7EwkF,EAAStgI,KAAKqe,gBAAgB+hH,EAGlC,IAAIpgI,KAAKo7H,OAAOmE,aAAagB,YAAc,EAAG,CAC1C,GAAIC,GAASxgI,KAAKo6H,UACdp6H,KAAKo7H,OAAOmE,aAAakB,eACzBzgI,KAAKo7H,OAAOmE,aAAagB,aAEzBG,EAAU1gI,KAAKo6H,UACfp6H,KAAKo7H,OAAOmE,aAAaoB,gBACzB3gI,KAAKo7H,OAAOmE,aAAaqB,aAG7Bp2B,GAAS/rF,KAAKC,MAAM1e,KAAKo7H,OAAOmE,aAAaM,OAASW,EAAS/hH,KAAKo8B,IAAIylF,IACxE71B,EAAShsF,KAAKC,MAAM1e,KAAKo7H,OAAOmE,aAAaQ,OAASW,EAAUjiH,KAAKq8B,IAAIwlF,IAG7E5B,EAAS5/G,EAAI0rF,EACbk0B,EAAS1/G,EAAIyrF,EACbi0B,EAAStgH,SAAWkiH,IAMzBxG,gBAAAh5H,UAAA+/H,iBAAP,SAAwBz3H,GACpBpJ,KAAKklC,QAAU97B,GAOX0wH,gBAAAh5H,UAAAi+H,aAAR,SAAqBL,GACjB,GAAIoC,GACAriH,KAAKC,MAAMD,KAAKE,UAAY3e,KAAKo7H,OAAO2F,QAAU/gI,KAAKo7H,OAAO4F,UAAYhhI,KAAKo7H,OAAO4F,OAE1FhhI,MAAKihI,iBAAiBvC,EAAUoC,GAChC9gI,KAAKkhI,kBAAkBxC,EAAUoC,GACjC9gI,KAAKmhI,qBAAqBzC,EAAUoC,GACpC9gI,KAAKohI,kBAAkB1C,EAAUoC,IAG7BhH,gBAAAh5H,UAAAmgI,iBAAR,SAAyBvC,EAA2C2C,GAChE,OAAQrhI,KAAKo7H,OAAOmE,aAAahrG,MAC7B,IAAKgpG,GAAAiC,cAAcC,cACnB,IAAKlC,GAAAiC,cAAcS,WACfjgI,KAAKshI,yBAAyB5C,EAAU2C,EACxC,MACJ,KAAK9D,GAAAiC,cAAcW,YACfngI,KAAKuhI,uBAAuB7C,EAAU2C,KAK1CvH,gBAAAh5H,UAAAwgI,yBAAR,SAAiC5C,EAA2C2C,GACxE,GAA8B,MAA1BrhI,KAAKo7H,OAAOoG,WAAoB,CAGhC,IAAK,GAFDC,MACAC,KACK3hI,EAAY,EAAGA,EAAIC,KAAKo7H,OAAOoG,WAAWz1H,OAAQhM,IACvD,GACiC,MAA7BC,KAAKo7H,OAAOoG,WAAWzhI,IACQ,MAA/BC,KAAKo7H,OAAOoG,WAAWzhI,GAAG+e,GACK,MAA/B9e,KAAKo7H,OAAOoG,WAAWzhI,GAAGif,EAC5B,CACE,GAAI2iH,GAAiB3hI,KAAKo7H,OAAOoG,WAAWzhI,GAAG+e,EAC3C8iH,EAAiB5hI,KAAKo7H,OAAOoG,WAAWzhI,GAAGif,CACN,OAArChf,KAAKo7H,OAAOoG,WAAWzhI,GAAG8hI,UAC1BF,GAAUljH,KAAKC,OAAOD,KAAKE,SAAW,IAAO3e,KAAKo7H,OAAOoG,WAAWzhI,GAAG8hI,UAEvE7hI,KAAKo7H,OAAOoG,WAAWzhI,GAAG+hI,UAAYL,EAAQ11H,OAAS,IACvD41H,GAAUF,EAAQA,EAAQ11H,OAAS,IAEE,MAArC/L,KAAKo7H,OAAOoG,WAAWzhI,GAAGgiI,UAC1BH,GAAUnjH,KAAKC,OAAOD,KAAKE,SAAW,IAAO3e,KAAKo7H,OAAOoG,WAAWzhI,GAAGgiI,UAEvE/hI,KAAKo7H,OAAOoG,WAAWzhI,GAAG+hI,UAAYJ,EAAQ31H,OAAS,IACvD61H,GAAUF,EAAQA,EAAQ31H,OAAS,IAEvC01H,EAAQ/5G,KAAKg3G,EAAS5/G,EAAI6iH,GAC1BD,EAAQh6G,KAAKg3G,EAAS1/G,EAAI4iH,GAG9BH,EAAQ11H,QAAU,GAClB+P,EAAAe,OAAOmH,cAAc06G,GACjBr8G,UAAWriB,KAAKo7H,OAAO4G,SACvBv+G,OAAQg+G,EACR/9G,OAAQg+G,EACRn/G,cAAe8+G,EACfr+G,SAAUhjB,KAAKo7H,OAAO6G,aACtB5oH,QAAQ,EACRoV,iBAAkBzuB,KAAKkiI,eACvBtzG,gBAAiB8vG,GACjB7vG,cAAe,SAMvBirG,gBAAAh5H,UAAAygI,uBAAR,SAA+B7C,EAA2C2C,GACtE,GAAIb,GAASxgI,KAAKo6H,UAAUp6H,KAAKo7H,OAAOmE,aAAa4C,UAAWniI,KAAKo7H,OAAOmE,aAAaiB,QACrFE,EAAU1gI,KAAKo6H,UAAUp6H,KAAKo7H,OAAOmE,aAAa6C,WAAYpiI,KAAKo7H,OAAOmE,aAAamB,SACvF2B,EAAS5jH,KAAKC,MAAM1e,KAAKo7H,OAAOmE,aAAazgH,EAAI0hH,EAAS/hH,KAAKo8B,IAAI6jF,EAAStgH,WAC5EkkH,EAAS7jH,KAAKC,MAAM1e,KAAKo7H,OAAOmE,aAAavgH,EAAI0hH,EAAUjiH,KAAKq8B,IAAI4jF,EAAStgH,UAGjF,IAA8B,MAA1Bpe,KAAKo7H,OAAOoG,YAAsBxhI,KAAKo7H,OAAOoG,WAAWz1H,OAAS,EAAG,CACrE,GAAI01H,MACAC,IAEiC,IAAjC1hI,KAAKo7H,OAAOoG,WAAWz1H,SACvB/L,KAAKo7H,OAAOoG,WAAW,GAAKxhI,KAAKo7H,OAAOoG,WAAW,GAGvD,KAAK,GAAIzhI,GAAY,EAAGA,EAAIC,KAAKo7H,OAAOoG,WAAWz1H,OAAQhM,IACvD,GACiC,MAA7BC,KAAKo7H,OAAOoG,WAAWzhI,IACQ,MAA/BC,KAAKo7H,OAAOoG,WAAWzhI,GAAG+e,GACK,MAA/B9e,KAAKo7H,OAAOoG,WAAWzhI,GAAGif,EAC5B,CACE,GAAI2iH,GAAiB3hI,KAAKo7H,OAAOoG,WAAWzhI,GAAG+e,EAC3C8iH,EAAiB5hI,KAAKo7H,OAAOoG,WAAWzhI,GAAGif,EAC3C6T,EAAgB9yB,GAAKC,KAAKo7H,OAAOoG,WAAWz1H,OAAS,EAChB,OAArC/L,KAAKo7H,OAAOoG,WAAWzhI,GAAG8hI,UAC1BF,GAAUljH,KAAKC,OAAOD,KAAKE,SAAW,IAAO3e,KAAKo7H,OAAOoG,WAAWzhI,GAAG8hI,UAEvE7hI,KAAKo7H,OAAOoG,WAAWzhI,GAAG+hI,UAAYL,EAAQ11H,OAAS,IACvD41H,GAAUF,EAAQA,EAAQ11H,OAAS,IAEE,MAArC/L,KAAKo7H,OAAOoG,WAAWzhI,GAAGgiI,UAC1BH,GAAUnjH,KAAKC,OAAOD,KAAKE,SAAW,IAAO3e,KAAKo7H,OAAOoG,WAAWzhI,GAAGgiI,UAEvE/hI,KAAKo7H,OAAOoG,WAAWzhI,GAAG+hI,UAAYJ,EAAQ31H,OAAS,IACvD61H,GAAUF,EAAQA,EAAQ31H,OAAS,GAEvC,IAAIw2H,GAAY7D,EAAS5/G,GAAKujH,EAAS3D,EAAS5/G,GAAK+T,EAAQ8uG,EACzDa,EAAY9D,EAAS1/G,GAAKsjH,EAAS5D,EAAS1/G,GAAK6T,EAAQ+uG,CAC7DH,GAAQ/5G,KAAK66G,GACbb,EAAQh6G,KAAK86G,GAIjBf,EAAQ11H,OAAS,EACjB+P,EAAAe,OAAOmH,cAAc06G,GACjBj7G,OAAQg+G,EACR/9G,OAAQg+G,EACRr/G,UAAWriB,KAAKo7H,OAAO4G,SACvBz/G,cAAe8+G,EACfr+G,SAAUhjB,KAAKo7H,OAAO6G,aACtB5oH,QAAQ,EACRoV,iBAAkBzuB,KAAKkiI,eACvBtzG,gBAAiB8vG,GACjB7vG,cAAe,OAEO,IAAnB4yG,EAAQ11H,OACf+P,EAAAe,OAAOmH,cAAc06G,GACjBj7G,QAASi7G,EAAS5/G,EAAG2iH,EAAQ,IAC7B/9G,QAASg7G,EAAS1/G,EAAG0iH,EAAQ,IAC7Br/G,UAAWriB,KAAKo7H,OAAO4G,SACvBz/G,cAAe8+G,EACfr+G,SAAUhjB,KAAKo7H,OAAO6G,aACtB5oH,QAAQ,EACRoV,iBAAkBzuB,KAAKkiI,eACvBtzG,gBAAiB8vG,GACjB7vG,cAAe,OAEO,IAAnB4yG,EAAQ11H,QACf+P,EAAAe,OAAOmH,cAAc06G,GACjBj7G,QAASi7G,EAAS5/G,EAAGujH,GACrB3+G,QAASg7G,EAAS1/G,EAAGsjH,GACrBjgH,UAAWriB,KAAKo7H,OAAO4G,SACvBz/G,cAAe8+G,EACfr+G,SAAUhjB,KAAKo7H,OAAO6G,aACtB5oH,QAAQ,EACRoV,iBAAkBzuB,KAAKkiI,eACvBtzG,gBAAiB8vG,GACjB7vG,cAAe,WAIvB/S,GAAAe,OAAOmH,cAAc06G,GACjBj7G,QAASi7G,EAAS5/G,EAAGujH,GACrB3+G,QAASg7G,EAAS1/G,EAAGsjH,GACrBjgH,UAAWriB,KAAKo7H,OAAO4G,SACvBz/G,cAAe8+G,EACfr+G,SAAUhjB,KAAKo7H,OAAO6G,aACtB5oH,QAAQ,EACRoV,iBAAkBzuB,KAAKkiI,eACvBtzG,gBAAiB8vG,GACjB7vG,cAAe,QAKnBirG,gBAAAh5H,UAAAogI,kBAAR,SAA0BxC,EAA2C2C,GACjE,GAA+B,MAA3BrhI,KAAKo7H,OAAOqH,YAAqB,CAEjC,IAAK,GADDC,MACK3iI,EAAY,EAAGA,EAAIC,KAAKo7H,OAAOqH,YAAY12H,OAAQhM,IAAK,CAC7D,GAAI4hI,GAAiB3hI,KAAKo7H,OAAOqH,YAAY1iI,GAAG+e,EAC5C8iH,EAAiB5hI,KAAKo7H,OAAOqH,YAAY1iI,GAAGif,CACN,OAAtChf,KAAKo7H,OAAOqH,YAAY1iI,GAAG8hI,UAC3BF,IAAWljH,KAAKE,SAAW,IAAO3e,KAAKo7H,OAAOqH,YAAY1iI,GAAG8hI,SAE7D7hI,KAAKo7H,OAAOqH,YAAY1iI,GAAG+hI,UAAYY,EAAY32H,OAAS,IAC5D41H,GAAUe,EAAYA,EAAY32H,OAAS,GAAG+S,GAEb,OAAjC9e,KAAKo7H,OAAOqH,YAAY1iI,GAAGif,EAC3B4iH,EAASD,GAEiC,MAAtC3hI,KAAKo7H,OAAOqH,YAAY1iI,GAAGgiI,UAC3BH,IAAWnjH,KAAKE,SAAW,IAAO3e,KAAKo7H,OAAOqH,YAAY1iI,GAAGgiI,SAE7D/hI,KAAKo7H,OAAOqH,YAAY1iI,GAAG+hI,UAAYY,EAAY32H,OAAS,IAC5D61H,GAAUc,EAAYA,EAAY32H,OAAS,GAAGiT,IAItD0jH,EAAYh7G,KAAK,GAAI1d,MAAK24H,MAAMhB,EAAQC,IAGjB,IAAvBc,EAAY32H,QACZ2yH,EAASptH,MAAMwN,EAAI4jH,EAAY,GAAG5jH,EAClC4/G,EAASptH,MAAM0N,EAAI0jH,EAAY,GAAG1jH,GAC3B0jH,EAAY32H,OAAS,GAC5B+P,EAAAe,OAAOkJ,WAAW24G,GACd14G,YAAa08G,EACbrgH,UAAWriB,KAAKo7H,OAAOwH,UACvBrgH,cAAe8+G,EACfr+G,SAAUhjB,KAAKo7H,OAAOyH,cACtBxpH,QAAQ,MAMhBygH,gBAAAh5H,UAAAqgI,qBAAR,SAA6BzC,EAA2C2C,GACpE,GAAkC,MAA9BrhI,KAAKo7H,OAAO0H,gBAA0B9iI,KAAKo7H,OAAO0H,eAAe/2H,OAAS,EAAG,CAE7E,IAAK,GADDq6C,MACKrmD,EAAY,EAAGA,EAAIC,KAAKo7H,OAAO0H,eAAe/2H,OAAQhM,IAC3D,GAAqC,MAAjCC,KAAKo7H,OAAO0H,eAAe/iI,IAAqD,MAAvCC,KAAKo7H,OAAO0H,eAAe/iI,GAAG6M,MAAe,CACtF,GAAIA,GAAgB5M,KAAKo7H,OAAO0H,eAAe/iI,GAAG6M,KACD,OAA7C5M,KAAKo7H,OAAO0H,eAAe/iI,GAAGgjI,cAC9Bn2H,GAAS6R,KAAKC,OAAOD,KAAKE,SAAW,IAAO3e,KAAKo7H,OAAO0H,eAAe/iI,GAAGgjI,cAE1E/iI,KAAKo7H,OAAO0H,eAAe/iI,GAAG+hI,UAAY17E,EAAOr6C,OAAS,IAC1Da,GAASw5C,EAAOA,EAAOr6C,OAAS,IAEpCq6C,EAAO1+B,KAAK9a,GAIpBkP,EAAAe,OAAOkI,cAAc25G,GACjBt5G,QAASghC,EACT7jC,cAAe8+G,EACfh/G,UAAWriB,KAAKo7H,OAAO4H,aACvBhgH,SAAUhjB,KAAKo7H,OAAO6H,iBACtB5pH,QAAQ,MAKZygH,gBAAAh5H,UAAAsgI,kBAAR,SAA0B1C,EAA2C2C,GACjE,GAA+B,MAA3BrhI,KAAKo7H,OAAO8H,YAAqB,CAEjC,IAAK,GADD9gH,MACKriB,EAAY,EAAGA,EAAIC,KAAKo7H,OAAO8H,YAAYn3H,OAAQhM,IACxD,GAAkC,MAA9BC,KAAKo7H,OAAO8H,YAAYnjI,IAAkD,MAApCC,KAAKo7H,OAAO8H,YAAYnjI,GAAG6M,MAAe,CAChF,GAAIA,GAAgB5M,KAAKo7H,OAAO8H,YAAYnjI,GAAG6M,KACD,OAA1C5M,KAAKo7H,OAAO8H,YAAYnjI,GAAGgjI,cAC3Bn2H,GAAS6R,KAAKC,OAAOD,KAAKE,SAAW,IAAO3e,KAAKo7H,OAAO8H,YAAYnjI,GAAGgjI,cAEvE/iI,KAAKo7H,OAAO8H,YAAYnjI,GAAG+hI,UAAY1/G,EAAOrW,OAAS,IACvDa,GAASwV,EAAOA,EAAOrW,OAAS,IAEpCqW,EAAOsF,KAAK9a,GAGpBkP,EAAAe,OAAO6E,WAAWg9G,GACdt8G,OAAQA,EACRG,cAAe8+G,EACfh/G,UAAWriB,KAAKo7H,OAAO+H,UACvBngH,SAAUhjB,KAAKo7H,OAAOgI,cACtB/pH,QAAQ,MASZygH,gBAAAh5H,UAAA28H,aAAR,WACI,IAAKz9H,KAAKw7H,MAAO,CACb,GAAI6H,IAAY,CACgB,OAA5Bn6H,SAASgiD,iBAAwD,WAA7BhiD,SAASgiD,kBAC7Cm4E,GAAY,GAGZA,GACArjI,KAAKsjI,cAGJtjI,KAAK49H,WACN59H,KAAKoZ,OAAOjE,MAAMnV,KAAKo7H,OAAOnnG,QAKlC6lG,gBAAAh5H,UAAAyiI,qBAAR,WACI,IAAK,GAAIxjI,GAAY,EAAGA,EAAIC,KAAKw9H,MAAMzxH,OAAQhM,IAC3C,IAAKC,KAAKw9H,MAAMz9H,GAAGu/H,WACf,MAAOv/H,EAIf,WAGI+5H,gBAAAh5H,UAAAwiI,YAAR,WAGI,IAAK,GAFDrqH,GAAQwF,KAAKC,MAAM1e,KAAKo7H,OAAOniH,MAAQjZ,KAAKg+H,UAEvCj+H,EAAY,EAAGA,EAAIkZ,EAAOlZ,IAAK,CACpC,GAAI2+H,GAAQ,OACRr6F,EAAgBrkC,KAAKujI,sBAKrBl/F,QACAq6F,EAAW1+H,KAAK2+H,iBAEhB3+H,KAAKw9H,MAAM91G,KAAKg3G,IAEhBA,EAAW1+H,KAAKw9H,MAAMn5F,GAGV,MAAZq6F,IACAA,EAASY,YAAa,EACtBt/H,KAAKq/H,cAAcX,GAAU,GAEzB1+H,KAAK89H,aACLhiH,EAAAe,OAAO6O,cAAcgzG,EAAStzG,MAE9BtP,EAAAe,OAAOC,aAAa4hH,GACpB1+H,KAAK8+H,cAAcJ,GACnB1+H,KAAK++H,aAAaL,OAUlC5E,gBAAAh5H,UAAAqU,MAAA,SAAMquH,EAA2BC,GAA3B,SAAAD,OAAA,GAA2B,SAAAC,MAAA,IAC7BzjI,KAAK2f,SAAU,EAGI,MAAf3f,KAAKo7H,SACLp7H,KAAKoZ,OAAOlE,OACZlV,KAAK69H,UAAY2F,EACjBxjI,KAAK+9H,WAAa0F,EAClBzjI,KAAK49H,UAAY4F,EACjBxjI,KAAKw7H,OAAQ,EACRx7H,KAAK69H,UAMkB,QAApB79H,KAAK+9H,WACL/9H,KAAKy9H,eAELz9H,KAAKoZ,OAAOjE,MAAMnV,KAAKo7H,OAAOnnG,OARlCj0B,KAAKoZ,OAAOjE,MAAMnV,KAAKo7H,OAAOnnG,MACN,QAApBj0B,KAAK+9H,YACL/9H,KAAKy9H,kBAYrB3D,gBAAAh5H,UAAAu9H,SAAA,WACIr+H,KAAK49H,WAAY,GAGrB9D,gBAAAh5H,UAAAoU,KAAA,WACIlV,KAAK49H,WAAY,EACjB59H,KAAKw7H,OAAQ,EACbx7H,KAAKoZ,OAAOlE,OACZlV,KAAK2f,SAAU,GAGnBm6G,gBAAAh5H,UAAAy5D,MAAA,WACI,IAAK,GAAIx6D,GAAY,EAAGA,EAAIC,KAAKw9H,MAAMzxH,OAAQhM,IAC3CC,KAAK8+H,cAAc9+H,KAAKw9H,MAAMz9H,IAC9BC,KAAKq/H,cAAcr/H,KAAKw9H,MAAMz9H,IAAI,IAI1C+5H,gBAAAh5H,UAAAioB,MAAA,WACI/oB,KAAK49H,WAAY,EACjB59H,KAAKw7H,OAAQ,EACbx7H,KAAKoZ,OAAOlE,OACZlV,KAAK2f,SAAU,EACf3f,KAAK0jI,qBAOD5J,gBAAAh5H,UAAAohI,eAAR,SAAuBxD,GAEnBA,EAAS/+G,SAAU,EACf++G,YAAoB5F,GAAAkB,kBACpB0E,EAASxpH,OAEbwpH,EAASY,YAAa,GAGlBxF,gBAAAh5H,UAAA4iI,kBAAR,WACI,IAAK,GAAI3jI,GAAY,EAAGA,EAAIC,KAAKw9H,MAAMzxH,OAAQhM,IAC3CC,KAAKq/H,cAAcr/H,KAAKw9H,MAAMz9H,IAAI,GAClC+b,EAAAe,OAAOC,aAAa9c,KAAKw9H,MAAMz9H,IAC/BC,KAAKw9H,MAAMz9H,GAAGu/H,YAAa,GAQ3BxF,gBAAAh5H,UAAAs5H,UAAR,SAAkB/oF,EAAazS,GAC3B,MAAOngB,MAAKE,UAAYigB,EAAMyS,GAAOA,GAYzCyoF,gBAAAh5H,UAAAic,MAAA,WACI,GAAI3T,GAA2B,GAAI0wH,gBACnC1wH,GAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQgV,SAAWpe,KAAKoe,SACxBhV,EAAQuW,QAAU3f,KAAK2f,QACvBvW,EAAQ87B,QAAUllC,KAAKklC,QACvB97B,EAAQs0H,WAAa19H,KAAK09H,WAC1Bt0H,EAAQy0H,UAAY79H,KAAK69H,UACzBz0H,EAAQ00H,aAAe99H,KAAK89H,YAC5B,IAAItgH,GAAgBtU,SAAS6iC,cAAc/rC,KAAK2d,KAIhD,OAHAH,GAAKrR,aAAa,SAAUnM,KAAKk+H,YACjC90H,EAAQzH,OAAO6b,GACfpU,EAAQkU,gBACDlU,GA7vBf0wH,gBAAAz+G,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBvG8z6BxB6xG,kBuG7z6B6B7+G,EAAAG,YAAxB/a,GAAAy5H,gBAAeA,EAgwBfz5H,EAAAi3G,2BAyBTvtF,WAAY,YACZ5B,MAAO,QAIPysF,mBAAoB,mBACpBvY,MAAO,QACPkb,UAAW,WACXC,WAAY,YAIZymB,aAAc,cAIdG,SAAU,UAEV38G,YAAa,aACba,iBAAkB,iBAClBI,kBAAmB,kBACnBF,qBAAsB,qBAEtBsC,eAAgB,gBAChBO,oBAAqB,oBACrBC,wBAAyB,wBACzBC,qBAAsB,qBAEtBK,YAAa,aACbW,iBAAkB,iBAClBC,qBAAsB,qBAQtBqC,MAAO,QACPisF,OAAQ,SACR2C,aAAc,cACdC,MAAO,QACPC,SAAU,WACVrC,KAAM,OACNgpB,MAAO,QACPC,MAAO,QACPpoB,MAAO,QAOPpB,KAAM,OACN6C,WAAY,QACZC,UAAW,OACXC,SAAU,MACVC,SAAU,MACVC,gBAAiB,YACjBC,YAAa,SACbC,UAAW,OACXC,OAAQ,IACRC,OAAQ,IACRC,cAAe,UACfC,cAAe,UACfC,WAAY,QACZC,YAAa,SACbmrB,YAAa,SACbC,qBAAsB,iBACtBC,2BAA4B,sBAC5BC,gBAAiB,YACjBC,kBAAmB,cACnBC,WAAY,QACZC,gBAAiB,YACjBxrB,YAAa,SACbC,WAAY,QACZwrB,WAAY,cvGsh5BV,SAAS5jI,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GwGr56BjE5Z,EAAAzB,EAAwE,GACxE0b,EAAA1b,EAA+B,IAC/B+B,EAAA/B,EAAgC,GAChC2b,EAAA3b,EAAqD,IAErDyb,EAAAzb,EAA6B,IAC7B4b,EAAA5b,EAA2B,IAE3BmoB,GADAnoB,EAA4B,KAC5BA,EAA4B,KAU5B++H,EAAA,SAAAh8H,GAAkC3B,EAAA29H,aAAAh8H,EAqB9B,SAAAg8H,cAAYtwH,GACR1L,EAAAzC,KAAAT,KAAM4O,GAHV5O,KAAAuhD,OAAiB,EAIbvhD,KAAKmkI,QAAS,EACdnkI,KAAKs/H,YAAa,EAClBt/H,KAAKuY,KAAUvY,KAAKkc,cAAa,IAAIta,EAAAoG,MAAMqQ,eAE3CrY,KAAKuqB,KAAO,SAkzCpB,MAxyCI1pB,QAAAkD,eAAIm7H,aAAAp+H,UAAA,exGy36BCkD,IwGz36BL,WACI,MAAOhE,MAAKoc,cxG236BXC,IwGx36BL,SAAgBC,GACZtc,KAAKoc,aAAeE,GxG036BnBpY,YAAY,EACZC,cAAc,IwGx36BZ+6H,aAAAp+H,UAAAa,OAAP,SAAc6b,GACVxd,KAAKyd,aAAaD,GAClBxd,KAAK0d,aAAaF,IAStB0hH,aAAAp+H,UAAA2c,aAAA,SAAaD,GAuBT,GAXA1B,EAAAe,OAAOC,aAAa9c,KAAM,SAC1B8b,EAAAe,OAAOC,aAAa9c,KAAM,YAC1B8b,EAAAe,OAAOC,aAAa9c,KAAM,YAC1B8b,EAAAe,OAAOC,aAAa9c,KAAM,SAC1B8b,EAAAe,OAAOC,aAAa9c,KAAM,QAET,MAAbA,KAAK2d,OACL3d,KAAK2d,KAAOH,EAAKI,UAIjBJ,EAAKU,aAAa7d,EAAA01G,uBAAuBI,OAEzCn2G,KAAK4O,QAAU1M,EAAAqD,gBAAgBuJ,uBAAuB0O,EAAKe,aAAale,EAAA01G,uBAAuBI,YAC5F,IAAI34F,EAAKU,aAAa7d,EAAA01G,uBAAuBC,YAChD,GAAIx4F,EAAKU,aAAa7d,EAAA01G,uBAAuBG,OAAQ,CACjD,GAAIx8E,GAAQhkB,SAAS8H,EAAKe,aAAale,EAAA01G,uBAAuBG,QAC1DkuB,EAAW1qG,EAAQ,GAAK,IAAMA,EAAQA,CAC1C15B,MAAK4O,QAAU1M,EAAAqD,gBAAgBuJ,uBAC3B0O,EAAKe,aAAale,EAAA01G,uBAAuBC,YAAc,KAAOouB,OAGlEpkI,MAAK4O,QAAU1M,EAAAqD,gBAAgBuJ,uBAC3B0O,EAAKe,aAAale,EAAA01G,uBAAuBC,iBAG9C,IAAIx4F,EAAKU,aAAa7d,EAAA01G,uBAAuBd,WAAY,CAC5D,GAAIv7E,GAAgB,CAChBlc,GAAKU,aAAa7d,EAAA01G,uBAAuBG,SACzCx8E,EAAQhkB,SAAS8H,EAAKe,aAAale,EAAA01G,uBAAuBG,QAE9D,IAAIkuB,GAAW1qG,EAAQ,GAAK,IAAMA,EAAQA,CAE1C15B,MAAK4O,QAAU1M,EAAAqD,gBAAgBuJ,uBAC3B0O,EAAKe,aAAale,EAAA01G,uBAAuBd,WAAa,KAAOmvB,GAIrE,GAAIpkI,KAAK4O,SACD4O,EAAKU,aAAa7d,EAAA01G,uBAAuBtB,QAAS,CAClD,GAAI4vB,GAAe7mH,EAAKe,aAAale,EAAA01G,uBAAuBtB,QAAQ7xF,MAAM,IAE9C,KAAxByhH,EAAat4H,QACb/L,KAAKs8H,OAAOx9G,EAAIR,WAAW+lH,EAAa,IACxCrkI,KAAKs8H,OAAOt9G,EAAIV,WAAW+lH,EAAa,KACT,IAAxBA,EAAat4H,SACpB/L,KAAKs8H,OAAOx9G,EAAIR,WAAW+lH,EAAa,IACxCrkI,KAAKs8H,OAAOt9G,EAAIV,WAAW+lH,EAAa,KAYhD7mH,EAAKU,aAAa7d,EAAA01G,uBAAuBh1F,gBACzC/gB,KAAKoc,aAAeoB,EAAKe,aAAale,EAAA01G,uBAAuBh1F,eASjE/gB,KAAK0d,aAAaF,IAMf0hH,aAAAp+H,UAAA4c,aAAP,SAAoBF,GAChB,IAAKA,EAED,WADAxd,MAAKwhB,SAAS,wCA+ElB,IAjEKhE,EAAKU,aAAa7d,EAAA01G,uBAAuB/0F,mBAC8C,GAAxFpf,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAA01G,uBAAuB/0F,oBAElElF,EAAAe,OAAOC,aAAa9c,MAGxBA,KAAKmkI,OAASpoH,EAAA+B,WAAW8B,uBAAuBpC,EAAMnd,EAAA01G,uBAAuBE,MAAOj2G,KAAKmkI,QACzFnkI,KAAK2f,QAAU5D,EAAA+B,WAAW8B,uBAAuBpC,EAAMnd,EAAA01G,uBAAuBl2F,QAAS7f,KAAK2f,SAC5F3f,KAAK6d,MAAQ9B,EAAA+B,WAAWC,qBAAqBP,EAAMnd,EAAA01G,uBAAuB93F,MAAOje,KAAK6d,OACtF7d,KAAKgqB,UAAY1B,EAAA2B,YAAYC,aACzBlqB,KAAKskI,qBACDvoH,EAAA+B,WAAW8D,sBAAsBpE,EAAMnd,EAAA01G,uBAAuBhsF,WAAY/pB,KAAKgqB,aAGvFhqB,KAAKwf,MAAMV,EAAI/C,EAAA+B,WAAWuB,mBAAmB7B,EAAMnd,EAAA01G,uBAAuBt2F,QAASzf,KAAKwf,MAAMV,GAC9F9e,KAAKwf,MAAMR,EAAIjD,EAAA+B,WAAWuB,mBAAmB7B,EAAMnd,EAAA01G,uBAAuBr2F,QAAS1f,KAAKwf,MAAMR,GAE1FxB,EAAKU,aAAa7d,EAAA01G,uBAAuB53F,YACzCne,KAAKoe,SAAWpe,KAAKqe,gBAAgBC,WAAWd,EAAKe,aAAale,EAAA01G,uBAAuB53F,aAGzFX,EAAKU,aAAa7d,EAAA01G,uBAAuBv3F,iBACrChB,EAAKe,aAAale,EAAA01G,uBAAuBv3F,kBAAoBne,EAAA01G,uBAAuBv3F,iBACpFxe,KAAKoe,SAAWK,KAAKC,MAAsB,IAAhBD,KAAKE,UAAkB,KAI1D3e,KAAKof,SAASN,EAAI/C,EAAA+B,WAAWuB,mBAAmB7B,EAAMnd,EAAA01G,uBAAuBz2F,EAAGtf,KAAKof,SAASN,GAC9F9e,KAAKof,SAASJ,EAAIjD,EAAA+B,WAAWuB,mBAAmB7B,EAAMnd,EAAA01G,uBAAuBx2F,EAAGvf,KAAKof,SAASJ,GAE1FxB,EAAKU,aAAa7d,EAAA01G,uBAAuB92F,WACzCjf,KAAKsR,MAAMwN,EAAIR,WAAWd,EAAKe,aAAale,EAAA01G,uBAAuB92F,WAGnEzB,EAAKU,aAAa7d,EAAA01G,uBAAuB72F,WACzClf,KAAKsR,MAAM0N,EAAIV,WAAWd,EAAKe,aAAale,EAAA01G,uBAAuB72F,WAGnE1B,EAAKU,aAAa7d,EAAA01G,uBAAuBn3F,UACzC5e,KAAK6e,KAAKC,EAAI9e,KAAKqe,gBAAgBC,WAAWd,EAAKe,aAAale,EAAA01G,uBAAuBn3F,WAGvFpB,EAAKU,aAAa7d,EAAA01G,uBAAuBh3F,UACzC/e,KAAK6e,KAAKG,EAAIhf,KAAKqe,gBAAgBC,WAAWd,EAAKe,aAAale,EAAA01G,uBAAuBh3F,WAGvFvB,EAAKU,aAAa7d,EAAA01G,uBAAuB52F,SACzCnf,KAAKsR,MAAMwN,EAAIR,WAAWd,EAAKe,aAAale,EAAA01G,uBAAuB52F,QACnEnf,KAAKsR,MAAM0N,EAAIV,WAAWd,EAAKe,aAAale,EAAA01G,uBAAuB52F,SAGnE3B,EAAKU,aAAa7d,EAAA01G,uBAAuBwuB,cACrCvkI,KAAKugB,aACLvgB,KAAKouC,YAAYpuC,KAAKugB,YACtBvgB,KAAKugB,WAAa,MAElBvgB,KAAKwkI,YACLxkI,KAAKouC,YAAYpuC,KAAKwkI,WACtBxkI,KAAKwkI,UAAY,MAEjBxkI,KAAKmgB,OACLngB,KAAKmgB,KAAO,OAIhB3C,EAAKU,aAAa7d,EAAA01G,uBAAuBj2F,MAAO,CAEhD,IADA,GAAIC,GAAgBvC,EAAKlG,cAAc0I,kBACxB,MAARD,GAAc,CACjB,GAAIA,EAAKnC,WAAaJ,EAAKe,aAAale,EAAA01G,uBAAuBj2F,MAAO,CAClE,GAAI2kH,GAA4E,QAAvD1kH,EAAKxB,aAAale,EAAA01G,uBAAuB2uB,UAClE,IAAI1kI,KAAKmgB,MAAQngB,KAAKwkI,UAClBzkH,EAAK5T,aAAa,UAAW,QAC7BnM,KAAKwkI,UAAU9mH,aAAaqC,GACvB0kH,GACD1kH,EAAK5T,aAAa,UAAW,aAGjC,QAAQ4T,EAAKxB,aAAa,UACtB,IAAK,eACDve,KAAKwkI,UAAY,GAAItF,cACrBn/G,EAAK5T,aAAa,UAAW,QAC7BnM,KAAKwkI,UAAU7iI,OAAOoe,GACjB0kH,GACD1kH,EAAK5T,aAAa,UAAW,SAEjCnM,KAAK8R,SAAS9R,KAAKwkI,WACnBxkI,KAAKmgB,KAAOngB,KAAKwkI,SACjB,MACJ,SACI,GAAIvkH,GAA6B,GAAIrE,GAAAsE,YACrCD,GAAate,OAAOoe,GACpB/f,KAAKmgB,KAAOF,GAK5BF,EAAOA,EAAKK,mBAGC,MAAbpgB,KAAKmgB,KAOb,GAAI3C,EAAKU,aAAa7d,EAAA01G,uBAAuB11F,aAAc,CACvD,GAAIC,GAAQpe,EAAAqD,gBAAgBuJ,uBAAuB0O,EAAKe,aAAale,EAAA01G,uBAAuB11F,aAE/E,OAATC,IACAtgB,KAAKugB,WAAa,GAAIvW,MAAKwW,OAAOF,GAC9B9C,EAAKU,aAAa7d,EAAA01G,uBAAuBt1F,iBACzCzgB,KAAKugB,WAAWnB,SAASN,EAAIR,WAAWd,EAAKe,aAAale,EAAA01G,uBAAuBt1F,iBAEjFjD,EAAKU,aAAa7d,EAAA01G,uBAAuBr1F,iBACzC1gB,KAAKugB,WAAWnB,SAASJ,EAAIV,WAAWd,EAAKe,aAAale,EAAA01G,uBAAuBr1F,iBAEhFlD,EAAKU,aAAa7d,EAAA01G,uBAAuBp1F,oBAC1C3gB,KAAK8R,SAAS9R,KAAKugB,YACnBvgB,KAAKmgB,KAAOngB,KAAKugB,aAc7B,GAAI/C,EAAKU,aAAa7d,EAAA01G,uBAAuBhB,MAAO,CAChD,GAAI4vB,GAAG,MACgD,OAAnDnnH,EAAKe,aAAale,EAAA01G,uBAAuBhB,MACzC/0G,KAAKuqB,KAAO,KAC8C,YAAnD/M,EAAKe,aAAale,EAAA01G,uBAAuBhB,MAChD/0G,KAAKuqB,KAAO7U,SAASwpH,aAAa7C,YAAa,KAE/Cr8H,KAAKuqB,KAAO7U,SAAS8H,EAAKe,aAAale,EAAA01G,uBAAuBhB,MAAO,IAChD,MAAjB/0G,KAAK4c,UAAwC,MAApB5c,KAAK4c,SAAS,IAAc5c,KAAK4c,SAAS,YAAc5S,MAAKwW,SACtFmkH,EAAmB3kI,KAAK4c,SAAS,GACjC+nH,EAAIp6G,KAAOvqB,KAAKuqB,OAsB5B,MAfAvqB,MAAKkhB,iBAAiB1D,GACtBxd,KAAKohB,cAAc5D,GACnBxd,KAAKmhB,iBAAiB3D,GACtBxd,KAAKihB,cAAczD,GACnBxd,KAAKqhB,aAAa7D,GAClBxd,KAAKivH,aAAazxG,GAClBxd,KAAKshB,SAAS9D,GASPxd,MASJk/H,aAAAp+H,UAAAmgB,cAAP,SAAqBzD,GAArB,GAAA1E,GAAA9Y,IACI,KAAKwd,EAAKU,aAAa7d,EAAA01G,uBAAuBt0F,aAC1C,OAAO,CAGX3F,GAAAe,OAAOC,aAAa9c,KAAM,QAE1B,IAAI0hB,GAEAC,EAA6B5F,EAAA+B,WAAW8D,sBACxCpE,EACAnd,EAAA01G,uBAAuBl0F,qBACvB,KAGAF,IAAsBthB,EAAA01G,uBAAuBj0F,2BAA2BC,SACxEL,EAAa9f,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuBt0F,cAAcS,IACvF,SAACtV,GAAU,MAAAA,GAAQkM,EAAK+E,QAErB8D,GAAsBthB,EAAA01G,uBAAuBj0F,2BAA2BK,QAC/ET,EAAa9f,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuBt0F,cACzEC,EAAW3V,SACX2V,EAAW,GAAK1hB,KAAK6d,QAGzB6D,EAAa9f,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuBt0F,aAGjF,IAAMW,GAAwBV,MAExBW,EAAoBtG,EAAA+B,WAAW8D,sBAAsBpE,EAAMnd,EAAA01G,uBAAuBzzF,iBAAkB,MACpGC,EAAwBxG,EAAA+B,WAAWuB,mBACrC7B,EACAnd,EAAA01G,uBAAuBvzF,qBACvB,KAEAC,EAAqB,CACzB,IAAIjF,EAAKU,aAAa7d,EAAA01G,uBAAuBrzF,mBAAoB,CAC7D,GAAIC,GAAiCnF,EAChCe,aAAale,EAAA01G,uBAAuBrzF,mBACpCE,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,IAC7B6V,GAC8B,GAA1BE,EAAgB5W,OACV0S,KAAKoE,MAAMF,EAAgB,GAAKlE,KAAKE,UAAYgE,EAAgB,GAAKA,EAAgB,KACtFA,EAAgB,GAE9B,GAAMG,GAAqB/G,EAAA+B,WAAW8B,uBAClCpC,EACAnd,EAAA01G,uBAAuBhzF,iBACvB,MAEEC,EAA0BxF,EAAKU,aAAa7d,EAAA01G,uBAAuB9yF,uBACnErhB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuB9yF,wBAChE,IAENnH,GAAAe,OAAO6E,WAAW1hB,MAAQoiB,SAAQC,YAAWE,gBAAeE,aAAYK,YAAWE,cAShFk8G,aAAAp+H,UAAAogB,iBAAP,SAAwB1D,GAAxB,GAAA1E,GAAA9Y,IACI,KACKwd,EAAKU,aAAa7d,EAAA01G,uBAAuB7yF,oBACzC1F,EAAKU,aAAa7d,EAAA01G,uBAAuB5yF,kBAE1C,OAAO,CAGXrH,GAAAe,OAAOC,aAAa9c,KAAM,WAE1B,IAAIojB,GACAC,EAEAC,EAAgCvH,EAAA+B,WAAW8D,sBAC3CpE,EACAnd,EAAA01G,uBAAuBxyF,wBACvB,KAEAD,KAA0BjjB,EAAA01G,uBAAuBvyF,8BAA8BzB,UAC/EqB,EAAiBxhB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuB7yF,mBAAmBhB,IAChG,SAACtV,GAAU,MAAAA,GAAQkM,EAAKsG,SAASN,IAErCuE,EAAiBzhB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuB5yF,mBAAmBjB,IAChG,SAACtV,GAAU,MAAAA,GAAQkM,EAAKsG,SAASJ,KAE9BsE,GAAyBjjB,EAAA01G,uBAAuBvyF,8BAA8BrB,QACrFiB,EAAiBxhB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuB7yF,mBACjFG,EAAiBzhB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuB5yF,mBAC7EC,EAAerX,SACfqX,EAAe,GAAKpjB,KAAKof,SAASN,GAElCuE,EAAetX,SACfsX,EAAe,GAAKrjB,KAAKof,SAASJ,KAGtCoE,EAAiBxhB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuB7yF,mBACjFG,EAAiBzhB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuB5yF,mBAGrF,IAAMM,GAAwBL,MACxBM,EAAwBL,MACxBhB,EAAoBtG,EAAA+B,WAAW8D,sBACjCpE,EACAnd,EAAA01G,uBAAuBpyF,oBACvB,MAEEpB,EAAwBxG,EAAA+B,WAAWuB,mBACrC7B,EACAnd,EAAA01G,uBAAuBnyF,wBACvB,KAEAnB,EAAqB,CACzB,IAAIjF,EAAKU,aAAa7d,EAAA01G,uBAAuBlyF,sBAAuB,CAChE,GAAIlB,GAAiCnF,EAChCe,aAAale,EAAA01G,uBAAuBlyF,sBACpCjB,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,IAC7B6V,GAC8B,GAA1BE,EAAgB5W,OACV0S,KAAKoE,MAAMF,EAAgB,GAAKlE,KAAKE,UAAYgE,EAAgB,GAAKA,EAAgB,KACtFA,EAAgB,GAE9B,GASIiiH,GACAC,EACAC,EACAC,EAZEjiH,EAAqB/G,EAAA+B,WAAW8B,uBAClCpC,EACAnd,EAAA01G,uBAAuBjyF,oBACvB,MAEEd,EAA0BxF,EAAKU,aAAa7d,EAAA01G,uBAAuBhyF,0BACnEniB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuBhyF,2BAChE,IAOFvG,GAAKU,aAAa7d,EAAA01G,uBAAuBivB,gCACzCJ,EAAa7oH,EAAA+B,WAAW8D,sBACpBpE,EACAnd,EAAA01G,uBAAuBkvB,2BACvB,QAEJJ,EAAkB9oH,EAAA+B,WAAWuB,mBACzB7B,EACAnd,EAAA01G,uBAAuBmvB,gCACvB,GAEJJ,EAAe9kI,KAAKmlI,aAAa3nH,EAAKe,aAAale,EAAA01G,uBAAuBivB,+BAEtEJ,GAAcC,GAAmBC,IACjCC,GAAiBxwG,KAAMqwG,EAAY7iG,UAAW8iG,EAAiBr9G,OAAQs9G,KAI/EhpH,EAAAe,OAAOmH,cAAchkB,MACjBovB,OAAQ21G,EACRthH,SACAC,SACArB,YACAE,gBACAE,aACAK,YACAE,cAIDk8G,aAAAp+H,UAAAugB,aAAP,SAAoB7D,GAApB,GAAA1E,GAAA9Y,IACI,KACKwd,EAAKU,aAAa7d,EAAA01G,uBAAuB9xF,gBACzCzG,EAAKU,aAAa7d,EAAA01G,uBAAuB7xF,cAE1C,OAAO,CAGXpI,GAAAe,OAAOC,aAAa9c,KAAM,OAE1B,IAAImkB,GACAC,EAEAC,EAA4BtI,EAAA+B,WAAW8D,sBACvCpE,EACAnd,EAAA01G,uBAAuBzxF,oBACvB,KAEAD,KAAsBhkB,EAAA01G,uBAAuBxxF,0BAA0BxC,UACvEoC,EAAa3G,EAAKU,aAAa7d,EAAA01G,uBAAuB9xF,cAChDriB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuB9xF,eAAe/B,IAC3E,SAACtV,GAAU,MAAAkP,GAAAe,OAAOwB,gBAAgBzR,GAASkM,EAAK+F,KAAKC,IAEzD,KACNsF,EAAa5G,EAAKU,aAAa7d,EAAA01G,uBAAuB7xF,cAChDtiB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuB7xF,eAAehC,IAC3E,SAACtV,GAAU,MAAAkP,GAAAe,OAAOwB,gBAAgBzR,GAASkM,EAAK+F,KAAKG,IAEzD,MACCqF,GAAqBhkB,EAAA01G,uBAAuBxxF,0BAA0BpC,QAC7EgC,EAAa3G,EAAKU,aAAa7d,EAAA01G,uBAAuB9xF,cAChDriB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuB9xF,eAAe/B,IAAI,SAACtV,GAChF,MAAAkP,GAAAe,OAAOwB,gBAAgBzR,KAE3B,KACNwX,EAAa5G,EAAKU,aAAa7d,EAAA01G,uBAAuB7xF,cAChDtiB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuB7xF,eAAehC,IAAI,SAACtV,GAChF,MAAAkP,GAAAe,OAAOwB,gBAAgBzR,KAE3B,KACFuX,GAAcA,EAAWpY,SACzBoY,EAAW,GAAKnkB,KAAK6e,KAAKC,GAE1BsF,GAAcA,EAAWrY,SACzBqY,EAAW,GAAKpkB,KAAK6e,KAAKG,KAG9BmF,EAAa3G,EAAKU,aAAa7d,EAAA01G,uBAAuB9xF,cAChDriB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuB9xF,eAAe/B,IAAI,SAACtV,GAChF,MAAAkP,GAAAe,OAAOwB,gBAAgBzR,KAE3B,KACNwX,EAAa5G,EAAKU,aAAa7d,EAAA01G,uBAAuB7xF,cAChDtiB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuB7xF,eAAehC,IAAI,SAACtV,GAChF,MAAAkP,GAAAe,OAAOwB,gBAAgBzR,KAE3B,KAGV,IAAM6W,GAAwBU,MACxBT,EAAwBU,MACxB/B,EAAoBtG,EAAA+B,WAAW8D,sBAAsBpE,EAAMnd,EAAA01G,uBAAuBvxF,gBAAiB,MACnGjC,EAAwBxG,EAAA+B,WAAWuB,mBACrC7B,EACAnd,EAAA01G,uBAAuBtxF,oBACvB,KAEAhC,EAAqB,CACzB,IAAIjF,EAAKU,aAAa7d,EAAA01G,uBAAuBrxF,kBAAmB,CAC5D,GAAI/B,GAAiCnF,EAChCe,aAAale,EAAA01G,uBAAuBrxF,kBACpC9B,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,IAC7B6V,GAC8B,GAA1BE,EAAgB5W,OACV0S,KAAKoE,MAAMF,EAAgB,GAAKlE,KAAKE,UAAYgE,EAAgB,GAAKA,EAAgB,KACtFA,EAAgB,GAE9B,GAAMG,GAAqB/G,EAAA+B,WAAW8B,uBAClCpC,EACAnd,EAAA01G,uBAAuBpxF,gBACvB,MAEE3B,EAA0BxF,EAAKU,aAAa7d,EAAA01G,uBAAuBnxF,sBACnEhjB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuBnxF,uBAChE,IAEN9I,GAAAe,OAAOgI,UAAU7kB,MAAQyjB,SAAQC,SAAQrB,YAAWE,gBAAeE,aAAYK,YAAWE,cASvFk8G,aAAAp+H,UAAAqgB,iBAAP,SAAwB3D,GAAxB,GAAA1E,GAAA9Y,IACI,KAAKwd,EAAKU,aAAa7d,EAAA01G,uBAAuBjxF,gBAC1C,OAAO,CAGXhJ,GAAAe,OAAOC,aAAa9c,KAAM,WAE1B,IAAI+kB,GAEAC,EAAgCjJ,EAAA+B,WAAW8D,sBAC3CpE,EACAnd,EAAA01G,uBAAuB9wF,wBACvB,KAEAD,IAAyB3kB,EAAA01G,uBAAuB7wF,8BAA8BnD,SAC9EgD,EAAgBnjB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuBjxF,iBAAiB5C,IAC7F,SAACtV,GAAU,MAAAA,GAAQkP,EAAAe,OAAOsI,gBAAgBrM,EAAKsF,YAE5C4G,GAAyB3kB,EAAA01G,uBAAuB7wF,8BAA8B/C,QACrF4C,EAAgBnjB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuBjxF,iBAC5EC,EAAchZ,SACdgZ,EAAc,GAAKjJ,EAAAe,OAAOsI,gBAAgBnlB,KAAKoe,YAGnD2G,EAAgBnjB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuBjxF,gBAGpF,IAAMM,GAAyBL,MAEzB1C,EAAoBtG,EAAA+B,WAAW8D,sBACjCpE,EACAnd,EAAA01G,uBAAuB1wF,oBACvB,MAEE9C,EAAwBxG,EAAA+B,WAAWuB,mBACrC7B,EACAnd,EAAA01G,uBAAuBzwF,wBACvB,KAEA7C,EAAqB,CACzB,IAAIjF,EAAKU,aAAa7d,EAAA01G,uBAAuBxwF,sBAAuB,CAChE,GAAI5C,GAAiCnF,EAChCe,aAAale,EAAA01G,uBAAuBxwF,sBACpC3C,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,IAC7B6V,GAC8B,GAA1BE,EAAgB5W,OACV0S,KAAKoE,MAAMF,EAAgB,GAAKlE,KAAKE,UAAYgE,EAAgB,GAAKA,EAAgB,KACtFA,EAAgB,GAE9B,GAAMG,GAAqB/G,EAAA+B,WAAW8B,uBAClCpC,EACAnd,EAAA01G,uBAAuBvwF,oBACvB,MAEExC,EAA0BxF,EAAKU,aAAa7d,EAAA01G,uBAAuBtwF,0BACnE7jB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuBtwF,2BAChE,IAEN3J,GAAAe,OAAOkI,cAAc/kB,MAAQolB,UAAS/C,YAAWE,gBAAeE,aAAYK,YAAWE,cAGpFk8G,aAAAp+H,UAAAmuH,aAAP,SAAoBzxG,GAChB,IAAKA,EAAKU,aAAa7d,EAAA01G,uBAAuBqZ,YAC1C,OAAO,CAGXtzG,GAAAe,OAAOC,aAAa9c,KAAM,OAE1B,IAAIqvH,GAEAC,EAA4BvzG,EAAA+B,WAAW8D,sBACvCpE,EACAnd,EAAA01G,uBAAuBwZ,oBACvB,KAEAD,IAAqBjvH,EAAA01G,uBAAuByZ,0BAA0BrtG,QACtEktG,EAAY7xG,EACPe,aAAale,EAAA01G,uBAAuBqZ,YACpCxsG,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,EAAO,MAChCyiH,EAAUtjH,SACVsjH,EAAU,GAAKrvH,KAAKuqB,OAGxB8kG,EAAY7xG,EACPe,aAAale,EAAA01G,uBAAuBqZ,YACpCxsG,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,EAAO,KAGxC,IAAMoZ,GAA6BqpG,MAE7BpoG,EAAgB,OAChB5E,EAAoBtG,EAAA+B,WAAW8D,sBAAsBpE,EAAMnd,EAAA01G,uBAAuB0Z,gBAAiB,MACnGltG,EAAwBxG,EAAA+B,WAAWuB,mBACrC7B,EACAnd,EAAA01G,uBAAuB2Z,oBACvB,KAEAjtG,EAAqB,CACzB,IAAIjF,EAAKU,aAAa7d,EAAA01G,uBAAuB4Z,kBAAmB,CAC5D,GAAIhtG,GAAiCnF,EAChCe,aAAale,EAAA01G,uBAAuB4Z,kBACpC/sG,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,IAC7B6V,GAC8B,GAA1BE,EAAgB5W,OACV0S,KAAKoE,MAAMF,EAAgB,GAAKlE,KAAKE,UAAYgE,EAAgB,GAAKA,EAAgB,KACtFA,EAAgB,GAE9B,GAAMG,GAAqB/G,EAAA+B,WAAW8B,uBAClCpC,EACAnd,EAAA01G,uBAAuB6Z,gBACvB,MAEE5sG,EAA0BxF,EAAKU,aAAa7d,EAAA01G,uBAAuB8Z,sBACnEjuH,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuB8Z,uBAChE,IAEN/zG,GAAAe,OAAOoQ,WAAWjtB,MAAQinB,QAAOjB,cAAa3D,YAAWE,gBAAeE,aAAYK,YAAWE,cAU5Fk8G,aAAAp+H,UAAAsgB,cAAP,SAAqB5D,GAArB,GAAA1E,GAAA9Y,IACI,KACKwd,EAAKU,aAAa7d,EAAA01G,uBAAuBrwF,iBACzClI,EAAKU,aAAa7d,EAAA01G,uBAAuBpwF,iBACzCnI,EAAKU,aAAa7d,EAAA01G,uBAAuBnwF,aAE1C,OAAO,CAGX9J,GAAAe,OAAOC,aAAa9c,KAAM,QAE1B,IAAI6lB,GACAC,EACAC,EACAC,IAEAxI,GAAKU,aAAa7d,EAAA01G,uBAAuBrwF,iBACzCG,EAAcjkB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuBrwF,iBAG9ElI,EAAKU,aAAa7d,EAAA01G,uBAAuBpwF,iBACzCG,EAAclkB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuBpwF,iBAG9EnI,EAAKU,aAAa7d,EAAA01G,uBAAuBnwF,eACzCG,EAAam5G,aAAaj5G,8BACtBzI,EAAKe,aAAale,EAAA01G,uBAAuBnwF,cAIjD,IAAIM,GAA6BnK,EAAA+B,WAAW8D,sBACxCpE,EACAnd,EAAA01G,uBAAuB5vF,qBACvB,KAGJ,IAAIJ,GAAcA,EAAWha,OACrBma,GAAsB7lB,EAAA01G,uBAAuB3vF,2BAA2BrE,SACxEiE,EAAcD,EAAW7D,IAAI,SAACtV,GAC1B,OACIkS,EAAGlS,EAAMkS,EAAIhG,EAAKxH,MAAMwN,EACxBE,EAAGpS,EAAMoS,EAAIlG,EAAKxH,MAAM0N,KAGzBkH,GAAsB7lB,EAAA01G,uBAAuB3vF,2BAA2BjE,QAC/E6D,EAAcD,EACVC,EAAYja,SACZia,EAAY,GAAGlH,EAAI9e,KAAKsR,MAAMwN,EAC9BkH,EAAY,GAAGhH,EAAIhf,KAAKsR,MAAM0N,IAGlCgH,EAAcD,MAEf,IAAIF,GAAeC,EAClBD,EAAY9Z,SAAW+Z,EAAY/Z,SAC/Bma,GAAsB7lB,EAAA01G,uBAAuB3vF,2BAA2BrE,SACxEiE,EAAcH,EAAY3D,IAAI,SAACmE,EAAqBtmB,GAChD,OACI+e,EAAGuH,EAAcvN,EAAKxH,MAAMwN,EAC5BE,EAAG8G,EAAY/lB,GAAK+Y,EAAKxH,MAAM0N,KAGhCkH,GAAsB7lB,EAAA01G,uBAAuB3vF,2BAA2BjE,QAC/E6D,EAAcH,EAAY3D,IAAI,SAACmE,EAAqBtmB,GAChD,OACI+e,EAAGuH,EACHrH,EAAG8G,EAAY/lB,MAGnBimB,EAAYja,SACZia,EAAY,GAAGlH,EAAI9e,KAAKsR,MAAMwN,EAC9BkH,EAAY,GAAGhH,EAAIhf,KAAKsR,MAAM0N,IAGlCgH,EAAcH,EAAY3D,IAAI,SAACmE,EAAqBtmB,GAChD,OACI+e,EAAGuH,EACHrH,EAAG8G,EAAY/lB,WAK5B,IAAI8lB,EACHK,GAAsB7lB,EAAA01G,uBAAuB3vF,2BAA2BrE,SACxEiE,EAAcH,EAAY3D,IAAI,SAACmE,EAAqBtmB,GAChD,OACI+e,EAAGuH,EAAcvN,EAAKxH,MAAMwN,EAC5BE,EAAGlG,EAAKxH,MAAM0N,KAGfkH,GAAsB7lB,EAAA01G,uBAAuB3vF,2BAA2BjE,QAC/E6D,EAAcH,EAAY3D,IAAI,SAACmE,EAAqBtmB,GAChD,OACI+e,EAAGuH,EACHrH,EAAGlG,EAAKxH,MAAM0N,KAGlBgH,EAAYja,SACZia,EAAY,GAAGlH,EAAI9e,KAAKsR,MAAMwN,IAGlCkH,EAAcH,EAAY3D,IAAI,SAACmE,EAAqBtmB,GAChD,OACI+e,EAAGuH,EACHrH,EAAGlG,EAAKxH,MAAM0N,SAIvB,KAAI8G,EA2BP,OAAO,CA1BHI,IAAsB7lB,EAAA01G,uBAAuB3vF,2BAA2BrE,SACxEiE,EAAcF,EAAY5D,IAAI,SAACoE,EAAqBvmB,GAChD,OACI+e,EAAGhG,EAAKxH,MAAMwN,EACdE,EAAGsH,EAAcxN,EAAKxH,MAAM0N,KAG7BkH,GAAsB7lB,EAAA01G,uBAAuB3vF,2BAA2BjE,QAC/E6D,EAAcF,EAAY5D,IAAI,SAACoE,EAAqBvmB,GAChD,OACI+e,EAAGhG,EAAKxH,MAAMwN,EACdE,EAAGsH,KAGPN,EAAYja,SACZia,EAAY,GAAGhH,EAAIhf,KAAKsR,MAAM0N,IAGlCgH,EAAcF,EAAY5D,IAAI,SAACoE,EAAqBvmB,GAChD,OACI+e,EAAGhG,EAAKxH,MAAMwN,EACdE,EAAGsH,KAQnB,GAAMjE,GAAoBtG,EAAA+B,WAAW8D,sBAAsBpE,EAAMnd,EAAA01G,uBAAuBxvF,iBAAkB,MACpGhE,EAAwBxG,EAAA+B,WAAWuB,mBACrC7B,EACAnd,EAAA01G,uBAAuBvvF,qBACvB,KAEA/D,EAAqB,CACzB,IAAIjF,EAAKU,aAAa7d,EAAA01G,uBAAuBtvF,mBAAoB,CAC7D,GAAI9D,GAAiCnF,EAChCe,aAAale,EAAA01G,uBAAuBtvF,mBACpC7D,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,IAC7B6V,GAC8B,GAA1BE,EAAgB5W,OACV0S,KAAKoE,MAAMF,EAAgB,GAAKlE,KAAKE,UAAYgE,EAAgB,GAAKA,EAAgB,KACtFA,EAAgB,GAE9B,GAAMG,GAAqB/G,EAAA+B,WAAW8B,uBAClCpC,EACAnd,EAAA01G,uBAAuBrvF,iBACvB,MAEE1D,EAA0BxF,EAAKU,aAAa7d,EAAA01G,uBAAuBpvF,uBACnE/kB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA01G,uBAAuBpvF,wBAChE,IAEN7K,GAAAe,OAAOkJ,WAAW/lB,MAAQgmB,cAAa3D,YAAWE,gBAAeE,aAAYK,YAAWE,cAGrFk8G,aAAAp+H,UAAAwgB,SAAP,SAAgB9D,GACZ,GAAIA,EAAKU,aAAapC,EAAA8K,iBAAiBC,OAGnC,IAAK,GAFDC,GAAwBllB,EAAAogB,WAAW+E,YAAYvJ,EAAKe,aAAazC,EAAA8K,iBAAiBC,QAE7E9mB,EAAY,EAAGA,EAAI+mB,EAAO/a,OAAQhM,IAAK,CAE5C,IAAKyd,EAAKU,aAAapC,EAAA8K,iBAAiBI,aAAejnB,GACnD,OAAO,CAGX,IAAMimB,GAA6BpkB,EAAAogB,WAAWC,YAC1CzE,EAAKe,aAAazC,EAAA8K,iBAAiBI,aAAejnB,IAEhDwiB,EAA+B3gB,EAAAogB,WAAWC,YAC5CzE,EAAKe,aAAazC,EAAA8K,iBAAiBO,eAAiBpnB,IAAM,OAExDsiB,EAA2BzgB,EAAAogB,WAAW+E,YACxCvJ,EAAKe,aAAazC,EAAA8K,iBAAiBQ,WAAarnB,IAAM,UAEpD0iB,EAA4B7gB,EAAAogB,WAAWC,YACzCzE,EAAKe,aAAazC,EAAA8K,iBAAiBS,YAActnB,IAAM,KAErD+iB,EAAqB/G,EAAA+B,WAAW8B,uBAClCpC,EACA1B,EAAA8K,iBAAiBU,WAAavnB,EAC9B,MAGAknB,EAAgBH,EAAO/mB,EAE3B+b,GAAAe,OAAOC,aAAa9c,KAAMinB,GAEb,SAATA,IACAA,EAAQ,UACRH,EAAO/mB,GAAK,UACZA,KAGJ+b,EAAAe,OAAO0K,YAAYvnB,MAAQinB,QAAOjB,cAAa3D,YAAWE,gBAAeE,aAAYK,cAI7F,OAAO,GAQXo8G,aAAAp+H,UAAAic,MAAA,WACI,GAAI3T,GAAwB,GAAI81H,aA6BhC,IA5BA91H,EAAQ+T,iBAER/T,EAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQgV,SAAWpe,KAAKoe,SACxBhV,EAAQuW,QAAU3f,KAAK2f,QACvBvW,EAAQyU,MAAQ7d,KAAK6d,MACrBzU,EAAQkzH,OAASt8H,KAAKs8H,OACtBlzH,EAAQmhB,KAAOvqB,KAAKuqB,KACpBnhB,EAAQ4gB,UAAYhqB,KAAKgqB,UACzB5gB,EAAQuU,KAAO3d,KAAK2d,KACpBvU,EAAQ+6H,OAASnkI,KAAKmkI,OACtB/6H,EAAQgT,aAAepc,KAAKoc,aAER,MAAhBpc,KAAK4O,UACLxF,EAAQwF,QAAU5O,KAAK4O,SAGvBxF,EAAQ+6H,OAMW,MAAnBnkI,KAAKugB,WAAoB,CACzB,GAAIuvG,GAAc,GAAI9lH,MAAKwW,OAAqBxgB,KAAKugB,WAAY3R,QACjEkhH,GAAY1wG,SAASN,EAAI9e,KAAKugB,WAAWnB,SAASN,EAClDgxG,EAAY1wG,SAASJ,EAAIhf,KAAKugB,WAAWnB,SAASJ,EAElD5V,EAAQmX,WAAauvG,EACrB1mH,EAAQ0I,SAASg+G,GACjB1mH,EAAQ+W,KAAO2vG,EAUnB,MARsB,OAAlB9vH,KAAKwkI,YACLp7H,EAAQo7H,UAAYxkI,KAAKwkI,UAAUznH,QACnC3T,EAAQ0I,SAAS1I,EAAQo7H,WACzBp7H,EAAQ+W,KAAO/W,EAAQo7H,WAG3Bp7H,EAAQiU,eAEDjU,GAOD81H,aAAAp+H,UAAA6b,gBAAV,SAA0B5X,GACtB+W,EAAAe,OAAOC,aAAa9c,KAAM,SAC1B8b,EAAAe,OAAOC,aAAa9c,KAAM,YAC1B8b,EAAAe,OAAOC,aAAa9c,KAAM,YAC1B8b,EAAAe,OAAOC,aAAa9c,KAAM,SAC1B8b,EAAAe,OAAOC,aAAa9c,KAAM,QAE1BA,KAAK4O,QAAU;EAGnBswH,aAAAp+H,UAAAqb,aAAA,WAKI,MAAO,IAGX+iH,aAAAp+H,UAAA+7H,UAAA,WASI,MAAO,IAOXh8H,OAAAkD,eAAWm7H,aAAAp+H,UAAA,UxG0n6BNkD,IwG1n6BL,WACI,MAAOhE,MAAKgc,SxG4n6BX9X,YAAY,EACZC,cAAc,IwG1n6BnBtD,OAAAkD,eAAWm7H,aAAAp+H,UAAA,axG6n6BNkD,IwG7n6BL,WACI,MAAOhE,MAAKic,axG+n6BX/X,YAAY,EACZC,cAAc,IwGzn6BnBtD,OAAAkD,eAAWm7H,aAAAp+H,UAAA,OxG4n6BNkD,IwG5n6BL,WACI,MAAOhE,MAAKuY,MxG8n6BXrU,YAAY,EACZC,cAAc,IwGxn6BnBtD,OAAAkD,eAAWm7H,aAAAp+H,UAAA,iBxG2n6BNkD,IwG3n6BL,WACI,MAAQhE,MAAauc,mBxG6n6BpBrY,YAAY,EACZC,cAAc,IwG3n6BnB+6H,aAAAp+H,UAAA0b,QAAA,SAAQzX,GACJ/E,KAAKyc,gBAAgB,WAEjB7a,EAAAoG,MAAMC,kBAAkBlD,KACxBA,EAAUm6H,aAAaxiH,iBAG3B1c,KAAK2c,gBAAgB5X,GAEhBnD,EAAAoG,MAAMC,kBAAkBjI,KAAK4c,WAC9B1Z,EAAApC,UAAM0b,QAAO/b,KAAAT,KAAC+E,GASlB/E,KAAKic,aAAc,GAGbijH,aAAAp+H,UAAA2b,gBAAV,SAA0BW,KAaX8hH,aAAAj5G,8BAAf,SAA6C0B,GACzC,MAAKA,GAIEA,EACF1a,QAAQ,MAAO,IACf2V,MAAM,KACNV,IAAI,SAAC0F,GACF,cAAQ1U,KAAK0U,GAAcA,EAAW1mB,MAAM,MAAO0hB,MAAM,MAAQgF,EAAYA,KAEhF1F,IAAI,SAAC0F,GACF,OAAS9I,EAAGR,WAAWsJ,EAAW,IAAK5I,EAAGV,WAAWsJ,EAAW,WAOlEs3G,aAAAp+H,UAAAwc,cAAV,WACItd,KAAKqd,gBAMT6hH,aAAAp+H,UAAAuc,aAAA,WACIrd,KAAKolI,iBAAiB,kBACtBplI,KAAKgc,SAAU,GAiBTkjH,aAAAp+H,UAAAskI,iBAAV,SAA2BhoH,KAW3B8hH,aAAAp+H,UAAAkc,yBAAA,WACIhd,KAAKid,6BAMCiiH,aAAAp+H,UAAAmc,0BAAV,WACIjd,KAAKolI,iBAAiB,4BAEtB,IAAIloH,IACAN,UAAU,EAGd,IAAqB,MAAjB5c,KAAK4c,UAAoB5c,KAAK4c,SAAS7Q,OAAS,EAChD,IAAK,GAAIhM,GAAIC,KAAK4c,SAAS7Q,OAAS,EAAGhM,GAAK,EAAGA,IACnB,MAApBC,KAAK4c,SAAS7c,IACbC,KAAK4c,SAAS7c,GAAWyc,QAAQU,EAK9Cld,MAAKmd,kBAQF+hH,aAAAp+H,UAAAud,gBAAP,SAAuB+G,GACnB,MAAOA,IAAW3G,KAAKoJ,GAAK,MAUzBq3G,aAAAp+H,UAAAwjI,qBAAP,SAA4B50E,GAExB,OADAA,EAAOA,EAAK3hD,YAER,IAAK,IACL,IAAK,SACD,MAAO/D,MAAKgyH,YAAYC,MAC5B,KAAK,IACL,IAAK,MACD,MAAOjyH,MAAKgyH,YAAYqJ,GAC5B,KAAK,IACL,IAAK,WACD,MAAOr7H,MAAKgyH,YAAYnmB,QAC5B,KAAK,IACL,IAAK,SACD,MAAO7rG,MAAKgyH,YAAYsJ,MAC5B,KAAK,IACL,IAAK,UACD,MAAOt7H,MAAKgyH,YAAYuJ,OAC5B,KAAK,IACL,IAAK,SACD,MAAOv7H,MAAKgyH,YAAYwJ,MAC5B,KAAK,IACL,IAAK,UACD,MAAOx7H,MAAKgyH,YAAYyJ,OAC5B,KAAK,IACL,IAAK,cACD,MAAOz7H,MAAKgyH,YAAY0J,WAC5B,KAAK,IACL,IAAK,aACD,MAAO17H,MAAKgyH,YAAY2J,UAC5B,KAAK,IACL,IAAK,aACD,MAAO37H,MAAKgyH,YAAY4J,UAC5B,KAAK,KACL,IAAK,aACD,MAAO57H,MAAKgyH,YAAY6J,UAC5B,KAAK,KACL,IAAK,aACD,MAAO77H,MAAKgyH,YAAY8J,UAC5B,KAAK,KACL,IAAK,YACD,MAAO97H,MAAKgyH,YAAY+J,SAC5B,KAAK,KACL,IAAK,MACD,MAAO/7H,MAAKgyH,YAAYgK,GAC5B,KAAK,KACL,IAAK,aACD,MAAOh8H,MAAKgyH,YAAYiK,UAC5B,KAAK,KACL,IAAK,QACD,MAAOj8H,MAAKgyH,YAAYnyG,KAC5B,KAAK,KACL,IAAK,aACD,MAAO7f,MAAKgyH,YAAYkK,UAC5B,SAII,MAAOl8H,MAAKgyH,YAAYC,SAO1BiD,aAAAp+H,UAAAi8H,gBAAV,SAA0Bx9D,EAAW/hD,KAmC3B0hH,aAAAp+H,UAAA0R,IAAV,SAAcC,KAWJysH,aAAAp+H,UAAA0gB,SAAV,SAAmB/O,KAcXysH,aAAAp+H,UAAAqlI,YAAR,SAAoBv5H,EAAerM,EAAY6lI,GAAA,SAAAA,OAAA,EAC3C,IAAIl/H,EAWJ,OATIA,GADS,KAAT0F,EACS5M,KAAKO,GAEV6lI,EACSpmI,KAAKO,IAAOmV,SAAS9I,GAAS5M,KAAKqmI,oBAAoB9lI,IAEvDmV,SAAS9I,IAatBsyH,aAAAp+H,UAAAqkI,aAAR,SAAqB/+E,EAAgBggF,GAAA,SAAAA,OAAA,EAKjC,KAAK,GAJDl/H,MACAo/H,EAAQ,aACRl5G,EAAOg5B,EAAOl5C,MAAMo5H,GAEfvmI,EAAY,EAAGA,EAAIqtB,EAAKrhB,OAAQhM,IAAK,CAC1C,GAAIwmI,GAAan5G,EAAKrtB,GAAGuL,UAAU,EAAG8hB,EAAKrtB,GAAGgM,OAAS,GAAG6W,MAAM,IAEhE,IAAyB,GAArB2jH,EAAWx6H,OAAa,CACxB,GAAI+S,GAAI9e,KAAKmmI,YAAYI,EAAW,GAAI,IAAKH,GACzCpnH,EAAIhf,KAAKmmI,YAAYI,EAAW,GAAI,IAAKH,GAGzCI,GAAwB1nH,EAAGA,EAAGE,EAAGA,EACrC9X,GAAOwgB,KAAK8+G,IAIpB,MAAOt/H,IA10CJg4H,aAAA7C,YAAsB,SActB6C,aAAAxiH,iBACHE,UAAU,GAjBlBsiH,aAAA7jH,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBxG+28BxBi3G,ewG928B0Bl1H,KAAKwW,OAA1BngB,GAAA6+H,aAAYA,EA+0CZ7+H,EAAA01G,wBAOT93F,MAAO,QACPwD,YAAa,aACba,iBAAkB,iBAClBI,kBAAmB,kBACnBF,qBAAsB,qBACtBO,iBAAkB,iBAIlBE,sBAAuB,qBACvBpB,qBAAsB,qBACtBC,4BACIoG,SAAU,WACVnG,SAAU,WACVI,OAAQ,UAEZsyF,OAAQ,SAIRQ,UAAW,YAQX50F,YAAa,aACbM,iBAAkB,iBAClBF,cAAe,cACfC,cAAe,cAyBfqJ,WAAY,YAOZksF,MAAO,QACPvB,WAAY,YACZvsF,MAAO,QAEP+tF,MAAO,QAEPF,WAAY,YAOZG,MAAO,QAQPr2F,KAAM,OAENykH,WAAY,YACZG,UAAW,WAOXjlH,QAAS,SAOTC,QAAS,SACTwD,iBAAkB,iBAClBC,iBAAkB,iBAClBQ,oBAAqB,oBACrBC,wBAAyB,wBACzBC,qBAAsB,qBACtBN,wBAAyB,wBACzBC,+BACI0E,SAAU,WACVnG,SAAU,WACVI,OAAQ,UAEZ2B,oBAAqB,oBAIrBC,yBAA0B,wBAgB1BkhH,2BAA4B,0BAgB5BC,gCAAiC,+BAYjCF,6BAA8B,4BAO9B7mH,SAAU,WACV2G,eAAgB,gBAChBO,oBAAqB,oBACrBC,wBAAyB,wBACzBC,qBAAsB,qBACtBC,oBAAqB,oBAIrBC,yBAA0B,wBAC1BR,wBAAyB,wBACzBC,+BACIgD,SAAU,WACVnG,SAAU,WACVI,OAAQ,UAKZyD,YAAa,aACbF,cAAe,cACfC,cAAe,cACfY,iBAAkB,iBAClBE,kBAAmB,kBACnBD,qBAAsB,qBACtBE,iBAAkB,iBAIlBC,sBAAuB,qBACvBR,qBAAsB,qBACtBC,4BACI8B,SAAU,WACVnG,SAAU,WACVI,OAAQ,UAQZhD,MAAO,QACPF,QAAS,SAQTC,QAAS,SAETN,OAAQ,QACRG,OAAQ,QAERkF,aAAc,aACdC,aAAc,aACdM,gBAAiB,gBACjBC,oBAAqB,oBACrBC,iBAAkB,iBAClBJ,oBAAqB,oBACrBC,2BACI2D,SAAU,WACVnG,SAAU,WACVI,OAAQ,UAEZwC,gBAAiB,gBACjBC,qBAAsB,oBAQtBpG,eAAgB,gBAOhBu2F,KAAM,OAENqa,WAAY,YACZK,gBAAiB,iBACjBC,oBAAqB,oBACrBC,iBAAkB,iBAClBJ,oBAAqB,oBACrBC,2BACItnG,SAAU,WACV/F,OAAQ,UAEZytG,gBAAiB,gBACjBC,qBAAsB,oBAEtB9uG,aAAc,cAOdC,iBAAkB,kBAClBnB,QAAS,UAOTP,EAAG,IAOHC,EAAG,MxGi35BD,SAASjf,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GyGpg9BjE5Z,EAAAzB,EAAyD,GACzDk6H,EAAAl6H,EAAsB,IACtB0b,EAAA1b,EAA+B,IAC/B+B,EAAA/B,EAAgC,GAChCkoB,EAAAloB,EAA6B,IAC7B44H,EAAA54H,EAA0C,KAwC1Cq/H,EAAA,SAAAt8H,GAAmC3B,EAAAi+H,cAAAt8H,EAmD/B,SAAAs8H,iBACIt8H,EAAAzC,KAAAT,MAEAA,KAAKymI,OAAS,EACdzmI,KAAKizB,MAAQ,GACbjzB,KAAK0mI,SAAW,GAChB1mI,KAAK2mI,SAAW,IAChB3mI,KAAK4mI,WACL5mI,KAAKg7H,mBAAoB,EACzBh7H,KAAK6mI,kBAAoB,GACzB7mI,KAAK8mI,eACDvyG,KAAMirG,cAAcC,cACpB3gH,EAAG,EACHE,EAAG,EACH6gH,OAAQ,EACRE,OAAQ,EACRr5H,MAAOxE,EAAAqD,gBAAgB6K,MACvBzJ,OAAQzE,EAAAqD,gBAAgB8K,OACxB2F,cACAF,eACA0qH,OAAQ,EACR2B,UAAW,EACXzB,QAAS,EACT0B,WAAY,EACZ7B,YAAa,EACbE,eAAgB,EAChBG,aAAc,EACdD,gBAAiB,EACjB7kF,MAAO,IACPukF,WAAY,GAEhBrgI,KAAK+mI,UAAY,SACjB/mI,KAAKgnI,eACLhnI,KAAKinI,cAAgB,KAErBjnI,KAAKknI,WAAa,SAClBlnI,KAAKmnI,gBACLnnI,KAAKonI,eAAiB,KAEtBpnI,KAAKqnI,cAAgB,SACrBrnI,KAAKsnI,mBACLtnI,KAAKunI,kBAAoB,KAEzBvnI,KAAKwnI,WAAa,SAClBxnI,KAAKynI,gBACLznI,KAAK0nI,eAAiB,KAyiB9B,MAhiBIlI,eAAA1+H,UAAAa,OAAA,SAAO6b,GAKH,GAJAxd,KAAKwd,KAAOA,EAEZta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAETA,EAAKU,aAAa66G,EAAAzhB,0BAA0BG,cAAe,CAC3D,GAAIkwB,GACAt/G,EAAAK,aAAaC,OAAOnL,EAAKe,aAAaw6G,EAAAzhB,0BAA0BG,cAEjD,OAAfkwB,GAA2C,MAApBA,EAAYnqH,MACnCxd,KAAK4nI,mBAAmBD,EAAYnqH,MAI5Cxd,KAAK4nI,mBAAmBpqH,IAGpBgiH,cAAA1+H,UAAA8mI,mBAAR,SAA2BpqH,GAEvB,IADA,GAAIuC,GAAgBvC,EAAKwC,kBACV,MAARD,GAAc,CACjB,OAAQA,EAAKnC,UACT,IAAK4hH,eAAcqI,UACf7nI,KAAK8nI,gBAAgB/nH,EACrB,MACJ,KAAKy/G,eAAcuI,SACf/nI,KAAKgoI,eAAejoH,EACpB,MACJ,KAAKy/G,eAAcyI,WACfjoI,KAAKkoI,iBAAiBnoH,EACtB,MACJ,KAAKy/G,eAAc2I,aACfnoI,KAAKooI,mBAAmBroH,EACxB,MACJ,KAAKy/G,eAAc6I,SACfroI,KAAKsoI,eAAevoH,EACpB,MACJ,KAAKy/G,eAAc+I,UACfvoI,KAAKwoI,gBAAgBzoH,EACrB,MACJ,KAAKy/G,eAAciJ,aACfzoI,KAAK0oI,mBAAmB3oH,EACxB,MACJ,KAAKy/G,eAAcmJ,UACf3oI,KAAK4oI,gBAAgB7oH,GAO7BA,EAAOA,EAAKK,qBAIpBvf,OAAAkD,eAAIy7H,cAAA1+H,UAAA,SzG658BCkD,IyG758BL,WACI,MAAOhE,MAAKymI,QzG+58BXviI,YAAY,EACZC,cAAc,IyG758BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,QzGg68BCkD,IyGh68BL,WACI,MAAOhE,MAAKizB,OzGk68BX/uB,YAAY,EACZC,cAAc,IyGh68BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,WzGm68BCkD,IyGn68BL,WACI,MAAOhE,MAAK0mI,UzGq68BXxiI,YAAY,EACZC,cAAc,IyGn68BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,WzGs68BCkD,IyGt68BL,WACI,MAAOhE,MAAK2mI,UzGw68BXziI,YAAY,EACZC,cAAc,IyGt68BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,UzGy68BCkD,IyGz68BL,WACI,MAAOhE,MAAK4mI,SzG268BX1iI,YAAY,EACZC,cAAc,IyGz68BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,oBzG468BCkD,IyG568BL,WACI,MAAOhE,MAAKg7H,mBzG868BX92H,YAAY,EACZC,cAAc,IyG568BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,oBzG+68BCkD,IyG/68BL,WACI,MAAOhE,MAAK6mI,mBzGi78BX3iI,YAAY,EACZC,cAAc,IyG/68BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,gBzGk78BCkD,IyGl78BL,WACI,MAAOhE,MAAK8mI,ezGo78BX5iI,YAAY,EACZC,cAAc,IyGl78BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,czGq78BCkD,IyGr78BL,WACI,MAAOhE,MAAKgnI,azGu78BX9iI,YAAY,EACZC,cAAc,IyGr78BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,ezGw78BCkD,IyGx78BL,WACI,MAAOhE,MAAKmnI,czG078BXjjI,YAAY,EACZC,cAAc,IyGx78BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,kBzG278BCkD,IyG378BL,WACI,MAAOhE,MAAKsnI,iBzG678BXpjI,YAAY,EACZC,cAAc,IyG378BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,ezG878BCkD,IyG978BL,WACI,MAAOhE,MAAKynI,czGg88BXvjI,YAAY,EACZC,cAAc,IyG978BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,YzGi88BCkD,IyGj88BL,WACI,MAAOhE,MAAK+mI,WzGm88BX7iI,YAAY,EACZC,cAAc,IyGj88BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,azGo88BCkD,IyGp88BL,WACI,MAAOhE,MAAKknI,YzGs88BXhjI,YAAY,EACZC,cAAc,IyGp88BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,gBzGu88BCkD,IyGv88BL,WACI,MAAOhE,MAAKqnI,ezGy88BXnjI,YAAY,EACZC,cAAc,IyGv88BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,azG088BCkD,IyG188BL,WACI,MAAOhE,MAAKwnI,YzG488BXtjI,YAAY,EACZC,cAAc,IyG188BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,gBzG688BCkD,IyG788BL,WACI,MAAOhE,MAAKinI,ezG+88BX/iI,YAAY,EACZC,cAAc,IyG788BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,iBzGg98BCkD,IyGh98BL,WACI,MAAOhE,MAAKonI,gBzGk98BXljI,YAAY,EACZC,cAAc,IyGh98BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,oBzGm98BCkD,IyGn98BL,WACI,MAAOhE,MAAKunI,mBzGq98BXrjI,YAAY,EACZC,cAAc,IyGn98BnBtD,OAAAkD,eAAIy7H,cAAA1+H,UAAA,iBzGs98BCkD,IyGt98BL,WACI,MAAOhE,MAAK0nI,gBzGw98BXxjI,YAAY,EACZC,cAAc,IyGt98BnBq7H,cAAA1+H,UAAA29H,kBAAA,WACI,GAAIoK,GAA6B3mI,EAAAqD,gBAAgBoN,IAAM3S,KAAKizB,MAASjzB,KAAKymI,OACtEqC,EAA4B9oI,KAAK2mI,SAAWzkI,EAAAqD,gBAAgBoN,IAAOk2H,CACvE,OAAOC,IAYHtJ,cAAA1+H,UAAAgnI,gBAAR,SAAwBtqH,GAChBA,EAAKU,aAAa6qH,EAAwBnxB,cAC1C53G,KAAKymI,OAAS/wH,SAAS8H,EAAKe,aAAawqH,EAAwBnxB,cAEjEp6F,EAAKU,aAAa6qH,EAAwBlxB,aAC1C73G,KAAKizB,MAAQvd,SAAS8H,EAAKe,aAAawqH,EAAwBlxB,cAShE2nB,cAAA1+H,UAAAknI,eAAR,SAAuBxqH,GACfA,EAAKU,aAAa6qH,EAAwBjxB,YAC1C93G,KAAK0mI,SAAWhxH,SAAS8H,EAAKe,aAAawqH,EAAwBjxB,YAEnEt6F,EAAKU,aAAa6qH,EAAwBhxB,YAC1C/3G,KAAK2mI,SAAWjxH,SAAS8H,EAAKe,aAAawqH,EAAwBhxB,YAGnE/3G,KAAK0mI,SAAW1mI,KAAK2mI,WACrB3mI,KAAK2mI,SAAW3mI,KAAK0mI,WASrBlH,cAAA1+H,UAAAonI,iBAAR,SAAyB1qH,GACrB,GAAIA,EAAKU,aAAa6qH,EAAwB/wB,iBAAkB,CAC5Dh4G,KAAK4mI,QAAUppH,EAAKe,aAAawqH,EAAwB/wB,iBAAiBp1F,MAAM,IAEhF,KAAK,GAAI7iB,GAAY,EAAGA,EAAIC,KAAK4mI,QAAQ76H,OAAQhM,IAE7CC,KAAK4mI,QAAQ7mI,GAAKC,KAAK4mI,QAAQ7mI,GAAK,WAEjCyd,GAAKU,aAAa6qH,EAAwB9wB,eACjDj4G,KAAK4mI,QAAUppH,EAAKe,aAAawqH,EAAwB9wB,aAAar1F,MAAM,KAG5EpF,GAAKU,aAAa6qH,EAAwBC,2BAC1ChpI,KAAKg7H,kBAAoBp5H,EAAAyI,YAAY8D,aACjCqP,EAAKe,aAAawqH,EAAwBC,2BAI9CxrH,EAAKU,aAAa6qH,EAAwBE,2BAC1CjpI,KAAK6mI,kBAAoBrpH,EAAKe,aAAawqH,EAAwBE,2BAUnEzJ,cAAA1+H,UAAAsnI,mBAAR,SAA2B5qH,GACvB,GAAIA,EAAKU,aAAa6qH,EAAwB7wB,WAE1C,OADAl4G,KAAK8mI,cAAcvyG,KAAO/W,EAAKe,aAAawqH,EAAwB7wB,WAC5Dl4G,KAAK8mI,cAAcvyG,MACvB,IAAKirG,eAAcC,cAEXjiH,EAAKU,aAAa6qH,EAAwB5wB,UAC1Cn4G,KAAK8mI,cAAchoH,EAAIR,WAAWd,EAAKe,aAAawqH,EAAwB5wB,SAC5En4G,KAAK8mI,cAAcjH,OAAS7/H,KAAK8mI,cAAchoH,GAE/CtB,EAAKU,aAAa6qH,EAAwB3wB,UAC1Cp4G,KAAK8mI,cAAc9nH,EAAIV,WAAWd,EAAKe,aAAawqH,EAAwB3wB,SAC5Ep4G,KAAK8mI,cAAc/G,OAAS//H,KAAK8mI,cAAc9nH,GAE/CxB,EAAKU,aAAa6qH,EAAwBG,gBAC1ClpI,KAAK8mI,cAAcjH,OAASvhH,WAAWd,EAAKe,aAAawqH,EAAwBG,gBAEjF1rH,EAAKU,aAAa6qH,EAAwBI,gBAC1CnpI,KAAK8mI,cAAc/G,OAASzhH,WAAWd,EAAKe,aAAawqH,EAAwBI,gBAEjF3rH,EAAKU,aAAa6qH,EAAwBxwB,cAC1Cv4G,KAAK8mI,cAAcpgI,MAAQ4X,WAAWd,EAAKe,aAAawqH,EAAwBxwB,cAEhF/6F,EAAKU,aAAa6qH,EAAwBvwB,eAC1Cx4G,KAAK8mI,cAAcngI,OAAS2X,WAAWd,EAAKe,aAAawqH,EAAwBvwB,eAEjFh7F,EAAKU,aAAa6qH,EAAwBK,oBAC1CppI,KAAK8mI,cAAc9wH,WAAasI,WAC5Bd,EAAKe,aAAawqH,EAAwBK,oBAG9C5rH,EAAKU,aAAa6qH,EAAwBM,qBAC1CrpI,KAAK8mI,cAAchxH,YAAcwI,WAC7Bd,EAAKe,aAAawqH,EAAwBM,oBAGlD,MACJ,KAAK7J,eAAcS,WACfjgI,KAAK8mI,cAAcpgI,MAAQ,EAC3B1G,KAAK8mI,cAAcngI,OAAS,EAExB6W,EAAKU,aAAa6qH,EAAwBxwB,cAC1Cv4G,KAAK8mI,cAAcpgI,MAAQ4X,WAAWd,EAAKe,aAAawqH,EAAwBxwB,cAEhF/6F,EAAKU,aAAa6qH,EAAwBvwB,eAC1Cx4G,KAAK8mI,cAAcngI,OAAS2X,WAAWd,EAAKe,aAAawqH,EAAwBvwB,cAGrF,MACJ,KAAKgnB,eAAc8J,YACf,KACJ,KAAK9J,eAAcU,SAEf,KACJ,KAAKV,eAAcW,YAef,GAdI3iH,EAAKU,aAAa6qH,EAAwB5wB,UAC1Cn4G,KAAK8mI,cAAchoH,EAAIR,WAAWd,EAAKe,aAAawqH,EAAwB5wB,SAC5En4G,KAAK8mI,cAAcjH,OAAS7/H,KAAK8mI,cAAchoH,GAE/CtB,EAAKU,aAAa6qH,EAAwB3wB,UAC1Cp4G,KAAK8mI,cAAc9nH,EAAIV,WAAWd,EAAKe,aAAawqH,EAAwB3wB,SAC5Ep4G,KAAK8mI,cAAc/G,OAAS//H,KAAK8mI,cAAc9nH,GAE/CxB,EAAKU,aAAa6qH,EAAwBG,gBAC1ClpI,KAAK8mI,cAAcjH,OAASvhH,WAAWd,EAAKe,aAAawqH,EAAwBG,gBAEjF1rH,EAAKU,aAAa6qH,EAAwBI,gBAC1CnpI,KAAK8mI,cAAc/G,OAASzhH,WAAWd,EAAKe,aAAawqH,EAAwBI,gBAEjF3rH,EAAKU,aAAa6qH,EAAwBpF,aAAc,CACxD,GAAInD,GAASliH,WAAWd,EAAKe,aAAawqH,EAAwBpF,aAElE3jI,MAAK8mI,cAActG,OAASA,EAC5BxgI,KAAK8mI,cAAcpG,QAAUF,EAC7BxgI,KAAK8mI,cAAc3E,UAAY3B,EAC/BxgI,KAAK8mI,cAAc1E,WAAa5B,EAmBpC,GAjBIhjH,EAAKU,aAAa6qH,EAAwBjF,mBAC1C9jI,KAAK8mI,cAAc3E,UAAY7jH,WAC3Bd,EAAKe,aAAawqH,EAAwBjF,kBAE9C9jI,KAAK8mI,cAAc1E,WAAapiI,KAAK8mI,cAAc3E,WAEnD3kH,EAAKU,aAAa6qH,EAAwBQ,iBAC1CvpI,KAAK8mI,cAAcpG,QAAUpiH,WACzBd,EAAKe,aAAawqH,EAAwBQ,gBAE9CvpI,KAAK8mI,cAAc1E,WAAapiI,KAAK8mI,cAAcpG,SAEnDljH,EAAKU,aAAa6qH,EAAwBS,qBAC1CxpI,KAAK8mI,cAAc1E,WAAa9jH,WAC5Bd,EAAKe,aAAawqH,EAAwBS,qBAG9ChsH,EAAKU,aAAa6qH,EAAwBhF,mBAAoB,CAC9D,GAAIxD,GAAcjiH,WAAWd,EAAKe,aAAawqH,EAAwBhF,mBACvE/jI,MAAK8mI,cAAcvG,YAAcA,EACjCvgI,KAAK8mI,cAAclG,aAAeL,EAClCvgI,KAAK8mI,cAAcrG,eAAiBF,EACpCvgI,KAAK8mI,cAAcnG,gBAAkBJ,EAmBzC,GAjBI/iH,EAAKU,aAAa6qH,EAAwBU,yBAC1CzpI,KAAK8mI,cAAcrG,eAAiBniH,WAChCd,EAAKe,aAAawqH,EAAwBU,wBAE9CzpI,KAAK8mI,cAAcnG,gBAAkB3gI,KAAK8mI,cAAcrG,gBAExDjjH,EAAKU,aAAa6qH,EAAwBW,uBAC1C1pI,KAAK8mI,cAAclG,aAAetiH,WAC9Bd,EAAKe,aAAawqH,EAAwBW,sBAE9C1pI,KAAK8mI,cAAcnG,gBAAkB3gI,KAAK8mI,cAAclG,cAExDpjH,EAAKU,aAAa6qH,EAAwBY,2BAC1C3pI,KAAK8mI,cAAcnG,gBAAkBriH,WACjCd,EAAKe,aAAawqH,EAAwBY,2BAG9CnsH,EAAKU,aAAa6qH,EAAwBa,kBAAmB,CAC7D,GAAIvJ,GAAa/hH,WAAWd,EAAKe,aAAawqH,EAAwBa,kBACtE5pI,MAAK8mI,cAAczG,WAAaA,EAEpC,GAAI7iH,EAAKU,aAAa6qH,EAAwB/E,YAAa,CACvD,GAAIloF,GAAQx9B,WAAWd,EAAKe,aAAawqH,EAAwB/E,YACjEhkI,MAAK8mI,cAAchrF,MAAQA,KAqBvC0jF,cAAA1+H,UAAAwnI,eAAR,SAAuB9qH,GACfA,EAAKU,aAAa6qH,EAAwBc,aAC1C7pI,KAAK+mI,UAAYvpH,EAAKe,aAAawqH,EAAwBc,YAE3DrsH,EAAKU,aAAa6qH,EAAwBe,kBAC1C9pI,KAAKinI,cAAgBrlI,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAawqH,EAAwBe,iBAG1F,KADA,GAAI/pH,GAAgBvC,EAAKwC,kBACV,MAARD,GAAc,CACjB,GAAIA,EAAKnC,WAAa4hH,cAAcuK,UAAW,CAC3C,GAAIl/B,IAA+B/rF,EAAG,KAAME,EAAG,KAAM6iH,QAAS,KAAME,QAAS,KAAMD,UAAU,EACzF/hH,GAAK7B,aAAa6qH,EAAwB5wB,QAC1CtN,EAAK/rF,EAAIR,WAAWyB,EAAKxB,aAAawqH,EAAwB5wB,SAE9DtN,EAAK/rF,EAAI,EAETiB,EAAK7B,aAAa6qH,EAAwB3wB,QAC1CvN,EAAK7rF,EAAIV,WAAWyB,EAAKxB,aAAawqH,EAAwB3wB,SAE9DvN,EAAK7rF,EAAI,EAETe,EAAK7B,aAAa6qH,EAAwB1wB,iBAC1CxN,EAAKg3B,QAAUvjH,WAAWyB,EAAKxB,aAAawqH,EAAwB1wB,iBAEpEt4F,EAAK7B,aAAa6qH,EAAwBzwB,iBAC1CzN,EAAKk3B,QAAUzjH,WAAWyB,EAAKxB,aAAawqH,EAAwBzwB,iBAEpEv4F,EAAK7B,aAAa6qH,EAAwBiB,iBAC1Cn/B,EAAKi3B,SAAWlgI,EAAAyI,YAAY8D,aAAa4R,EAAKxB,aAAawqH,EAAwBiB,iBAEvFhqI,KAAKgnI,YAAYt/G,KAAKmjF,GAE1B9qF,EAAOA,EAAKK,qBAcZo/G,cAAA1+H,UAAA0nI,gBAAR,SAAwBhrH,GAChBA,EAAKU,aAAa6qH,EAAwBc,aAC1C7pI,KAAKknI,WAAa1pH,EAAKe,aAAawqH,EAAwBc,YAE5DrsH,EAAKU,aAAa6qH,EAAwBe,kBAC1C9pI,KAAKonI,eAAiBxlI,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAawqH,EAAwBe,iBAG3F,KADA,GAAI/pH,GAAgBvC,EAAKwC,kBACV,MAARD,GAAc,CACjB,GAAIA,EAAKnC,WAAa4hH,cAAcuK,UAAW,CAC3C,GAAIE,IACAnrH,EAAG,KACHE,EAAG,KACH6iH,QAAS,KACTE,QAAS,KACTD,UAAU,EAGd,IAAI/hH,EAAK7B,aAAa6qH,EAAwBtwB,aAAc,CACxD,GAAIohB,GAAMj4H,EAAAogB,WAAWC,YAAYlC,EAAKxB,aAAawqH,EAAwBtwB,aACvEohB,GAAI9tH,OAAS,GACbk+H,EAAYnrH,GAAK+6G,EAAI,GAAKA,EAAI,IAAM,EAAIA,EAAI,GAC5CoQ,EAAYpI,QAAUhI,EAAI,GAAKA,EAAI,IAEnCoQ,EAAYnrH,EAAI+6G,EAAI,GAGxB95G,EAAK7B,aAAa6qH,EAAwBrwB,cAC1CuxB,EAAYnrH,EAAIR,WAAWyB,EAAKxB,aAAawqH,EAAwBrwB,cAErE34F,EAAK7B,aAAa6qH,EAAwBmB,qBAC1CD,EAAYpI,QAAUvjH,WAAWyB,EAAKxB,aAAawqH,EAAwBmB,qBAG3EnqH,EAAK7B,aAAa6qH,EAAwB5wB,UAC1C8xB,EAAYnrH,EAAIR,WAAWyB,EAAKxB,aAAawqH,EAAwB5wB,UAErEp4F,EAAK7B,aAAa6qH,EAAwB1wB,iBAC1C4xB,EAAYpI,QAAUvjH,WAAWyB,EAAKxB,aAAawqH,EAAwB1wB,iBAG3Et4F,EAAK7B,aAAa6qH,EAAwB3wB,UAC1C6xB,EAAYjrH,EAAIV,WAAWyB,EAAKxB,aAAawqH,EAAwB3wB,UAErEr4F,EAAK7B,aAAa6qH,EAAwBzwB,iBAC1C2xB,EAAYlI,QAAUzjH,WAAWyB,EAAKxB,aAAawqH,EAAwBzwB,iBAG3Ev4F,EAAK7B,aAAa6qH,EAAwBiB,iBAC1CC,EAAYnI,SAAWlgI,EAAAyI,YAAY8D,aAC/B4R,EAAKxB,aAAawqH,EAAwBiB,iBAIlDhqI,KAAKmnI,aAAaz/G,KAAKuiH,GAE3BlqH,EAAOA,EAAKK,qBAcZo/G,cAAA1+H,UAAA4nI,mBAAR,SAA2BlrH,GACnBA,EAAKU,aAAa6qH,EAAwBc,aAC1C7pI,KAAKqnI,cAAgB7pH,EAAKe,aAAawqH,EAAwBc,YAE/DrsH,EAAKU,aAAa6qH,EAAwBe,kBAC1C9pI,KAAKunI,kBAAoB3lI,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAawqH,EAAwBe,iBAG9F,KADA,GAAI/pH,GAAgBvC,EAAKwC,kBACV,MAARD,GAAc,CACjB,GAAIA,EAAKnC,WAAa4hH,cAAcuK,UAAW,CAC3C,GAAIE,IAAsCr9H,MAAO,KAAMm2H,YAAa,KAAMjB,UAAU,EACpF,IAAI/hH,EAAK7B,aAAa6qH,EAAwBtwB,aAAc,CACxD,GAAIohB,GAAMj4H,EAAAogB,WAAWC,YAAYlC,EAAKxB,aAAawqH,EAAwBtwB,aACvEohB,GAAI9tH,OAAS,GACbk+H,EAAYr9H,OAASitH,EAAI,GAAKA,EAAI,IAAM,EAAIA,EAAI,GAChDoQ,EAAYlH,YAAclJ,EAAI,GAAKA,EAAI,IAEvCoQ,EAAYr9H,MAAQitH,EAAI,GAG5B95G,EAAK7B,aAAa6qH,EAAwBrwB,cAC1CuxB,EAAYr9H,MAAQ0R,WAAWyB,EAAKxB,aAAawqH,EAAwBrwB,cAEzE34F,EAAK7B,aAAa6qH,EAAwBmB,qBAC1CD,EAAYlH,YAAczkH,WAAWyB,EAAKxB,aAAawqH,EAAwBmB,qBAE/EnqH,EAAK7B,aAAa6qH,EAAwBiB,iBAC1CC,EAAYnI,SAAWlgI,EAAAyI,YAAY8D,aAC/B4R,EAAKxB,aAAawqH,EAAwBiB,iBAIlDhqI,KAAKsnI,gBAAgB5/G,KAAKuiH,GAE9BlqH,EAAOA,EAAKK,qBAYZo/G,cAAA1+H,UAAA8nI,gBAAR,SAAwBprH,GAChBA,EAAKU,aAAa6qH,EAAwBc,aAC1C7pI,KAAKwnI,WAAahqH,EAAKe,aAAawqH,EAAwBc,YAE5DrsH,EAAKU,aAAa6qH,EAAwBe,kBAC1C9pI,KAAK0nI,eAAiB9lI,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAawqH,EAAwBe,iBAG3F,KADA,GAAI/pH,GAAgBvC,EAAKwC,kBACV,MAARD,GAAc,CACjB,GAAIA,EAAKnC,WAAa4hH,cAAcuK,UAAW,CAC3C,GAAIE,IAAsCr9H,MAAO,KAAMm2H,YAAa,KAAMjB,UAAU,EAChF/hH,GAAK7B,aAAa6qH,EAAwBrwB,cAC1CuxB,EAAYr9H,MAAQ0R,WAAWyB,EAAKxB,aAAawqH,EAAwBrwB,cAEzE34F,EAAK7B,aAAa6qH,EAAwBmB,qBAC1CD,EAAYlH,YAAczkH,WAAWyB,EAAKxB,aAAawqH,EAAwBmB,qBAE/EnqH,EAAK7B,aAAa6qH,EAAwBiB,iBAC1CC,EAAYnI,SAAWlgI,EAAAyI,YAAY8D,aAC/B4R,EAAKxB,aAAawqH,EAAwBiB,iBAGlDhqI,KAAKynI,aAAa//G,KAAKuiH,GAE3BlqH,EAAOA,EAAKK,qBApoBbo/G,cAAA2K,gBAA0B,GAG1B3K,cAAAC,cAAwB,YACxBD,cAAAU,SAAmB,OACnBV,cAAAW,YAAsB,UACtBX,cAAAS,WAAqB,SACrBT,cAAA8J,YAAsB,UAEtB9J,cAAAqI,UAAoB,QACpBrI,cAAAuI,SAAmB,OACnBvI,cAAAyI,WAAqB,SACrBzI,cAAA2I,aAAuB,WACvB3I,cAAA6I,SAAmB,OACnB7I,cAAA+I,UAAoB,QACpB/I,cAAAiJ,aAAuB,WACvBjJ,cAAAmJ,UAAoB,QACpBnJ,cAAAuK,UAAoB,QArB/BvK,cAAAnkH,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe6C,QzG0g+BxB20G,gByGxg+B2BnF,EAAAxvG,MAAtBxqB,GAAAm/H,cAAaA,CA2oB1B,IAAMuJ,IACFnxB,WAAY,QACZC,UAAW,OACXC,SAAU,MACVC,SAAU,MACVC,gBAAiB,YACjBC,YAAa,SACbC,UAAW,OACXC,OAAQ,IACRC,OAAQ,IACR4xB,cAAe,WACfd,aAAc,SACdC,aAAc,SACdxF,YAAa,SACbG,gBAAiB,YACjByF,cAAe,UACfC,kBAAmB,aACnBzF,kBAAmB,cACnB0F,sBAAuB,iBACvBC,oBAAqB,eACrBC,wBAAyB,kBACzB3F,WAAY,QACZ4F,iBAAkB,aAClBvxB,cAAe,UACfC,cAAe,UACf4xB,kBAAmB,cACnB3xB,WAAY,QACZC,YAAa,SACb4wB,iBAAkB,aAClBC,kBAAmB,cACnB5wB,YAAa,SACbC,WAAY,QACZswB,wBAAyB,mBACzBC,wBAAyB,mBAEzBY,UAAW,OACXC,eAAgB,WAChBM,mBAAoB,iBzGs48BlB,SAAS9pI,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G0G/m+BjE5Z,EAAAzB,EAA4C,GAC5CktH,EAAAltH,EAAiC,IAEjCg3H,EAAAh3H,EAAwB,IACxBs4F,EAAAt4F,EAA8B,IAC9B0b,EAAA1b,EAA+B,IAS/B2zH,EAAA,SAAA5wH,GAAsC3B,EAAAuyH,iBAAA5wH,EAIlC,SAAA4wH,oBACI5wH,EAAAzC,KAAAT,MAEAA,KAAK6zH,aAsEb,MA7DIC,kBAAAhzH,UAAA2c,aAAA,SAAaD,GAST,GARAta,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,GAQfA,EAAKU,aAAa,WAElB,IAAK,GADDk5G,GAAyB55G,EAAKe,aAAa,WAAWqE,MAAM,KACvD7iB,EAAY,EAAGA,EAAIq3H,EAAQrrH,OAAQhM,IAAK,CAC7C,GAAI0lD,GAAkBgzC,EAAAO,cAAcvB,eAAe2/B,EAAQr3H,GAC7C,OAAV0lD,GACAzlD,KAAKq3H,YAAY5xE,GAK7B,GAAmB,MAAfzlD,KAAK2nG,OACL,IAAK,GAAIviG,KAAOpF,MAAK2nG,OACb3nG,KAAK2nG,OAAOviG,YAAgB+xH,GAAAG,SAC5Bt3H,KAAK6zH,UAAUnsG,KAAK1nB,KAAK2nG,OAAOviG,KAYhD0uH,iBAAAhzH,UAAAu2H,YAAA,SAAY75G,GAOJA,EAAKU,aAAa,gBAClBle,KAAKy3H,YAAc71H,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAa,iBASpEu1G,iBAAAhzH,UAAAy5D,MAAA,WACIv6D,KAAK2f,SAAU,GAGnBm0G,iBAAAhzH,UAAAyrH,OAAA,WACIvsH,KAAK2f,SAAU,CACf,KAAK,GAAI5f,GAAY,EAAGA,EAAIC,KAAK6zH,UAAU9nH,OAAQhM,IAC/CC,KAAK6zH,UAAU9zH,GAAGg3H,SAASI,EAAAG,QAAQkB,aA3E/C1E,iBAAAz4G,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB1Gkp+BxB6rG,mB0Gjp+B8BzG,EAAA0B,iBAAzB1uH,GAAAyzH,iBAAgBA,G1Gyp+BvB,SAASxzH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G2Gnr+BjE5Z,EAAAzB,EAAwC,GACxCktH,EAAAltH,EAAiC,IACjCkqI,EAAAlqI,EAAuB,KAEvBkoB,EAAAloB,EAA6B,IAC7Bs4F,EAAAt4F,EAA8B,IAC9B0b,EAAA1b,EAA+B,IAC/B+B,EAAA/B,EAAgC,GAQhC6zH,EAAA,SAAA9wH,GAA6B3B,EAAAyyH,QAAA9wH,EAMzB,SAAA8wH,WACI9wH,EAAAzC,KAAAT,MAEAA,KAAKimG,WACLjmG,KAAKsqI,eAgOb,MAvNItW,SAAAlzH,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,EAEb,IAAI45G,EAYJ,IAJI55G,EAAKU,aAAa,aAClBk5G,EAAU55G,EAAKe,aAAa,WAAWqE,MAAM,MAG9B,MAAf5iB,KAAK2nG,OACL,IAAK,GAAIviG,KAAOpF,MAAK2nG,OACjB,GAAI3nG,KAAK2nG,OAAOviG,YAAgBilI,GAAAE,OAAQ,CACpC,GAAe,MAAXnT,EACA,IAAK,GAAIr3H,GAAY,EAAGA,EAAIq3H,EAAQrrH,OAAQhM,IACxCC,KAAK2nG,OAAOviG,GAAKiyH,YAAY5+B,EAAAO,cAAcvB,eAAe2/B,EAAQr3H,IAG1EC,MAAKimG,QAAQv+E,KAAK1nB,KAAK2nG,OAAOviG,IAKtB,MAAhBpF,KAAKimG,SACLjmG,KAAKwqI,oBAOTxqI,KAAKmd,iBAELnd,KAAK2f,SAAU,EAEf3f,KAAKyqI,oBASTzW,QAAAlzH,UAAA0pI,kBAAA,WAKI,IAAK,GAAIzqI,GAAY,EAAGA,GAAKC,KAAKimG,QAAQl6F,OAAQhM,IAC9C,GAAIC,KAAKimG,QAAQlmG,EAAI,GAAGs5H,YAAa,CACjC,GAAIqR,GAAW,OACXC,EAA+B,KAC/BC,EAA2B,IAG3B5qI,MAAKimG,QAAQlmG,EAAI,GAAGw5H,QAAQ8Q,EAAAE,OAAOM,cACnCH,EAAc1qI,KAAKimG,QAAQlmG,EAAI,GAAGy5H,QAAQ6Q,EAAAE,OAAOM,cAE7C7qI,KAAKimG,QAAQlmG,EAAI,GAAGw5H,QAAQ8Q,EAAAE,OAAOO,UACnCJ,EAAc1qI,KAAKimG,QAAQlmG,EAAI,GAAGy5H,QAAQ6Q,EAAAE,OAAOO,UAE7C9qI,KAAKimG,QAAQlmG,EAAI,GAAGw5H,QAAQ8Q,EAAAE,OAAOvS,cACnC0S,EAAc1qI,KAAKimG,QAAQlmG,EAAI,GAAGy5H,QAAQ6Q,EAAAE,OAAOvS,aAS7D2S,EAAiB3qI,KAAK+qI,wBAAwBL,GAY1C1qI,KAAKimG,QAAQlmG,EAAI,GAAGw5H,QAAQ8Q,EAAAE,OAAOO,YACnCJ,EAAc1qI,KAAKimG,QAAQlmG,EAAI,GAAGy5H,QAAQ6Q,EAAAE,OAAOO,WAGrDF,EAAa5qI,KAAK+qI,wBAAwBL,EAS1C,IAAI9+G,KAEkB,OAAlB++G,IACA/+G,EAAOy+G,EAAAE,OAAOM,cAAgBF,GAGhB,MAAdC,EACAh/G,EAAOy+G,EAAAE,OAAOO,UAAYF,EAEJ,MAAlBD,IACA/+G,EAAOy+G,EAAAE,OAAOO,UAAYH,GAIpB,MAAV/+G,IACAA,EAAe,OAAI5rB,KAAKimG,QAAQlmG,EAAI,GAAGwhD,OACvCvhD,KAAKsqI,YAAY5iH,KAAKkE,MAY9BooG,QAAAlzH,UAAAiqI,wBAAR,SAAgCL,GAC5B,GAAmB,MAAfA,EACA,GAAIA,EAAY1qH,kBAAkB9B,aAAa,UAW3C,GAAgG,MAA5EmK,EAAAK,aAAaC,OAAO+hH,EAAY1qH,kBAAkBzB,aAAa,WAItE,MADD8J,EAAAK,aAAaC,OAAO+hH,EAAY1qH,kBAAkBzB,aAAa,UAAmB,UAGtF,MAAOrc,GAAAqD,gBAAgBuJ,uBAEfuZ,EAAAK,aAAaC,OAAO+hH,EAAY1qH,kBAAkBzB,aAAa,UAAmB,UAClF,YAIb,KAAImsH,EAAY1qH,kBAAkB9B,aAAa,aAM/C,MAAIwsH,GAAY1qH,kBAAkB9B,aAAa,SAC3Chc,EAAAqD,gBAAgBuJ,uBAAuB47H,EAAY1qH,kBAAkBzB,aAAa,UAElF,IARP,IAA+D,MAA3DmsH,EAAY1qH,kBAAkBzB,aAAa,aAC3C,MAAOrc,GAAAqD,gBAAgBuJ,uBACnB47H,EAAY1qH,kBAAkBzB,aAAa,cAS3D,MAAO,OAWDy1G,QAAAlzH,UAAA2pI,iBAAV,WACIzqI,KAAKgrI,aAEL,KAAK,GAAIjrI,GAAI,EAAGA,EAAIC,KAAKimG,QAAQl6F,OAAQhM,IACrCC,KAAKgrI,WAAWtjH,QAGpB1nB,MAAKirI,gBAAkB,GAAI5d,GAAA0B,iBAC3B/uH,KAAKirI,gBAAgBttH,KAAO,mBAGzBq2G,QAAAlzH,UAAAoqI,UAAP,SAAiB3qI,EAAY03H,GACzB,GAAIxyB,EAaJ,OAXmC,KAA/BzlG,KAAKgrI,WAAWzqI,GAAIwL,QACpB05F,EAASzlG,KAAKimG,QAAQ1lG,GAAIwc,QAC1B0oF,EAAO9nF,KAAO,SAAWpd,EACzBklG,EAAOllG,GAAKA,GAEZklG,EAASzlG,KAAKgrI,WAAWzqI,GAAIuhD,MAGjC2jD,EAAO9lF,SAAU,EACjB8lF,EAAOsxB,SAASkB,GAETxyB,GAGJuuB,QAAAlzH,UAAAqqI,aAAP,SAAoB1lC,GAChBA,EAAO9lF,SAAU,EACjB8lF,EAAOsxB,SAASsT,EAAAE,OAAOa,WAEvBprI,KAAKirI,gBAAgBn5H,SAAS2zF,GAE9BzlG,KAAKgrI,WAAWvlC,EAAOllG,IAAImnB,KAAK+9E,IAzOxCuuB,QAAA34G,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB3G80+BxB+rG,U2G70+BqB3G,EAAA0B,iBAAhB1uH,GAAA2zH,QAAOA,G3Gq1+Bd,SAAS1zH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G4Gh3+BjE5Z,EAAAzB,EAAgC,GAChCmzH,EAAAnzH,EAA8B,IAC9B0b,EAAA1b,EAA+B,IAC/B4b,EAAA5b,EAA2B,IAS3BoqI,EAAA,SAAArnI,GAA4B3B,EAAAgpI,OAAArnI,EAgCxB,SAAAqnI,UACIrnI,EAAAzC,KAAAT,MARJA,KAAAuhD,OAAiB,EAWbvhD,KAAKqrI,QAAU,EACfrrI,KAAKsrI,QAAU,EAEftrI,KAAKg5H,QAAS,EAEdh5H,KAAKs/H,YAAa,EAClBt/H,KAAKO,MAELP,KAAKurI,aAAc,EAsF3B,MA7EIhB,QAAAzpI,UAAAa,OAAA,SAAO6b,GAOHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKqrI,QAAUtvH,EAAA+B,WAAWC,qBAAqBP,EAAMnd,EAAAmrI,iBAAiBC,SAAUzrI,KAAKqrI,SACrFrrI,KAAKsrI,QAAUvvH,EAAA+B,WAAWC,qBAAqBP,EAAMnd,EAAAmrI,iBAAiBE,SAAU1rI,KAAKsrI,SAEjF9tH,EAAKU,aAAa7d,EAAAmrI,iBAAiBG,UACnC3rI,KAAKqrI,QAAU/sH,WAAWd,EAAKe,aAAale,EAAAmrI,iBAAiBG,SAC7D3rI,KAAKsrI,QAAUhtH,WAAWd,EAAKe,aAAale,EAAAmrI,iBAAiBG,UAGjE3rI,KAAKuhD,OAASxlC,EAAA+B,WAAWC,qBAAqBP,EAAMnd,EAAAmrI,iBAAiBjT,QAASv4H,KAAKuhD,QACnFvhD,KAAKu0B,KAAOxY,EAAA+B,WAAW8D,sBAAsBpE,EAAMnd,EAAAmrI,iBAAiBI,KAAM5rI,KAAKu0B,MAE/Ev0B,KAAKurI,YAAcxvH,EAAA+B,WAAW8B,uBAAuBpC,EAAM,cAAexd,KAAKurI,cASnFhB,OAAAzpI,UAAAu2H,YAAA,SAAY75G,GAOJA,EAAKU,aAAa,iBAClBle,KAAK6rI,YAAcn2H,SAAS8H,EAAKe,aAAa,iBAS9Cf,EAAKU,aAAa,kBAClBle,KAAK8rI,aAAep2H,SAAS8H,EAAKe,aAAa,mBASvDgsH,OAAAzpI,UAAAic,MAAA,WACI,GAAI3T,GAAkB,GAAImhI,OAkB1B,OAhBAnhI,GAAQw/D,SAAW5oE,KAAK4oE,SAAS7rD,QACjC3T,EAAQ0I,SAAS1I,EAAQw/D,UAEzBx/D,EAAQsI,MAAQ1R,KAAK0R,MACrBtI,EAAQiiI,QAAUrrI,KAAKqrI,QACvBjiI,EAAQkiI,QAAUtrI,KAAKsrI,QACvBliI,EAAQyiI,YAAc7rI,KAAK6rI,YAC3BziI,EAAQ0iI,aAAe9rI,KAAK8rI,aAC5B1iI,EAAQuW,QAAU3f,KAAK2f,QACvBvW,UAAepJ,aACfoJ,EAAQsI,MAAQ1R,KAAK0R,MACrBtI,EAAQm4C,OAASvhD,KAAKuhD,OACtBn4C,EAAQmrB,KAAOv0B,KAAKu0B,KACpBnrB,EAAQmiI,YAAcvrI,KAAKurI,YAE3BniI,EAAQiU,eACDjU,GA9HJmhI,OAAAM,aAAuB,WACvBN,OAAAO,SAAmB,OAEnBP,OAAAa,UAAoB,QACpBb,OAAAvS,WAAqB,SACrBuS,OAAAwB,SAAmB,OACnBxB,OAAA9R,UAAoB,QACpB8R,OAAAxS,QAAkB,MAClBwS,OAAA5R,UAAoB,QAEpB4R,OAAAyB,WAAqB,UACrBzB,OAAA0B,YAAsB,UACtB1B,OAAA2B,UAAoB,QAEpB3B,OAAA4B,WAAqB,SACrB5B,OAAA6B,gBAA0B,eAC1B7B,OAAA8B,gBAA0B,eAC1B9B,OAAA+B,WAAqB,SApBhC/B,OAAAlvH,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB5Gm7+BxBsiH,S4Gl7+BoBjX,EAAAmB,cAAfp0H,GAAAkqI,OAAMA,EAoINlqI,EAAAmrI,kBACTrjH,MAAO,QAOPsjH,SAAU,UAOVC,SAAU,UAOVC,OAAQ,SAORpT,QAAS,SAITqT,KAAM,S5G6x+BJ,SAAStrI,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G6G19+BjE5Z,EAAAzB,EAAyD,GACzD6B,EAAA7B,EAA8B,GAC9Bg3H,EAAAh3H,EAAwB,IAExB+2H,EAAA/2H,EAAoC,IACpCkqI,EAAAlqI,EAAuB,KAEvB0b,EAAA1b,EAA+B,IAC/Bs4F,EAAAt4F,EAA8B,IAC9BktH,EAAAltH,EAAiC,IACjCosI,EAAApsI,EAAgC,KAEhCyS,EAAAzS,EAA2E,GAC3EiC,EAAAjC,EAA0B,IAC1B2kE,EAAA3kE,EAA2B,IAC3BqC,EAAArC,EAA2B,GAC3BqsI,EAAArsI,EAAwC,KASxCi0H,EAAA,SAAAlxH,GAAiC3B,EAAA6yH,YAAAlxH,EAAjC,SAAAkxH,eAAiClxH,EAAA7B,MAAArB,KAAAmD,WAkuBjC,MArqBWixH,aAAAtzH,UAAAa,OAAP,SAAc6b,GAGV,GAFAta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAETA,EAAKU,aAAa7d,EAAAosI,sBAAsBC,SAGxC,IAAK,GAFDtV,GAAyB55G,EAAKe,aAAale,EAAAosI,sBAAsBC,SAAS9pH,MAAM,KAE3E7iB,EAAI,EAAGA,EAAIq3H,EAAQrrH,OAAQhM,IAChCC,KAAK2sI,UAAUl0C,EAAAO,cAAcvB,eAAe2/B,EAAQr3H,MAKtDq0H,YAAAtzH,UAAA6rI,UAAV,SAAoBnvH,GACZA,EAAKU,aAAa,eAClBle,KAAK4sI,UAAYl3H,SAAS8H,EAAKe,aAAa,eAG5Cf,EAAKU,aAAa,WAClBle,KAAK6sI,MAAQjrI,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAa,WAGtDf,EAAKU,aAAa,WAClBle,KAAK8sI,MAAQlrI,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAa,WAGtDf,EAAKU,aAAa,wBAClBle,KAAK+sI,YAAcr3H,SAAS8H,EAAKe,aAAa,wBAG9Cf,EAAKU,aAAa,iBAClBle,KAAK6rI,YAAcn2H,SAAS8H,EAAKe,aAAa,iBAG9Cf,EAAKU,aAAa,kBAClBle,KAAK8rI,aAAep2H,SAAS8H,EAAKe,aAAa,kBAG/Cf,EAAKU,aAAa,qBAClBle,KAAKgtI,YAAcprI,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAa,qBAG5Df,EAAKU,aAAa,oBAClBle,KAAKitI,eAAiBzvH,EAAKe,aAAa,kBAAkBqE,MAAM,OAIjEwxG,YAAAtzH,UAAA+C,WAAP,SACIoiG,EACAinC,EACAC,EACAC,GAEAptI,KAAKqtI,cACLrtI,KAAKijG,cAAcgD,EAASknC,EAAuBC,GACnDptI,KAAKstI,eAAeJ,GACpBltI,KAAK4hG,oBAOFwyB,YAAAtzH,UAAA80H,cAAP,SAAqB2X,EAA4CC,GAC7DxtI,KAAKytI,aAAeF,CAEpB,KAAK,GAAIxtI,GAAI,EAAGA,EAAIwtI,EAAUC,GAAWvnC,QAAQl6F,OAAQhM,IACrDC,KAAK0tI,oBAAoBF,EAAWztI,EAIxC,KAAK,GAAIA,GAAIwtI,EAAUC,GAAWvnC,QAAQl6F,OAAS,EAAGhM,GAAK,EAAGA,IAC1DC,KAAK2tI,iBAAiBH,EAAWztI,IAIlCq0H,YAAAtzH,UAAAs1H,YAAP,SAAmBmX,GACfvtI,KAAKytI,aAAeF,CAEpB,KAAK,GAAIxtI,GAAI,EAAGA,EAAIwtI,EAAUxhI,OAAQhM,IAClC,IAAK,GAAIsjC,GAAI,EAAGA,EAAIkqG,EAAUxtI,GAAGkmG,QAAQl6F,OAAQs3B,IAC7CrjC,KAAK0tI,oBAAoB3tI,EAAGsjC,EAIpC,KAAK,GAAItjC,GAAI,EAAGA,EAAIwtI,EAAUxhI,OAAQhM,IAElC,IAAK,GAAIsjC,GAAIkqG,EAAUxtI,GAAGkmG,QAAQl6F,OAAS,EAAGs3B,GAAK,EAAGA,IAClDrjC,KAAK2tI,iBAAiB5tI,EAAGsjC,IAS9B+wF,YAAAtzH,UAAA+/D,SAAP,SAAgB21D,EAAsCrmD,GAMlD,GALAnwE,KAAK4tI,YAAcpX;AACnBx2H,KAAK6yF,WAAa1iB,EAElBnwE,KAAK6tI,kBAEO,MAARrX,GAAgBA,EAAKzqH,OAAS,EAAG,CACjC/L,KAAK8tI,uBAAyB,CAE9B,KAAK,GAAI/tI,GAAI,EAAGA,EAAIC,KAAKgtI,YAAYjhI,OAAQhM,IACrCC,KAAK6yF,WAAa/tB,EAAAqD,WAAWK,KAAOxoE,KAAKgtI,YAAYjtI,KACrDC,KAAK8tI,uBAAyB/tI,EAQtC,OAJKC,MAAK+tI,iBACN/tI,KAAKguI,gBAGFhuI,KAAK8tI,wBAA0B,EAItC,MAFA9tI,MAAKiuI,WAAW7Z,YAAY8Z,KAAMluI,KAAKmuI,wBAEhC,GAIL/Z,YAAAtzH,UAAAitI,cAAV,WACI,OAAO,GAGD3Z,YAAAtzH,UAAAktI,cAAV,WACIhuI,KAAKouI,mBAAmB/D,EAAAE,OAAO9R,WAAW,GAC1Cz4H,KAAKquI,oBAAoBlX,EAAAG,QAAQmB,UAEjC,KAAK,GAAI14H,GAAI,EAAGA,EAAIC,KAAK4tI,YAAY7hI,OAAQhM,IACzCC,KAAKsuI,mBAAmBvuI,EAAGsqI,EAAAE,OAAOxS,SAAS,GAC3C/3H,KAAKuuI,mBAAmBxuI,EAAGo3H,EAAAG,QAAQS,QAGvC/3H,MAAKwuI,kBAGCpa,YAAAtzH,UAAA2tI,gBAAV,WACIzuI,KAAKiX,KAAKm9G,YAAY4B,mBAEtBh2H,KAAK0uI,aAAe,EAEpB1uI,KAAK2uI,aAOFva,YAAAtzH,UAAAy1H,aAAP,SAAoBC,EAAsCrmD,GACtDnwE,KAAK4tI,YAAcpX,EACnBx2H,KAAK6yF,WAAa1iB,EAElBnwE,KAAK6tI,kBAEO,MAARrX,GAAgBA,EAAKzqH,OAAS,GAC9B/L,KAAK4uI,oBACL5uI,KAAK6uI,oBACL7uI,KAAK8uI,uBAEL9uI,KAAKiuI,WAAW7Z,YAAY8Z,KAAMluI,KAAKmuI,wBAIrC/Z,YAAAtzH,UAAA8tI,kBAAV,aAEUxa,YAAAtzH,UAAA+tI,kBAAV,WACI7uI,KAAKouI,mBAAmB/D,EAAAE,OAAO9R,WAAW,GAC1Cz4H,KAAKquI,oBAAoBlX,EAAAG,QAAQmB,UAEjC,KAAK,GAAI14H,GAAI,EAAGA,EAAIC,KAAK4tI,YAAY7hI,OAAQhM,IACzCC,KAAKsuI,mBAAmBvuI,EAAGsqI,EAAAE,OAAOxS,SAAS,GAC3C/3H,KAAKuuI,mBAAmBxuI,EAAGo3H,EAAAG,QAAQS,UAIjC3D,YAAAtzH,UAAAguI,oBAAV,WACI9uI,KAAK0uI,aAAe,EAEpB1uI,KAAK2uI,aAOCva,YAAAtzH,UAAA6tI,UAAV,WACI,GAAwB,MAApB3uI,KAAK4tI,YAAT,CAIA5tI,KAAKquI,oBAAoBlX,EAAAG,QAAQmB,UAEjC,KAAK,GAAI14H,GAAI,EAAGA,EAAIC,KAAK4tI,YAAY7hI,OAAQhM,IACzCC,KAAKuuI,mBAAmBxuI,EAAGo3H,EAAAG,QAAQU,WAGvCh4H,MAAKsuI,mBAAmBtuI,KAAK0uI,aAAcrE,EAAAE,OAAO5R,WAAW,GAC7D34H,KAAKuuI,mBAAmBvuI,KAAK0uI,aAAcvX,EAAAG,QAAQqB,WAEnD34H,KAAK0uI,cAAgB1uI,KAAK0uI,aAAe,GAAK1uI,KAAK4tI,YAAY7hI,OAE/D/L,KAAKiuI,WAAW7Z,YAAY2a,UAAW/uI,KAAKgvI,uBAGtC5a,YAAAtzH,UAAAkuI,kBAAV,WACI,MAAO,MAOJ5a,YAAAtzH,UAAAy5D,MAAP,SAAa00E,GACTjvI,KAAK6hG,YAEL7hG,KAAKouI,mBAAmBa,EAAkB5E,EAAAE,OAAOvS,WAAaqS,EAAAE,OAAOa,WAAW,GAEhFprI,KAAKquI,oBAAoBlX,EAAAG,QAAQU,YAE7BiX,GACAjvI,KAAKiuI,WAAW7Z,YAAY8Z,KAAMluI,KAAKmuI,uBAGvCnuI,KAAK4M,QACL5M,KAAK4M,MAAM+S,SAAU,EAGzB,IAAIuvH,GAAsBlvI,KAAK8tI,sBAG/B,OAFA9tI,MAAK8tI,0BAE6B,MAA9B9tI,KAAKmvI,sBACDnvI,KAAKovI,0BACLpvI,KAAK6tI,kBAEL7tI,KAAK4tI,YAAc,KACnB5tI,KAAK6yF,WAAa,MACX,IAEP7yF,KAAKqvI,gBAELrvI,KAAK4tI,YAAc,KACnB5tI,KAAK6yF,WAAa,KACXq8C,GAAuB,IAGlClvI,KAAK4tI,YAAc,KACnB5tI,KAAK6yF,WAAa,KACXq8C,GAAuB,IAQ5B9a,YAAAtzH,UAAAusI,YAAV,WACIrtI,KAAKsvI,YAAc,GAEnBtvI,KAAKi5H,MAAQrmH,EAAAa,iBAAiB,SAC9BzT,KAAKi5H,MAAMvlH,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKuvI,gBAAgB17H,KAAK7T,QAG7Do0H,YAAAtzH,UAAAmtI,WAAV,SAAqB9mI,EAAgB0R,GACjC7Y,KAAKsvI,YAAcnoI,EAEnBnH,KAAKi5H,MAAM9jH,MAAM0D,IAGXu7G,YAAAtzH,UAAA+gG,UAAV,WACsB,MAAd7hG,KAAKi5H,OACLj5H,KAAKi5H,MAAM/jH,QAIZk/G,YAAAtzH,UAAAm2H,WAAP,WACIj3H,KAAK6hG,YAEA7hG,KAAKovI,0BACNpvI,KAAKqvI,iBAIHjb,YAAAtzH,UAAAyuI,gBAAV,WAGI,OAFAvvI,KAAKi5H,MAAM/jH,OAEHlV,KAAKsvI,aACT,IAAKlb,aAAY8Z,KACbluI,KAAKwvI,MACL,MACJ,KAAKpb,aAAY2a,UACb/uI,KAAK2uI,cASPva,YAAAtzH,UAAAmiG,cAAV,SACIgD,EACAknC,EACAC,GAEAptI,KAAKimG,QAAUA,EAEc,MAAzBknC,EACAntI,KAAKmtI,sBAAwBA,GAE7BntI,KAAKmtI,sBAAwB,GAAI9f,GAAA0B,iBACjC/uH,KAAKmtI,sBAAsBxvH,KAAO,eAElC3d,KAAK8R,SAAS9R,KAAKmtI,wBAGC,MAApBC,EACAptI,KAAKotI,iBAAmBA,GAExBptI,KAAKotI,iBAAmB,GAAI/f,GAAA0B,iBAC5B/uH,KAAKotI,iBAAiBzvH,KAAO,UAE7B3d,KAAK8R,SAAS9R,KAAKotI,mBAGvBptI,KAAKkkG,iBAEL,KAAK,GAAInkG,GAAI,EAAGA,EAAIC,KAAK4sI,UAAW7sI,IAAK,CACrCC,KAAKkkG,eAAex8E,QAEpB,KAAK,GAAI2b,GAAI,EAAGA,EAAIrjC,KAAK+sI,YAAa1pG,IAClCrjC,KAAKkkG,eAAenkG,GAAG2nB,KAAK,QAK9B0sG,YAAAtzH,UAAA6sI,iBAAV,SAA2BH,EAAmBiC,GAC1C,GAAoD,OAAhDzvI,KAAKkkG,eAAespC,GAAWiC,GAAuB,CACtD,GAAMlvI,GAAKP,KAAKytI,aAAaD,GAAWvnC,QAAQwpC,GAE1ChqC,EAASzlG,KAAKimG,QAAQilC,UAAU3qI,EAAK,EAAG8pI,EAAAE,OAAOvS,WACrDvyB,GAAOrmF,SAASN,EAAI9e,KAAK6sI,MAAMW,GAAa/nC,EAAO4lC,QACnD5lC,EAAOrmF,SAASJ,EAAIhf,KAAK8sI,MAAMU,GAAaxtI,KAAK8rI,aAAe2D,EAAchqC,EAAO6lC,QAErFtrI,KAAKotI,iBAAiBt7H,SAAS2zF,GAE/BzlG,KAAKkkG,eAAespC,GAAWiC,GAAehqC,IAI5C2uB,YAAAtzH,UAAA4sI,oBAAV,SAA8BF,EAAmBiC,GACO,OAAhDzvI,KAAKkkG,eAAespC,GAAWiC,KAC/BzvI,KAAKimG,QAAQklC,aAAanrI,KAAKkkG,eAAespC,GAAWiC,IAEzDzvI,KAAKkkG,eAAespC,GAAWiC,GAAe,OAI5Crb,YAAAtzH,UAAA4uI,oBAAV,WAGI,IAAK,GAFCzX,GAAWoS,EAAAE,OAAOvS,WAEfj4H,EAAI,EAAGA,EAAIC,KAAKkkG,eAAen4F,OAAQhM,IAE5C,IAAK,GAAIsjC,GAAIrjC,KAAKkkG,eAAenkG,GAAGgM,OAAS,EAAGs3B,GAAK,EAAGA,IAAK,CACzD,GAAMoiE,GAASzlG,KAAKkkG,eAAenkG,GAAGsjC,EAEtC,IAAe,OAAXoiE,GAAmBzlG,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAG40F,GAAW,CAC7D,GAAM2X,GAAkBnqC,EAAOg0B,gBAE3BxB,KAAa2X,GAAmBA,EAAgBz1G,QAAQkwG,EAAAE,OAAOwB,gBAC/DtmC,EAAOsxB,SAASkB,GAGpBj4H,KAAKotI,iBAAiBt7H,SAAS2zF,MAMrC2uB,YAAAtzH,UAAAstI,mBAAV,SAA6BnW,EAAkB4X,GAC3C,IAAK,GAAI9vI,GAAI,EAAGA,EAAIC,KAAKkkG,eAAen4F,OAAQhM,IAE5C,IAAK,GAAIsjC,GAAIrjC,KAAKkkG,eAAenkG,GAAGgM,OAAS,EAAGs3B,GAAK,EAAGA,IAAK,CACzD,GAAMoiE,GAASzlG,KAAKkkG,eAAenkG,GAAGsjC,EAEvB,QAAXoiE,GAAmBzlG,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAG40F,KAClDxyB,EAAOsxB,SAASkB,GAEZ4X,EACA7vI,KAAKmtI,sBAAsBr7H,SAAS2zF,GAEpCzlG,KAAKotI,iBAAiBt7H,SAAS2zF,MAOzC2uB,YAAAtzH,UAAAwtI,mBAAV,SAA6BwB,EAAkB7X,EAAkB8X,GAC7D,GAAM5/D,GAAMnwE,KAAK4tI,YAAYkC,GACzB7pC,IAEJ,QAAQ91B,EAAI6/D,SACR,IAAKhuI,GAAAiD,cAAcC,KAAK+qI,WAAW3Y,QAC/BrxB,EAAUjmG,KAAKkwI,4BAA4BJ,EAAU7X,EACrD,MACJ,KAAKj2H,GAAAiD,cAAcC,KAAK+qI,WAAWE,QAC/BlqC,EAAUjmG,KAAKowI,4BAA4BN,EAAU7X,EACrD,MACJ,KAAKj2H,GAAAiD,cAAcC,KAAK+qI,WAAWI,IAC/BpqC,EAAUjmG,KAAKswI,wBAAwBR,EAAU7X,EACjD,MACJ,SACIhyB,EAAUjmG,KAAKuwI,2BAA2BT,EAAU7X,GAsB5D,MAlBI8X,IAAY/vI,KAAK4M,OAASq5F,EAAQl6F,OAAS,GAAKokE,EAAIlyC,OAAS,GAC7Dj+B,KAAK4M,MAAM+S,SAAU,EACrB3f,KAAK4M,MAAMwS,SAASN,EAAImnF,EAAQ,GAAG7mF,SAASN,EAAImnF,EAAQ,GAAGolC,QAC3DrrI,KAAK4M,MAAMwS,SAASJ,EAAIinF,EAAQ,GAAG7mF,SAASJ,EAAIinF,EAAQ,GAAGqlC,QAEvD9oI,EAAA+B,WAAWC,kBAAkB+I,UAAmC,MAAvBu3D,EAAAqD,WAAWgB,UACpDqjE,EAAAgE,wBAAwBC,OAAQ,EAChCzwI,KAAK4M,MAAMmwB,KAAKrnB,SAAS9T,EAAAyL,YAAY+7D,OAAO+G,EAAIlyC,OAAQ6mC,EAAAqD,WAAWgB,UAAUp7D,eAE7Ey+H,EAAAgE,wBAAwBC,OAAQ,EAChCzwI,KAAK4M,MAAMmwB,KAAKze,WAAWlc,EAAAqH,UAAUs1D,WAAW38D,EAAAqH,UAAUu1D,YAAamR,EAAIlyC,OAAOlwB,gBAGlF/N,KAAK4M,QACL5M,KAAK4M,MAAM+S,SAAU,GAItBsmF,GAGDmuB,YAAAtzH,UAAAovI,4BAAV,SAAsCJ,EAAkB7X,GACpD,GAAM9nD,GAAMnwE,KAAK4tI,YAAYkC,GACvB7pC,IAEN,IAAqB,MAAjBjmG,KAAKktI,SAML,IAAK,GALCtnI,GAAasxH,EAAAS,oBAAoBS,0BACnCjoD,EAAIkoD,UACJr4H,KAAKktI,SAASxV,mBAGT33H,EAAI,EAAGA,EAAI6F,EAAWmG,OAAQhM,IACnC,GAAoB,IAAhBowE,EAAIhwD,KAAKpgB,IAAYC,KAAK2vI,oBAAoB5vI,EAAG6F,EAAW7F,GAAIk4H,GAAW,CAC3E,GAAMxyB,GAASzlG,KAAKkkG,eAAenkG,GAAG6F,EAAW7F,GACjD0lG,GAAOsxB,SAASkB,GAEhBj4H,KAAKotI,iBAAiBt7H,SAAS2zF,GAE/BQ,EAAQv+E,KAAK+9E,GAKzB,MAAOQ,IAGDmuB,YAAAtzH,UAAAsvI,4BAAV,SAAsCN,EAAkB7X,GAIpD,IAAK,GAHC9nD,GAAMnwE,KAAK4tI,YAAYkC,GACvB7pC,KAEGlmG,EAAI,EAAGA,EAAIC,KAAK4sI,UAAW7sI,IAChC,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK+sI,YAAa1pG,IAClC,GAAiC,KAA5B8sC,EAAIhwD,KAAKpgB,GAAM,GAAKsjC,IAAarjC,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAG40F,GAAW,CAC5E,GAAMxyB,GAASzlG,KAAKkkG,eAAenkG,GAAGsjC,EACtCoiE,GAAOsxB,SAASkB,GAEhBj4H,KAAKotI,iBAAiBt7H,SAAS2zF,GAE/BQ,EAAQv+E,KAAK+9E,GAKzB,MAAOQ,IAGDmuB,YAAAtzH,UAAAwvI,wBAAV,SAAkCR,EAAkB7X,GAIhD,IAAK,GAHC9nD,GAAMnwE,KAAK4tI,YAAYkC,GACvB7pC,KAEGlmG,EAAI,EAAGA,EAAIC,KAAK4sI,UAAW7sI,IAChC,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK+sI,YAAa1pG,IAClC,GAAiC,KAA5B8sC,EAAIhwD,KAAKpgB,GAAM,GAAKsjC,IAAarjC,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAG40F,GAAW,CAC5E,GAAMxyB,GAASzlG,KAAKkkG,eAAenkG,GAAGsjC,EACtCoiE,GAAOsxB,SAASkB,GAEhBj4H,KAAKotI,iBAAiBt7H,SAAS2zF,GAE/BQ,EAAQv+E,KAAK+9E,GAKzB,MAAOQ,IAGDmuB,YAAAtzH,UAAAyvI,2BAAV,SAAqCT,EAAkB7X,GAEnD,UAGM7D,YAAAtzH,UAAA6uI,oBAAV,SAA8BnC,EAAmBiC,EAAqBxX,GAClE,OAAO,GAOD7D,YAAAtzH,UAAAwsI,eAAV,SAAyBJ,GACrBltI,KAAKktI,SAAWA,EAEhBltI,KAAKquI,oBAAoBlX,EAAAG,QAAQU,aAG3B5D,YAAAtzH,UAAAutI,oBAAV,SAA8BpW,GACL,MAAjBj4H,KAAKktI,UACLltI,KAAKktI,SAASnW,SAASkB,IAIrB7D,YAAAtzH,UAAAytI,mBAAV,SAA6BuB,EAAkB7X,GAC3C,GAAqB,MAAjBj4H,KAAKktI,SAAkB,CACvB,GAAM/8D,GAAMnwE,KAAK4tI,YAAYkC,EAEzB3/D,GAAI6/D,UAAYhuI,EAAAiD,cAAcC,KAAK+qI,WAAW3Y,UAC1CW,IAAad,EAAAG,QAAQqB,WAAyC,IAA5B34H,KAAK4tI,YAAY7hI,OACnD/L,KAAKktI,SAASnW,SAASI,EAAAG,QAAQoB,gBAAiBvoD,EAAIkoD,WAEpDr4H,KAAKktI,SAASnW,SAASkB,EAAU9nD,EAAIkoD,cAU3CjE,YAAAtzH,UAAA8gG,iBAAV,WACI5hG,KAAK0wI,oBAAsB,GAAIrjB,GAAA0B,iBAC/B/uH,KAAK0wI,oBAAoB/yH,KAAO,aAEhC3d,KAAK8R,SAAS9R,KAAK0wI,qBAEf1wI,KAAK2nG,OAAc,QACnB3nG,KAAK4M,MAAQ5M,KAAK2nG,OAAc,MAEhC3nG,KAAK0wI,oBAAoB5+H,SAAS9R,KAAK4M,QAG3C5M,KAAK2wI,aAEL,KAAK,GAAI5wI,GAAI,EAAGA,EAAIC,KAAKitI,eAAelhI,OAAQhM,IAC5C,GAAIC,KAAK2nG,OAAO3nG,KAAKitI,eAAeltI,IAAK,CACrC,GAAIo8H,GAAYn8H,KAAK2nG,OAAO3nG,KAAKitI,eAAeltI,GAChDo8H,GAAUx8G,SAAU,EACpBw8G,EAAUzoH,GAAG,WAAY1T,KAAK4wI,oBAAoB/8H,KAAK7T,OACvDm8H,EAAUzoH,GAAG64H,EAAAsE,gBAAgB5W,kBAAmBj6H,KAAK8wI,oBAAoBj9H,KAAK7T,OAC9Em8H,EAAUzoH,GAAG,sBAAuB1T,KAAK+wI,sBAAsBl9H,KAAK7T,OAEpEA,KAAK2wI,WAAWjpH,KAAKy0G,GAErBn8H,KAAK0wI,oBAAoB5+H,SAASqqH,GAI1Cn8H,KAAKmvI,sBAAwB,KAC7BnvI,KAAKovI,0BAA2B,GAG1Bhb,YAAAtzH,UAAA+sI,gBAAV,WACI7tI,KAAKmvI,sBAAwB,KAC7BnvI,KAAKovI,0BAA2B,CAEhC,KAAK,GAAIrvI,GAAI,EAAGA,EAAIC,KAAK2wI,WAAW5kI,OAAQhM,IAAK,CAC7C,GAAMo8H,GAAYn8H,KAAK2wI,WAAW5wI,EAClCo8H,GAAUx8G,SAAU,EACpBw8G,EAAUjnH,SAIRk/G,YAAAtzH,UAAA0tI,eAAV,WACIxuI,KAAKmvI,sBAAwBnvI,KAAKgxI,oBAClChxI,KAAKovI,0BAA2B,CAEhC,IAAMjT,GAAYn8H,KAAK2wI,WAAW3wI,KAAKmvI,sBACvChT,GAAUx8G,SAAU,EAEhBnd,EAAA+B,WAAWC,kBAAkB+I,UAAmC,MAAvBu3D,EAAAqD,WAAWgB,UACpDqjE,EAAAgE,wBAAwBC,OAAQ,EAChCtU,EAAUp/F,KAAKrnB,SAAS9T,EAAAyL,YAAY+7D,OAAOppE,KAAK6yF,WAAY/tB,EAAAqD,WAAWgB,UAAUp7D,eAEjFy+H,EAAAgE,wBAAwBC,OAAQ,EAChCtU,EAAUp/F,KAAK/8B,KAAK6yF,cAIlBuhC,YAAAtzH,UAAAuuI,cAAV,WACI,GAAkC,MAA9BrvI,KAAKmvI,sBAA+B,CACpC,GAAMhT,GAAYn8H,KAAK2wI,WAAW3wI,KAAKmvI,sBACvChT,GAAUx8G,SAAU,EAChBnd,EAAA+B,WAAWC,kBAAkB+I,UAAmC,MAAvBu3D,EAAAqD,WAAWgB,UACpDqjE,EAAAgE,wBAAwBC,OAAQ,EAChCtU,EAAU8U,UAAUv7H,SAAS9T,EAAAyL,YAAY+7D,OAAOppE,KAAK6yF,WAAY/tB,EAAAqD,WAAWgB,UAAUp7D,eAEtFy+H,EAAAgE,wBAAwBC,OAAQ,EAChCtU,EAAU8U,UAAUjxI,KAAK6yF,aAG7B7yF,KAAKmvI,sBAAwB,KAC7BnvI,KAAKovI,0BAA2B,IAI9Bhb,YAAAtzH,UAAAkwI,kBAAV,WACI,MAAOhxI,MAAK8tI,wBAGN1Z,YAAAtzH,UAAAiwI,sBAAV,WAEI/wI,KAAKiX,KAAKm9G,YAAY8B,4BAGhB9B,YAAAtzH,UAAA8vI,oBAAV,WACI5wI,KAAKovI,0BAA2B,EAEhCpvI,KAAKiX,KAAKm9G,YAAY0B,uBAGhB1B,YAAAtzH,UAAAgwI,oBAAV,WACI9wI,KAAKmvI,sBAAwB,KAE7BnvI,KAAKyuI,mBAOCra,YAAAtzH,UAAA0uI,KAAV,WACI,IAAK,GAAIhC,GAAY,EAAGA,EAAYxtI,KAAKkkG,eAAen4F,OAAQyhI,IAC5D,IAAK,GAAIiC,GAAc,EAAGA,EAAczvI,KAAKkkG,eAAespC,GAAWzhI,OAAQ0jI,IAAe,CAC1F,GAAMhqC,GAASzlG,KAAKkkG,eAAespC,GAAWiC,EAE1ChqC,GAAOg0B,mBAAqB4Q,EAAAE,OAAOvS,YACnCvyB,EAAO8zB,QAAQ8Q,EAAAE,OAAOwB,WACtBtmC,EAAOg0B,mBAAqB4Q,EAAAE,OAAOwB,UAEnCtmC,EAAOsxB,SAASsT,EAAAE,OAAOwB,UAKnC/rI,KAAKiuI,WAAW7Z,YAAY8Z,KAAMluI,KAAKkxI,iBAGjC9c,YAAAtzH,UAAAqtI,oBAAV,WACI,MAAO,IAGD/Z,YAAAtzH,UAAAowI,aAAV,WACI,MAAO,KAGD9c,YAAAtzH,UAAAqwI,2BAAV,WACI,MAAO,IA3tBY/c,YAAA0B,qBAA+B,4BAE/B1B,YAAA4B,kBAA4B,yBAE5B5B,YAAA8B,0BAAoC,iCAMjC9B,YAAA8Z,KAAe,OAEf9Z,YAAA2a,UAAoB,YAlBlD3a,YAAA/4G,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB7Gs8/BxBmsG,c6Gr8/ByB/G,EAAA0B,iBAApB1uH,GAAA+zH,YAAWA,EAouBX/zH,EAAAosI,uBAOTC,QAAS,Y7Gqu+BP,SAASpsI,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G8Gr//BjE5Z,EAAAzB,EAA6C,GAC7C8a,EAAA9a,EAA4B,IAC5BkoB,EAAAloB,EAA6B,IAE7BqsI,EAAArsI,EAAwC,KAExCyS,EAAAzS,EAA2E,GAC3E0b,EAAA1b,EAA+B,IAE/B0gF,EAAA1gF,EAAyB,IACzBixI,EAAAjxI,EAA+B,KAC/B2b,EAAA3b,EAAuB,IAavB0wI,EAAA,SAAA3tI,GAAqC3B,EAAAsvI,gBAAA3tI,EAiBjC,SAAA2tI,mBACI3tI,EAAAzC,KAAAT,MAEAA,KAAKqxI,cAAgB,EACrBrxI,KAAKsxI,OAAQ,EAEbtxI,KAAKoZ,OAASxG,EAAAa,iBAAiB,mBAC/BzT,KAAKoZ,OAAO1F,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK09E,QAAQ7pE,KAAK7T,OAE5DA,KAAKuxI,gBAAkB3+H,EAAAa,iBAAiB,kBACxCzT,KAAKuxI,gBAAgB79H,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKwxI,eAAe39H,KAAK7T,OAwepF,MArec6wI,iBAAA/vI,UAAA6b,gBAAV,SAA0B5X,GAGtB,GAFA/E,KAAKoZ,OAAOlE,OAEiB,MAAzBlV,KAAKyxI,UAAU9pC,OAAgB,CAC/B,IAAK,GAAIviG,KAAOpF,MAAKyxI,UAAU9pC,OACvB3nG,KAAKyxI,UAAU9pC,OAAO5mG,eAAeqE,KACjCpF,KAAKyxI,UAAU9pC,OAAOviG,YAAgB4E,MAAKie,eAC3CjoB,KAAKyxI,UAAU9pC,OAAOviG,GAAKoX,QAAQzX,GAEvC/E,KAAKyxI,UAAU9pC,OAAOviG,GAAO,KAIrCpF,MAAKyxI,UAAU9pC,OAAS,OAIhC9mG,OAAAkD,eAAI8sI,gBAAA/vI,UAAA,Y9Gm9/BCkD,I8Gh9/BL,WACI,MAAOhE,MAAK0xI,W9Gk9/BXr1H,I8Gt9/BL,SAAazP,GACT5M,KAAK0xI,UAAY9kI,G9Gw9/BhB1I,YAAY,EACZC,cAAc,I8Gp9/BnBtD,OAAAkD,eAAI8sI,gBAAA/vI,UAAA,gB9Gu9/BCkD,I8Gp9/BL,WACI,MAAOhE,MAAK2xI,e9Gs9/BXt1H,I8G19/BL,SAAiBzP,GACb5M,KAAK2xI,cAAgB/kI,G9G49/BpB1I,YAAY,EACZC,cAAc,I8Gj9/BZ0sI,gBAAA/vI,UAAA2c,aAAP,SAAoBD,GAOhB,GANAta,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,GAEfA,EAAKU,aAAa7d,EAAA+4G,0BAA0B/D,QAC5Cr1G,KAAKsxI,MAAQ1vI,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAA+4G,0BAA0B/D,QAGlF73F,EAAKU,aAAa7d,EAAA+4G,0BAA0BvwF,SAC5C7oB,KAAKo7H,OAAwB/yG,EAAAK,aAAaC,OAAOnL,EAAKe,aAAale,EAAA+4G,0BAA0BvwF,QAC1E,MAAf7oB,KAAKo7H,QAEwB,MAAzBp7H,KAAKo7H,OAAOljF,YAER16B,EAAKU,aAAa7d,EAAA+4G,0BAA0BC,QAC5Cz3G,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAA+4G,0BAA0BC,QAErEr5G,KAAKyxI,UAAYzxI,KAAKo7H,OAAOljF,UAAUn7B,QAEvC/c,KAAKyxI,UAAYzxI,KAAKo7H,OAAOljF,UAEjCl4C,KAAK8R,SAAS9R,KAAKyxI,WAEO,MAAtBzxI,KAAKo7H,OAAOK,SAAgB,CAC5Bz7H,KAAK4xI,eAEL,KAAK,GAAIxsI,KAAOpF,MAAKo7H,OAAOK,OACxBz7H,KAAK4xI,aAAalqH,KAAKhS,SAAStQ,MAuBjDyrI,gBAAA/vI,UAAA4c,aAAP,SAAoBF,GAGhB,GAFAta,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,GAEfA,EAAKU,aAAa7d,EAAA+4G,0BAA0BrE,OACtB,MAAlB/0G,KAAKyxI,WAAgD,MAA3BzxI,KAAKyxI,UAAU70H,UAAoB5c,KAAKyxI,UAAU70H,SAAS7Q,OAAS,EAC9F,IAAK,GAAIhM,GAAY,EAAGA,EAAIC,KAAKyxI,UAAU70H,SAAS7Q,OAAQhM,IAAK,CAC7D,GAAIw7B,GAAav7B,KAAKyxI,UAAU70H,SAAS7c,EACzC,IAAIw7B,YAAiBvxB,MAAKie,eACA,MAAlBsT,EAAM3e,UAAoB2e,EAAM3e,SAAS7Q,OAAS,EAClD,IAAK,GAAIs3B,GAAY,EAAGA,EAAI9H,EAAM3e,SAAS7Q,OAAQs3B,IAAK,CACpD,GAAIwuG,GAAoBt2G,EAAM3e,SAASymB,IAEnCwuG,YAAwB7nI,MAAKwW,QAC7BqxH,YAAwB7nI,MAAKgzH,OAAOC,kBAEsB,MAAtDz/G,EAAKe,aAAale,EAAA+4G,0BAA0BrE,MAC5C88B,EAAatnH,KAAO,SAEpBsnH,EAAatnH,KAAO7U,SAChB8H,EAAKe,aAAale,EAAA+4G,0BAA0BrE,MAC5C,MAYhCv3F,EAAKU,aAAa7d,EAAA+4G,0BAA0BzE,OAC5C/yG,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAA+4G,0BAA0BzE,QAE5C,MAArB30G,KAAK4xI,cACL5xI,KAAK8xI,eAQTt0H,EAAKU,aAAa,cAAgBtc,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAa,eAC7Eve,KAAKixI,aAUbJ,gBAAA/vI,UAAAi8B,KAAA,SAAK2qE,EAAmBqqC,GACJ,MAAZrqC,IACA1nG,KAAK0xI,UAAYhqC,GAErB1nG,KAAK2xI,cAAgBI,GAAgB,EAEZ,MAArB/xI,KAAK4xI,cACL5xI,KAAK8xI,gBAObjB,gBAAA/vI,UAAAoU,KAAA,WACI,GAA6B,MAAzBlV,KAAKyxI,UAAU9pC,OACf,IAAK,GAAIviG,KAAOpF,MAAKyxI,UAAU9pC,OACvB3nG,KAAKyxI,UAAU9pC,OAAO5mG,eAAeqE,KACrC0W,EAAAe,OAAOC,aAAa9c,KAAKyxI,UAAU9pC,OAAOviG,GAAM,OAChDpF,KAAKyxI,UAAU9pC,OAAOviG,GAAKua,SAAU,EACjC3f,KAAKyxI,UAAU9pC,OAAOviG,YAAgBonI,GAAAgE,yBACtCxwI,KAAKyxI,UAAU9pC,OAAOviG,GAAK8P,OAM3ClV,MAAKgyI,eAQTnB,gBAAA/vI,UAAAmwI,UAAA,SAAUvpC,GAKN,GAJgB,MAAZA,IACA1nG,KAAK0xI,UAAYhqC,GAErB1nG,KAAKoZ,OAAOlE,OACO,MAAflV,KAAKo7H,QAAuC,MAArBp7H,KAAKo7H,OAAOv9C,MAAe,CAClD,GAAIrgE,GAAgBxd,KAAKo7H,OAAOv9C,KAChC,IAAY,MAARrgE,EAAc,CACVA,EAAKU,aAAa,SAClBle,KAAKiX,KAAKuG,EAAKe,aAAa,QAGhC,IAAIwB,GAAgBvC,EAAKwC,iBACzB,IAAY,MAARD,EACA,KAAe,MAARA,GAAc,CACjB,GAAI3W,GAAepJ,KAAKyxI,UAAU9pC,OAAO5nF,EAAKnC,SAC/B,OAAXxU,IAEAA,EAAQsU,aAAaqC,GACjB3W,YAAmBojI,GAAAgE,0BACG,MAAlBxwI,KAAK0xI,UACLtoI,EAAQ+L,MAAMnV,KAAK2xI,eAAiB,EAAG3xI,KAAK0xI,UAAW,GAEvDtoI,EAAQ+qB,UAIpBpU,EAAOA,EAAKK,oBAKxB,GAAmB,MAAfpgB,KAAKo7H,QAA6C,MAA3Bp7H,KAAKo7H,OAAO6W,YAAqB,CACxD,GAAIC,GAAiBlyI,KAAKo7H,OAAO6W,WACjC,IAAa,MAATC,EAAe,CACf,GAAInyH,GAAgBmyH,EAAMlyH,iBAC1B,IAAY,MAARD,EACA,KAAe,MAARA,GAAc,CACjB,GAAIA,EAAK7B,aAAakzH,EAAAe,eAAeC,MAAO,CACxC,GAAIryH,EAAK7B,aAAakzH,EAAAe,eAAex9B,MAAO,CACxC,GAAI/nG,GAAgBmT,EAAKxB,aAAa6yH,EAAAe,eAAex9B,MACjD09B,EAAmB38H,SAAS9I,EAClB,UAAVA,EACImT,EAAK7B,aAAakzH,EAAAe,eAAeG,QACjCzxD,EAAAl2D,SAASoS,KACLhd,EAAKxB,aAAa6yH,EAAAe,eAAeC,MACjC18H,SAASqK,EAAKxB,aAAa6yH,EAAAe,eAAeG,UAG9CzxD,EAAAl2D,SAASoS,KAAKhd,EAAKxB,aAAa6yH,EAAAe,eAAeC,OAE3CxkH,MAAMykH,KACdryI,KAAKuyI,kBAAoBxyH,EACzB/f,KAAKuxI,gBAAgBr8H,OACrBlV,KAAKuxI,gBAAgBp8H,MAAMk9H,IAG/BtyH,EAAK7B,aAAakzH,EAAAe,eAAe98B,QAC7Bt1F,EAAK7B,aAAakzH,EAAAe,eAAeG,QACjCzxD,EAAAl2D,SAAS0hE,KACLtsE,EAAKxB,aAAa6yH,EAAAe,eAAeC,MACjC18H,SAASqK,EAAKxB,aAAa6yH,EAAAe,eAAeG,UAG9CzxD,EAAAl2D,SAAS0hE,KAAKtsE,EAAKxB,aAAa6yH,EAAAe,eAAeC,QAGnDryH,EAAK7B,aAAakzH,EAAAe,eAAe78B,QAC7Bv1F,EAAK7B,aAAakzH,EAAAe,eAAeK,SACjC3xD,EAAAl2D,SAASzV,KACL6K,EAAKxB,aAAa6yH,EAAAe,eAAeC,MACjC18H,SAASqK,EAAKxB,aAAa6yH,EAAAe,eAAeK,WAG9C3xD,EAAAl2D,SAASzV,KAAK6K,EAAKxB,aAAa6yH,EAAAe,eAAeC,QAI3DryH,EAAOA,EAAKK,wBAQ5BywH,gBAAA/vI,UAAA0wI,eAAR,WACkC,MAA1BxxI,KAAKuyI,oBACDvyI,KAAKuyI,kBAAkBr0H,aAAakzH,EAAAe,eAAeG,QACnDzxD,EAAAl2D,SAASoS,KACL/8B,KAAKuyI,kBAAkBh0H,aAAa6yH,EAAAe,eAAeC,MACnD18H,SAAS1V,KAAKuyI,kBAAkBh0H,aAAa6yH,EAAAe,eAAeG,UAGhEzxD,EAAAl2D,SAASoS,KAAK/8B,KAAKuyI,kBAAkBh0H,aAAa6yH,EAAAe,eAAeC,SAUrEvB,gBAAA/vI,UAAAgxI,aAAR,WACI9xI,KAAKoZ,OAAOlE,OACZlV,KAAKqxI,cAAgB,EAEA,MAAjBrxI,KAAK4c,WACwB,IAAzB5c,KAAK4xI,aAAa,GAClB5xI,KAAK09E,UAEL19E,KAAKoZ,OAAOjE,MAAMnV,KAAK4xI,aAAa,MAUxCf,gBAAA/vI,UAAAy5D,MAAR,WACIv6D,KAAK8xI,gBAQDjB,gBAAA/vI,UAAAkxI,YAAR,WACIhyI,KAAKoZ,OAAOlE,QAQR27H,gBAAA/vI,UAAA48E,QAAR,WAC6B,MAArB19E,KAAK4xI,eACwC,MAAzC5xI,KAAK4xI,aAAa5xI,KAAKqxI,eACvBrxI,KAAKyyI,UAAUzyI,KAAK4xI,aAAa5xI,KAAKqxI,iBAEtCrxI,KAAKoZ,OAAOlE,OACRlV,KAAKsxI,OACLtxI,KAAKu6D,UAIjBv6D,KAAKqxI,gBAEwC,MAAzCrxI,KAAK4xI,aAAa5xI,KAAKqxI,gBACvBrxI,KAAKoZ,OAAOlE,OACZlV,KAAKoZ,OAAOjE,MAAMnV,KAAK4xI,aAAa5xI,KAAKqxI,eAAiBrxI,KAAK4xI,aAAa5xI,KAAKqxI,cAAgB,MAEjGrxI,KAAKiX,KAAK45H,gBAAgB5W,mBAC1Bj6H,KAAKoZ,OAAOlE,OACRlV,KAAKsxI,OACLtxI,KAAKu6D,UAWTs2E,gBAAA/vI,UAAA2xI,UAAR,SAAkB/4G,GACd,GAAmB,MAAf15B,KAAKo7H,QAAwC,MAAtBp7H,KAAKo7H,OAAOK,OAAgB,CACnD,GAAIj+G,GAAgBxd,KAAKo7H,OAAOK,OAAO/hG,EAAM3rB,WAM7C,IAJIyP,EAAKU,aAAa,SAClBle,KAAKiX,KAAKuG,EAAKe,aAAa,SAGpB,MAARf,GAAgBA,EAAKk1H,kBAAoB,EAAG,CAC5C,GAAI3yH,GAAgBvC,EAAKwC,iBACzB,IAAY,MAARD,EACA,KAAe,MAARA,GAAc,CACjB,GAAI3W,GAAepJ,KAAKyxI,UAAU9pC,OAAO5nF,EAAKnC,SAC/B,OAAXxU,IAEAA,EAAQsU,aAAaqC,GACjB3W,YAAmBojI,GAAAgE,yBAA6C,MAAlBxwI,KAAK0xI,WAC/CtoI,EAAQuW,UACRvW,EAAQ+L,MAAMnV,KAAK2xI,eAAiB,EAAG3xI,KAAK0xI,WAC5C1xI,KAAK0xI,UAAY,OAI7B3xH,EAAOA,EAAKK,oBAKxB,GAAmB,MAAfpgB,KAAKo7H,QAA8C,MAA5Bp7H,KAAKo7H,OAAOuX,aAAsB,CACzD,GAAIT,GAAiBlyI,KAAKo7H,OAAOuX,aAAaj5G,EAAM3rB,WACpD,IAAa,MAATmkI,EAAe,CACf,GAAInyH,GAAgBmyH,EAAMlyH,iBAC1B,IAAY,MAARD,EACA,KAAe,MAARA,GACCA,EAAK7B,aAAakzH,EAAAe,eAAeC,QAC7BryH,EAAK7B,aAAakzH,EAAAe,eAAex9B,QAC7B50F,EAAK7B,aAAakzH,EAAAe,eAAeG,QACjCzxD,EAAAl2D,SAASoS,KACLhd,EAAKxB,aAAa6yH,EAAAe,eAAeC,MACjC18H,SAASqK,EAAKxB,aAAa6yH,EAAAe,eAAeG,UAG9CzxD,EAAAl2D,SAASoS,KAAKhd,EAAKxB,aAAa6yH,EAAAe,eAAeC,QAGnDryH,EAAK7B,aAAakzH,EAAAe,eAAe98B,QAC7Bt1F,EAAK7B,aAAakzH,EAAAe,eAAeG,QACjCzxD,EAAAl2D,SAAS0hE,KACLtsE,EAAKxB,aAAa6yH,EAAAe,eAAeC,MACjC18H,SAASqK,EAAKxB,aAAa6yH,EAAAe,eAAeG,UAG9CzxD,EAAAl2D,SAAS0hE,KAAKtsE,EAAKxB,aAAa6yH,EAAAe,eAAeC,QAGnDryH,EAAK7B,aAAakzH,EAAAe,eAAe78B,QAC7Bv1F,EAAK7B,aAAakzH,EAAAe,eAAeK,SACjC3xD,EAAAl2D,SAASzV,KACL6K,EAAKxB,aAAa6yH,EAAAe,eAAeC,MACjC18H,SAASqK,EAAKxB,aAAa6yH,EAAAe,eAAeK,WAG9C3xD,EAAAl2D,SAASzV,KAAK6K,EAAKxB,aAAa6yH,EAAAe,eAAeC,SAI3DryH,EAAOA,EAAKK,uBAQpCywH,gBAAA/vI,UAAA0b,QAAA,SAAQzX,GACJ/E,KAAKoZ,OAAOlE,OACZhS,EAAApC,UAAM0b,QAAO/b,KAAAT,KAAC+E,IAQlB8rI,gBAAA/vI,UAAAic,MAAA,WACI,GAAI3T,GAA2B,GAAIynI,gBAenC,IAbAznI,EAAQqoI,UAAYzxI,KAAKyxI,UAAU10H,QACnC3T,EAAQ0I,SAAS1I,EAAQqoI,WACzBroI,EAAQgyH,OAASp7H,KAAKo7H,OACtBhyH,EAAQwoI,aAAe5xI,KAAK4xI,aAC5BxoI,EAAQkoI,MAAQtxI,KAAKsxI,MACrBloI,EAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQuW,QAAU3f,KAAK2f,QAEA,MAAnB3f,KAAKugB,WAAoB,CACzB,GAAIuvG,GAAc,GAAI9lH,MAAKwW,OAAqBxgB,KAAKugB,WAAY3R,QACjEkhH,GAAY1wG,SAASN,EAAI9e,KAAKugB,WAAWnB,SAASN,EAClDgxG,EAAY1wG,SAASJ,EAAIhf,KAAKugB,WAAWnB,SAASJ,EAElD5V,EAAQmX,WAAauvG,EACrB1mH,EAAQ0I,SAASg+G,GACjB1mH,EAAQ+W,KAAO2vG,EAInB,MADA1mH,GAAQiU,eACDjU,GAGJynI,gBAAA/vI,UAAAkuH,QAAP,SAAeE,GACX,GAAIlvH,KAAKmvH,QAAUD,IAAathG,MAAMshG,GAAtC,CAGAlvH,KAAKmvH,MAAQD,CACb,KAAK,GAAI3zF,KAASv7B,MAAKyxI,UAAU9pC,OACoB,gBAAtC3nG,MAAKyxI,UAAU9pC,OAAOpsE,GAAOhR,OACpCvqB,KAAKyxI,UAAU9pC,OAAOpsE,GAAOhR,KAAO2kG,KAWhDruH,OAAAkD,eAAI8sI,gBAAA/vI,UAAA,Q9G62/BCkD,I8Gz2/BL,WACI,MAAOhE,MAAKmvH,O9G22/BX9yG,I8Gh3/BL,SAAS6yG,GACLlvH,KAAKgvH,QAAQE,I9Gk3/BZhrH,YAAY,EACZC,cAAc,I8G/2gCZ0sI,gBAAA5W,kBAA4B,oBAFvC4W,gBAAAx1H,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB9Gs3gCxB4oH,kB8Gr3gC6B51H,EAAAG,YAAxB/a,GAAAwwI,gBAAeA,EAqgBfxwI,EAAA+4G,2BACTC,MAAO,QACPlxF,MAAO,QACPyqH,KAAM,OAONv9B,KAAM,OAMNV,KAAM,OAON2E,OAAQ,SAQRzwF,MAAO,QAOPksF,KAAM,S9G41/BJ,SAASz0G,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G+G36gCjE5Z,EAAAzB,EAA0D,GAC1D0yI,EAAA1yI,EAAiC,KACjC0b,EAAA1b,EAA+B,IAC/B2b,EAAA3b,EAAuB,IACvBqC,EAAArC,EAA2B,GAG3BqwI,EAAA,SAAAttI,GAA6C3B,EAAAivI,wBAAAttI,EAuBzC,SAAAstI,2BACIttI,EAAAzC,KAAAT,MAEAA,KAAKm2B,KAAO,EACZn2B,KAAKuuB,GAAK,EACVvuB,KAAK6Y,SAAW,EAChB7Y,KAAK6iB,OAAQ,EACb7iB,KAAKo/D,aAAe,EACpBp/D,KAAK8yI,WAAa,EAuJ1B,MAhJWtC,yBAAA1vI,UAAA4c,aAAP,SAAoBF,GAmBhB,GAlBAta,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,GAEfA,EAAKU,aAAa7d,EAAA+1G,kCAAkC28B,QACpD/yI,KAAKm2B,KAAO7X,WAAWd,EAAKe,aAAale,EAAA+1G,kCAAkC28B,QAG3Ev1H,EAAKU,aAAa7d,EAAA+1G,kCAAkC48B,MACpDhzI,KAAKuuB,GAAKjQ,WAAWd,EAAKe,aAAale,EAAA+1G,kCAAkC48B,MAGzEx1H,EAAKU,aAAa7d,EAAA+1G,kCAAkCC,YACpDr2G,KAAK6Y,SAAWnD,SAAS8H,EAAKe,aAAale,EAAA+1G,kCAAkCC,YAG7E74F,EAAKU,aAAa7d,EAAA+1G,kCAAkCE,SACpDt2G,KAAK6iB,MAAQjhB,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAA+1G,kCAAkCE,SAG1F94F,EAAKU,aAAa7d,EAAA+1G,kCAAkCZ,QACpD,OAAQh4F,EAAKe,aAAale,EAAA+1G,kCAAkCZ,SACxD,IAAKn1G,GAAA+1G,kCAAkC68B,aAAav7B,MAChD13G,KAAKmV,MAAMnV,KAAKm2B,KAAMn2B,KAAKuuB,GAAIvuB,KAAK6Y,SACpC,MACJ,KAAKxY,GAAA+1G,kCAAkC68B,aAAa39B,KAChDt1G,KAAKkV,MACL,MACJ,KAAK7U,GAAA+1G,kCAAkC68B,aAAa18B,MAChDv2G,KAAKm0B,UAUdq8G,wBAAA1vI,UAAAqU,MAAP,SAAaghB,EAAc5H,EAAY1V,GACnC,GAAMrX,GAAgB,MAAZqX,EAAmBA,EAAW7Y,KAAK6Y,QAEzCrX,IAAK,GAAK20B,IAAS5H,GACnBvuB,KAAKo/D,aAAe7wC,EACpBvuB,KAAK8yI,WAAavkH,EAElBvuB,KAAKkzI,cAELlzI,KAAKo/D,aAAejpC,EACpBn2B,KAAK8yI,WAAa38G,EAElBn2B,KAAKkzI,YAELlzI,KAAK8yI,WAAavkH,EAElBzS,EAAAe,OAAO0K,YAAYvnB,MACfinB,MAAO,eACPjB,aAAchmB,KAAKo/D,aAAcp/D,KAAK8yI,YACtCvwH,eAAgB/gB,GAChBktB,aAAc,WACdD,iBAAkBzuB,KAAKkzI,UACvBrkH,cAAe7uB,SAKjBwwI,wBAAA1vI,UAAAoyI,UAAV,WACI,MAAIlzI,MAAKo/D,eAAiBp/D,KAAK8yI,YAC3Bh3H,EAAAe,OAAOC,aAAa9c,KAAM,gBAC1BA,KAAKmzI,WAAW5zE,KAAO39D,EAAAyL,YAAYC,cAC/BtN,KAAK8yI,WACL9yI,KAAK6iB,OAAS2tH,wBAAwBC,MAAQ,EAAIjuI,EAAA+B,WAAWC,kBAAkBgJ,uBAEnFxN,MAAKozI,YAITpzI,KAAKmzI,WAAW5zE,KAAO39D,EAAAyL,YAAYC,cAC/BtN,KAAKo/D,aACLp/D,KAAK6iB,OAAS2tH,wBAAwBC,MAAQ,EAAIjuI,EAAA+B,WAAWC,kBAAkBgJ,uBAGnFxN,MAAKozI,YAOF5C,wBAAA1vI,UAAAoU,KAAP,WACI4G,EAAAe,OAAOC,aAAa9c,KAAM,iBAOvBwwI,wBAAA1vI,UAAAqzB,MAAP,WACIn0B,KAAKo/D,aAAep/D,KAAK8yI,WAEzB9yI,KAAKkzI,aAOF1C,wBAAA1vI,UAAAic,MAAP,WACI,GAAI3T,GAAmC,GAAIonI,wBA2B3C,OA1BApnI,GAAQuW,QAAU3f,KAAK2f,QACvBvW,EAAQyU,MAAQ7d,KAAK6d,MACrBzU,EAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQgV,SAAWpe,KAAKoe,SAExBhV,EAAQiqI,KAAOrzI,KAAKqzI,KACpBjqI,EAAQm2D,KAAOv/D,KAAKu/D,KACpBn2D,EAAQkqI,UAAYtzI,KAAKszI,UACzBlqI,EAAQmqI,aAAevzI,KAAKuzI,aAE5BnqI,EAAQ+sB,KAAOn2B,KAAKm2B,KACpB/sB,EAAQmlB,GAAKvuB,KAAKuuB,GAClBnlB,EAAQyP,SAAW7Y,KAAK6Y,SACxBzP,EAAQyZ,MAAQ7iB,KAAK6iB,MAErBzZ,EAAQ+pI,WAAa,GAAInpI,MAAKgzH,OAAOwW,WAAWxzI,KAAKu/D,MAAQ8zE,KAAMrzI,KAAKqzI,OACxEjqI,EAAQ0I,SAAS1I,EAAQ+pI,YAEzB/pI,EAAQgqI,UACRhqI,EAAQiU,eAEDjU,GAGXvI,OAAAkD,eAAIysI,wBAAA1vI,UAAA,Q/Go2gCCkD,I+Gh2gCL,WACI,MAAOhE,MAAKmzI,WAAW5oH,M/Gk2gCtBlO,I+Gv2gCL,SAAS6yG,GACLlvH,KAAKmzI,WAAW5oH,KAAO2kG,G/Gy2gCtBhrH,YAAY,EACZC,cAAc,I+GrhhCZqsI,wBAAAC,OAAiB,EAN5BD,wBAAAn1H,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB/GgihCxBuoH,0B+G/hhCqCqC,EAAAY,iBAAhCpzI,GAAAmwI,wBAAuBA,EAwLvBnwI,EAAA+1G,mCAOTE,MAAO,QAOPD,SAAU,WACV08B,KAAM,OACNC,GAAI,KACJx9B,OAAQ,SACRy9B,cACIv7B,MAAO,QACPpC,KAAM,OACNiB,MAAO,W/Gs2gCT,SAASj2G,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GgHtkhCjE5Z,EAAAzB,EAAgC,GAChC8a,EAAA9a,EAA4B,IAC5B0b,EAAA1b,EAA+B,IAG/BszI,EAAA,SAAAvwI,GAAsC3B,EAAAkyI,iBAAAvwI,EAmBlC,SAAAuwI,oBACIvwI,EAAAzC,KAAAT,MAEAA,KAAKszI,UAAYjzI,EAAAo2G,2BAA2BI,iBAAiBsC,KAC7Dn5G,KAAKuzI,aAAelzI,EAAAo2G,2BAA2BQ,oBAAoBy8B,IACnE1zI,KAAKu/D,KAAO,GAkHpB,MA3GWk0E,kBAAA3yI,UAAA2c,aAAP,SAAoBD,GAChBta,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,GAEI,MAAnBxd,KAAKmzI,YACD31H,EAAKU,aAAa7d,EAAAo2G,2BAA2BE,QACzCn5F,EAAKU,aAAa7d,EAAAo2G,2BAA2BC,QAC7C12G,KAAKu/D,KAAO/hD,EAAKe,aAAale,EAAAo2G,2BAA2BC,OAG7D12G,KAAKqzI,KAAO71H,EAAKe,aAAale,EAAAo2G,2BAA2BE,MAEzD32G,KAAKmzI,WAAa,GAAInpI,MAAKgzH,OAAOwW,WAAWxzI,KAAKu/D,MAAQ8zE,KAAMrzI,KAAKqzI,OAErErzI,KAAK8R,SAAS9R,KAAKmzI,cAKxBM,iBAAA3yI,UAAA4c,aAAP,SAAoBF,GAehB,GAdAta,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,GAEfA,EAAKU,aAAa7d,EAAAo2G,2BAA2BG,cAC7C52G,KAAKszI,UAAY91H,EAAKe,aAAale,EAAAo2G,2BAA2BG,YAE9D52G,KAAKozI,WAGL51H,EAAKU,aAAa7d,EAAAo2G,2BAA2BO,iBAC7Ch3G,KAAKuzI,aAAe/1H,EAAKe,aAAale,EAAAo2G,2BAA2BO,eAEjEh3G,KAAKozI,WAGL51H,EAAKU,aAAa7d,EAAAo2G,2BAA2B1B,MAAO,CACpD,GAAI5nG,GAAMuI,SAAS8H,EAAKe,aAAale,EAAAo2G,2BAA2B1B,MAAO,GAClEnnF,OAAMzgB,KACPnN,KAAKmzI,WAAW5oH,KAAOpd,GAI3BqQ,EAAKU,aAAa7d,EAAAo2G,2BAA2BC,OACzC12G,KAAKmzI,aACLnzI,KAAKmzI,WAAW5zE,KAAO/hD,EAAKe,aAAale,EAAAo2G,2BAA2BC,QASzE+8B,iBAAA3yI,UAAAsyI,QAAP,WACI,OAAQpzI,KAAKszI,WACT,IAAKjzI,GAAAo2G,2BAA2BI,iBAAiBE,MAC7C/2G,KAAKmzI,WAAW/zH,SAASN,GAAK9e,KAAKmzI,WAAWzsI,KAC9C,MACJ,KAAKrG,GAAAo2G,2BAA2BI,iBAAiBC,OAC7C92G,KAAKmzI,WAAW/zH,SAASN,EAA6B,IAAxB9e,KAAKmzI,WAAWzsI,KAC9C,MACJ,SACI1G,KAAKmzI,WAAW/zH,SAASN,EAAI,EAIrC,OAAQ9e,KAAKuzI,cACT,IAAKlzI,GAAAo2G,2BAA2BQ,oBAAoBE,OAChDn3G,KAAKmzI,WAAW/zH,SAASJ,GAAKhf,KAAKmzI,WAAWxsI,MAC9C,MACJ,KAAKtG,GAAAo2G,2BAA2BQ,oBAAoBC,OAChDl3G,KAAKmzI,WAAW/zH,SAASJ,EAA8B,IAAzBhf,KAAKmzI,WAAWxsI,MAC9C,MACJ,SACI3G,KAAKmzI,WAAW/zH,SAASJ,EAAI,IASlCy0H,iBAAA3yI,UAAAic,MAAP,WACI,GAAI3T,GAA4B,GAAIqqI,iBAuBpC,OAtBArqI,GAAQuW,QAAU3f,KAAK2f,QACvBvW,EAAQyU,MAAQ7d,KAAK6d,MACrBzU,EAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQgV,SAAWpe,KAAKoe,SAExBhV,EAAQiqI,KAAOrzI,KAAKqzI,KACpBjqI,EAAQm2D,KAAOv/D,KAAKu/D,KACpBn2D,EAAQkqI,UAAYtzI,KAAKszI,UACzBlqI,EAAQmqI,aAAevzI,KAAKuzI,aAE5BnqI,EAAQ+pI,WAAa,GAAInpI,MAAKgzH,OAAOwW,WAAWxzI,KAAKu/D,MAAQ8zE,KAAMrzI,KAAKqzI,OACxEjqI,EAAQ+pI,WAAW5oH,KAAOvqB,KAAKmzI,WAAW5oH,KAC1CnhB,EAAQ0I,SAAS1I,EAAQ+pI,YAEzB/pI,EAAQgqI,UACRhqI,EAAQiU,eAEDjU,GAzIfqqI,iBAAAp4H,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBhHkqhCxBwrH,mBgHjqhC8Bx4H,EAAAG,YAAzB/a,GAAAozI,iBAAgBA,EA4IhBpzI,EAAAo2G,4BAOTC,KAAM,OAONC,KAAM,OAQNC,WAAY,YACZC,kBACIsC,KAAM,OACNrC,OAAQ,SACRC,MAAO,SAQXC,cAAe,eACfC,qBACIy8B,IAAK,MACLx8B,OAAQ,SACRC,OAAQ,UAEZpC,KAAM,ShHsghCJ,SAASz0G,EAAQD,EAASF,GAE/B,YACA,IAAIkb,GAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GiHtshCjE5Z,EAAAzB,EAAwC,GACxC0b,EAAA1b,EAA+B,IAC/BqC,EAAArC,EAA2B,GAC3ByC,EAAAzC,EAA4B,IAG5ByqB,EAAA,mBAAAA,SA8NA,MAjMWA,MAAA9pB,UAAAa,OAAP,SAAc6b,GACVxd,KAAKO,GAAKid,EAAKI,SACf5d,KAAK2zI,MAAQn2H,EAAKU,aAAa7d,EAAA8xI,eAAeyB,OAASp2H,EAAKe,aAAale,EAAA8xI,eAAeyB,OAAS,KACjG5zI,KAAKmP,SAAW,KAChBnP,KAAKysF,MAAQjvE,EAAKU,aAAa7d,EAAA8xI,eAAe0B,OAASr2H,EAAKe,aAAale,EAAA8xI,eAAe0B,OAAS,KACjG7zI,KAAK8H,OAAS0V,EAAKU,aAAa7d,EAAA8xI,eAAe2B,QACzCx1H,WAAWd,EAAKe,aAAale,EAAA8xI,eAAe2B,SAC5C,EACN9zI,KAAK+zI,IAAMv2H,EAAKU,aAAa7d,EAAA8xI,eAAe6B,KAAO11H,WAAWd,EAAKe,aAAale,EAAA8xI,eAAe6B,MAAQ,EACvGh0I,KAAKi0I,KAAO,EACZj0I,KAAKk0I,cAAgB,EACrBl0I,KAAKm0I,YAAc,EAEf32H,EAAKU,aAAa7d,EAAA8xI,eAAeC,OAC7BpoI,KAAKC,MAAM6nG,OAAOt0F,EAAKe,aAAale,EAAA8xI,eAAeC,OACnDpyI,KAAKiK,MAAQD,KAAKC,MAAM68C,KAAKtpC,EAAKe,aAAale,EAAA8xI,eAAeC,OASlEpyI,KAAKiK,MAAQ,MAYd2gB,KAAA9pB,UAAAi8B,KAAP,SACIsvD,EACAF,EACA5xB,EACA6xB,GAAA,SAAAA,MAAA,OAEmB,oBAAfpsF,KAAKysF,OAAgCjqF,EAAA+B,WAAWsD,QAAQirE,4BAIzC,OAAf9yE,KAAKiK,QAAmBswD,GAA2B,OAAlBv6D,KAAKmP,WACtCnP,KAAKiK,MAAMqlC,QAAuB,IAAbtvC,KAAK+zI,IAAY,MAAQ,GAAI/pI,MAAKC,MAAMqlC,QAAQ8kG,aAAap0I,KAAK+zI,MAEnF5nD,EAAS,GACTnsF,KAAKi0I,KAAO,EACZj0I,KAAKk0I,eAAgB,GAAIhpI,OAAOiO,UAChCnZ,KAAKm0I,YAAcn0I,KAAKk0I,cAAyB,KAAT/nD,IAExCnsF,KAAKi0I,KAAO,EACZj0I,KAAKk0I,cAAgB,EACrBl0I,KAAKm0I,YAAc,GAGvBn0I,KAAKq0I,aAAahoD,EAAMD,IAGP,MAAjBpsF,KAAKmP,UAAmC,oBAAfnP,KAAKysF,OAAgC7pF,EAAA4F,YAAY2pE,4BAC1EnyE,KAAKmP,SAASrH,OAAS,KAIrB8iB,KAAA9pB,UAAAuzI,aAAV,SACIhoD,EACAD,GADA,SAAAC,OAAA,GACA,SAAAD,MAAA,MAEApsF,KAAKs0I,eAELt0I,KAAKmP,SACDnP,KAAKiK,MAAM8yB,KAAoB,OAAf/8B,KAAK2zI,OAAmBY,OAAQv0I,KAAK2zI,MAAO7rI,OAAQ9H,KAAK8H,SAAaA,OAAQ9H,KAAK8H,SAEvG9H,KAAKmP,SAASuE,GAAG,MAAO24E,EAAOrsF,KAAKq0I,aAAer0I,KAAKs0I,aAAct0I,MAEpD,IAAdA,KAAKi0I,MACLj0I,KAAKmP,SAASuE,GAAG,WAA0B,IAAd1T,KAAKi0I,KAAaj0I,KAAKw0I,SAAWx0I,KAAKy0I,UAAWz0I,MAG/EosF,GACApsF,KAAKmP,SAASuE,GAAG,WAAY04E,EAAYpsF,MAGxB,MAAjBA,KAAKmP,UAAmC,oBAAfnP,KAAKysF,OAAgC7pF,EAAA4F,YAAY2pE,4BAC1EnyE,KAAKmP,SAASrH,OAAS,IAIxB8iB,KAAA9pB,UAAA2Y,UAAP,WACI,MAAOzZ,MAAKiK,MAAMwP,WAGZmR,KAAA9pB,UAAA0zI,SAAV,WACI,GAAM37H,GAAW7Y,KAAKm0I,YAAcn0I,KAAKk0I,cACnCv6G,GAAW,GAAIzuB,OAAOiO,UAAYnZ,KAAKk0I,cACvCpsI,EAAS9H,KAAK8H,OAAS2W,KAAK4yB,IAAI1X,EAAW9gB,EAAU,EAE3D,IAAmB,oBAAf7Y,KAAKysF,OAAgC7pF,EAAA4F,YAAY2pE,0BAGjD,IACInyE,KAAKmP,SAASrH,OAASA,EACzB,MAAOjI,QAJTG,MAAKmP,SAASrH,OAAS,CAOvBA,KAAW9H,KAAK8H,QAChB9H,KAAKmP,SAASulI,IAAI,WAAY10I,KAAKw0I,SAAUx0I,OAQ9C4qB,KAAA9pB,UAAA6rF,YAAP,SAAmBF,EAAeC,GAAA,SAAAA,OAAA,GAC1B1sF,KAAKysF,QAAUA,GAA0B,MAAjBzsF,KAAKmP,WACzBu9E,EACA1sF,KAAKmP,SAASrH,OAAS9H,KAAK8H,OAE5B9H,KAAKmP,SAASrH,OAAS,IAK5B8iB,KAAA9pB,UAAAoU,KAAP,SAAYo3E,GACa,MAAjBtsF,KAAKmP,WACDm9E,EAAU,GACVtsF,KAAKi0I,QACLj0I,KAAKk0I,eAAgB,GAAIhpI,OAAOiO,UAChCnZ,KAAKm0I,YAAcn0I,KAAKk0I,cAA0B,KAAV5nD,EAExCtsF,KAAKmP,SAASulI,IAAI,WAAY10I,KAAKw0I,SAAUx0I,MAC7CA,KAAKmP,SAASuE,GAAG,WAAY1T,KAAKy0I,UAAWz0I,OAE7CA,KAAKs0I,iBAKV1pH,KAAA9pB,UAAAwY,MAAP,WACyB,MAAjBtZ,KAAKmP,UACLnP,KAAKiK,MAAMqP,SAIZsR,KAAA9pB,UAAA0qD,OAAP,WACyB,MAAjBxrD,KAAKmP,UACLnP,KAAKiK,MAAMuhD,UAIT5gC,KAAA9pB,UAAAwzI,aAAV,WACyB,MAAjBt0I,KAAKmP,WACLnP,KAAKmP,SAASulI,IAAI,WAAY10I,KAAKw0I,SAAUx0I,MAC7CA,KAAKmP,SAASulI,IAAI,WAAY10I,KAAKy0I,UAAWz0I,MAC9CA,KAAKmP,SAASulI,IAAI,MAAO10I,KAAKq0I,aAAcr0I,MAC5CA,KAAKmP,SAASulI,IAAI,MAAO10I,KAAKs0I,aAAct0I,MAC5CA,KAAKmP,SAAS+F,OACdlV,KAAKmP,SAAW,OAIdyb,KAAA9pB,UAAA2zI,UAAV,WACI,GAAM57H,GAAW7Y,KAAKm0I,YAAcn0I,KAAKk0I,cACnCv6G,GAAW,GAAIzuB,OAAOiO,UAAYnZ,KAAKk0I,cACvCpsI,EAAS9H,KAAK8H,OAAS9H,KAAK8H,OAAS2W,KAAK4yB,IAAI1X,EAAW9gB,EAAU,EAEzE,IAAmB,oBAAf7Y,KAAKysF,OAAgC7pF,EAAA4F,YAAY2pE,0BAGjD,IACInyE,KAAKmP,SAASrH,OAASA;CACzB,MAAOjI,QAJTG,MAAKmP,SAASrH,OAAS,CAOZ,KAAXA,GACA9H,KAAKs0I,gBAQH1pH,KAAA9pB,UAAA0R,IAAV,SAAcC,KAzNlBmY,KAAAvP,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe4C,OjHy2hCxBA,QiHx2hCKvqB,GAAAuqB,KAAIA,EAgOJvqB,EAAA8xI,gBACTC,KAAM,OACNwB,MAAO,QACPC,MAAO,QACPC,OAAQ,SACRE,IAAK,MACLr/B,KAAM,OACNU,KAAM,OACNC,KAAM,OACNg9B,OAAQ,SACRE,QAAS,YjHkphCP,SAASlyI,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GkH94hCjE5Z,EAAAzB,EAA4C,GAE5C8a,EAAA9a,EAA4B,IAE5Bw0I,EAAAx0I,EAAqB,KACrBy0I,EAAAz0I,EAAsB,KACtByS,EAAAzS,EAA2E,GAC3Es4F,EAAAt4F,EAA8B,IAC9B0b,EAAA1b,EAA+B,IAC/B0gF,EAAA1gF,EAAyB,IACzBqC,EAAArC,EAA2B,GAI3ByC,EAAAzC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IACzBozH,EAAApzH,EAAyD,KAEzDkO,EAAAlO,EAA8B,IAC9B2C,EAAA3C,EAA+B,IAW/B+zH,EAAA,SAAAhxH,GAA6B3B,EAAA2yH,QAAAhxH,EAkEzB,SAAAgxH,WACIhxH,EAAAzC,KAAAT,MAHMA,KAAA60I,mBAMN70I,KAAK80I,UACL90I,KAAK+0I,wBACL/0I,KAAKg1I,oBAAqB,EAC1Bh1I,KAAKi1I,qBAAsB,EAC3Bj1I,KAAKk1I,mBAAoB,EACzBl1I,KAAKm1I,oBAAsB,EAE3Bn1I,KAAKo1I,WAAaxiI,EAAAa,iBAAiB,WACnCzT,KAAKo1I,WAAW1hI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK8hG,SAASjuF,KAAK7T,OAEjEA,KAAK62H,qBAEL72H,KAAKq1I,gBAAkB,GAAIrrI,MAAKqH,UAChCrR,KAAK8R,SAAS9R,KAAKq1I,iBAujB3B,MA9iBWnhB,SAAApzH,UAAAa,OAAP,SAAc6b,GAQV,GAPAta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEU,MAAnBxd,KAAKugB,YAA8C,MAAxBvgB,KAAKq1I,kBAChCr1I,KAAKq1I,gBAAgBvjI,SAAS9R,KAAKugB,YACnCvgB,KAAKq1I,gBAAgBl1H,KAAOngB,KAAKugB,YAGjC/C,EAAKU,aAAa7d,EAAAi1I,kBAAkB5I,SAEpC,IAAK,GADDtV,GAAyB55G,EAAKe,aAAale,EAAAi1I,kBAAkB5I,SAAS9pH,MAAM,KACvE7iB,EAAY,EAAGA,EAAIq3H,EAAQrrH,OAAQhM,IAAK,CAC7C,GAAI0lD,GAAkBgzC,EAAAO,cAAcvB,eAAe2/B,EAAQr3H,GAC7C,OAAV0lD,GACAzlD,KAAKq3H,YAAY5xE,KAYvByuE,QAAApzH,UAAAu2H,YAAV,SAAsB75G,GAOdA,EAAKU,aAAa,eAClBle,KAAKu1I,WAAa7/H,SAAS8H,EAAKe,aAAa,eAS7Cf,EAAKU,aAAa,WAClBle,KAAKw1I,OAAS5zI,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAa,WASvDf,EAAKU,aAAa,WAClBle,KAAKy1I,OAAS7zI,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAa,WASvDf,EAAKU,aAAa,iBAClBle,KAAKk5H,aAAexjH,SAAS8H,EAAKe,aAAa,iBAS/Cf,EAAKU,aAAa,kBAClBle,KAAKm5H,cAAgBzjH,SAAS8H,EAAKe,aAAa,kBAShDf,EAAKU,aAAa,wBAClBle,KAAK01I,oBAAsBhgI,SAAS8H,EAAKe,aAAa,wBAStDf,EAAKU,aAAa,mBAClBle,KAAK21I,iBAAmBjgI,SAAS8H,EAAKe,aAAa,oBAEnDve,KAAK21I,iBAAmB,GASxBn4H,EAAKU,aAAa,uBAClBle,KAAK41I,qBAAuBlgI,SAAS8H,EAAKe,aAAa,wBAEvDve,KAAK41I,qBAAuB,IAS5Bp4H,EAAKU,aAAa,cAClBle,KAAK61I,YAAcngI,SAAS8H,EAAKe,aAAa,eAE9Cve,KAAK61I,YAAc,EASnBr4H,EAAKU,aAAa,aAClBle,KAAK81I,WAAapgI,SAAS8H,EAAKe,aAAa,cAE7Cve,KAAK81I,WAAa,GASlBt4H,EAAKU,aAAa,uBAClBle,KAAK+1I,mBAAqBv4H,EAAKe,aAAa,uBAU1C21G,QAAApzH,UAAAk1I,YAAV,SAAsBtgB,GAClB,IAAK,GAAI31H,GAAY,EAAGA,EAAIC,KAAKu1I,WAAYx1I,IACzCC,KAAK80I,OAAOptH,KAAK,GAAIktH,GAAAqB,MAGzB,KAAK,GAAIl2I,GAAY,EAAGA,EAAIC,KAAKu1I,WAAYx1I,IAAK,CAC9C,GAAM0iG,GAAOziG,KAAK80I,OAAO/0I,EAEzB,IAA+B,MAA3BC,KAAK+1I,mBAEL,IAAK,GADD3e,GAAyBp3H,KAAK+1I,mBAAmBnzH,MAAM,KAClDygB,EAAY,EAAGA,EAAI+zF,EAAQrrH,OAAQs3B,IACxCo/D,EAAKkqC,UAAUl0C,EAAAO,cAAcvB,eAAe2/B,EAAQ/zF,IAG5Do/D,GAAK9iF,SAAU,EAEf8iF,EAAK5+F,WACD9D,EAAI,EAAIC,KAAK80I,OAAO/0I,EAAI,GAAK,KAC7BA,EAAIC,KAAKu1I,WAAa,EAAIv1I,KAAK80I,OAAO/0I,EAAI,GAAK,KAC/CA,EACAC,KAAKi0H,SACLyB,EAAM31H,GACNC,KAAKw1I,OAAOz1I,GACZC,KAAKy1I,OAAO11I,GACZC,KAAK01I,oBACL,EACA,EACA11I,KAAKk5H,aACLl5H,KAAKm5H,cACLn5H,KAAK61I,YAAc91I,EACnBC,KAAK81I,WAAa/1I,GAEtB0iG,EAAK/uF,GAAGihI,EAAAuB,KAAKvgB,YAAa31H,KAAK41H,cAAc/hH,KAAK7T,OAClDA,KAAKq1I,gBAAgBvjI,SAAS2wF,GAElCziG,KAAKq1I,gBAAgB11H,SAAU,GAU5Bu0G,QAAApzH,UAAA+C,WAAP,SAAkBoiG,EAAkByvB,EAA6BygB,GACrC,MAApBA,EACAn2I,KAAKo2I,kBAAoBD,EAEzBn2I,KAAKo2I,kBAAoB,GAAI7iB,GAAAiB,iBAGjCx0H,KAAKi0H,SAAWhuB,EAChBjmG,KAAKg2I,YAAYtgB,IAOdxB,QAAApzH,UAAA4zH,mBAAP,SAA0BtrH,GACtBpJ,KAAK60I,gBAAgBh0I,OAAO0qB,KAAKniB,GAAS,IAAMA,EAAQvI,OAAO0qB,KAAKniB,GAAS,KAS1E8qH,QAAApzH,UAAAw1H,uBAAP,SAA8B1pH,GAC1B5M,KAAK+0I,qBAAuBnoI,GASzBsnH,QAAApzH,UAAAs1H,YAAP,SAAmBmX,GAOf,GAFAvtI,KAAK62H,qBAEc,MAAf72H,KAAK80I,OACL,IAAK,GAAI/0I,GAAY,EAAGA,EAAIC,KAAKu1I,WAAYx1I,IACrB,MAAhBwtI,EAAUxtI,IACY,MAAlBC,KAAK80I,OAAO/0I,KACZC,KAAK80I,OAAO/0I,GAAG4f,SAAU,EACzB3f,KAAK80I,OAAO/0I,GAAGkpG,QAAQskC,EAAUxtI,IACjCC,KAAK80I,OAAO/0I,GAAGq2H,gBAyB5BlC,QAAApzH,UAAAuiG,UAAP,SAAiBgzC,GAKbr2I,KAAKg1I,oBAAqB,EAC1Bh1I,KAAKi1I,qBAAsB,EAC3Bj1I,KAAKk1I,mBAAoB,EAEzBl1I,KAAKs2I,eAAiBprI,KAAK2+C,MAE3B7pD,KAAK2f,SAAU,EACf3f,KAAKq1I,gBAAgB11H,SAAU,EAE/B3f,KAAK62H,qBACL72H,KAAKm1I,oBAAsB,CAE3B,IAAI9mH,GAAQ,CAEZ,IAAmB,MAAfruB,KAAK80I,OAAgB,CACrB,IAAK,GAAI/0I,GAAY,EAAGA,EAAIC,KAAKu1I,WAAYx1I,IAAK,CAC9C,GAAmB,MAAfC,KAAK02H,OAAgB,CACrB,GAAU,IAAN32H,GAA2B,IAAhBC,KAAK02H,OAChB,QAGJ,IAAU,IAAN32H,GAA2B,IAAhBC,KAAK02H,OAChB,QAGJ,IAAU,IAAN32H,GAA2B,IAAhBC,KAAK02H,OAChB,SAYc,MAAlB12H,KAAK80I,OAAO/0I,IACRC,KAAK+0I,qBAAqBhpI,OAAS,IACnC/L,KAAK80I,OAAO/0I,GAAG4f,SAAU,EACzB3f,KAAK80I,OAAO/0I,GAAGkpG,QAAQjpG,KAAK+0I,qBAAqBh1I,IACjDC,KAAK80I,OAAO/0I,GAAGq2H,cACfp2H,KAAK80I,OAAO/0I,GAAGsjG,UAAUh1E,IAajB,MAAhBgoH,GAAwBA,EACxBr2I,KAAKo1I,WAAWjgI,MAAMnV,KAAK41I,sBAE3B51I,KAAKo1I,WAAWjgI,MAAMnV,KAAK21I,kBAQ/BtnH,EAAQ,EACRvZ,WAAW,WACP+rE,EAAAl2D,SAASoS,KAAK,uBACd8jD,EAAAl2D,SAAS0hE,KAAK,sBACdxL,EAAAl2D,SAAS0hE,KAAK,iBAEdxL,EAAAl2D,SAASoS,KAAK,0BAEf1O,GAEHwyD,EAAAl2D,SAASoS,KAAK,0BAKZm3F,QAAApzH,UAAAy1I,qCAAV,WACI,OACK/zI,EAAA+B,WAAWC,kBAAkB+hE,qBAAuB,GACjD/jE,EAAA+B,WAAWC,kBAAkBgiE,iBAAmB,KACnDn4D,EAAA0B,cAAc0lE,mBAahBy+C,QAAApzH,UAAAghG,SAAP,SAAgB1tF,EAAY+f,EAAwBovE,EAA6BizC,GAAjF,GAAA19H,GAAA9Y,IAqCI,IArCwB,SAAAm0B,OAAA,GAAwB,SAAAovE,OAAA,GAA6B,SAAAizC,OAAA,GACzEjzC,GACAvjG,KAAKg1I,oBAAqB,EACE,MAAxBh1I,KAAKy2I,iBACLl9H,aAAavZ,KAAKy2I,iBAElBz2I,KAAKu2I,uCACLv2I,KAAKy2I,gBAAkB3hI,WACnB,WAAM,MAAAgE,GAAKgpF,SAAS,MAAM,GAAO,GAAO,IACxC9hG,KAAK02I,iCAGT12I,KAAKk1I,mBAAoB,GAEtBsB,GACqB,MAAxBx2I,KAAKy2I,iBACLl9H,aAAavZ,KAAKy2I,iBAEtBz2I,KAAKk1I,mBAAoB,IAEzBl1I,KAAKo1I,WAAWlgI,OAChBlV,KAAKi1I,qBAAsB,GAG3B9gH,IAC4B,MAAxBn0B,KAAKy2I,iBACLl9H,aAAavZ,KAAKy2I,iBAEtBz2I,KAAKk1I,mBAAoB,EACzBl1I,KAAKo1I,WAAWlgI,OAChBlV,KAAKi1I,qBAAsB,GAO3Bj1I,KAAKg1I,oBAAsBh1I,KAAKi1I,qBAAuBj1I,KAAKk1I,kBAAmB,CAE1E7mI,EAAA0B,cAAc0lE,mBACb3yE,EAAAuC,eAAe4jE,OAAyC,eAAhCnmE,EAAAuC,eAAe0iE,eAEzCnlE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAAc,KACrD1/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS65D,kBAAmB,KAG9D,IAAIo0E,EAcJ,IAZuC,MAAnC32I,KAAK60I,gBAAyB,SAC9B70I,KAAK60I,gBAAyB,QAAEvmH,QAAQ,SAAC6nH,GACrC,GAAIS,GAAwBT,EAAiBU,aACzC1iH,MAAOA,EACP2iH,eAAgBh+H,EAAKi8H,sBAErBoB,GAAiBY,iBACjBJ,EAAMC,IAEX52I,MAGY,MAAfA,KAAK80I,OACL,IAAK,GAAI/0I,GAAY,EAAGA,EAAIC,KAAKu1I,WAAYx1I,IACnB,MAAlBC,KAAK80I,OAAO/0I,IAC6B,IAArCC,KAAK+0I,qBAAqBhpI,SAC1B/L,KAAK80I,OAAO/0I,GAAGkpG,QAAQjpG,KAAK+0I,qBAAqBh1I,IAE9B,mBAAR42I,GACP32I,KAAK80I,OAAO/0I,GAAG+hG,SAAS3tE,EAAOwiH,EAAI52I,GAAGi3I,WAEtCh3I,KAAK80I,OAAO/0I,GAAG+hG,SAAS3tE,MA0B1C+/F,QAAApzH,UAAA41I,8BAAV,WACI,MAAIl0I,GAAA+B,WAAWC,kBAAkBgiE,iBAAmB,EACzCxmE,KAAKi3I,+BAA+Bz0I,EAAA+B,WAAWC,kBAAkBgiE,kBAGxEhkE,EAAA+B,WAAWC,kBAAkB+hE,qBAAuB,EAC7C/jE,EAAA+B,WAAWC,kBAAkB+hE,qBAGjC,GASD2tD,QAAApzH,UAAAm2I,+BAAV,SAAyCC,GACrC,GAAMrtF,GAAM3+C,KAAK2+C,MACXv1C,EAAOu1C,EAAM7pD,KAAKs2I,eAClBa,EAAmBn3I,KAAKo3I,qBAC9B,OAAO34H,MAAKmgB,IAAIs4G,EAAU5iI,EAAO6iI,EAAkB,IAG7CjjB,QAAApzH,UAAAs2I,oBAAV,WACI,MAAQp3I,MAAK80I,OAAO90I,KAAKu1I,WAAa,GAAG8B,kBAAoB,GAAM,KAGhEnjB,QAAApzH,UAAA80H,cAAP,SAAqB4X,GACjB,GAAmB,MAAfxtI,KAAK02H,OAAgB,CACrB,GAAI12H,KAAK+0I,qBAAqBvH,GAAWvnC,QAAQ9rE,QAAQ,QAAW,CAGhE,IAAK,GAFDlhB,GAAQ,EAEHlZ,EAAI,EAAGA,EAAIytI,EAAWztI,IACvBC,KAAK+0I,qBAAqBh1I,GAAGkmG,QAAQ9rE,QAAQ,SAC7ClhB,GAIJA,GAAQ,GACR4nE,EAAAl2D,SAASoS,KAAK,qBAAqB9jB,GAI3C,GAAIjZ,KAAK+0I,qBAAqBvH,GAAWvnC,QAAQ9rE,QAAQ,QAAW,CAGhE,IAAK,GAFDlhB,GAAQ,EAEHlZ,EAAI,EAAGA,EAAIytI,EAAWztI,IACvBC,KAAK+0I,qBAAqBh1I,GAAGkmG,QAAQ9rE,QAAQ,SAC7ClhB,GAIJA,GAAQ,GACR4nE,EAAAl2D,SAASoS,KAAK,qBAAqB9jB,IAY/C,GAPA4nE,EAAAl2D,SAASoS,KAAK,sBAAwBywG,GAEtCxtI,KAAKm1I,sBACLn1I,KAAK62H,kBAAoB2W,EACzBxtI,KAAK80I,OAAOtH,GAAW7tH,SAAU,EACjC3f,KAAKiX,KAAKi9G,QAAQyB,aAEd31H,KAAKm1I,sBAAwBn1I,KAAKu1I,YAA6B,MAAfv1I,KAAK02H,OAAgB,CACrE71C,EAAAl2D,SAASzV,KAAK,mBAAoB,IACN,MAAxBlV,KAAKy2I,iBACLl9H,aAAavZ,KAAKy2I,iBAEtBz2I,KAAKo1I,WAAWlgI,OAChBlV,KAAKq1I,gBAAgB11H,SAAU,CAc/B3f,MAAKiX,KAAKi9G,QAAQhD,kBAroBnBgD,QAAAhD,eAAyB,iBACzBgD,QAAAyB,YAAsB,gBAJjCzB,QAAA74G,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBlHgwiCxBisG,UkH/viCqBj5G,EAAAG,YAAhB/a,GAAA6zH,QAAOA,EA+oBP7zH,EAAAi1I,mBAOT5I,QAAS,YlHonhCP,SAASpsI,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GmHpziCjE5Z,EAAAzB,EAAgC,GAEhCkqI,EAAAlqI,EAAuB,KAEvB0b,EAAA1b,EAA+B,IAC/B2b,EAAA3b,EAAuB,IACvB8a,EAAA9a,EAA4B,IAC5ByS,EAAAzS,EAA2E,GAQ3E+1I,EAAA,SAAAhzI,GAA0B3B,EAAA20I,KAAAhzI,EAA1B,SAAAgzI,QAA0BhzI,EAAA7B,MAAArB,KAAAmD,WAqZ1B,MAjUW+yI,MAAAp1I,UAAA6rI,UAAP,SAAiBnvH,GACbxd,KAAKs3I,QAAU95H,EAAKU,aAAa,WAAaxI,SAAS8H,EAAKe,aAAa,YAAc,IACvFve,KAAKu3I,aAAe/5H,EAAKU,aAAa,gBAAkBxI,SAAS8H,EAAKe,aAAa,iBAAmB,GACtGve,KAAKw3I,SAAWh6H,EAAKU,aAAa,YAAcxI,SAAS8H,EAAKe,aAAa,aAAe,IAC1Fve,KAAKy3I,cAAgBj6H,EAAKU,aAAa,iBAAmBxI,SAAS8H,EAAKe,aAAa,kBAAoB,EACzGve,KAAKo8H,MAAQ5+G,EAAKU,aAAa,SAAWxI,SAAS8H,EAAKe,aAAa,UAAY,EACjFve,KAAK03I,WAAal6H,EAAKU,aAAa,cAAgBxI,SAAS8H,EAAKe,aAAa,eAAiB,GAO7F23H,KAAAp1I,UAAA+C,WAAP,SACI8zI,EACAC,EACAvzG,EACA4hE,EACA4xC,EACAC,EACAC,EACAhL,EACAiL,EACAC,EACApM,EACAC,EACAoM,EACAlB,GAEAh3I,KAAK23I,aAAeA,EACpB33I,KAAK43I,SAAWA,EAChB53I,KAAKqkC,MAAQA,EACbrkC,KAAKimG,QAAUA,EACfjmG,KAAK63I,MAAQA,EACb73I,KAAK83I,UAAYA,EACjB93I,KAAK+3I,UAAYA,EACjB/3I,KAAK+sI,YAAcA,EACnB/sI,KAAKg4I,eAAiBA,EACtBh4I,KAAKi4I,kBAAoBA,EACzBj4I,KAAK6rI,YAAcA,EACnB7rI,KAAK8rI,aAAeA,EACpB9rI,KAAKk4I,WAAaA,EAClBl4I,KAAKg3I,UAAYA,EAEjBh3I,KAAK6hG,UAAYjvF,EAAAa,iBAAiB,QAClCzT,KAAK6hG,UAAUnuF,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKm4I,oBAAoBtkI,KAAK7T,OAE3EA,KAAKkkG,mBAOFgyC,KAAAp1I,UAAAmoG,QAAP,SAAe77E,GACXptB,KAAKotB,KAAOA,GAOT8oH,KAAAp1I,UAAAs1H,YAAP,WAUI,IATAp2H,KAAKo4I,kBAAmB,EACxBp4I,KAAK0jG,YAAa,EAClB1jG,KAAKq4I,gBAAkB,EACvBr4I,KAAKs4I,WAAY,EACjBt4I,KAAKu4I,kBAELv4I,KAAK8e,EAAI9e,KAAK83I,UACd93I,KAAKgf,EAAIhf,KAAK+3I,UAEP/3I,KAAKkkG,eAAen4F,OAAS,GAChC/L,KAAKmrI,aAAanrI,KAAKkkG,eAAepiD,MAG1C,KAAK,GAAI/hD,GAAI,EAAGA,EAAIC,KAAKi4I,kBAAoBj4I,KAAK+sI,YAAc/sI,KAAKg4I,eAAgBj4I,IAAK,CACtF,GAAIulG,GAAQ,OACRkzC,EAAU,MAEVz4I,GAAIC,KAAKi4I,mBACT3yC,EACItlG,KAAK63I,OACA73I,KAAKotB,KAAKiX,MAAQrkC,KAAKi4I,kBAAoBj4I,KAAK+sI,YAAchtI,EAAI,EAAIC,KAAK63I,MAAM9rI,QAC9E/L,KAAK63I,MAAM9rI,QAEvBysI,EAAaz4I,IAAMC,KAAKi4I,kBAAoB,EAAI5N,EAAAE,OAAOM,aAAeR,EAAAE,OAAOO,UACtE/qI,EAAIC,KAAKi4I,kBAAoBj4I,KAAK+sI,aACzCznC,EAAWtlG,KAAKotB,KAAK64E,QAAQjmG,KAAKi4I,kBAAoBj4I,KAAK+sI,YAAchtI,EAAI,GAC7Ey4I,EAAanO,EAAAE,OAAOM,eAEpBvlC,EACItlG,KAAK63I,OACA73I,KAAKotB,KAAKiX,MAAQrkC,KAAKi4I,kBAAoBj4I,KAAK+sI,YAAchtI,EAAI,EAAIC,KAAK63I,MAAM9rI,QAC9E/L,KAAK63I,MAAM9rI,QAEvBysI,EAAaz4I,IAAMC,KAAKi4I,kBAAoBj4I,KAAK+sI,YAAc1C,EAAAE,OAAOM,aAAeR,EAAAE,OAAOO,UAGhF,IAAZxlC,GAAkBkzC,GAAcnO,EAAAE,OAAOM,eACvC2N,EAAa,0BAGjBx4I,KAAKkkG,eAAexgE,QAAQ1jC,KAAKkrI,UAAU5lC,EAAW,EAAGkzC,IAEzDx4I,KAAK8R,SAAS9R,KAAKkkG,eAAe,IAGtC,IAAK,GAAInkG,GAAI,EAAGA,EAAIC,KAAKkkG,eAAen4F,OAAQhM,IAAK,CACjD,GAAM0lG,GAASzlG,KAAKkkG,eAAenkG,EACnC0lG,GAAO3mF,GAAK2mF,EAAO4lC,QACnB5lC,EAAOzmF,EAAIhf,KAAK8rI,cAAgB/rI,EAAIC,KAAKg4I,gBAAkBvyC,EAAO6lC,UAQnE4K,KAAAp1I,UAAAuiG,UAAP,WACIrjG,KAAKo4I,kBAAmB,EACxBp4I,KAAK0jG,YAAa,EAClB1jG,KAAKq4I,gBAAkB,EACvBr4I,KAAKs4I,WAAY,EACjBt4I,KAAKu4I,kBACLv4I,KAAKy4I,UAAYz4I,KAAKo8H,MACtBp8H,KAAKklG,YAAcllG,KAAKotB,KAAKiX,MAAQrkC,KAAKg4I,eAAiBh4I,KAAK63I,MAAM9rI,QAAU/L,KAAK63I,MAAM9rI,OAE3F/L,KAAKymG,eAOFyvC,KAAAp1I,UAAAghG,SAAP,SAAgB3tE,EAAwBukH,GAAxB,SAAAvkH,OAAA,GAAwB,SAAAukH,MAAA,GACpC14I,KAAK6hG,UAAU3sF,OAEXif,GACAn0B,KAAKo4I,kBAAmB,EACxBp4I,KAAKy4I,UAAYz4I,KAAK03I,WACtB13I,KAAKiX,KAAKi/H,KAAKyC,aAAc34I,KAAKqkC,QAElCrkC,KAAK6hG,UAAU1sF,MAAsB,IAAhBujI,EAAoBA,EAAc14I,KAAKg3I,YAI1Dd,KAAAp1I,UAAAq3I,oBAAV,WACIn4I,KAAKiX,KAAKi/H,KAAKyC,aAAc34I,KAAKqkC,OAClCrkC,KAAKo4I,kBAAmB,EACxBp4I,KAAK0jG,YAAa,GAGfwyC,KAAAp1I,UAAAu2I,gBAAP,WACI,GAAMuB,GAAkB54I,KAAKg4I,eAAiBh4I,KAAK+sI,YAAc/sI,KAAKi4I,kBAAoB,CAC1F,OAAOj4I,MAAKg3I,UAAY4B,EAAkB54I,KAAKo8H,MAA6B,EAArBp8H,KAAKy3I,eAOzDvB,KAAAp1I,UAAA+3I,UAAP,SAAiB5yC,EAAwByyC,GAAA,SAAAA,MAAA,GACrC14I,KAAKo4I,kBAAmB,EACxBp4I,KAAK0jG,YAAa,EAClB1jG,KAAKq4I,gBAAkB,EACvBr4I,KAAKs4I,WAAY,EACjBt4I,KAAKu4I,eAAiBtyC,EAEtBjmG,KAAK6hG,UAAU3sF,OACflV,KAAK6hG,UAAU1sF,MAAsB,IAAhBujI,EAAoBA,EAAc14I,KAAKg3I,YAOtDd,KAAAp1I,UAAA2lG,YAAV,WACI3qF,EAAAe,OAAOC,aAAa9c,KAAM,YAC1B8b,EAAAe,OAAOmH,cAAchkB,MACjByjB,QAASzjB,KAAK83I,UAAW93I,KAAK83I,UAAW93I,KAAK83I,WAC9Cp0H,QAAS1jB,KAAK+3I,UAAW/3I,KAAK+3I,UAAY/3I,KAAKs3I,QAASt3I,KAAK+3I,WAC7Dx1H,cAAmC,EAApBviB,KAAKu3I,aACpB90H,WAAYziB,KAAKk4I,WACjBzpH,iBAAkBzuB,KAAK+lG,SACvBl3E,cAAe7uB,QAQbk2I,KAAAp1I,UAAAilG,SAAV,WACIjqF,EAAAe,OAAOC,aAAa9c,KAAM,YAC1B8b,EAAAe,OAAOmH,cAAchkB,MACjByjB,QAASzjB,KAAK83I,UAAW93I,KAAK83I,WAC9Bp0H,QAAS1jB,KAAK+3I,UAAW/3I,KAAK+3I,UAAY/3I,KAAK8rI,cAC/CvpH,cAAeviB,KAAKy4I,UACpBhqH,iBAAkBzuB,KAAK84I,WACvBjqH,cAAe7uB,QAIbk2I,KAAAp1I,UAAAg4I,WAAV,WACI94I,KAAKmrI,aAAanrI,KAAKkkG,eAAepiD,OAElC9hD,KAAKo4I,mBAAqBp4I,KAAK0jG,aACL,OAAtB1jG,KAAK23I,aACL33I,KAAK0jG,YAAa,EACX1jG,KAAK23I,aAAaj0C,aACzB1jG,KAAK0jG,YAAa,IAI1B1jG,KAAKklG,YAAcllG,KAAKklG,WAAa,EAAIllG,KAAK63I,MAAM9rI,QAAU/L,KAAK63I,MAAM9rI,MAEzE,IAAIu5F,GAAWtlG,KAAK63I,MAAM73I,KAAKklG,YAC3BszC,EAAanO,EAAAE,OAAOO,QAEpB9qI,MAAK0jG,aACD1jG,KAAKq4I,gBAAkBr4I,KAAKi4I,mBAC5B3yC,EACItlG,KAAK63I,OACA73I,KAAKotB,KAAKiX,MACPrkC,KAAKi4I,kBACLj4I,KAAK+sI,YACL/sI,KAAKq4I,gBACL,EACAr4I,KAAK63I,MAAM9rI,QACX/L,KAAK63I,MAAM9rI,QAEvBysI,EACIx4I,KAAKq4I,kBAAoBr4I,KAAKi4I,kBAAoB,EAAI5N,EAAAE,OAAOM,aAAeR,EAAAE,OAAOO,UAChF9qI,KAAKq4I,gBAAkBr4I,KAAKi4I,kBAAoBj4I,KAAK+sI,aAC5DznC,EAAWtlG,KAAKotB,KAAK64E,QAAQjmG,KAAKi4I,kBAAoBj4I,KAAK+sI,YAAc/sI,KAAKq4I,gBAAkB,GAChGG,EAAanO,EAAAE,OAAOM,eAEpBvlC,EACItlG,KAAK63I,OACA73I,KAAKotB,KAAKiX,MACPrkC,KAAKi4I,kBACLj4I,KAAK+sI,YACL/sI,KAAKq4I,gBACL,EACAr4I,KAAK63I,MAAM9rI,QACX/L,KAAK63I,MAAM9rI,QAEvBysI,EACIx4I,KAAKq4I,kBAAoBr4I,KAAKi4I,kBAAoBj4I,KAAK+sI,YACjD1C,EAAAE,OAAOM,aACPR,EAAAE,OAAOO,UAGrB9qI,KAAKq4I,mBAGTr4I,KAAKkkG,eAAexgE,QAAQ1jC,KAAKkrI,UAAU5lC,EAAW,EAAGkzC,IAEzDx4I,KAAK8R,SAAS9R,KAAKkkG,eAAe,GAElC,KAAK,GAAInkG,GAAI,EAAGA,EAAIC,KAAKkkG,eAAen4F,OAAQhM,IAAK,CACjD,GAAM0lG,GAASzlG,KAAKkkG,eAAenkG,EACnC0lG,GAAO3mF,GAAK2mF,EAAO4lC,QACnB5lC,EAAOzmF,EAAIhf,KAAK8rI,cAAgB/rI,EAAIC,KAAKg4I,gBAAkBvyC,EAAO6lC,QAIlEtrI,KAAK0jG,YACL1jG,KAAKq4I,kBAAoBr4I,KAAKi4I,kBAAoBj4I,KAAK+sI,YAAc/sI,KAAKg4I,eAE1Eh4I,KAAKqmG,eAELrmG,KAAK+lG,YAQHmwC,KAAAp1I,UAAAulG,aAAV,WACIvqF,EAAAe,OAAOC,aAAa9c,KAAM,YAC1B8b,EAAAe,OAAOmH,cAAchkB,MACjByjB,QAASzjB,KAAK83I,UAAW93I,KAAK83I,UAAW93I,KAAK83I,WAC9Cp0H,QAAS1jB,KAAK+3I,UAAW/3I,KAAK+3I,UAAY/3I,KAAKw3I,SAAUx3I,KAAK+3I,WAC9Dx1H,cAAoC,EAArBviB,KAAKy3I,cACpBhpH,iBAAkBzuB,KAAKinG,aACvBp4E,cAAe7uB,QAQbk2I,KAAAp1I,UAAAmmG,aAAV,WAGI,IAFAnrF,EAAAe,OAAOC,aAAa9c,KAAM,YAEnBA,KAAKkkG,eAAen4F,OAAS,GAChC/L,KAAKmrI,aAAanrI,KAAKkkG,eAAepiD,MAG1C9hD,MAAKiX,KAAKi/H,KAAKvgB,YAAa31H,KAAKqkC,QAO3B6xG,KAAAp1I,UAAAoqI,UAAV,SAAoB5lC,EAAkBkzC,GAClC,MAAOx4I,MAAKimG,QAAQilC,UAAU5lC,EAAUkzC,IAGlCtC,KAAAp1I,UAAAqqI,aAAV,SAAuB1lC,GACnBzlG,KAAKimG,QAAQklC,aAAa1lC,IAGvBywC,KAAAp1I,UAAAi4I,eAAP,WACI,MAAO/4I,MAAK0jG,YA9YOwyC,KAAAvgB,YAAsB,cACtBugB,KAAAyC,aAAuB,eAPlDzC,KAAA76H,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBnHqhjCxBiuH,OmHphjCkBj7H,EAAAG,YAAb/a,GAAA61I,KAAIA,GnH4hjCX,SAAS51I,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GoHvjjCjE5Z,EAAAzB,EAAgC,GAChCw0I,EAAAx0I,EAAqB,KACrB0b,EAAA1b,EAA+B,IAG/B81I,EAAA,SAAA/yI,GAA2B3B,EAAA00I,MAAA/yI,EAA3B,SAAA+yI,SAA2B/yI,EAAA7B,MAAArB,KAAAmD,WAsB3B,MAjBW8yI,OAAAn1I,UAAAuiG,UAAP,SAAiBh1E,GAAjB,GAAAvV,GAAA9Y,IACIA,MAAKo4I,kBAAmB,EACxBp4I,KAAK0jG,YAAa,EAClB1jG,KAAKq4I,gBAAkB,EACvBr4I,KAAKs4I,WAAY,EACjBt4I,KAAKu4I,kBACLv4I,KAAKy4I,UAAYz4I,KAAKo8H,MACtBp8H,KAAKklG,YAAcllG,KAAKotB,KAAKiX,MAAQrkC,KAAKg4I,eAAiBh4I,KAAK63I,MAAM9rI,QAAU/L,KAAK63I,MAAM9rI,OAEvFsiB,EAAQ,EACRvZ,WAAW,WACPgE,EAAK2tF,eACNp4E,GAEHruB,KAAKymG,eApBjBwvC,MAAA56H,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBpHiljCxBguH,QoHhljCmBtB,EAAAuB,KAAd71I,GAAA41I,MAAKA,GpHwljCZ,SAAS31I,EAAQD,EAASF,GAE/B,YqH/ljCD,IAAAyB,GAAAzB,EAAmC,GAEnC64I,EAAA74I,EAAyB,KACzBs4F,EAAAt4F,EAIO,GAqBME,GAAA44I,oBACTC,WAAY,EACZC,UAAW,EACXC,MAAO,EACPC,gBAAiB,GAGRh5I,EAAAi5I,sBACTC,aACAC,MAAO,EACPvd,OAAQ,EACRwd,OAAQ,EACRC,aAAc,EACdN,MAAO,EACPO,aAAc,EAMlB,IAAAnlB,GAAA,WA+CI,QAAAA,oBA/BUx0H,KAAA45I,iBAEA55I,KAAA65I,iBAYA75I,KAAA60I,mBAMH70I,KAAA+2I,gBAA0B,EAC1B/2I,KAAA85I,qBAA+B,EAC5B95I,KAAAm0B,OAAiB,EACpBn0B,KAAA+5I,0BACA/5I,KAAAg6I,4BASHh6I,KAAK4sI,UAAY,EACjB5sI,KAAKi6I,iBAAmB,GACxBj6I,KAAKk6I,yBAA2B,EAChCl6I,KAAKm6I,2BAA6B,EAClCn6I,KAAKo6I,oBAAqB,EAC1Bp6I,KAAKq6I,sBAAuB,EAC5Br6I,KAAKs6I,yBAA0B,EAC/Bt6I,KAAKu6I,0BAA2B,EAEhCv6I,KAAKw6I,cAAgBx6I,KAAKw6I,cAAc3mI,KAAK7T,KAI7C,KAAK,GADDo3H,IAA0B,uBAAwB,wBAC7Cr3H,EAAY,EAAGA,EAAIq3H,EAAQrrH,OAAQhM,IAAK,CAC7C,GAAI0lD,GAAkBgzC,EAAAO,cAAcvB,eAAe2/B,EAAQr3H,GAC7C,OAAV0lD,GACAzlD,KAAKq3H,YAAY5xE,GAKzB,IAAK,GAAI1lD,GAAI,EAAGA,EAAIC,KAAK4sI,UAAW7sI,IAChCC,KAAK+5I,uBAAuBh6I,IAAO+9E,OAAQz9E,EAAA44I,mBAAmBC,WAAY7a,UAAU,EAIxF,KAAK,GAAIt+H,GAAI,EAAGA,EAAIC,KAAK4sI,UAAW7sI,IAAK,CACG,MAApCC,KAAKg6I,yBAAyBj6I,KAC9BC,KAAKg6I,yBAAyBj6I,MAElC,KAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK01I,oBAAqBryG,IAC1CrjC,KAAKg6I,yBAAyBj6I,GAAGsjC,IAAOo3G,UAAU,EAAO38D,OAAQz9E,EAAAi5I,qBAAqBE,OAI9Fx5I,KAAK0iF,eAiab,MA1cI7hF,QAAAkD,eAAIywH,iBAAA1zH,UAAA,crH+jjCCub,IqH/jjCL,SAAezP,GACX5M,KAAK0iF,YAAc91E,GrHikjClB1I,YAAY,EACZC,cAAc,IqH/gjCZqwH,iBAAA1zH,UAAAa,OAAP,SAAc6b,GACV,GAAIA,EAAKU,aAAaw8H,EAA2BhO,SAE7C,IAAK,GADDtV,GAAyB55G,EAAKe,aAAam8H,EAA2BhO,SAAS9pH,MAAM,KAChF7iB,EAAY,EAAGA,EAAIq3H,EAAQrrH,OAAQhM,IAAK,CAC7C,GAAI0lD,GAAkBgzC,EAAAO,cAAcvB,eAAe2/B,EAAQr3H,GAC7C,OAAV0lD,GACAzlD,KAAKq3H,YAAY5xE,KAgBzB+uE,iBAAA1zH,UAAAu2H,YAAR,SAAoB75G,GACZA,EAAKU,aAAau6E,EAAA4C,+BAA+BC,cACjDt7F,KAAK4sI,UAAYl3H,SAAS8H,EAAKe,aAAak6E,EAAA4C,+BAA+BC,cAG3E99E,EAAKU,aAAau6E,EAAA4C,+BAA+BQ,wBACjD77F,KAAK01I,oBAAsBhgI,SAAS8H,EAAKe,aAAak6E,EAAA4C,+BAA+BQ,wBAGrFr+E,EAAKU,aAAau6E,EAAA8D,+BAA+BQ,sBACjD/8F,KAAKi6I,iBAAmBvkI,SAAS8H,EAAKe,aAAak6E,EAAA8D,+BAA+BQ,sBAGlFv/E,EAAKU,aAAau6E,EAAA4C,+BAA+BE,UACjDv7F,KAAK6sI,MAAQjrI,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAak6E,EAAA4C,+BAA+BE,UAGrF/9E,EAAKU,aAAau6E,EAAA4C,+BAA+BG,UACjDx7F,KAAK8sI,MAAQlrI,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAak6E,EAAA4C,+BAA+BG,UAGrFh+E,EAAKU,aAAau6E,EAAA8D,+BAA+BI,cACjD38F,KAAKg3I,UAAYthI,SAAS8H,EAAKe,aAAak6E,EAAA8D,+BAA+BI,eAQ5E63B,iBAAA1zH,UAAA4zH,mBAAP,SAA0BtrH,GACtBpJ,KAAK60I,gBAAgBh0I,OAAO0qB,KAAKniB,GAAS,IAAMA,EAAQvI,OAAO0qB,KAAKniB,GAAS,KAW1EorH,iBAAA1zH,UAAA+1I,YAAP,SAAmB9xI,GAIf,MAHA/E,MAAK26I,oBAAsB51I,EAAQ+xI,eACnC92I,KAAKm0B,MAAQpvB,EAAQovB,MAEdn0B,KAAK+5I,wBASNvlB,iBAAA1zH,UAAA85I,yBAAV,SAAmCC,EAA4BC,GAC3D,MAD+B,UAAAD,MAAA,GAE3B76I,KAAK+6I,aAAaF,EAAgBC,EAAe9B,EAAAgC,SAASC,gBAAkBj7I,KAAKk6I,0BAWlF1lB,iBAAA1zH,UAAAi6I,aAAP,SAAoBF,EAA4BC,EAAuBx1C,GAAnD,SAAAu1C,MAAA,EAGhB,KAAK,GAFD5hI,GAAQ,EAEHlZ,EAAI86I,EAAgB96I,GAAK+6I,EAAe/6I,IACzCC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ9rE,QAAQmrE,SAC5CrsF,GAIR,OAAOA,IAQDu7G,iBAAA1zH,UAAAo6I,eAAV,SAAyB1N,GAErB,MAAOxtI,MAAK+2I,gBAORviB,iBAAA1zH,UAAAq6I,wBAAR,SAAgCN,EAA4BC,GAA5B,SAAAD,MAAA,EAC5B,KAAK,GAAI96I,GAAI86I,EAAgB96I,GAAK+6I,EAAe/6I,IAC7C,GAAIC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ9rE,QAAQ6+G,EAAAgC,SAASC,oBAErD,MAAOl7I,EAIf,WAGMy0H,iBAAA1zH,UAAAs6I,0BAAV,SAAoC5N,EAAmBloC,GAEnD,IAAK,GADDrsF,GAAgB,EACXlZ,EAAI,EAAGA,EAAIytI,EAAWztI,IACvBC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ9rE,QAAQmrE,SAC5CrsF,GAGR,OAAOA,IAUDu7G,iBAAA1zH,UAAAu6I,8BAAV,SACIR,EACAC,EACAx1C,GAFA,SAAAu1C,MAAA,GAIA76I,KAAKm6I,2BAA6B,CAElC,KAAK,GAAIp6I,GAAI86I,EAAgB96I,GAAK+6I,EAAe/6I,IAC7C,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQl6F,OAAQs3B,IACxDrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,IAChCrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,KAAOiiE,GAC3CtlG,KAAKm6I,4BAMrB,OAAOn6I,MAAKm6I,4BAGT3lB,iBAAA1zH,UAAAw6I,iBAAP,WACI,MAAOt7I,MAAK45I,eAYTplB,iBAAA1zH,UAAAy6I,oBAAP,SAA2B/N,GACvB,GAAIxtI,KAAK+2I,eAAgB,CACrB,GAAIyE,GAAgBx7I,KAAKq7I,8BAA8B,EAAG7N,EAAWwL,EAAAgC,SAASC,cAO9E,QAAQzN,GACJ,IAAK,GACD,GAAIgO,EAAgB,EAChB,IAAK,GAAIn4G,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoBnN,GAAWvnC,QAAQl6F,OAAQs3B,IAChErjC,KAAK26I,oBAAoBnN,GAAWvnC,QAAQ5iE,IACxCrjC,KAAK26I,oBAAoBnN,GAAWvnC,QAAQ5iE,KAAO21G,EAAAgC,SAASC,gBAC5Dj7I,KAAKg6I,yBAAyBxM,GAAWnqG,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBF,WAInF,IAAqB,GAAjBoC,EACP,IAAK,GAAIn4G,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoBnN,GAAWvnC,QAAQl6F,OAAQs3B,IAChErjC,KAAK26I,oBAAoBnN,GAAWvnC,QAAQ5iE,IACxCrjC,KAAK26I,oBAAoBnN,GAAWvnC,QAAQ5iE,KAAO21G,EAAAgC,SAASC,gBAC5Dj7I,KAAKg6I,yBAAyBxM,GAAWnqG,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBG,YAKtF,KAAK,GAAIp2G,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoBnN,GAAWvnC,QAAQl6F,OAAQs3B,IAChErjC,KAAK26I,oBAAoBnN,GAAWvnC,QAAQ5iE,IACxCrjC,KAAK26I,oBAAoBnN,GAAWvnC,QAAQ5iE,KAAO21G,EAAAgC,SAASC,gBAC5Dj7I,KAAKg6I,yBAAyBxM,GAAWnqG,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBrd,OAM1F,MACJ,KAAK,GACD,GAAIuf,EAAgB,EAChB,IAAK,GAAIz7I,GAAI,EAAGA,GAAKytI,EAAWztI,IAC5B,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQl6F,OAAQs3B,IACxDrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,IAChCrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,KAAO21G,EAAAgC,SAASC,gBACpDj7I,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBK,kBAMlF,KAAK,GAAI55I,GAAI,EAAGA,GAAKytI,EAAWztI,IAC5B,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQl6F,OAAQs3B,IACxDrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,IAChCrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,KAAO21G,EAAAgC,SAASC,gBACpDj7I,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBE,MAOtF,MACJ,KAAK,GACD,GAAIgC,EAAgB,EAChB,IAAK,GAAIz7I,GAAI,EAAGA,GAAKytI,EAAWztI,IAC5B,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQl6F,OAAQs3B,IACxDrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,IAChCrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,KAAO21G,EAAAgC,SAASC,gBAChDl7I,GAAKytI,EACLxtI,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAChCz9E,EAAAi5I,qBAAqBK,aAEzB35I,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBF,WAMnF,CACHp5I,KAAK+2I,gBAAiB,CACtB,KAAK,GAAIh3I,GAAI,EAAGA,GAAKytI,EAAWztI,IAC5B,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQl6F,OAAQs3B,IACxDrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,KACpCrjC,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBrd,QAKlF,KACJ,KAAK,GACD,GAAIuf,EAAgB,EAChB,IAAK,GAAIz7I,GAAI,EAAGA,GAAKytI,EAAWztI,IAC5B,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQl6F,OAAQs3B,IACxDrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,IAChCrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,KAAO21G,EAAAgC,SAASC,gBAChDl7I,GAAKytI,EACLxtI,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAChCz9E,EAAAi5I,qBAAqBK,aAEzB35I,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBF,WAMnF,IAAqB,GAAjBoC,EACP,IAAK,GAAIz7I,GAAI,EAAGA,GAAKytI,EAAWztI,IAC5B,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQl6F,OAAQs3B,IACxDrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,IAChCrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,KAAO21G,EAAAgC,SAASC,gBACpDj7I,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBF,WAMlF,KAAK,GAAIr5I,GAAI,EAAGA,GAAKytI,EAAWztI,IAC5B,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQl6F,OAAQs3B,IACxDrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,KACpCrjC,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBrd,OAKlF,MACJ,KAAK,GACD,GAAIuf,EAAgB,EAChB,IAAK,GAAIz7I,GAAI,EAAGA,GAAKytI,EAAWztI,IAC5B,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQl6F,OAAQs3B,IACxDrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,IAChCrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,KAAO21G,EAAAgC,SAASC,gBAChDl7I,GAAKytI,EACLxtI,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAChCz9E,EAAAi5I,qBAAqBK,aAEzB35I,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBF,WAMnF,IAAqB,GAAjBoC,GAAuC,GAAjBA,EAC7B,IAAK,GAAIz7I,GAAI,EAAGA,GAAKytI,EAAWztI,IAC5B,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQl6F,OAAQs3B,IACxDrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,IAChCrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,KAAO21G,EAAAgC,SAASC,gBACpDj7I,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBF,WAMlF,KAAK,GAAIr5I,GAAI,EAAGA,GAAKytI,EAAWztI,IAC5B,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQl6F,OAAQs3B,IACxDrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,KACpCrjC,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBrd,aAQ1F,KAAK,GAAIl8H,GAAI,EAAGA,GAAKytI,EAAWztI,IAC5B,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQl6F,OAAQs3B,IAC5DrjC,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBrd,MAK9E,OAAOj8H,MAAKg6I,0BAYTxlB,iBAAA1zH,UAAA26I,eAAP,SAAsBjO,KAKfhZ,iBAAA1zH,UAAA05I,cAAP,WACI,IAAK,GAAIz6I,GAAI,EAAGA,GAAKC,KAAK4sI,UAAY,EAAG7sI,IACrC,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQl6F,OAAQs3B,IACxDrjC,KAAK26I,oBAAoB56I,GAAGkmG,QAAQ5iE,KACpCrjC,KAAKg6I,yBAAyBj6I,GAAGsjC,GAAGy6C,OAASz9E,EAAAi5I,qBAAqBrd,OAK9Ej8H,MAAKo6I,oBAAqB,EAC1Bp6I,KAAKq6I,sBAAuB,EAC5Br6I,KAAKs6I,yBAA0B,EAC/Bt6I,KAAKu6I,0BAA2B,GAQ7B/lB,iBAAA1zH,UAAA46I,cAAP,SAAqB7L,KAgBXrb,iBAAA1zH,UAAA0R,IAAV,SAAcC,KAMlB+hH,mBArfan0H,GAAAm0H,iBAAgBA,CAuf7B,IAAMkmB,IACFhO,QAAS,YrHo6iCP,SAASpsI,EAAQD,GAEtB,YsH98jCD,IAAA26I,GAAA,mBAAAA,aAQA,MAH2BA,UAAAC,cAAwB,GACxBD,SAAAW,eAAgC,IAChCX,SAAAY,eAAgC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAC9EZ,WARa36I,GAAA26I,SAAQA,GtH49jCf,SAAS16I,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GuHx+jCjE5Z,EAAAzB,EAAgC,GAChCktH,EAAAltH,EAAiC,IACjCmzH,EAAAnzH,EAA8B,IAC9BosI,EAAApsI,EAAgC,KAChC0b,EAAA1b,EAA+B,IAC/B8a,EAAA9a,EAA4B,IAU5Bm0H,EAAA,SAAApxH,GAAqC3B,EAAA+yH,gBAAApxH,EAArC,SAAAoxH,mBAAqCpxH,EAAA7B,MAAArB,KAAAmD,WAEzBnD,KAAA67I,SAKA77I,KAAA87I,iBACA97I,KAAA+7I,iBACA/7I,KAAAg8I,gBAEAh8I,KAAAi8I,iBACAj8I,KAAAk8I,iBAEAl8I,KAAAm8I,kBAmVZ,MA3TI7nB,iBAAAxzH,UAAA2c,aAAA,SAAaD,GAAb,GAAA1E,GAAA9Y,IAGI,IAFAkD,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,GAEfxd,KAAK0R,MAEL,IAAK,GAAIugD,KAAamqF,GAA2B,CAC7C,GAAMC,GAAOD,EAA0BnqF,EACnCjyD,MAAK0R,MAAM8L,KAAKU,aAAam+H,IAC7B7+H,EAAKrR,aAAakwI,EAAMr8I,KAAK0R,MAAM8L,KAAKe,aAAa89H,IAKjE,GAAI7+H,EAAKU,aAAak+H,EAA0BE,iBAAkB,CAC9D,GAAIh0F,GAAQ9qC,EAAKe,aAAa69H,EAA0BE,iBAAiB15H,MAAM,IAC/E0lC,GAAMh6B,QAAQ,SAAC3Q,GACP7E,EAAK6uF,OAAOhqF,IACZ7E,EAAKqjI,eAAez0H,KAAK5O,EAAK6uF,OAAOhqF,MAKjD,GAAIH,EAAKU,aAAak+H,EAA0BG,iBAAkB,CAC9D,GAAIjtC,GAAKtvG,KAAK2nG,OAAOnqF,EAAKe,aAAa69H,EAA0BG,iBAC7DjtC,IAAMA,YAAcr0F,GAAAG,YACpBpb,KAAKw8I,MAAQltC,GAEbtvG,KAAKw8I,MAAQ,GAAInvB,GAAA0B,iBACjB/uH,KAAK8R,SAAS9R,KAAKw8I,YAGvBx8I,MAAKw8I,MAAQ,GAAInvB,GAAA0B,iBACjB/uH,KAAK8R,SAAS9R,KAAKw8I,MAGvB,IAAIh/H,EAAKU,aAAak+H,EAA0BK,qBAAsB,CAClE,GAAIC,GAAoBl/H,EAAKe,aAAa69H,EAA0BK,qBAAqB75H,MAAM,IAC/F5iB,MAAK87I,iBACLY,EAAkBpuH,QAAQ,SAAC3Q,EAAM0mB,GACzBvrB,EAAK6uF,OAAOhqF,IAAS7E,EAAK6uF,OAAOhqF,YAAiB21G,GAAAmB,gBAClD37G,EAAKgjI,cAAcz3G,GAASvrB,EAAK6uF,OAAOhqF,GACxC7E,EAAK0jI,MAAM1qI,SAASgH,EAAK6uF,OAAOhqF,OAK5C,GAAIH,EAAKU,aAAak+H,EAA0BO,qBAAsB,CAClE,GAAIC,GAAoBp/H,EAAKe,aAAa69H,EAA0BO,qBAAqB/5H,MAAM,IAC/F5iB,MAAK+7I,iBACLa,EAAkBtuH,QAAQ,SAAC3Q,EAAM0mB,GACzBvrB,EAAK6uF,OAAOhqF,IAAS7E,EAAK6uF,OAAOhqF,YAAiB21G,GAAAmB,gBAClD37G,EAAKijI,cAAc13G,GAASvrB,EAAK6uF,OAAOhqF,GACxC7E,EAAK0jI,MAAM1qI,SAASgH,EAAK6uF,OAAOhqF,OAK5C,GAAIH,EAAKU,aAAak+H,EAA0BS,oBAAqB,CACjE,GAAIv0F,GAAQ9qC,EAAKe,aAAa69H,EAA0BS,oBAAoBj6H,MAAM,IAClF0lC,GAAMh6B,QAAQ,SAAC3Q,GACX,GAAMvU,GAAU0P,EAAK6uF,OAAOhqF,EACxBvU,aAAmBmjI,GAAAsE,kBACnB/3H,EAAKmjI,cAAcv0H,KAAKte,GACxBA,EAAQsK,GAAG,QAASoF,EAAKgkI,UAAUjpI,KAAKiF,IACxC1P,EAAQsK,GACJ,WACA,WACI1T,KAAKiX,KAAKq9G,gBAAgByoB,qBAC5BlpI,KAAKiF,IAEX1P,EAAQuW,SAAU,KAK9B,GAAInC,EAAKU,aAAak+H,EAA0BY,oBAAqB,CACjE,GAAI10F,GAAQ9qC,EAAKe,aAAa69H,EAA0BY,oBAAoBp6H,MAAM,IAClF0lC,GAAMh6B,QAAQ,SAAC3Q,GACX,GAAMvU,GAAU0P,EAAK6uF,OAAOhqF,EACxBvU,aAAmBmjI,GAAAsE,kBACnB/3H,EAAKojI,cAAcx0H,KAAKte,GACxBA,EAAQsK,GAAG,QAASoF,EAAKmkI,UAAUppI,KAAKiF,IACxC1P,EAAQsK,GACJ,WACA,WACI1T,KAAK2f,SAAU,EACf3f,KAAKiX,KAAKq9G,gBAAgB4oB,oBACtBl9I,KAAKq0B,WACLr0B,KAAKq0B,WACLr0B,KAAKq0B,SAAW,OAEtBxgB,KAAKiF,IAEX1P,EAAQuW,SAAU,KAK9B,GAAInC,EAAKU,aAAak+H,EAA0Be,mBAAoB,CAChE,GAAIC,GAAcl0I,SAASC,eAAeqU,EAAKe,aAAa69H,EAA0Be,mBAClFC,KACAp9I,KAAKq9I,aAAeD,KAKhC9oB,gBAAAxzH,UAAA4c,aAAA,SAAaF,GACTta,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,GAE4C,QAA3DA,EAAKe,aAAa69H,EAA0BkB,cAC5Ct9I,KAAK67I,MAAQ,OAWXvnB,gBAAAxzH,UAAA6b,gBAAV,SAA0B5X,GACtB7B,EAAApC,UAAM6b,gBAAelc,KAAAT,KAAC+E,GACtB/E,KAAK87I,cAAgB,KACrB97I,KAAK+7I,cAAgB,MAGlBznB,gBAAAxzH,UAAAmoG,QAAP,SAAe77E,EAAmCmwH,GAC9C,IAAK,GAAIx9I,GAAI,EAAGA,EAAIqtB,EAAKrhB,OAAQhM,IAAK,CAClC,GAAIoN,GAAMigB,EAAKrtB,GAEXqJ,EAAyBpJ,KAAK87I,cAAc/7I,EAChD,IAAIoN,GACA,GAAI/D,EAAQqwH,mBAAqBnF,gBAAgB0D,WAAY,CACzD,GAAIpjE,GAAyB50D,KAAK+7I,cAAch8I,GAAkB,eAAboN,EAAIonB,KAAwB,EAAI,GAIrF,IAFAqgC,EAAQj1C,SAAU,EAED,QAAbxS,EAAIonB,KAICgpH,GAIDn0I,EAAQ2tH,SAASzC,gBAAgBkpB,eACjC5oF,EAAQmiE,SAASzC,gBAAgBkpB,iBAJjCp0I,EAAQ2tH,SAASzC,gBAAgBmpB,SACjC7oF,EAAQmiE,SAASzC,gBAAgBmpB,cAQrC,IAAiB,eAAbtwI,EAAIonB,KAAuB,CAE3B,GAAImpH,GAAgC9oF,EAAQwkE,sBACxC,aAQJ,IALIskB,GAAeA,EAAYvK,aAC3BuK,EAAYvK,WAAW5zE,KAAO,IAAMpyD,EAAI8L,MAAMlL,YAI7CZ,EAAIwwI,OAkBAJ,GAIDn0I,EAAQ2tH,SAASzC,gBAAgBspB,uBACjChpF,EAAQmiE,SAASzC,gBAAgBupB,oBAJjCz0I,EAAQ2tH,SAASzC,gBAAgBwpB,iBACjClpF,EAAQmiE,SAASzC,gBAAgBypB,iBApBxB,CACRR,GAIDn0I,EAAQ2tH,SAASzC,gBAAgB0pB,qBACjCppF,EAAQmiE,SAASzC,gBAAgB2pB,gBAJjC70I,EAAQ2tH,SAASzC,gBAAgB4pB,eACjCtpF,EAAQmiE,SAASzC,gBAAgB6pB,QAOrC,IAAIC,GAA4Bp+I,KAAKq+I,uBAAuB,eAEvDd,GAAUa,GACPA,EAAW7kB,SAASx5H,EAAI,GAAGgO,aAC3BqwI,EAAWrnB,UAAUh3H,EAAI,GAAGgO,iBAYrC,IAAiB,cAAbZ,EAAIonB,KAAsB,CAEjC,GAAImpH,GAAgC9oF,EAAQwkE,sBACxC,aAQJ,IALIskB,GAAeA,EAAYvK,aAC3BuK,EAAYvK,WAAW5zE,KAAO,IAAMpyD,EAAI8L,MAAMlL,YAI7CZ,EAAIwwI,OAkBAJ,GAIDn0I,EAAQ2tH,SAASzC,gBAAgBgqB,qBACjC1pF,EAAQmiE,SAASzC,gBAAgBupB,oBAJjCz0I,EAAQ2tH,SAASzC,gBAAgBiqB,eACjC3pF,EAAQmiE,SAASzC,gBAAgBypB,iBApBxB,CACRR,GAIDn0I,EAAQ2tH,SAASzC,gBAAgBkqB,mBACjC5pF,EAAQmiE,SAASzC,gBAAgB2pB,gBAJjC70I,EAAQ2tH,SAASzC,gBAAgBmqB,aACjC7pF,EAAQmiE,SAASzC,gBAAgB6pB,QAOrC,IAAIO,GAA4B1+I,KAAKq+I,uBAAuB,eAEvDd,GAAUmB,GACPA,EAAWnlB,SAASx5H,EAAI,GAAGgO,aAC3B2wI,EAAW3nB,UAAUh3H,EAAI,GAAGgO,iBAcxC3E,GAAQ2tH,SAASzC,gBAAgB0D,YACjCpjE,EAAQmiE,SAASzC,gBAAgBqqB,cAK7Cv1I,GAAQ2tH,SAASzC,gBAAgB0D,YACjCh4H,KAAK+7I,cAAch8I,GAAG4f,SAAU,EAChC3f,KAAK+7I,cAAch8I,EAAI,GAAG4f,SAAU,IAKzC20G,gBAAAxzH,UAAA88E,MAAP,SAAaxwD,GACLA,IACIptB,KAAK67I,QACL77I,KAAK67I,MAAQ,MAEjB77I,KAAKipG,QAAQ77E,GAAM,IAGnBptB,KAAKi8I,cAAclwI,QACnB/L,KAAKi9I,YACLj9I,KAAKi8I,cAAc3tH,QAAQ,SAACllB,GACxBA,EAAQuW,SAAU,EAClBvW,EAAQ2zB,UAGZ/8B,KAAK88I,YAET98I,KAAK2f,SAAU,EACf3f,KAAK4+I,qBAAqBtqB,gBAAgB6pB,SAGvC7pB,gBAAAxzH,UAAA+8E,MAAP,SAAaghE,EAAuBxqH,GAC5BA,EACAr0B,KAAKq0B,SAAWA,EAEhBr0B,KAAKq0B,SAAW,KAEhBr0B,KAAKk8I,cAAcnwI,OACnB/L,KAAKk8I,cAAc5tH,QAAQ,SAACllB,EAASi7B,GACjCj7B,EAAQuW,SAAU,EAClBvW,EAAQ2zB,KAAK8hH,GAASA,EAAMx6G,GAASw6G,EAAMx6G,GAAS,SAGxDrkC,KAAKi9I,YACDj9I,KAAKq0B,WACLr0B,KAAKq0B,WACLr0B,KAAKq0B,SAAW,OAGxBr0B,KAAK4+I,qBAAqBtqB,gBAAgBqqB,UAGvCrqB,gBAAAxzH,UAAAg8I,UAAP,WACI98I,KAAKw8I,MAAM78H,SAAU,GAGlB20G,gBAAAxzH,UAAAm8I,UAAP,WACIj9I,KAAKw8I,MAAM78H,SAAU,GAGlB20G,gBAAAxzH,UAAAg+I,UAAP,WACI9+I,KAAK+7I,cAAcztH,QAAQ,SAACllB,GACxBA,EAAQuW,SAAU,KAIlB20G,gBAAAxzH,UAAA89I,qBAAR,SAA6BnsI,EAAWinH,EAA4BrrG,GAA5B,SAAAqrG,OAAA,GACpC15H,KAAK++I,mBAAqBtsI,EAC1BzS,KAAKm8I,eAAe7tH,QAAQ,SAACllB,GACrBA,EAAQmwH,QAAQ9mH,IAChBrJ,EAAQ2tH,SAAStkH,EAAGinH,EAAWrrG,MAKnCimG,gBAAAxzH,UAAAu9I,uBAAR,SAA+B1gI,GAC3B,GAAIlL,EAMJ,OALAzS,MAAKm8I,eAAe7tH,QAAQ,SAACllB,GACrBA,EAAQuU,OAASA,IACjBlL,EAAIrJ,KAGLqJ,GA9UJ6hH,gBAAA0D,WAAqB,SACrB1D,gBAAAmqB,YAAsB,WACtBnqB,gBAAAkqB,kBAA4B,kBAC5BlqB,gBAAA4pB,cAAwB,aACxB5pB,gBAAA0pB,oBAA8B,oBAC9B1pB,gBAAAiqB,cAAwB;AACxBjqB,gBAAAgqB,oBAA8B,qBAC9BhqB,gBAAAwpB,gBAA0B,gBAC1BxpB,gBAAAspB,sBAAgC,uBAChCtpB,gBAAA6pB,OAAiB,KACjB7pB,gBAAA2pB,aAAuB,YACvB3pB,gBAAAqqB,QAAkB,MAClBrqB,gBAAAypB,WAAqB,SACrBzpB,gBAAAupB,iBAA2B,gBAC3BvpB,gBAAAmpB,QAAkB,MAClBnpB,gBAAAkpB,cAAwB,aAERlpB,gBAAA0qB,kBAA4B,eAC5B1qB,gBAAAyoB,mBAA6B,gBAC7BzoB,gBAAA4oB,mBAA6B,gBArCxD5oB,gBAAAj5G,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBvHmxkCxBqsG,kBuHlxkC6BjH,EAAA0B,iBAAxB1uH,GAAAi0H,gBAAeA,CAmW5B,IAAM8nB,IACFE,gBAAiB,iBAEjBC,gBAAiB,iBAEjB0C,mBAAoB,eAEpBtC,oBAAqB,gBAErBF,oBAAqB,gBAErByC,KAAM,OACN5B,WAAY,YAEZH,kBAAmB,cAEnBN,mBAAoB,eACpBG,mBAAoB,iBvHk7jClB,SAAS18I,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MwH3zkCpFu3I,EAAA74I,EAAyB,KACzBozH,EAAApzH,EAOO,KACP0gF,EAAA1gF,EAAyB,IACzByS,EAAAzS,EAA2E,GAK3EwzH,EAAA,SAAAzwH,GAAkC3B,EAAAoyH,aAAAzwH,EAM9B,SAAAywH,gBACIzwH,EAAAzC,KAAAT,MAGAA,KAAKk6I,yBAA2B,EAEhCl6I,KAAK45I,cAAgBZ,EAAAgC,SAASC,cAC9Bj7I,KAAK65I,cAAgBb,EAAAgC,SAASW,cAE9B37I,KAAKm/I,sBAAwB,EAC7Bn/I,KAAKo/I,oBAAsB,EAE3Bp/I,KAAKq/I,0BAA4BzsI,EAAAa,iBAAiB,4BAClDzT,KAAKq/I,0BAA0B3rI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKs/I,yBAAyBzrI,KAAK7T,OAgTxG,MA7SIa,QAAAkD,eAAI4vH,aAAA7yH,UAAA,cxHyykCCub,IwHzykCL,SAAezP,KxH0ykCV1I,YAAY,EACZC,cAAc,IwHjykCZwvH,aAAA7yH,UAAA+1I,YAAP,SAAmB9xI,GACf/E,KAAK26I,oBAAsB51I,EAAQ+xI,eACnC92I,KAAKm0B,MAAQpvB,EAAQovB,KACrB,IAAIorH,GAAkB,CAEtBv/I,MAAK+2I,gBAAiB,EACtB/2I,KAAK85I,qBAAsB,CAE3B,KAAK,GAAItM,GAAY,EAAGA,EAAYxtI,KAAK4sI,UAAWY,IAC5CxtI,KAAKo7I,0BAA0B5N,EAAWxtI,KAAK45I,gBAAkB,GAAKpM,EAAY,GAC7EzoI,EAAQovB,MAGTn0B,KAAK85I,qBAAsB,EAF3B95I,KAAK+2I,gBAAiB,EAI1BwI,GAAmBv/I,KAAKi6I,iBACxBj6I,KAAK+5I,uBAAuBvM,GAAW1vD,OAASy1C,EAAA0lB,mBAAmBG,OAEnEp5I,KAAK+5I,uBAAuBvM,GAAW1vD,OAASy1C,EAAA0lB,mBAAmBE,UAEvEn5I,KAAK+5I,uBAAuBvM,GAAWwJ,UAAYxJ,EAAYxtI,KAAKg3I,UAAYuI,CAGpF,OAAOv/I,MAAK+5I,wBASNpmB,aAAA7yH,UAAA85I,yBAAV,SAAmCC,EAA4BC,GAC3D,MAD+B,UAAAD,MAAA,GACxB76I,KAAK+6I,aAAaF,EAAgBC,EAAe96I,KAAK45I,gBAAkB55I,KAAKk6I,0BAqBjFvmB,aAAA7yH,UAAAy6I,oBAAP,SAA2B/N,GAOvB,IAAK,GANDgO,GAAgBx7I,KAAKq7I,8BAA8B,EAAG7N,EAAWxtI,KAAK45I,eAEtE4F,EAAax/I,KAAKo7I,0BAA0B5N,EAAY,EAAGxtI,KAAK45I,eAI3D6F,GAFiB,GAAdD,GAAmBhS,EAAY,GAAKxtI,KAAK26I,oBAAoB5uI,OAEvD,GAAG0zI,EAASz/I,KAAK26I,oBAAoB5uI,OAAQ0zI,IAC3D,IAAK,GAAIC,GAAW,EAAGA,EAAW1/I,KAAK26I,oBAAoB8E,GAAQx5C,QAAQl6F,OAAQ2zI,IAC3ED,IAAWjS,EAEPxtI,KAAK26I,oBAAoB8E,GAAQx5C,QAAQy5C,KAAc1/I,KAAK45I,eAExD4B,EAAgB,GAAKiE,EAASz/I,KAAKm/I,wBAA0B,GAEzDM,EAAS,GAAKz/I,KAAK26I,oBAAoB5uI,OACvC/L,KAAKg6I,yBAAyByF,GAAQC,GAAU5hE,OAASy1C,EAAA+lB,qBAAqBrd,OAE9Ej8H,KAAKg6I,yBAAyByF,GAAQC,GAAU5hE,OAC5Cy1C,EAAA+lB,qBAAqBK,aAE7B94D,EAAAl2D,SAASoS,KAAK,gCAAiC/8B,KAAKo/I,sBAGhDI,GAAc,GAAKhS,GAAa,GAAKA,EAAYgS,IAAe,EAChEx/I,KAAKg6I,yBAAyByF,GAAQC,GAAU5hE,OAC5Cy1C,EAAA+lB,qBAAqBI,aAEzB15I,KAAKg6I,yBAAyByF,GAAQC,GAAU5hE,OAASy1C,EAAA+lB,qBAAqBG,OAGtFz5I,KAAKm/I,yBAEDK,GAAc,GAAKhS,GAAa,GAAKA,EAAYgS,IAAe,EAChEx/I,KAAKg6I,yBAAyByF,GAAQC,GAAU5hE,OAASy1C,EAAA+lB,qBAAqBI,aAE9E15I,KAAKg6I,yBAAyByF,GAAQC,GAAU5hE,OAASy1C,EAAA+lB,qBAAqBG,OAKlFjM,EAAYgS,EAAa,EAErBx/I,KAAK26I,oBAAoB8E,GAAQx5C,QAAQy5C,KAAc1/I,KAAK45I,cAC5D55I,KAAKg6I,yBAAyByF,GAAQC,GAAU5hE,OAASy1C,EAAA+lB,qBAAqBC,UAE9Ev5I,KAAKg6I,yBAAyByF,GAAQC,GAAU5hE,OAASy1C,EAAA+lB,qBAAqBrd,OAGpE,GAAdujB,GACAhS,GAAa,GACbxtI,KAAK26I,oBAAoB8E,GAAQx5C,QAAQy5C,KAAc1/I,KAAK45I,cAG5D55I,KAAKg6I,yBAAyByF,GAAQC,GAAU5hE,OAASy1C,EAAA+lB,qBAAqBE,MACzD,GAAdgG,GAAmBhS,EAAY,GAAKxtI,KAAK26I,oBAAoB5uI,OAEpE/L,KAAKg6I,yBAAyByF,GAAQC,GAAU5hE,OAASy1C,EAAA+lB,qBAAqBrd,OAG9Ej8H,KAAKg6I,yBAAyByF,GAAQC,GAAU5hE,OAASy1C,EAAA+lB,qBAAqBC,SAW9F,OALI/L,KAAcxtI,KAAK4sI,UAAY,IAC/B5sI,KAAKm/I,sBAAwB,EAC7Bn/I,KAAKo/I,oBAAsB,GAGxBp/I,KAAKg6I,0BAYTrmB,aAAA7yH,UAAA26I,eAAP,SAAsBjO,GAClB,IAAIxtI,KAAK+2I,eA6DL,MADA/2I,MAAK07I,eAAc,IACZ,CA1DP,IAAkD,MAA9C17I,KAAK+5I,uBAAuBvM,EAAY,GAAY,CACpD,GAAIxtI,KAAK+5I,uBAAuBvM,EAAY,GAAG1vD,QAAUy1C,EAAA0lB,mBAAmBG,MAC5B,MAAxCp5I,KAAK60I,gBAA8B,eACnC70I,KAAK60I,gBAA8B,aAAEh3H,MAAQ,EAC7C7d,KAAK60I,gBAA8B,aAAEl1H,SAAU,EAC/C3f,KAAK60I,gBAA8B,aAAE/1H,EAAI9e,KAAK6sI,MAAMW,EAAY,GAChExtI,KAAK60I,gBAA8B,aAAE71H,EAAIhf,KAAK8sI,MAAMU,EAAY,GAChExtI,KAAK60I,gBAA8B,aAAE9d,SAAS,SAEF,MAA5C/2H,KAAK60I,gBAAkC,mBACvC70I,KAAK60I,gBAAkC,iBAAEh3H,MAAQ,EACjD7d,KAAK60I,gBAAkC,iBAAEl1H,SAAU,EAEc,QAA7D3f,KAAK60I,gBAAkC,iBAAEpb,kBACzCz5H,KAAK60I,gBAAkC,iBAAEtb,QAAQ,YAAciU,IAE/DxtI,KAAK60I,gBAAkC,iBAAE/1H,EAAI,EAC7C9e,KAAK60I,gBAAkC,iBAAE71H,EAAI,EAC7Chf,KAAK60I,gBAAkC,iBAAE9d,SAAS,YAAcyW,IACzDxtI,KAAK60I,gBAAkC,iBAAEtb,QAAQ,QAAUiU,IAClExtI,KAAK60I,gBAAkC,iBAAE/1H,EAAI,EAC7C9e,KAAK60I,gBAAkC,iBAAE71H,EAAI,EAC7Chf,KAAK60I,gBAAkC,iBAAE9d,SAAS,QAAUyW,KAE5DxtI,KAAK60I,gBAAkC,iBAAE/1H,EAAI9e,KAAK6sI,MAAMW,EAAY,GACpExtI,KAAK60I,gBAAkC,iBAAE71H,EAAIhf,KAAK8sI,MAAMU,EAAY,GACpExtI,KAAK60I,gBAAkC,iBAAE9d,SAAS,UAIrD/2H,KAAKq6I,uBAENr6I,KAAKq6I,sBAAuB,OAE7B,IAAIr6I,KAAK+5I,uBAAuBvM,EAAY,GAAG1vD,QAAUy1C,EAAA0lB,mBAAmBE,UAE/E,MADAn5I,MAAK07I,eAAc,IACZ,CAEX,QAAO,EAGsB17I,KAAKq7I,8BAA8B,EAAG7N,EAAWxtI,KAAK45I,eACvD55I,KAAKq7I,8BACjC7N,EACAA,EACAxtI,KAAK45I,cAeb,QAAO,GASJjmB,aAAA7yH,UAAA46I,cAAP,SAAqB7L,GACbA,GACAhvD,EAAAl2D,SAASoS,KAAK,wBAGd/8B,KAAKq6I,uBAGDr6I,KAAKm6I,2BAA6Bn6I,KAAKk6I,yBAClCl6I,KAAKs6I,0BAENt6I,KAAKs6I,yBAA0B,GAG9Bt6I,KAAKu6I,2BACN15D,EAAAl2D,SAASoS,KAAK,wBACd/8B,KAAKu6I,0BAA2B,IAKA,MAAxCv6I,KAAK60I,gBAA8B,cAE2B,WAA1D70I,KAAK60I,gBAA8B,aAAEpb,kBACqB,UAA1Dz5H,KAAK60I,gBAA8B,aAAEpb,kBAErCz5H,KAAK60I,gBAA8B,aAAE9d,SAAS,SAGN,MAA5C/2H,KAAK60I,gBAAkC,kBAE2B,WAA9D70I,KAAK60I,gBAAkC,iBAAEpb,kBACqB,UAA9Dz5H,KAAK60I,gBAAkC,iBAAEpb,kBAEzCz5H,KAAK60I,gBAAkC,iBAAE9d,SAAS,UAKvDpD,aAAA7yH,UAAA05I,cAAP,SAAqBhN,GAGjB,GAAI2M,GAA6Bn6I,KAAKq7I,8BAA8B,EAAGr7I,KAAK4sI,UAAY,EAAG5sI,KAAK45I,gBAC5F55I,KAAKq6I,sBAAyB7M,GAAaxtI,KAAK4sI,UAAY,GAAK5sI,KAAK85I,uBAClEK,EAA6Bn6I,KAAKk6I,0BAGlCl6I,KAAKq/I,0BAA0BlqI,MAAM,KAI7CjS,EAAApC,UAAM05I,cAAa/5I,KAAAT,MAEnBA,KAAKo6I,oBAAqB,EAC1Bp6I,KAAKq6I,sBAAuB,EAEgB,MAAxCr6I,KAAK60I,gBAA8B,cAE2B,WAA1D70I,KAAK60I,gBAA8B,aAAEpb,kBACqB,UAA1Dz5H,KAAK60I,gBAA8B,aAAEpb,kBAErCz5H,KAAK60I,gBAA8B,aAAE9d,SAAS,SAIN,MAA5C/2H,KAAK60I,gBAAkC,kBAE2B,WAA9D70I,KAAK60I,gBAAkC,iBAAEpb,kBACqB,UAA9Dz5H,KAAK60I,gBAAkC,iBAAEpb,kBAEzCz5H,KAAK60I,gBAAkC,iBAAE9d,SAAS,UAKvDpD,aAAA7yH,UAAAw+I,yBAAP,WACSt/I,KAAKm0B,QACN0sD,EAAAl2D,SAASoS,KAAK,uBAAwB,GAAG,GACzC/8B,KAAKu6I,0BAA2B,IAG5C5mB,cAnUkCJ,EAAAiB,iBAArBn0H,GAAAszH,aAAYA,GxHwhlCnB,SAASrzH,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GyHnjlCjE5Z,EAAAzB,EAAgC,GAChC6B,EAAA7B,EAAyC,GACzCyS,EAAAzS,EAA2E,GAC3E0b,EAAA1b,EAA+B,IAC/Bo5G,EAAAp5G,EAA6B,IAC7BuC,EAAAvC,EAA+B,IAC/BwC,EAAAxC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IACzB4vH,EAAA5vH,EAA4B,IAC5BqC,EAAArC,EAA2B,GAC3BkO,EAAAlO,EAA8B,IAC9ByC,EAAAzC,EAA4B,IAC5BoyE,EAAApyE,EAA4B,IAC5Bw/I,EAAAx/I,EAAoC,KACpCy/I,EAAAz/I,EAAiC,IACjC0gF,EAAA1gF,EAAyB,IAEzB2C,EAAA3C,EAA+B,IAC/BwtB,EAAAxtB,EAA0B,IAEtB2P,EAAc9N,EAAAiD,cAAcC,KAAK4K,YAIrC+vI,GAHc79I,EAAAiD,cAAcC,KAAK46I,QAGjC,SAAA58I,GAAkD3B,EAAAs+I,6BAAA38I,EAoB9C,SAAA28I,gCACI38I,EAAAzC,KAAAT,KAAM,aAHFA,KAAAkwH,iBAA2B,EAmrBvC,MA7qBI2vB,8BAAA/+I,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKm9G,kBAELn9G,KAAKswH,eAAiB19G,EAAAa,iBAAiB,iBACvCzT,KAAKswH,eAAe58G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKosH,oBAAoBv4G,KAAK7T,OAEhFA,KAAKuwH,eAAiB39G,EAAAa,iBAAiB,iBACvCzT,KAAKuwH,eAAe78G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKwwH,gBAAgB38G,KAAK7T,OAE5EA,KAAK+/I,WAAantI,EAAAa,iBAAiB,aACnCzT,KAAK+/I,WAAWrsI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKggJ,KAAKnsI,KAAK7T,OAE7DA,KAAKigJ,iBAAmBrtI,EAAAa,iBAAiB,mBACzCzT,KAAKigJ,iBAAiBvsI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKkgJ,WAAWrsI,KAAK7T,OAEzEA,KAAK6wH,qBAAuBj+G,EAAAa,iBAAiB,uBAC7CzT,KAAK6wH,qBAAqBn9G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKosH,oBAAoBv4G,KAAK7T,OAEtFA,KAAK2wH,cAAgBznH,SAASC,eAAe,yBAE7CnJ,KAAK8wH,uBAAyBl+G,EAAAa,iBAAiB,yBAC/CzT,KAAK8wH,uBAAuBp9G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK+wH,sBAAsBl9G,KAAK7T,OAE1FA,KAAKmgJ,2BAA6BvtI,EAAAa,iBAAiB,yBACnDzT,KAAKmgJ,2BAA2BzsI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKogJ,0BAA0BvsI,KAAK7T,OAElGA,KAAKqgJ,oBAAsBztI,EAAAa,iBAAiB,sBAC5CzT,KAAKqgJ,oBAAoB3sI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKsgJ,mBAAmBzsI,KAAK7T,OAEpFA,KAAKugJ,WAAar3I,SAASC,eAAe,WAAYD,SAASC,eAAe,kBAGlF02I,6BAAA/+I,UAAA07E,cAAA,SAAcyV,GACVjyF,KAAKmrH,YAAcl5B,EACnBjyF,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBn1B,cAAerrH,KAAKkyF,cAAcr+E,KAAK7T,OAC/EA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBC,gBAAiBzgJ,KAAK0gJ,gBAAgB7sI,KAAK7T,OACnFA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBvvB,aAAcjxH,KAAKsyF,aAAaz+E,KAAK7T,OAC7EA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoB7tB,YAAa3yH,KAAK4yF,YAAY/+E,KAAK7T,OAC3EA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBtvB,eAAgBlxH,KAAKmxH,eAAet9G,KAAK7T,OACjFA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoB90B,uBAAwB1rH,KAAK2rH,uBAAuB93G,KAAK7T,OACjGA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoB50B,gBAAiB5rH,KAAK6rH,gBAAgBh4G,KAAK7T,OACnFA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBx0B,cAAehsH,KAAKykG,cAAc5wF,KAAK7T,OAC/EA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBv0B,cAAejsH,KAAK4jG,cAAc/vF,KAAK7T,OAC/EA,KAAKmrH,YAAYz3G,GACbisI,EAAAa,oBAAoBpvB,4BACpBpxH,KAAKqxH,4BAA4Bx9G,KAAK7T,QAI9C6/I,6BAAA/+I,UAAAq8G,gBAAA,WACIn9G,KAAKy2E,QAAQ0mC,iBAAgBpxF,KACzBA,EAAC6zH,EAAAp2B,iBAAiBC,cAAc,EAChC19F,EAAC6zH,EAAAp2B,iBAAiBE,aAAa,EAC/B39F,EAAC6zH,EAAAp2B,iBAAiBz2B,iBAAiB,EACnChnE,EAAC6zH,EAAAp2B,iBAAiBx2B,qBAAqB,EACvCjnE,EAAC6zH,EAAAp2B,iBAAiB92B,aAAa,EAC/B3mE,EAAC6zH,EAAAp2B,iBAAiB12B,iBAAiB,EzHghlClC/mE,GAEJ,IAAIA,IyH9glCT8zH,6BAAA/+I,UAAAizE,aAAA,WACI/zE,KAAKsxH,sBAAwBpoH,SAASC,eAAe,wBACrDnJ,KAAK2gJ,kBAAoBz3I,SAASC,eAAe,gBAEjDjG,EAAApC,UAAMizE,aAAYtzE,KAAAT,MAElBA,KAAKmrH,YAAYp3C,eAES,MAAtB/zE,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAIlB,MAA9BzhF,KAAKsxH,uBACJtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE9DzhF,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAIhEo+D,6BAAA/+I,UAAAg1E,iBAAA,WACI91E,KAAKosH,uBAGTyzB,6BAAA/+I,UAAAoxF,cAAA,SAAc0uD,GAKoB,MAA1B5gJ,KAAK2gJ,mBACJ3gJ,KAAK2gJ,kBAAkBt3I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE1DzhF,KAAK2gJ,kBAAkBt3I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAE9B,MAAtBzhF,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAOpDpzE,EAAA0B,cAAcitE,YAAYltE,EAAY4nE,OAG1CmoE,6BAAA/+I,UAAA4/I,gBAAA,WACIryI,EAAA0B,cAAcitE,YAAYltE,EAAY8lE,OAG1CiqE,6BAAA/+I,UAAAwxF,aAAA,WACI,GAAIuuD,GAAU33I,SAASskF,cAAc,mBACjCopC,EAAOjpG,EAAAoB,UAAUR,GAAGsyH,EAAS,IAAOhjI,MAAO,GAC/C+4G,GAAKjoG,cAAc,aAAc,WAC7B/rB,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS46D,4BACT3gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,eAAer5E,YAG3D4f,EAAAoB,UAAUR,GAAGsyH,EAAS,IAAOhjI,MAAO,MAGpCjb,EAAA4F,YAAY29D,oBAEZnmE,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiB12B,gBAAgB,GAChEpwF,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCr3G,EAAAyF,eAAewsF,iBAAiB,IAChC30F,KAAKmrH,YAAYj2G,SAEjBlV,KAAKy2E,QAAQ4mC,kBACTuiC,EAAAp2B,iBAAiB12B,eACjBtwF,EAAA+B,WAAWC,kBAAkB8hE,qBAEjC5jE,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,mBAIjD8lC,6BAAA/+I,UAAA8xF,YAAA,WACIvkF,EAAA0B,cAAcitE,YAAYltE,EAAY0nE,YAG1CqoE,6BAAA/+I,UAAA02D,eAAA,SAAesmB,GACX,GAAIA,IAAWiyC,EAAA9F,YAAYC,iBACvB,GAAIlqH,KAAKy2E,QAAQ6mC,eAAesiC,EAAAp2B,iBAAiBE,YAC7C5rC,EAAS8hE,EAAAp2B,iBAAiBE,eACvB,IAAI1pH,KAAKy2E,QAAQ6mC,eAAesiC,EAAAp2B,iBAAiB92B,YACpD5U,EAAS8hE,EAAAp2B,iBAAiB92B,eACvB,KAAI1yF,KAAKy2E,QAAQ6mC,eAAesiC,EAAAp2B,iBAAiB12B,gBAGpD,MAFAhV,GAAS8hE,EAAAp2B,iBAAiB12B,eAMlC,GAAI9yF,KAAKy2E,QAAQ6mC,eAAex/B,GAI5B,OAHA+C,EAAAl2D,SAASoS,KAAK,aACd75B,EAAApC,UAAM02D,eAAc/2D,KAAAT,KAAC89E,GAEbA,GACJ,IAAK8hE,GAAAp2B,iBAAiBC,YAClBzpH,KAAKmV,OACL,MACJ,KAAKyqI,GAAAp2B,iBAAiBE,WAClB1pH,KAAKggJ,MACL,MACJ,KAAKJ,GAAAp2B,iBAAiB92B,WAClB1yF,KAAKmyF,MACL,MACJ,KAAKytD,GAAAp2B,iBAAiB12B,eAClB9yF,KAAKkV,MACL,MACJ,KAAK0qI,GAAAp2B,iBAAiBz2B,eAClB/yF,KAAKwxH,UACL,MACJ,KAAKouB,GAAAp2B,iBAAiBx2B,mBAClBhzF,KAAKyxH,iBAMrBouB,6BAAA/+I,UAAAqU,MAAA,SAAM5U,GACFP,KAAKy2E,QAAQ+mC,oBACb96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzC/5G,KAAKmrH,YAAYh2G,MAAM5U,IAG3Bs/I,6BAAA/+I,UAAAqxF,KAAA,WACSnyF,KAAKkwH,iBAC+B,MAAjCvtH,EAAAmG,YAAY2uE,mBAA6B90E,EAAAmG,YAAY2uE,kBAAkBob,WAAa,GACpF7wF,EAAAqC,UAAUA,UAAU8rE,IAAIxtE,EAAAmG,YAAY2uE,kBAAkBob,YAI9D7yF,KAAKy2E,QAAQ+mC,oBACT56G,EAAA4F,YAAYiH,UACZzP,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiBx2B,mBAAoBpwF,EAAA4F,YAAYw9D,mBAEpFtjE,EAAAyF,eAAewsF,iBAAiB,IAChC/xF,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,cACvC5/D,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzC/5G,KAAKmrH,YAAYh5B,OAEjBnwF,EAAAqC,UAAUA,UAAUwtH,eAGxBguB,6BAAA/+I,UAAAk/I,KAAA,WACIhgJ,KAAK+/I,WAAW7qI,OAChBlV,KAAKs9E,UACLjvE,EAAA0B,cAAcytE,gBAGlBqiE,6BAAA/+I,UAAAoU,KAAA,WACIlV,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiB12B,gBAAgB,GAChEpwF,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCr3G,EAAAyF,eAAewsF,iBAAiB,IAChC/xF,EAAA4F,YAAYu+D,mBACZ/mE,KAAKmrH,YAAYj2G,QAGrB2qI,6BAAA/+I,UAAA69B,IAAA,WACyC,MAAjCh8B,EAAAmG,YAAY2uE,mBAA6B90E,EAAAmG,YAAY2uE,kBAAkBvO,SAAW,GAClFlnE,EAAAqC,UAAUA,UAAU8rE,IAAIxtE,EAAAmG,YAAY2uE,kBAAkBvO,UAAU,GAGpElpE,KAAKmrH,YAAYxsF,OAGrBkhH,6BAAA/+I,UAAA0vH,gBAAA,WACIxwH,KAAKuwH,eAAer7G,OAChBtS,EAAA4F,YAAYiH,SACZzP,KAAKwxH,WAELxxH,KAAKosH,uBAIbyzB,6BAAA/+I,UAAA0wH,SAAA,WACIxxH,KAAKswH,eAAep7G,OAEc,MAA9BtS,EAAA4F,YAAYi9D,eACZ7iE,EAAA4F,YAAYiH,UAAW,EACvB7M,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASu6D,kBAAmBrgE,EAAA4F,YAAYi9D,eACtEzlE,KAAKmyF,SAELvvF,EAAA4F,YAAYi9D,eAAiB/vD,SAAS9S,EAAA4F,YAAYi9D,eAAiB,GAAG13D,WAClE2H,SAAS9S,EAAA4F,YAAYi9D,gBAAkB,GACvC7iE,EAAA4F,YAAYiH,UAAW,EACvB7M,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASu6D,kBAAmBrgE,EAAA4F,YAAYi9D,eACtEzlE,KAAKmyF,SAELvvF,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKosH,yBAKjByzB,6BAAA/+I,UAAA2wH,aAAA,WACI7uH,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiBx2B,oBAAoB,GACpEtwF,EAAAyF,eAAeqvF,oBAAoBooD,EAAAp2B,iBAAiBx2B,oBAAoB,IAG5E6sD,6BAAA/+I,UAAAo/I,WAAA,WACIlgJ,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiBE,YAAY,GAC5DhnH,EAAAyF,eAAeqvF,oBAAoBooD,EAAAp2B,iBAAiBE,YAAY,IAGpEm2B,6BAAA/+I,UAAAqwH,eAAA,SAAea,GAQX,GAPAhwH,EAAAqC,UAAUA,UAAU4tH,YAC6B,IAA7CtvH,EAAAmG,YAAY2uE,kBAAkBob,WAC9B7yF,KAAKkwH,iBAAkB,EAEvBlwH,KAAKkwH,iBAAkB,EAGvBvtH,EAAAmG,YAAY2uE,kBAAkBob,WAAa,EAAG,CAK9C,IAAK,GAFDkuD,IAAwB,EAEnBhhJ,EAAI,EAAGA,EAAI4C,EAAAmG,YAAY2uE,kBAAkB++C,KAAKzqH,OAAQhM,IACvD4C,EAAAmG,YAAY2uE,kBAAkB++C,KAAKz2H,GAAGiwI,UAAYhuI,EAAAiD,cAAcC,KAAK+qI,WAAWE,QAC5ExtI,EAAAmG,YAAY2uE,kBAAkB++C,KAAKz2H,GAAGw0B,OAASvyB,EAAAiD,cAAcC,KAAK46I,QAAQgB,YAC1EC,GAAwB,GAErBp+I,EAAAmG,YAAY2uE,kBAAkB++C,KAAKz2H,GAAGiwI,UAAYhuI,EAAAiD,cAAcC,KAAK+qI,WAAWI,KACnF1tI,EAAAmG,YAAY2uE,kBAAkB++C,KAAKz2H,GAAGw0B,OAASvyB,EAAAiD,cAAcC,KAAK46I,QAAQkB,IAKtFhhJ,MAAKswH,eAAep7G,OAChB88G,EACAhyH,KAAKswH,eAAen7G,MAAM,IAEtBxS,EAAAmG,YAAY2uE,kBAAkBvO,SAAW,EACzClpE,KAAKswH,eAAen7G,MAAM,IAE1BnV,KAAKosH,sBAKjB,MAAIpsH,MAAKihJ,kBACLjhJ,KAAKswH,eAAep7G,OACpBtS,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKy2E,QAAQ+mC,oBACoC,IAA7C76G,EAAAmG,YAAY2uE,kBAAkBob,aACgB,MAA1ClwF,EAAAmG,YAAY2uE,kBAAkBvO,UAC9BtmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASw6D,qBACTvgE,EAAAmG,YAAY2uE,kBAAkBvO,SAASn7D,YAG/CnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASw6D,sBAGnCljE,KAAKkhJ,oBAAsB,IAAMt+I,EAAA4F,YAAYq/D,UAC7C7nE,KAAK+/I,WAAW5qI,MAAM,IAEtBnV,KAAKigJ,iBAAiB9qI,MAAM,SAGpCzS,GAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,mBAI7C/5G,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiB12B,gBAAgB,GAEf,IAA7CnwF,EAAAmG,YAAY2uE,kBAAkBob,YAC9B7yF,KAAKosH,sBAGT1pH,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,sBAErCn3G,EAAA4F,YAAYiH,UAAyD,IAA7C9M,EAAAmG,YAAY2uE,kBAAkBob,YACtD7yF,KAAKuwH,eAAep7G,MAAM,OAIlC0qI,6BAAA/+I,UAAAuwH,4BAAA,WAEyC,MAAjC1uH,EAAAmG,YAAY2uE,mBACZ90E,EAAAmG,YAAY2uE,kBAAkBob,WAAa,IAC1C7yF,KAAKkwH,iBAENluH,EAAAqC,UAAUA,UAAU8rE,IAAIxtE,EAAAmG,YAAY2uE,kBAAkBob,YAG1D7yF,KAAKkwH,iBAAkB,EACvBttH,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,eAG3Cu9E,6BAAA/+I,UAAA6qH,uBAAA,WAaI,MAZA3rH,MAAKswH,eAAep7G,OAEpBtS,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,cAEO,MAA1C3/D,EAAAmG,YAAY2uE,kBAAkBvO,UAC9BtmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASw6D,qBACTvgE,EAAAmG,YAAY2uE,kBAAkBvO,SAASn7D,YAG/CnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASw6D,sBAEnCljE,KAAKihJ,kBACLr+I,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKy2E,QAAQ+mC,wBACb96G,GAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,sBAI7C/5G,MAAKosH,uBAGTyzB,6BAAA/+I,UAAA+qH,gBAAA,WAYI,MAVqC,OAAjClpH,EAAAmG,YAAY2uE,mBACZ90E,EAAAmG,YAAY2uE,kBAAkBob,WAAa,IAC1C7yF,KAAKkwH,iBAENluH,EAAAqC,UAAUA,UAAU8rE,IAAIxtE,EAAAmG,YAAY2uE,kBAAkBob,YAE1D7yF,KAAKkwH,iBAAkB,EAEvBlwH,KAAKswH,eAAep7G,OAEhBlV,KAAKihJ,kBACLr+I,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKy2E,QAAQ+mC,oBAGTx9G,KAAKkhJ,oBAAsB,IAAMt+I,EAAA4F,YAAYq/D,UAC7C7nE,KAAKggJ,OAELhgJ,KAAKigJ,iBAAiB9qI,MAAM,QAGhCzS,GAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,mBAI7C/5G,KAAKosH,2BACDxpH,EAAA4F,YAAYiH,UACZzP,KAAKwxH,cAIbquB,6BAAA/+I,UAAA27E,UAAA,WAoCI,MAnCA35E,GAAAuC,eAAekuE,YACf3wE,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS46D,4BACT3gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,eAAer5E,YAE3DnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS86D,wBACT7gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAUK,WAAWpzI,YAGvDnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,cAEO,MAA1C3/D,EAAAmG,YAAY2uE,kBAAkBvO,UAC9BtmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASw6D,qBACTvgE,EAAAmG,YAAY2uE,kBAAkBvO,SAASn7D,YAG/CnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASw6D,sBAEb,MAAtBljE,KAAK2wH,eAAyB3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACnFzhF,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAIrB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE7DzhF,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAG/Dv+E,EAAApC,UAAM27E,UAASh8E,KAAAT,MACfA,KAAKmrH,YAAY1uC,YACjBz6E,EAAAqC,UAAUA,UAAUyhF,aAAcvxD,KAAMvyB,EAAAiD,cAAcC,KAAK4K,YAAY0nE,YAEnEx3E,KAAKihJ,kBACLjhJ,KAAKy2E,QAAQ+mC,oBAGTx9G,KAAKkhJ,oBAAsB,IAAMt+I,EAAA4F,YAAYq/D,UAC7C7nE,KAAK+/I,WAAW5qI,MAAM,IAEtBnV,KAAKigJ,iBAAiB9qI,MAAM,QAGhCzS,GAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,sBAI7C/5G,MAAKosH,uBAGTyzB,6BAAA/+I,UAAA88E,MAAA,SAAMD,GAAA,SAAAA,OAAA,GACF76E,EAAAuC,eAAekuE,YACf3wE,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS46D,4BACT3gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,eAAer5E,YAE3DnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS06D,mBACTzgE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAUM,WAAWrzI,YAEvDnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS86D,wBACT7gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAUK,WAAWpzI,WAGvD,KAAiB,GAAApB,GAAA,EAAAof,EAAA/rB,KAAKugJ,UAAL5zI,EAAAof,EAAAhgB,OAAAY,IAAe,CAA3B,GAAIgmD,GAAI5mC,EAAApf,EACTgmD,GAAKtpD,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGzCzhF,KAAKmrH,YAAYvtC,MAAMD,GAEvB39E,KAAK8wH,uBAAuB37G,MAAM,MAGtC0qI,6BAAA/+I,UAAA2jG,cAAA,WAC8B,MAAtBzkG,KAAK2wH,eACL3wH,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAEvDzhF,KAAK6wH,qBAAqB17G,MAAM,KAChCnV,KAAK8wH,uBAAuB37G,MAAM,MAGtC0qI,6BAAA/+I,UAAA+8E,MAAA,WACIj7E,EAAA4F,YAAYiH,UAAW,EAEvBzP,KAAKmrH,YAAYttC,QAES,MAAtB79E,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAIlB,MAA9BzhF,KAAKsxH,uBACJtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE9DzhF,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAIhEo+D,6BAAA/+I,UAAA8iG,cAAA,WACIv1F,EAAA0B,cAAcotE,YAAYrtE,EAAY8lE,MAAM,GAElB,MAAtB51E,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAIlB,MAA9BzhF,KAAKsxH,uBACJtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE9DzhF,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAIhEo+D,6BAAA/+I,UAAAsrH,oBAAA,WACIpsH,KAAKswH,eAAep7G,OAE0B,MAA1CvS,EAAAmG,YAAY2uE,kBAAkBvO,UAC9BtmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASw6D,qBACTvgE,EAAAmG,YAAY2uE,kBAAkBvO,SAASn7D,YAG/CnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASw6D,sBAEnCtgE,EAAA4F,YAAYq/D,WACZjlE,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKmnG,SAEAvkG,EAAA4F,YAAYiH,UACbzP,KAAKy2E,QAAQynC,oBAAmBnyF,KAC5BA,EAAC6zH,EAAAp2B,iBAAiBC,cAAc,EAChC19F,EAAC6zH,EAAAp2B,iBAAiBE,aAAa,EAC/B39F,EAAC6zH,EAAAp2B,iBAAiBz2B,iBAAkBnwF,EAAA4F,YAAYiH,UAAY7M,EAAA4F,YAAYw9D,kBACxEj6C,EAAC6zH,EAAAp2B,iBAAiBx2B,oBAAqBpwF,EAAA4F,YAAYiH,UAAY7M,EAAA4F,YAAYw9D,kBAC3Ej6C,EAAC6zH,EAAAp2B,iBAAiB92B,aAAa,EAC/B3mE,EAAC6zH,EAAAp2B,iBAAiB12B,iBAAiB,EzH05kClC/mE,IyHr5kCbrpB,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,gBzH05kCxC,IAAIhuF,IyHv5kCT8zH,6BAAA/+I,UAAAqmG,MAAA,WACI50B,EAAAsD,YAAYne,aAEZ13D,KAAKy2E,QAAQynC,oBAAmBnyF,KAC5BA,EAAC6zH,EAAAp2B,iBAAiBC,cAAc,EAChC19F,EAAC6zH,EAAAp2B,iBAAiBE,aAAa,EAC/B39F,EAAC6zH,EAAAp2B,iBAAiBz2B,iBAAiB,EACnChnE,EAAC6zH,EAAAp2B,iBAAiBx2B,qBAAqB,EACvCjnE,EAAC6zH,EAAAp2B,iBAAiB92B,aAAa,EAC/B3mE,EAAC6zH,EAAAp2B,iBAAiB12B,iBAAiB,EzHy5kClC/mE,GAEJ,IAAIA,IyHv5kCT8zH,6BAAA/+I,UAAAw/I,mBAAA,WACItgJ,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiBC,aAAa,GAC7D/mH,EAAAyF,eAAeqvF,oBAAoBooD,EAAAp2B,iBAAiBC,aAAa,IAGrEo2B,6BAAA/+I,UAAAg8E,OAAA,WACIl6E,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS46D,4BACT3gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,eAAer5E,YAE3DnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS06D,mBACTzgE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAUM,WAAWrzI,YAEvDnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS86D,wBACT7gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAUK,WAAWpzI,YAGvD/N,KAAKqgJ,oBAAoBlrI,MAAM,IAI/BnV,KAAKmrH,YAAYruC,UASrB+iE,6BAAA/+I,UAAAw8E,QAAA,WACIt9E,KAAKy2E,QAAQ+mC,oBACb96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,kBAOrC8lC,6BAAA/+I,UAAAmgJ,eAAR,WACI,MAAIr+I,GAAA4F,YAAYq/D,WACZ7nE,KAAKmnG,SACE,GAIoC,MAA3CxkG,EAAAmG,YAAY2uE,kBAAkBqpE,WAC4B,MAA1Dn+I,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,gBACmB,IAA3DzkF,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,gBAYxCy4D,6BAAA/+I,UAAAogJ,kBAAR,WACI,MACIv+I,GAAAmG,YAAY2uE,kBAAkB12E,eAAe,eACiB,MAA9D4B,EAAAmG,YAAY2uE,kBAAkBthB,WAA2B,eAElDxzD,EAAAmG,YAAY2uE,kBAAkBthB,WAA2B,eAG7D,MAGX0pF,6BAAA/+I,UAAAiwH,sBAAA,WAC8B,MAAtB/wH,KAAK2wH,eAAyB3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACnFzhF,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAIrB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE7DzhF,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAInEo+D,6BAAA/+I,UAAAs/I,0BAAA,WACkC,MAA1BpgJ,KAAK2gJ,mBAA6B3gJ,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACvFzhF,KAAK2gJ,kBAAkBt3I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAIzB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE7DzhF,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAInEo+D,6BAAA/+I,UAAAu+E,eAAA,WACI,IAAiB,GAAA1yE,GAAA,EAAAof,EAAA/rB,KAAKugJ,UAAL5zI,EAAAof,EAAAhgB,OAAAY,IAAe,CAA3B,GAAIgmD,GAAI5mC,EAAApf,EACG,OAARgmD,GAAiBA,EAAKtpD,UAAU0N,SAAS,eACzC47C,EAAKtpD,UAAUC,IAAI,gBAK/Bu2I,6BAAA/+I,UAAAw+E,qBAAA,WACI,IAAiB,GAAA3yE,GAAA,EAAAof,EAAA/rB,KAAKugJ,UAAL5zI,EAAAof,EAAAhgB,OAAAY,IAAe,CAA3B,GAAIgmD,GAAI5mC,EAAApf,EACG,OAARgmD,GAAgBA,EAAKtpD,UAAU0N,SAAS,eACxC47C,EAAKtpD,UAAUsN,OAAO,gBAlsBtCkpI,6BAAAxkI,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,czHmjmCxBm1H,+ByHljmC0CtmC,EAAAG,cAArCr5G,GAAAw/I,6BAA4BA,GzH0jmCnC,SAASv/I,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G0H9lmCjE5Z,EAAAzB,EAAgC,GAChCysH,EAAAzsH,EAA2B,IAC3B0b,EAAA1b,EAA+B,IAC/BkhJ,EAAAlhJ,EAA8B,KAC9BmhJ,EAAAnhJ,EAA+B,KAG/BqgJ,EAAA,SAAAt9I,GAAyC3B,EAAAi/I,oBAAAt9I,EAiBrC,SAAAs9I,uBACIt9I,EAAAzC,KAAAT,MAyGR,MAtGIwgJ,qBAAA1/I,UAAA4yG,oBAAA,SAAoBjjG,GAKZA,YAAgB4wI,GAAAE,gBAChBvhJ,KAAKgtH,MAAQv8G,GAOjBzQ,KAAKitH,OAAS,GAAIq0B,GAAAE,eAAexhJ,OAGrCwgJ,oBAAA1/I,UAAAizE,aAAA,WACI/zE,KAAKgtH,MAAMj5C,aAAa/zE,OAG5BwgJ,oBAAA1/I,UAAA4xH,YAAA,WACI1yH,KAAKgtH,MAAM0F,eAGf8tB,oBAAA1/I,UAAA27E,UAAA,WACIz8E,KAAKgtH,MAAMvwC,aAGf+jE,oBAAA1/I,UAAAqU,MAAA,SAAM5U,GACFP,KAAKitH,OAAO93G,MAAM5U,IAGtBigJ,oBAAA1/I,UAAA2gJ,QAAA,WACIzhJ,KAAKitH,OAAOw0B,WAGhBjB,oBAAA1/I,UAAAqxF,KAAA,WACInyF,KAAKitH,OAAO96B,OACZnyF,KAAKgtH,MAAM76B,QAGfquD,oBAAA1/I,UAAA69B,IAAA,WACI3+B,KAAKitH,OAAOtuF,OAGhB6hH,oBAAA1/I,UAAAoU,KAAA,WACIlV,KAAKgtH,MAAM93G,QAGfsrI,oBAAA1/I,UAAAoxF,cAAA,WACIlyF,KAAKiX,KAAKupI,oBAAoBn1B,cAAerrH,KAAKgtH,MAAM96B,kBAG5DsuD,oBAAA1/I,UAAA4/I,gBAAA,WACI1gJ,KAAKiX,KAAKupI,oBAAoBC,gBAAiBzgJ,KAAKgtH,MAAM0zB,oBAG9DF,oBAAA1/I,UAAAwxF,aAAA,WACItyF,KAAKgtH,MAAM16B,eACXtyF,KAAKiX,KAAKupI,oBAAoBvvB,eAGlCuvB,oBAAA1/I,UAAA8xF,YAAA,WACI5yF,KAAKgtH,MAAMp6B,cACX5yF,KAAKiX,KAAKupI,oBAAoB7tB,cAGlC6tB,oBAAA1/I,UAAAqwH,eAAA,SAAea,GACXhyH,KAAKiX,KAAKupI,oBAAoBtvB,eAAgBc,IAGlDwuB,oBAAA1/I,UAAAuwH,4BAAA,WACIrxH,KAAKiX,KAAKupI,oBAAoBpvB,8BAGlCovB,oBAAA1/I,UAAA6qH,uBAAA,WACI3rH,KAAKiX,KAAKupI,oBAAoB90B,yBAGlC80B,oBAAA1/I,UAAA+qH,gBAAA,WACI7rH,KAAKiX,KAAKupI,oBAAoB50B,kBAGlC40B,oBAAA1/I,UAAA88E,MAAA,SAAMD,GAAA,SAAAA,OAAA,GACF39E,KAAKgtH,MAAMpvC,MAAMD,IAGrB6iE,oBAAA1/I,UAAA2jG,cAAA,WACIzkG,KAAKiX,KAAKupI,oBAAoBx0B,gBAGlCw0B,oBAAA1/I,UAAA+8E,MAAA,WACI79E,KAAKgtH,MAAMnvC,SAGf2iE,oBAAA1/I,UAAA8iG,cAAA,WACI5jG,KAAKiX,KAAKupI,oBAAoBv0B,gBAGlCu0B,oBAAA1/I,UAAAg8E,OAAA,WACI98E,KAAKgtH,MAAMlwC,UAxHQ0jE,oBAAAn1B,cAAwB,qBACxBm1B,oBAAAC,gBAA0B,uBAC1BD,oBAAAvvB,aAAuB,oBACvBuvB,oBAAA7tB,YAAsB,mBACtB6tB,oBAAAtvB,eAAyB,sBACzBsvB,oBAAA90B,uBAAiC,8BACjC80B,oBAAA50B,gBAA0B,uBAC1B40B,oBAAAx0B,cAAwB,qBACxBw0B,oBAAAv0B,cAAwB,qBACxBu0B,oBAAApvB,4BAAsC,mCACtCovB,oBAAA3tB,kBAA4B,yBAC5B2tB,oBAAA1tB,qBAA+B,4BAb1D0tB,oBAAAnlI,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe+C,a1HmsmCxBy1H,sB0HlsmCiC5zB,EAAA7hG,WAA5B1qB,GAAAmgJ,oBAAmBA,G1H0smC1B,SAASlgJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G2H7tmCjE5Z,EAAAzB,EAAgC,GAChC6B,EAAA7B,EAA8B,GAC9B0b,EAAA1b,EAA+B,IAC/BkO,EAAAlO,EAA8B,IAC9BwC,EAAAxC,EAA4B,IAC5BuC,EAAAvC,EAA+B,IAC/ByC,EAAAzC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IACzByS,EAAAzS,EAA2E,GAC3EktH,EAAAltH,EAAiC,IACjCmzH,EAAAnzH,EAA8B,IAC9B+yH,EAAA/yH,EAA4B,KAC5BgzH,EAAAhzH,EAAwB,KACxB8yH,EAAA9yH,EAAwB,KACxBozH,EAAApzH,EAAiC,KAEjC0gF,EAAA1gF,EAAyB,IACzBkzH,EAAAlzH,EAA6B,KAC7B2b,EAAA3b,EAAuB,IACvB4yH,EAAA5yH,EAAyB,IACzB6yH,EAAA7yH,EAAiC,KAGjCwhG,EAAAxhG,EAAkC,IAKlCohJ,GAHkBv/I,EAAAiD,cAAcC,KAAK4K;AAGrC,SAAA5M,GAAmC3B,EAAAggJ,cAAAr+I,EAmD/B,SAAAq+I,iBACIr+I,EAAAzC,KAAAT,MA5CIA,KAAAwzH,cAAwB,EA8C5BxzH,KAAK0hJ,eAAiB,EACtB1hJ,KAAK2hJ,oBAAsB,EAE3B3hJ,KAAK4hJ,oBAAsBhvI,EAAAa,iBAAiB,sBAC5CzT,KAAK4hJ,oBAAoBluI,GACrBd,EAAAe,iBAAiBC,SACjB,WAEgC,MAAxB5T,KAAK6hJ,iBACJ7hJ,KAAK6hJ,gBAAgBx4I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAExDzhF,KAAK6hJ,gBAAgBx4I,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAExD5tE,KAAK7T,OAGXA,KAAK8hJ,oBAAsB54I,SAASC,eAAe,sBAEnDnJ,KAAKyzH,YAAc7gH,EAAAa,iBAAiB,cACpCzT,KAAKyzH,YAAY//G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK4jG,cAAc/vF,KAAK7T,OAEvEA,KAAK+hJ,4BAA8BnvI,EAAAa,iBAAiB,8BACpDzT,KAAK+hJ,4BAA4BruI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKgiJ,+BAA+BnuI,KAAK7T,OAExGA,KAAKiiJ,+BAAiCrvI,EAAAa,iBAAiB,kCACvDzT,KAAKiiJ,+BAA+BvuI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKkiJ,oBAAoBruI,KAAK7T,OAEhGA,KAAK0zH,cAAgB,GAAIL,GAAAM,aAEzB3zH,KAAK2wH,cAAgBznH,SAASC,eAAe,yBAC7CnJ,KAAK2gJ,kBAAoBz3I,SAASC,eAAe,gBACjDnJ,KAAKsxH,sBAAwBpoH,SAASC,eAAe,wBAyf7D,MAtfIo4I,eAAAzgJ,UAAA2c,aAAA,SAAaD,GAGT,GAFAta,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,GAEA,MAAfxd,KAAK2nG,OACL,IAAK,GAAIviG,KAAOpF,MAAK2nG,OACb3nG,KAAK2nG,OAAOviG,YAAgB2tH,GAAAa,WAC5B5zH,KAAK6zH,UAAY7zH,KAAK2nG,OAAOviG,IAG7BpF,KAAK2nG,OAAOviG,YAAgB4tH,GAAAc,mBAC5B9zH,KAAK+zH,kBAAoB/zH,KAAK2nG,OAAOviG,IAGrCpF,KAAK2nG,OAAOviG,YAAgB6tH,GAAAe,UAC5Bh0H,KAAKi0H,SAAWj0H,KAAK2nG,OAAOviG,GAC5BpF,KAAKouC,YAAYpuC,KAAKi0H,WAGtBj0H,KAAK2nG,OAAOviG,YAAgB+tH,GAAAe,UAC5Bl0H,KAAKm0H,SAAWn0H,KAAK2nG,OAAOviG,IAG5BpF,KAAK2nG,OAAOviG,YAAgB8tH,GAAAkB,cAC5Bp0H,KAAKq0H,aAAer0H,KAAK2nG,OAAOviG,IAGxB,mBAARA,GAA4BpF,KAAK2nG,OAAOviG,YAAgBioH,GAAA0B,mBACxD/uH,KAAKmiJ,gBAAkBniJ,KAAK2nG,OAAOviG,IAG3B,qBAARA,GAA8BpF,KAAK2nG,OAAOviG,YAAgBmuH,GAAAiB,mBAC1Dx0H,KAAK0zH,cAAgB1zH,KAAK2nG,OAAOviG,IAGzB,iBAARA,GAA0BpF,KAAK2nG,OAAOviG,YAAgBkuH,GAAAmB,eAC5B,MAAtBz0H,KAAK0zH,eACL1zH,KAAK0zH,cAAcgB,oBAAqBC,aAAc30H,KAAK2nG,OAAOviG,KAI9D,qBAARA,GAA8BpF,KAAK2nG,OAAOviG,YAAgBkuH,GAAAmB,eAChC,MAAtBz0H,KAAK0zH,eACL1zH,KAAK0zH,cAAcgB,oBAAqBE,iBAAkB50H,KAAK2nG,OAAOviG,KAIlE,eAARA,GAAwBpF,KAAK2nG,OAAOviG,YAAgBkuH,GAAAmB,gBACpDz0H,KAAK60H,YAAc70H,KAAK2nG,OAAOviG,IAGvB,kBAARA,GAA2BpF,KAAK2nG,OAAOviG,YAAgBioH,GAAA0B,mBACvD/uH,KAAK80H,eAAiB90H,KAAK2nG,OAAOviG,GAK9CpF,MAAKoiJ,WAAal5I,SAASC,eAAe,WACnB,MAAnBnJ,KAAKoiJ,WAMTpiJ,KAAKqiJ,cAAgBn5I,SAASC,eAAe,gBACnB,MAAtBnJ,KAAKqiJ,cAMTriJ,KAAKsiJ,cAAgBp5I,SAASC,eAAe,gBACnB,MAAtBnJ,KAAKsiJ,cAMTtiJ,KAAKuiJ,mBAAqBr5I,SAASC,eAAe,qBACnB,MAA3BnJ,KAAKuiJ,oBAObhB,cAAAzgJ,UAAA4c,aAAA,SAAaF,GACTta,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,GAEfA,EAAKU,aAAaskI,EAAwBxtB,0BAC1Ch1H,KAAKi1H,qBAAuBz3G,EACvBe,aAAaikI,EAAwBxtB,wBACrCpyG,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA0R,YAAW1R,MAE/B4Q,EAAKU,aAAaskI,EAAwBttB,oCAC1Cl1H,KAAKm1H,6BAA+B33G,EAC/Be,aAAaikI,EAAwBttB,kCACrCtyG,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA0R,YAAW1R,MAE/B4Q,EAAKU,aAAaskI,EAAwBptB,+BAC1Cp1H,KAAKq1H,yBAA2B73G,EAAKe,aAAaikI,EAAwBptB,8BAE1E53G,EAAKU,aAAaskI,EAAwBltB,gCAC1Ct1H,KAAKu1H,0BAA4B7/G,SAC7B8H,EAAKe,aAAaikI,EAAwBltB,gCAG9C93G,EAAKU,aAAaskI,EAAwBhtB,mCAC1Cx1H,KAAKy1H,6BAA+B//G,SAChC8H,EAAKe,aAAaikI,EAAwBhtB,oCAKtD+rB,cAAAzgJ,UAAAizE,aAAA,SAAake,GAKTjyF,KAAKmrH,YAAcl5B,EAEE,MAAjBjyF,KAAKi0H,UACgB,MAAjBj0H,KAAKm0H,UACgC,MAAjCxxH,EAAAmG,YAAY2uE,oBAEkC,MAA1C90E,EAAAmG,YAAY2uE,kBAAkB5X,UACkB,MAAhDl9D,EAAAmG,YAAY2uE,kBAAkB5X,SAAS61D,QAEvC11H,KAAKm0H,SAASzgH,GAAGy/G,EAAAe,QAAQyB,YAAa31H,KAAK41H,cAAc/hH,KAAK7T,OAC9DA,KAAKm0H,SAASzgH,GAAGy/G,EAAAe,QAAQhD,eAAgBlxH,KAAKmxH,eAAet9G,KAAK7T,OAClEA,KAAKm0H,SAAStwH,WAAW7D,KAAKi0H,SAAUtxH,EAAAmG,YAAY2uE,kBAAkB5X,SAAS61D,OAC/E11H,KAAKm0H,SAASO,oBAAqBmB,SAAU71H,KAAK0zH,kBAG7B,MAArB1zH,KAAKq0H,eACLr0H,KAAKq0H,aAAa3gH,GAAGw/G,EAAAkB,YAAY0B,qBAAsB91H,KAAK+1H,qBAAqBliH,KAAK7T,OACtFA,KAAKq0H,aAAa3gH,GAAGw/G,EAAAkB,YAAY4B,kBAAmBh2H,KAAKi2H,kBAAkBpiH,KAAK7T,OAChFA,KAAKq0H,aAAa3gH,GACdw/G,EAAAkB,YAAY8B,0BACZl2H,KAAKm2H,0BAA0BtiH,KAAK7T,OAExCA,KAAKq0H,aAAaxwH,WACd7D,KAAKi0H,SACLj0H,KAAK6zH,UACL7zH,KAAK2nG,OAAuB,eAC5B3nG,KAAK2nG,OAAqB,aAC1B3nG,MAEJA,KAAKq0H,aAAa+B,YAAYzzH,EAAAmG,YAAYmnE,aAAa6c,OAAO4oC,OAC9D11H,KAAKq0H,aAAaK,oBAAqBmB,SAAU71H,KAAK0zH,iBACtD1zH,KAAKq0H,aAAaK,oBAAqB2B,cAAer2H,KAAK80H,mBAkB3E90H,KAAKy2H,gBAAe,IAGxB8qB,cAAAzgJ,UAAA4xH,YAAA,WAC+B,MAAvB1yH,KAAK2nG,OAAa,MAClB3nG,KAAKouC,YAAYpuC,KAAK2nG,OAAa,OAI3C45C,cAAAzgJ,UAAA27E,UAAA,WACIz8E,KAAKm0H,SAASmC,uBAAuB3zH,EAAAmG,YAAY2uE,kBAAkBqV,OAAO4oC,OAC1E11H,KAAKq0H,aAAa+B,YAAYzzH,EAAAmG,YAAY2uE,kBAAkBqV,OAAO4oC,OACnE11H,KAAKq0H,aAAaouB,cAAc9/I,EAAAmG,YAAY2uE,kBAAkBthB,YAC9Dn2D,KAAKq0H,aAAakC,aAAa5zH,EAAAmG,YAAY2uE,kBAAkB++C,KAAM7zH,EAAAmG,YAAY2uE,kBAAkBob,YAEjG7yF,KAAKy2H,gBAAe,GACpBz2H,KAAK0iJ,wBAEL1iJ,KAAK2f,SAAU,EAEfgiF,EAAA+C,kBAAkBC,wBAAwB,UAAW,GAEjD3kG,KAAKihJ,kBACLpgE,EAAAl2D,SAASzV,KAAK,0BACd2rE,EAAAl2D,SAASzV,KAAK,iBACd2rE,EAAAl2D,SAASzV,KAAK,iBACd2rE,EAAAl2D,SAASzV,KAAK,cACd2rE,EAAAl2D,SAASzV,KAAK,gBACd2rE,EAAAl2D,SAAS0hE,KAAK,aAEV1pF,EAAAmG,YAAY2uE,kBAAkBvO,SAAW,EACf,MAAtBlpE,KAAKsiJ,eAAyBtiJ,KAAKsiJ,cAAcj5I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACnFzhF,KAAKsiJ,cAAcj5I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAIxB,MAA3BzhF,KAAKuiJ,oBACLviJ,KAAKuiJ,mBAAmBl5I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE1DzhF,KAAKuiJ,mBAAmBl5I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAIhEZ,EAAAl2D,SAAS0hE,KAAK,eAItBk1D,cAAAzgJ,UAAAqxF,KAAA,WACItR,EAAAl2D,SAASzV,KAAK,0BACd2rE,EAAAl2D,SAASzV,KAAK,iBACd2rE,EAAAl2D,SAASzV,KAAK,iBACd2rE,EAAAl2D,SAASzV,KAAK,gBACd2rE,EAAAl2D,SAAS0hE,KAAK,cAEgB,MAA1BrsF,KAAK+zH,mBACL/zH,KAAK+zH,kBAAkBx5D,QAG3Bv6D,KAAKm0H,SAASuC,OAAS,KACvB12H,KAAKm0H,SAAS9wB,UAAUrjG,KAAKq0H,aAAa95D,OAAM,GAAO,KAG3DgnF,cAAAzgJ,UAAAoU,KAAA,WACIlV,KAAKm0H,SAASryB,SAAS,MAAM,IAGjCy/C,cAAAzgJ,UAAAwxF,aAAA,WACItyF,KAAKm0H,SAASmC,uBAAuB3zH,EAAAmG,YAAY2uE,kBAAkBqV,OAAO4oC,OAC1E11H,KAAKm0H,SAASryB,SAAS,MAAM,GAAO,IAGxCy/C,cAAAzgJ,UAAA8xF,YAAA,aAEA2uD,cAAAzgJ,UAAA80H,cAAA,WACI51H,KAAKq0H,aAAauB,cACdjzH,EAAAmG,YAAY2uE,kBAAkBqV,OAAO4oC,MACrC11H,KAAKm0H,SAAS0C,kBACd72H,KAAKm0H,SAAS2C,YAItByqB,cAAAzgJ,UAAAqwH,eAAA,WACInxH,KAAKwzH,cAAe,CAEpB,IAAIxB,GAAYhyH,KAAKq0H,aAAarC,UAAUrvH,EAAAmG,YAAY2uE,kBAAkBob,WAE1E7yF,MAAKmrH,YAAYgG,eAAea,GAE5BhyH,KAAKq0H,aAAaxzD,SAASl+D,EAAAmG,YAAY2uE,kBAAkB++C,KAAM7zH,EAAAmG,YAAY2uE,kBAAkBob,YAIhD,IAA7ClwF,EAAAmG,YAAY2uE,kBAAkBob,YAC1B7yF,KAAKihJ,mBACLpgE,EAAAl2D,SAASzV,KAAK,cACd2rE,EAAAl2D,SAAS0hE,KAAK,aAEdrsF,KAAK2iJ,iBAKTpB,cAAAzgJ,UAAAq1H,0BAAR,WACIn2H,KAAKmrH,YAAYkG,+BAGrBkwB,cAAAzgJ,UAAAi1H,qBAAA,WACI/1H,KAAKwzH,cAAe,EAEpBxzH,KAAKmrH,YAAYQ,0BAGrB41B,cAAAzgJ,UAAAm1H,kBAAA,YACSrzH,EAAA4F,YAAYiH,SAKbzP,KAAKihJ,mBACLpgE,EAAAl2D,SAASzV,KAAK,aAAc,IAC5B2rE,EAAAl2D,SAAS0hE,KAAK,aACdrsF,KAAK2iJ,gBAGT3iJ,KAAKmrH,YAAYU,mBAGrB01B,cAAAzgJ,UAAA88E,MAAA,SAAMD,GAAA,SAAAA,OAAA,GACF39E,KAAKy2H,gBAAe,GAAM,GAG1Bz2H,KAAKykG,iBAGT88C,cAAAzgJ,UAAA2jG,cAAA,WACIzkG,KAAK2f,SAAU,EACf3f,KAAKmrH,YAAY1mB,iBAGrB88C,cAAAzgJ,UAAA+8E,MAAA,cAAA/kE,GAAA9Y,IAC8B,OAAtBA,KAAKsiJ,eAA0BtiJ,KAAKsiJ,cAAcj5I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAKsiJ,cAAcj5I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAGhDzhF,KAAKoiJ,YACLpiJ,KAAKoiJ,WAAW/4I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAG7CzhF,KAAKqiJ,eACLriJ,KAAKqiJ,cAAch5I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAIrB,MAA3BzhF,KAAKuiJ,oBACJviJ,KAAKuiJ,mBAAmBl5I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE3DzhF,KAAKuiJ,mBAAmBl5I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAMzDZ,EAAAl2D,SAASzV,KAAK,cACd2rE,EAAAl2D,SAASzV,KAAK,aACd2rE,EAAAl2D,SAASoS,KAAK,oBACd/8B,KAAK60H,YAAYkC,SAAS,SAC1B/2H,KAAK4iJ,wBAEL5iJ,KAAK60H,YAAYhiB,KAAKygB,EAAAmB,cAAcwF,kBAAmB,WACrB,MAA1BnhH,EAAKi7G,mBACLj7G,EAAKi7G,kBAAkBx5D,OAG3B,IAAIy8D,GAAal+G,EAAKu7G,aAAa95D,OAAM,EACrCzhD,GAAK06G,aACL16G,EAAK8qF,gBAEDozB,EACAl+G,EAAK26G,YAAYt+G,MAAM,IAEvB2D,EAAK26G,YAAYt+G,MAAM,MAKnCnV,KAAK60H,YAAYkC,SAAS,WAG9BwqB,cAAAzgJ,UAAA8iG,cAAA,WACI5jG,KAAKy2H,gBAAe,GAAO,GAC3Bz2H,KAAK4iJ,wBACL5iJ,KAAKmrH,YAAYvnB,iBAGrB29C,cAAAzgJ,UAAAg8E,OAAA,aAEQykE,cAAAzgJ,UAAAkhJ,+BAAR,WACIp/I,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS46D,4BAA6BtjE,KAAK0hJ,eAAe3zI,YACxFnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS86D,wBAAyBxjE,KAAK2hJ,oBAAoB5zI,aAG7FwzI,cAAAzgJ,UAAAoxF,cAAA,WAkDI,MAjDAlyF,MAAK2f,SAAU,EACf3f,KAAK6d,MAAQ,EAEb7d,KAAKq0H,aAAa+B,YAAYzzH,EAAAmG,YAAY2uE,kBAAkBqV,OAAO4oC,OACnE11H,KAAKm0H,SAASmC,uBAAuB3zH,EAAAmG,YAAY2uE,kBAAkBqV,OAAO4oC,OAC1E11H,KAAKq0H,aAAa+B,YAAYzzH,EAAAmG,YAAY2uE,kBAAkBqV,OAAO4oC,OACnE11H,KAAKq0H,aAAaouB,cAAc9/I,EAAAmG,YAAY2uE,kBAAkBthB,YAC9Dn2D,KAAKq0H,aAAakC,aAAa5zH,EAAAmG,YAAY2uE,kBAAkB++C,KAAM7zH,EAAAmG,YAAY2uE,kBAAkBob,YAG7FlwF,EAAAmG,YAAY2uE,kBAAkBqpE,YAC9Bl+I,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS46D,4BACT3gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,eAAer5E,YAE3DnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS86D,wBACT7gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAUK,WAAWpzI,aAI7B,MAA1B/N,KAAK2gJ,mBAA6B3gJ,KAAK2gJ,kBAAkBt3I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAC3FzhF,KAAK2gJ,kBAAkBt3I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAEjC,MAAtBzhF,KAAK2wH,eAAyB3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACnFzhF,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGnDzhF,KAAKoiJ,YACLpiJ,KAAKoiJ,WAAW/4I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGhDzhF,KAAKqiJ,eACLriJ,KAAKqiJ,cAAch5I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAIrB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE7DzhF,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAG3DzhF,KAAK60H,aACL70H,KAAK60H,YAAYkC,SAAS,SAG9B/2H,KAAK6zH,UAAUl0G,SAAU,EAElBtR,EAAA0B,cAAc0lE,mBAGzB8rE,cAAAzgJ,UAAAohJ,oBAAA,WACI7zI,EAAA0B,cAAcivE,iCAGlBuiE,cAAAzgJ,UAAA4/I,gBAAA,WAEI,MAAOryI,GAAA0B,cAAc0lE,mBAIzB8rE,cAAAzgJ,UAAA4hJ,sBAAA,WAC2B,MAAnB1iJ,KAAKoiJ,YAA4C,MAAtBpiJ,KAAKqiJ,gBAChCriJ,KAAKoiJ,WAAW/4I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAChDzhF,KAAKqiJ,cAAch5I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,iBAI3D8/D,cAAAzgJ,UAAA8hJ,sBAAA,WAC2B,MAAnB5iJ,KAAKoiJ,YAA4C,MAAtBpiJ,KAAKqiJ,gBAChCriJ,KAAKoiJ,WAAW/4I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAC7CzhF,KAAKqiJ,cAAch5I,UAAUC,IAAI5G,EAAAyF,eAAes5E,iBAKxD8/D,cAAAzgJ,UAAA6hJ,aAAA,WACI9hE,EAAAl2D,SAASoS,KAAK,iBAGVp6B,EAAAmG,YAAY2uE,kBAAkBvO,SAAW,EACf,MAAtBlpE,KAAKsiJ,eAAyBtiJ,KAAKsiJ,cAAcj5I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACnFzhF,KAAKsiJ,cAAcj5I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAIxB,MAA3BzhF,KAAKuiJ,oBACLviJ,KAAKuiJ,mBAAmBl5I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE1DzhF,KAAKuiJ,mBAAmBl5I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAc5D8/D,cAAAzgJ,UAAAmgJ,eAAR,WACI,QAAIr+I,EAAA4F,YAAYq/D,WAK+B,MAA3CllE,EAAAmG,YAAY2uE,kBAAkBqpE,WAC4B,MAA1Dn+I,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,gBACmB,IAA3DzkF,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,gBAQhDm6D,cAAAzgJ,UAAA21H,eAAA,SAAe92G,EAAkBg+D,GAAA,SAAAA,OAAA,GACzBA,GACA7hE,EAAAe,OAAOC,aAAa9c,KAAM,OAC1B8b,EAAAe,OAAO6E,WAAW1hB,MACdoiB,OAAQzC,GAAW,EAAG,IAAM,EAAG,GAC/B4C,cAAe,MAGnBviB,KAAK6d,MAAQ8B,EAAU,EAAI,GA1kBZ4hI,cAAAsB,qCAA+C,GAC/CtB,cAAAuB,wBAAkC,IAClCvB,cAAAwB,mBAA6B,GAC7BxB,cAAAyB,uBAAiC,IAL5DzB,cAAAlmI,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB3HmnnCxBs5H,gB2HlnnC2Bl0B,EAAA0B,kBAAtB1uH,GAAAkhJ,cAAaA,CAglB1B,IAAMiB,IACFxtB,uBAAwB,uBACxBI,4BAA6B,2BAC7BE,6BAA8B,4BAC9BE,gCAAiC,+BACjCN,iCAAkC,iC3H4imChC,SAAS50H,EAAQD,EAASF,GAE/B,Y4H/pnCD,IAAAyB,GAAAzB,EAAmC,GACnC6B,EAAA7B,EAAyC,GACzCyC,EAAAzC,EAA4B,IAC5BwC,EAAAxC,EAA4B,IAC5BkyE,EAAAlyE,EAA+B,IAE/B2kE,EAAA3kE,EAA2B,IAG3BqhJ,EAAA,WAWI,QAAAA,gBAAYvvD,GACRjyF,KAAKiyF,WAAaA,EAgH1B,MAzGWuvD,gBAAA1gJ,UAAAqU,MAAP,SAAa5U,GAAb,GAAAuY,GAAA9Y,IACQ2C,GAAAmG,YAAY+qE,cAIhBlxE,EAAAmG,YAAY+qE,aAAc,EAE1BlxE,EAAAmG,YAAY9D,WAAWmQ,MAAMnT,EAAAiD,cAAcC,KAAK4K,YAAY0nE,WAAWnhB,KAAK,SAACC,GACzE+b,EAAAmC,eAAeC,SAAS37D,EAAKo5E,cAAcr+E,KAAKiF,GAAOw9C,OAIxDkrF,eAAA1gJ,UAAA2gJ,QAAP,cAAA3oI,GAAA9Y,IACQ2C,GAAAmG,YAAY+qE,cAIhBlxE,EAAAmG,YAAY+qE,aAAc,EAE1BlxE,EAAAmG,YAAY9D,WACPmQ,MAAMnT,EAAAiD,cAAcC,KAAK4K,YAAY0nE,WAAaiqE,SAAS,IAC3DprF,KAAK,SAACC,GACH+b,EAAAmC,eAAeC,SAAS37D,EAAK4nI,gBAAgB7sI,KAAKiF,GAAOw9C,OAI9DkrF,eAAA1gJ,UAAAqxF,KAAP,cAAAr5E,GAAA9Y,IACQ2C,GAAAmG,YAAY+qE,cAIhBlxE,EAAAmG,YAAY+qE,aAAc,EAE1BlxE,EAAAmG,YAAY9D,WAAWi+I,SAASjhJ,EAAAiD,cAAcC,KAAK4K,YAAY0nE,WAAWnhB,KAAK,SAACC,GAC5E+b,EAAAmC,eAAeC,SAAS37D,EAAKw5E,aAAaz+E,KAAKiF,GAAOw9C,OAIvDkrF,eAAA1gJ,UAAA69B,IAAP,cAAA7lB,GAAA9Y,IACQ2C,GAAAmG,YAAY+qE,cAIhBlxE,EAAAmG,YAAY+qE,aAAc,EAE1BlxE,EAAAmG,YAAY9D,WAAW2tF,cAAct8B,KAAK,SAACC,GACvC+b,EAAAmC,eAAeC,SAAS37D,EAAK85E,YAAY/+E,KAAKiF,GAAOw9C,OAQnDkrF,eAAA1gJ,UAAAoxF,cAAV,SAAwB57B,GACf10D,EAAAoG,MAAMC,kBAAkBquD,KACzB3zD,EAAAmG,YAAY2qE,eAAend,GAC3B1zD,EAAA4F,YAAYi/D,qBAEZzlE,EAAAqC,UAAUA,UAAU4gF,gBAAiB1wD,KAAMvyB,EAAAiD,cAAcC,KAAK4K,YAAY0nE,YAC1Ex3E,KAAKiyF,WAAWC,iBAGpBvvF,EAAAmG,YAAY+qE,aAAc,GAGpB2tE,eAAA1gJ,UAAA4/I,gBAAV,SAA0BpqF,GACjB10D,EAAAoG,MAAMC,kBAAkBquD,KACzB3zD,EAAAmG,YAAY2qE,eAAend,GAC3B1zD,EAAA4F,YAAYi/D,qBAEZznE,KAAKiyF,WAAWyuD,mBAGpB/9I,EAAAmG,YAAY+qE,aAAc,GAGpB2tE,eAAA1gJ,UAAAwxF,aAAV,SAAuBh8B,GACd10D,EAAAoG,MAAMC,kBAAkBquD,KACzB3zD,EAAAmG,YAAY2qE,eAAend,GAC3B1zD,EAAA4F,YAAYi/D,qBAEZznE,KAAKiyF,WAAWK,eAChBtwF,EAAAqC,UAAUA,UAAUiuF,cAChBhqB,QAAShqD,WAAW1c,EAAAyL,YAAY/D,IAAIgtD,EAASgS,QAAQgN,KAAMhf,EAASgS,QAAQC,QAC5E4H,IAAKxtE,EAAAmG,YAAY2uE,kBAAkBob,WACnCpZ,SAAU3U,EAAAqD,WAAW6T,mBAAmBvC,SACxC9Q,QAASrS,EAASqS,WAI1BhmE,EAAAmG,YAAY+qE,aAAc,GAGpB2tE,eAAA1gJ,UAAA8xF,YAAV,SAAsBt8B,GACb10D,EAAAoG,MAAMC,kBAAkBquD,KACzB3zD,EAAAmG,YAAY2qE,eAAend,GAC3B1zD,EAAA4F,YAAYi/D,qBAEZzlE,EAAAqC,UAAUA,UAAUqiF,iBAAkBnyD,KAAMvyB,EAAAiD,cAAcC,KAAK4K,YAAY0nE,YAC3Ex3E,KAAKiyF,WAAWW,eAGpBjwF,EAAAmG,YAAY+qE,aAAc,GAElC2tE,iBA5HanhJ,GAAAmhJ,eAAcA,G5H0vnCrB,SAASlhJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G6H/wnCjE5Z,EAAAzB,EAAgC,GAChC6B,EAAA7B,EAA8B,GAC9B0b,EAAA1b,EAA+B,IAC/BkO,EAAAlO,EAA8B,IAC9B+iJ,EAAA/iJ,EAAmC,IAE/B2P,EAAc9N,EAAAiD,cAAcC,KAAK4K,YAGrCqzI,EAAA,SAAAjgJ,GAA+C3B,EAAA4hJ,0BAAAjgJ,EAA/C,SAAAigJ,6BAA+CjgJ,EAAA7B,MAAArB,KAAAmD,WAO/C,MALIggJ,2BAAAriJ,UAAA27E,UAAA,WACIpuE,EAAA0B,cAAciuE,yBAAyBluE,EAAY8lE,KAAM,GAEzD1yE,EAAApC,UAAM27E,UAASh8E,KAAAT,OANvBmjJ,0BAAA9nI,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,c7H0xnCxBy4H,4B6HzxnCuCD,EAAAx4B,mBAAlCrqH,GAAA8iJ,0BAAyBA,G7HiynChC,SAAS7iJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G8HtznCjE5Z,EAAAzB,EAAgC,GAChC6B,EAAA7B,EAAyC,GACzC0b,EAAA1b,EAA+B,IAC/Bo5G,EAAAp5G,EAA6B,IAC7BuC,EAAAvC,EAA+B,IAC/B4vH,EAAA5vH,EAA4B,IAC5BkO,EAAAlO,EAA8B,IAC9BijJ,EAAAjjJ,EAA4B,IAC5BkjJ,EAAAljJ,EAA+B,KAC/BwC,EAAAxC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAC5ByS,EAAAzS,EAA2E,GAC3EwtB,EAAAxtB,EAA0B,IAEtB2P,EAAc9N,EAAAiD,cAAcC,KAAK4K,YAIrCwzI,GAHmBthJ,EAAAiD,cAAcC,KAAKg3E,iBAGtC,SAAAh5E,GAA6C3B,EAAA+hJ,wBAAApgJ,EAezC,SAAAogJ,2BACIpgJ,EAAAzC,KAAAT,KAAM,QAgdd,MA7cIsjJ,yBAAAxiJ,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKm9G,kBAELn9G,KAAK2wH,cAAgBznH,SAASC,eAAe,oBAC7CnJ,KAAK8hJ,oBAAsB54I,SAASC,eAAe,sBAEnDnJ,KAAK+/I,WAAantI,EAAAa,iBAAiB,aACnCzT,KAAK+/I,WAAWrsI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKggJ,KAAKnsI,KAAK7T,OAE7DA,KAAKigJ,iBAAmBrtI,EAAAa,iBAAiB,mBACzCzT,KAAKigJ,iBAAiBvsI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKkgJ,WAAWrsI,KAAK7T,OAEzEA,KAAKujJ,WAAar6I,SAASC,eAAe,aACnB,MAAnBnJ,KAAKujJ,WAMTvjJ,KAAKwjJ,gBAAkBt6I,SAASC,eAAe,kBACnB,MAAxBnJ,KAAKwjJ,iBAObF,wBAAAxiJ,UAAA07E,cAAA,SAAcyV,GACVjyF,KAAKmrH,YAAcl5B,EACnBjyF,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAep4B,cAAerrH,KAAKkyF,cAAcr+E,KAAK7T,OAC1EA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAen4B,eAAgBtrH,KAAKurH,eAAe13G,KAAK7T,OAC5EA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAe9wB,YAAa3yH,KAAK4yF,YAAY/+E,KAAK7T,OACtEA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAeC,eAAgB1jJ,KAAK2jJ,cAAc9vI,KAAK7T,OAC3EA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAeG,qBAAsB5jJ,KAAK6jJ,oBAAoBhwI,KAAK7T,OACvFA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAeK,eAAgB9jJ,KAAK+jJ,eAAelwI,KAAK7T,OAC5EA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAe73B,gBAAiB5rH,KAAK6rH,gBAAgBh4G,KAAK7T,OAC9EA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAez3B,cAAehsH,KAAKykG,cAAc5wF,KAAK7T,OAC1EA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAeO,MAAOhkJ,KAAK49E,MAAM/pE,KAAK7T,OAC1DA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAex3B,cAAejsH,KAAK4jG,cAAc/vF,KAAK7T,OAC1EA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAeQ,MAAOjkJ,KAAK69E,MAAMhqE,KAAK7T,QAG9DsjJ,wBAAAxiJ,UAAAq8G,gBAAA,WACIn9G,KAAKy2E,QAAQ0mC,iBAAgBpxF,KACzBA,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,E9HgynC7Bt+F,GAEJ,IAAIA,I8H9xnCTu3H,wBAAAxiJ,UAAAizE,aAAA,WACI/zE,KAAKsxH,sBAAwBpoH,SAASC,eAAe,wBACrDnJ,KAAK2gJ,kBAAoBz3I,SAASC,eAAe,gBACjDnJ,KAAKkkJ,SAAWh7I,SAASC,eAAe,WACxCnJ,KAAKqiJ,cAAgBn5I,SAASC,eAAe,gBAE7CjG,EAAApC,UAAMizE,aAAYtzE,KAAAT,MAElBA,KAAKmrH,YAAYp3C,eAOS,MAAtB/zE,KAAK2wH,gBACL3wH,KAAK2wH,cAAcj/G,MAAMC,QAAU,QAEb,MAAtB3R,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAIxD6hE,wBAAAxiJ,UAAAoxF,cAAA,WACI7jF,EAAA0B,cAAcitE,YAAYltE,EAAY8lE,MACtCvnE,EAAA0B,cAAcsuE,yBAAwB,IAG1CilE,wBAAAxiJ,UAAAyqH,eAAA,aAUA+3B,wBAAAxiJ,UAAA8xF,YAAA,WACQvkF,EAAA0B,cAAcylE,oBACdnnE,EAAA0B,cAAcqtE,mBAItBkmE,wBAAAxiJ,UAAA02D,eAAA,SAAesmB,GACX,GAAIzvE,EAAA0B,cAAc2lE,eAAiBrnE,EAAA0B,cAAc4lE,aAAc,CAC3D,GAAImI,IAAWiyC,EAAA9F,YAAYC,iBACvB,MAGJ,IAAIlqH,KAAKy2E,QAAQ6mC,eAAex/B,GAAS,CAGrC,GAFA56E,EAAApC,UAAM02D,eAAc/2D,KAAAT,KAAC89E,GAEjBA,EAAOlhD,OAAO,EAAGwmH,EAAAj5B,YAAYE,WAAWt+G,UAAYq3I,EAAAj5B,YAAYE,WAAY,CAC5E,GAAI9pH,GAAamV,SAASooE,EAAOlhD,OAAOwmH,EAAAj5B,YAAYE,WAAWt+G,OAAQ+xE,EAAO/xE,QAC9E/L,MAAKmrH,YAAYoB,OAAOhsH,GAE5BP,KAAKy2E,QAAQ+mC,oBAEjB96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,mBAsCjDupC,wBAAAxiJ,UAAAqU,MAAA,WACInV,KAAKy2E,QAAQ+mC,oBACb96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzC/5G,KAAKmrH,YAAYh2G,SAGrBmuI,wBAAAxiJ,UAAAk/I,KAAA,WACIhgJ,KAAK+/I,WAAW7qI,OAChBlV,KAAKs9E,UACLjvE,EAAA0B,cAAcmtE,WAGlBomE,wBAAAxiJ,UAAA69B,IAAA,WAC0C,MAAlCh8B,EAAAmG,YAAY6uE,aAAa1+D,OAAwD,MAAvCtW,EAAAmG,YAAY6uE,aAAawpE,aACnEv+I,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAAS26D,6BACT1gE,EAAAmG,YAAY6uE,aAAa1+D,MAAMlL,WAAa,IAAMpL,EAAAmG,YAAY6uE,aAAawpE,WAAWpzI,YAE1FnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS26D,6BACT1gE,EAAAmG,YAAY6uE,aAAa1+D,MAAMlL,WAAa,IAAMpL,EAAAmG,YAAY6uE,aAAawpE,WAAWpzI,aAG9F/N,KAAKmrH,YAAYxsF,OAGrB2kH,wBAAAxiJ,UAAAo/I,WAAA,WACIlgJ,KAAKy2E,QAAQ4mC,kBAAkB+lC,EAAAj5B,YAAYT,YAAY,GACvDhnH,EAAAyF,eAAeqvF,oBAAoB4rD,EAAAj5B,YAAYT,YAAY,IAG/D45B,wBAAAxiJ,UAAA+qH,gBAAA,WACInpH,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,kBAG7CupC,wBAAAxiJ,UAAA27E,UAAA,WACIv5E,EAAApC,UAAM27E,UAASh8E,KAAAT,MACfA,KAAKmrH,YAAY1uC,YACjBz6E,EAAAqC,UAAUA,UAAUyhF,aAAcvxD,KAAMvyB,EAAAiD,cAAcC,KAAK4K,YAAY4nE,OACvE13E,KAAKosH,qBAAoB,GAErBpsH,KAAK8hJ,qBACL9hJ,KAAK8hJ,oBAAoBz4I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGzDzhF,KAAKkkJ,UACLlkJ,KAAKkkJ,SAAS76I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAG9CzhF,KAAKqiJ,eACLriJ,KAAKqiJ,cAAch5I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAG7B,MAAtBzhF,KAAK2wH,gBACL3wH,KAAK2wH,cAAcj/G,MAAMC,QAAU,SAGL,MAA9B3R,KAAKsxH,wBACLtxH,KAAKsxH,sBAAsB5/G,MAAMC,QAAU,SAGrB,MAAtB3R,KAAK2wH,eACL3wH,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGzB,MAA1BzhF,KAAK2gJ,mBACL3gJ,KAAK2gJ,kBAAkBt3I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGzB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAInE6hE,wBAAAxiJ,UAAA88E,MAAA,SAAMD,GAAA,SAAAA,OAAA,GACEtvE,EAAA0B,cAAc2lE,gBACY,MAAtB11E,KAAK2wH,eACL3wH,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAGlB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAG9B,MAA1BzhF,KAAK2gJ,mBACL3gJ,KAAK2gJ,kBAAkBt3I,UAAUC,IAAI5G,EAAAyF,eAAes5E,iBAKhE6hE,wBAAAxiJ,UAAA2jG,cAAA,WACIzkG,KAAKosH,sBAEDpsH,KAAK8hJ,qBACL9hJ,KAAK8hJ,oBAAoBz4I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGzDzhF,KAAKkkJ,UACLlkJ,KAAKkkJ,SAAS76I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAG9CzhF,KAAKqiJ,eACLriJ,KAAKqiJ,cAAch5I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAG7B,MAAtBzhF,KAAK2wH,gBACL3wH,KAAK2wH,cAAcj/G,MAAMC,QAAU,SAGL,MAA9B3R,KAAKsxH,wBACLtxH,KAAKsxH,sBAAsB5/G,MAAMC,QAAU,SAGrB,MAAtB3R,KAAK2wH,eACL3wH,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGzB,MAA1BzhF,KAAK2gJ,mBACL3gJ,KAAK2gJ,kBAAkBt3I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGzB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAInE6hE,wBAAAxiJ,UAAA+8E,MAAA,WACQ79E,KAAK8hJ,qBACL9hJ,KAAK8hJ,oBAAoBz4I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAGtDzhF,KAAKkkJ,UACLlkJ,KAAKkkJ,SAAS76I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAG3CzhF,KAAKqiJ,eACLriJ,KAAKqiJ,cAAch5I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAG1B,MAAtBzhF,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAGlB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAG9B,MAA1BzhF,KAAK2gJ,mBACL3gJ,KAAK2gJ,kBAAkBt3I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAGxDzhF,KAAKmrH,YAAYttC,SAGrBylE,wBAAAxiJ,UAAA8iG,cAAA,WAGIv1F,EAAA0B,cAAcotE,YAAYrtE,EAAY0nE,WAAW,IAGrD8rE,wBAAAxiJ,UAAAsrH,oBAAA,SAAoBnnF,GAahB,GAbgB,SAAAA,OAAA,GAChBjlC,KAAKy2E,QAAQynC,oBAAmBnyF,KAC5BA,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,E9HisnC7Bt+F,I8H7rnC2B,MAA5BppB,EAAAmG,YAAY6uE,cACsB,MAAlCh1E,EAAAmG,YAAY6uE,aAAa90D,OACe,MAAxClgB,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,MACjC,CACE,GAAsD,IAAlDxhJ,EAAAmG,YAAY6uE,aAAa90D,MAAMuhI,eAoB/B,YAnBK/1I,EAAA0B,cAAcylE,oBAGuB,MAAlC7yE,EAAAmG,YAAY6uE,aAAa1+D,OAAwD,MAAvCtW,EAAAmG,YAAY6uE,aAAawpE,aACnEv+I,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAAS26D,6BACT1gE,EAAAmG,YAAY6uE,aAAa1+D,MAAMlL,WAC3B,IACApL,EAAAmG,YAAY6uE,aAAawpE,WAAWpzI,YAE5CnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS26D,6BACT1gE,EAAAmG,YAAY6uE,aAAa1+D,MAAMlL,WAC3B,IACApL,EAAAmG,YAAY6uE,aAAawpE,WAAWpzI,aAGhDM,EAAA0B,cAAcqtE,mBAhBdp9E,KAAK2+B,MAqBb,KAAK,GAAIv5B,KAAOzC,GAAAmG,YAAY6uE,aAAa90D,MAAMshI,MAAO,CAClD,GAAI5jJ,GAAaoC,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,MAAM/+I,GAAK7E,GACvDonE,EAAiBhlE,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,MAAM/+I,GAAK+B,OAAO4G,UAE5D,OAANxN,GAAwB,MAAVonE,GAA6B,YAAXA,GAChC3nE,KAAKy2E,QAAQ4mC,kBAAkB+lC,EAAAj5B,YAAYE,WAAa9pH,GAAI,IAQxE,GACIqC,EAAA4F,YAAY0rD,YAAYzxD,EAAAiG,SAAS46D,+BAAiC3gE,EAAAmG,YAAY6uE,aAAa1+D,MAAMlL,WACnG,CACE,GAAIs2I,GAAUn7I,SAASskF,cAAc,mBACjCopC,EAAOjpG,EAAAoB,UAAUR,GAAG81H,EAAS,IAAOxmI,MAAO,GAC/C+4G,GAAKjoG,cAAc,aAAc,WAC7B/rB,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS46D,4BACT3gE,EAAAmG,YAAY6uE,aAAa1+D,MAAMlL,YAGnC4f,EAAAoB,UAAUR,GAAG81H,EAAS,IAAOxmI,MAAO,MAG5C,GACIjb,EAAA4F,YAAY0rD,YAAYzxD,EAAAiG,SAAS86D,2BAA6B7gE,EAAAmG,YAAY6uE,aAAawpE,WAAWpzI,WACpG,CACE,GAAIu2I,GAAep7I,SAASgD,iBAAiB,wBACzC0qH,EAAOjpG,EAAAoB,UAAUR,GAAG+1H,EAAc,IAAOzmI,MAAO,GACpD+4G,GAAKjoG,cAAc,aAAc,WAC7B/rB,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS86D,wBACT7gE,EAAAmG,YAAY6uE,aAAawpE,WAAWpzI,YAGxC4f,EAAAoB,UAAUR,GAAG+1H,EAAc,IAAOzmI,MAAO,MAIjDnb,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,gB9HuqnCxC,IAAIhuF,I8HpqnCTu3H,wBAAAxiJ,UAAA6iJ,cAAA,WAGI/gJ,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS46D,4BAA6B,IACpE1gE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS86D,wBAAyB,IAEhE5gE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS46D,4BAA6B3gE,EAAAmG,YAAY6uE,aAAa1+D,MAAMlL,YACnGnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS86D,wBAAyB7gE,EAAAmG,YAAY6uE,aAAawpE,WAAWpzI,WAEpG,IAAI8yI,GAAU33I,SAASC,eAAe,UACtCwkB,GAAAoB,UAAUR,GAAGsyH,EAAS,GAAKhjI,OAAQ,EAAG,MAc1CylI,wBAAAxiJ,UAAA+iJ,oBAAA,aAiBAP,wBAAAxiJ,UAAAg+E,gBAAA,WACkC,MAA1B9+E,KAAK2gJ,mBAA6B3gJ,KAAK2gJ,kBAAkBt3I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAC3FzhF,KAAK2gJ,kBAAkBt3I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAI/D6hE,wBAAAxiJ,UAAAijJ,eAAA,WACI/jJ,KAAKosH,uBAGTk3B,wBAAAxiJ,UAAAg8E,OAAA,WACI98E,KAAKmV,SAGTmuI,wBAAAxiJ,UAAAw8E,QAAA,WACIt9E,KAAKy2E,QAAQ+mC,oBACb96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,kBA9djDupC,wBAAAjoI,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,c9HumoCxB44H,0B8HtmoCqC/pC,EAAAG,cAAhCr5G,GAAAijJ,wBAAuBA,G9H8moC9B,SAAShjJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G+H7ooCjE5Z,EAAAzB,EAAgC,GAChCysH,EAAAzsH,EAA2B,IAC3B0b,EAAA1b,EAA+B,IAC/BokJ,EAAApkJ,EAA0B,KAC1BqkJ,EAAArkJ,EAAyB,KAGzBsjJ,EAAA,SAAAvgJ,GAAoC3B,EAAAkiJ,eAAAvgJ,EAgBhC,SAAAugJ,kBACIvgJ,EAAAzC,KAAAT,MAkGR,MA/FIyjJ,gBAAA3iJ,UAAA4yG,oBAAA,SAAoBjjG,GAKZA,YAAgB+zI,GAAAC,WAChBzkJ,KAAKgtH,MAAQv8G,GAOjBzQ,KAAKitH,OAAS,GAAIs3B,GAAAG,UAAU1kJ,OAGhCyjJ,eAAA3iJ,UAAAizE,aAAA,WACI/zE,KAAKgtH,MAAMj5C,aAAa/zE,OAG5ByjJ,eAAA3iJ,UAAA4xH,YAAA,WACI1yH,KAAKgtH,MAAM0F,eAGf+wB,eAAA3iJ,UAAA27E,UAAA,WACIz8E,KAAKgtH,MAAMvwC,aAGfgnE,eAAA3iJ,UAAAozE,QAAA,aAEAuvE,eAAA3iJ,UAAAqU,MAAA,WACInV,KAAKitH,OAAO93G,QACZnV,KAAKgtH,MAAM73G,SAGfsuI,eAAA3iJ,UAAAyrH,OAAA,SAAOo4B,GACH3kJ,KAAKitH,OAAOV,OAAOo4B,GACnB3kJ,KAAKgtH,MAAMT,OAAOo4B,IAGtBlB,eAAA3iJ,UAAA69B,IAAA,WACI3+B,KAAKitH,OAAOtuF,MACZ3+B,KAAKgtH,MAAMruF,OAGf8kH,eAAA3iJ,UAAA8jJ,eAAA,WACI5kJ,KAAKgtH,MAAM43B,kBAGfnB,eAAA3iJ,UAAAoxF,cAAA,WACIlyF,KAAKgtH,MAAM96B,gBACXlyF,KAAKiX,KAAKwsI,eAAep4B,gBAG7Bo4B,eAAA3iJ,UAAAyqH,eAAA,WACIvrH,KAAKgtH,MAAMzB,iBACXvrH,KAAKiX,KAAKwsI,eAAen4B,iBAG7Bm4B,eAAA3iJ,UAAA8xF,YAAA,WACI5yF,KAAKgtH,MAAMp6B,cACX5yF,KAAKiX,KAAKwsI,eAAe9wB,cAG7B8wB,eAAA3iJ,UAAA+jJ,eAAA,WACI7kJ,KAAKiX,KAAKwsI,eAAeC,iBAG7BD,eAAA3iJ,UAAAgkJ,qBAAA,WACI9kJ,KAAKiX,KAAKwsI,eAAeG,uBAG7BH,eAAA3iJ,UAAAijJ,eAAA,WACI/jJ,KAAKiX,KAAKwsI,eAAeK,iBAG7BL,eAAA3iJ,UAAA+qH,gBAAA,WACI7rH,KAAKiX,KAAKwsI,eAAe73B,kBAG7B63B,eAAA3iJ,UAAA88E,MAAA,SAAMD,GAAA,SAAAA,OAAA,GACF39E,KAAKiX,KAAKwsI,eAAeO,QAG7BP,eAAA3iJ,UAAA2jG,cAAA,WACIzkG,KAAKiX,KAAKwsI,eAAez3B,gBAG7By3B,eAAA3iJ,UAAA+8E,MAAA,WACI79E,KAAKgtH,MAAMnvC,SAGf4lE,eAAA3iJ,UAAA8iG,cAAA,WACI5jG,KAAKiX,KAAKwsI,eAAex3B,gBAhHNw3B,eAAAp4B,cAAwB,qBACxBo4B,eAAAn4B,eAAyB,sBACzBm4B,eAAA9wB,YAAsB,mBACtB8wB,eAAAC,eAAyB,sBACzBD,eAAAG,qBAA+B,4BAC/BH,eAAAK,eAAyB,sBACzBL,eAAA73B,gBAA0B,uBAC1B63B,eAAAO,MAAgB,aAChBP,eAAAz3B,cAAwB,qBACxBy3B,eAAAQ,MAAgB,aAChBR,eAAAx3B,cAAwB,qBAZnDw3B,eAAApoI,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe+C,a/H4uoCxB04H,iB+H3uoC4B72B,EAAA7hG,WAAvB1qB,GAAAojJ,eAAcA;E/HmvoCrB,SAASnjJ,EAAQD,EAASF,GAE/B,YgI5voCD,IAAAyB,GAAAzB,EAAsB,GACtB6B,EAAA7B,EAAyC,GAEzCyC,EAAAzC,EAA4B,IAC5BwC,EAAAxC,EAA4B,IAC5BkyE,EAAAlyE,EAA+B,IAE/BukJ,EAAA,WAWI,QAAAA,WAAYzyD,GACRjyF,KAAKiyF,WAAaA,EAiF1B,MA1EWyyD,WAAA5jJ,UAAAqU,MAAP,cAAA2D,GAAA9Y,IACQ2C,GAAAmG,YAAY+qE,cAIhBlxE,EAAAmG,YAAY+qE,aAAc,EAE1BlxE,EAAAmG,YAAY9D,WAAWmQ,MAAMnT,EAAAiD,cAAcC,KAAK4K,YAAY4nE,MAAMrhB,KAAK,SAACC,GACpE+b,EAAAmC,eAAeC,SAAS37D,EAAKo5E,cAAcr+E,KAAKiF,GAAOw9C,OAIxDouF,UAAA5jJ,UAAAyrH,OAAP,SAAco4B,GAAd,GAAA7rI,GAAA9Y,IACQ2C,GAAAmG,YAAY+qE,cAIhBlxE,EAAAmG,YAAY+qE,aAAc,EAE1BlxE,EAAAmG,YAAY9D,WAAW+/I,WAAWJ,GAAQtuF,KAAK,SAACC,GAC5C+b,EAAAmC,eAAeC,SAAS37D,EAAKyyG,eAAe13G,KAAKiF,GAAOw9C,OAIzDouF,UAAA5jJ,UAAA69B,IAAP,cAAA7lB,GAAA9Y,IACQ2C,GAAAmG,YAAY+qE,cAIhBlxE,EAAAmG,YAAY+qE,aAAc,EAE1BlxE,EAAAmG,YAAY9D,WAAW25B,IAAI38B,EAAAiD,cAAcC,KAAK4K,YAAY4nE,MAAMrhB,KAAK,SAACC,GAClE+b,EAAAmC,eAAeC,SAAS37D,EAAK85E,YAAY/+E,KAAKiF,GAAOw9C,OAQnDouF,UAAA5jJ,UAAAoxF,cAAV,SAAwB57B,GACf10D,EAAAoG,MAAMC,kBAAkBquD,KACzB3zD,EAAAmG,YAAY2qE,eAAend,GAC3B1zD,EAAA4F,YAAYi/D,qBAEZzlE,EAAAqC,UAAUA,UAAU4gF,gBAAiB1wD,KAAMvyB,EAAAiD,cAAcC,KAAK4K,YAAY4nE,OAC1E13E,KAAKiyF,WAAWC,iBAGpBvvF,EAAAmG,YAAY+qE,aAAc,GAGpB6wE,UAAA5jJ,UAAAyqH,eAAV,SAAyBj1D,GAChB10D,EAAAoG,MAAMC,kBAAkBquD,KACzB3zD,EAAAmG,YAAY2qE,eAAend,GAC3B1zD,EAAA4F,YAAYi/D,qBAEZznE,KAAKiyF,WAAWs5B,kBAGpB5oH,EAAAmG,YAAY+qE,aAAc,GAGpB6wE,UAAA5jJ,UAAA8xF,YAAV,SAAsBt8B,GACb10D,EAAAoG,MAAMC,kBAAkBquD,KACzB3zD,EAAAmG,YAAY2qE,eAAend,GAC3B1zD,EAAA4F,YAAYi/D,qBAEZzlE,EAAAqC,UAAUA,UAAUqiF,iBAAkBnyD,KAAMvyB,EAAAiD,cAAcC,KAAK4K,YAAY4nE,OAC3E13E,KAAKiyF,WAAWW,eAGpBjwF,EAAAmG,YAAY+qE,aAAc,GAElC6wE,YA7FarkJ,GAAAqkJ,UAASA,GhI8zoChB,SAASpkJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GiIj1oCjE5Z,EAAAzB,EAAgC,GAChC6B,EAAA7B,EAA8B,GAC9B0b,EAAA1b,EAA+B,IAC/ByS,EAAAzS,EAA2E,GAC3EwC,EAAAxC,EAA4B,IAE5BktH,EAAAltH,EAAiC,IAIjC0gF,EAAA1gF,EAAyB,IAGzBuC,EAAAvC,EAA+B,IAC/BkO,EAAAlO,EAA8B,IAC9BmzH,EAAAnzH,EAA8B,IAC9B6kJ,EAAA7kJ,EAAgC,KAEhC8yH,EAAA9yH,EAAwB,KAExBsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAC5BwhG,EAAAxhG,EAAkC,IAMlCskJ,GAJ0BziJ,EAAAiD,cAAcC,KAAK+/I,oBAChBjjJ,EAAAiD,cAAcC,KAAKggJ,uBAGhD,SAAAhiJ,GAA8B3B,EAAAkjJ,SAAAvhJ,EA8B1B,SAAAuhJ,YACIvhJ,EAAAzC,KAAAT,MAzBIA,KAAAmlJ,eAAyB,IACzBnlJ,KAAAolJ,eAAyB,IAEzBplJ,KAAAqlJ,eAAyB,GAwB7BrlJ,KAAKslJ,qBAAuB1yI,EAAAa,iBAAiB,uBAC7CzT,KAAKslJ,qBAAqB5xI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK4kJ,eAAe/wI,KAAK7T,OAEjFA,KAAK4hJ,oBAAsBhvI,EAAAa,iBAAiB,sBAC5CzT,KAAK4hJ,oBAAoBluI,GACrBd,EAAAe,iBAAiBC,SACjB,WAEgC,MAAxB5T,KAAK6hJ,iBACJ7hJ,KAAK6hJ,gBAAgBx4I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAExDzhF,KAAK6hJ,gBAAgBx4I,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAExD5tE,KAAK7T,OAGXA,KAAKulJ,aAAe3yI,EAAAa,iBAAiB,eACrCzT,KAAKulJ,aAAa7xI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKwlJ,oBAAoB3xI,KAAK7T,OAE9EA,KAAKylJ,YAAc7yI,EAAAa,iBAAiB,cACpCzT,KAAKylJ,YAAY/xI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKykG,cAAc5wF,KAAK7T,OAEvEA,KAAKyzH,YAAc7gH,EAAAa,iBAAiB,cACpCzT,KAAKyzH,YAAY//G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK4jG,cAAc/vF,KAAK7T,OAEvEA,KAAK0lJ,sBAAwB9yI,EAAAa,iBAAiB,wBAC9CzT,KAAK0lJ,sBAAsBhyI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK2lJ,qBAAqB9xI,KAAK7T,OAExFA,KAAK4lJ,qBAAuBhzI,EAAAa,iBAAiB,uBAC7CzT,KAAK4lJ,qBAAqBlyI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK6lJ,oBAAoBhyI,KAAK7T,OAsU9F,MAnUIykJ,UAAA3jJ,UAAA2c,aAAA,SAAaD,GAGT,GAFAta,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,GAEA,MAAfxd,KAAK2nG,OACL,IAAK,GAAIviG,KAAOpF,MAAK2nG,OACb3nG,KAAK2nG,OAAOviG,YAAgB4/I,GAAAc,kBAC5B9lJ,KAAKq0H,aAAer0H,KAAK2nG,OAAOviG,IAGxB,oBAARA,GAA6BpF,KAAK2nG,OAAOviG,YAAgBioH,GAAA0B,mBACzD/uH,KAAK+lJ,iBAAmB/lJ,KAAK2nG,OAAwB,iBAG7C,iBAARviG,GAA0BpF,KAAK2nG,OAAOviG,YAAgBioH,GAAA0B,mBACtD/uH,KAAKgmJ,cAAgBhmJ,KAAK2nG,OAAqB,cAG/C3nG,KAAK2nG,OAAOviG,YAAgB6tH,GAAAe,UAC5Bh0H,KAAKimJ,OAASjmJ,KAAK2nG,OAAOviG,GAC1BpF,KAAKouC,YAAYpuC,KAAKimJ,SAGd,eAAR7gJ,GAAwBpF,KAAK2nG,OAAOviG,YAAgBioH,GAAA0B,mBACpD/uH,KAAKkmJ,YAAclmJ,KAAK2nG,OAAOviG,IAGvB,eAARA,GAAwBpF,KAAK2nG,OAAOviG,YAAgBkuH,GAAAmB,gBACpDz0H,KAAK60H,YAAc70H,KAAK2nG,OAAmB,YAGnC,SAARviG,GAAkBpF,KAAK2nG,OAAOviG,YAAgBkuH,GAAAmB,gBAC9Cz0H,KAAKmmJ,MAAQnmJ,KAAK2nG,OAAOviG,GAKrCpF,MAAK6hJ,gBAAkB34I,SAASC,eAAe,mBAGnDs7I,SAAA3jJ,UAAAizE,aAAA,SAAake,GAKTjyF,KAAKmrH,YAAcl5B,EAEA,MAAfjyF,KAAKimJ,QAC2B,MAA5BtjJ,EAAAmG,YAAY6uE,cACa,MAArB33E,KAAKq0H,eACLr0H,KAAKq0H,aAAa3gH,GAAGsxI,EAAAc,gBAAgB9vB,kBAAmBh2H,KAAKi2H,kBAAkBpiH,KAAK7T,OACpFA,KAAKq0H,aAAaxwH,WAAW7D,KAAKimJ,QACI,MAAlCtjJ,EAAAmG,YAAY6uE,aAAa90D,OAAyD,MAAxClgB,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,OACzEnkJ,KAAKq0H,aAAa+xB,UAAUzjJ,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,SAWvEM,SAAA3jJ,UAAA0kJ,oBAAR,WACI,OAAQxlJ,KAAKqmJ,SACT,IAAK,QACDrmJ,KAAKsmJ,eACLtmJ,KAAKykG,eACL,MACJ,KAAK,UACDzkG,KAAKumJ,SACL,MACJ,KAAK,iBACDvmJ,KAAK6kJ,gBACL,MACJ,KAAK,eACD7kJ,KAAK8kJ,sBACL,MACJ,KAAK,SACGniJ,EAAAmG,YAAY6uE,aAAa90D,MAAMuhI,gBAAkB,GACjDpkJ,KAAKmrH,YAAY44B,iBACjB/jJ,KAAK4kJ,mBAEL5kJ,KAAKsmJ,eACLtmJ,KAAKmrH,YAAY44B,oBAMjCU,SAAA3jJ,UAAA4xH,YAAA,WACsB,MAAd1yH,KAAKmmJ,OACLnmJ,KAAKouC,YAAYpuC,KAAKmmJ,QAI9B1B,SAAA3jJ,UAAA27E,UAAA,WAEoC,MAA5B95E,EAAAmG,YAAY6uE,cACsB,MAAlCh1E,EAAAmG,YAAY6uE,aAAa90D,OACe,MAAxClgB,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,QAE/BnkJ,KAAK2f,SAAU,EACf3f,KAAKsmJ,eACLtmJ,KAAKq0H,aAAamyB,aAAa7jJ,EAAAmG,YAAY6uE,cAAc,GAEzDgqB,EAAA+C,kBAAkBC,wBAAwB,UAAW,GAErD9jB,EAAAl2D,SAASzV,KAAK,cACd2rE,EAAAl2D,SAASzV,KAAK,oBACd2rE,EAAAl2D,SAAS0hE,KAAK,0BAEV1pF,EAAAmG,YAAY6uE,aAAa90D,MAAMuhI,gBAAkB,GACjDpkJ,KAAK4lJ,qBAAqBzwI,MAAM,KAK5CsvI,SAAA3jJ,UAAA+kJ,oBAAA,WACI7lJ,KAAKmrH,YAAY44B,iBACjB/jJ,KAAK4kJ,kBAGTH,SAAA3jJ,UAAAozE,QAAA,aAEAuwE,SAAA3jJ,UAAAqU,MAAA,WACInV,KAAK49E,SAOT6mE,SAAA3jJ,UAAAyrH,OAAA,SAAOo4B,GACH,GACgC,MAA5BhiJ,EAAAmG,YAAY6uE,cACsB,MAAlCh1E,EAAAmG,YAAY6uE,aAAa90D,OACe,MAAxClgB,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,MAE/B,IAAK,GAAI/+I,KAAOzC,GAAAmG,YAAY6uE,aAAa90D,MAAMshI,MAC3C,GAAI5jJ,GAAaoC,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,MAAM/+I,GAAK7E,GACvDkmJ,EAA2B9jJ,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,MAAM5jJ,IAKhFkkJ,SAAA3jJ,UAAA69B,IAAA,aAEA8lH,SAAA3jJ,UAAAoxF,cAAA,aAKAuyD,SAAA3jJ,UAAAyqH,eAAA,WAEoC,MAA5B5oH,EAAAmG,YAAY6uE,cACsB,MAAlCh1E,EAAAmG,YAAY6uE,aAAa90D,OACe,MAAxClgB,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,QAG/BnkJ,KAAKq0H,aAAaqyB,aAAa/jJ,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,OAG9DnkJ,KAAKq0H,aAAamyB,aAAa7jJ,EAAAmG,YAAY6uE,cAE3C33E,KAAKqmJ,QAAU,SACfrmJ,KAAKulJ,aAAapwI,MAAMxS,EAAAmG,YAAY6uE,aAAa90D,MAAMuhI,eAAiB,EAAIpkJ,KAAKqlJ,kBAIzFZ,SAAA3jJ,UAAAylJ,QAAA,WACIvmJ,KAAKqmJ,QAAU,iBACfrmJ,KAAKulJ,aAAapwI,MAAM,KAG5BsvI,SAAA3jJ,UAAA+jJ,eAAA,WACI7kJ,KAAKmrH,YAAY05B,iBACjB7kJ,KAAKqmJ,QAAU,eACfrmJ,KAAKulJ,aAAapwI,MAAM,KAG5BsvI,SAAA3jJ,UAAAgkJ,qBAAA,WACI9kJ,KAAKmrH,YAAY25B,uBAEjB9kJ,KAAKqmJ,QAAU,SACfrmJ,KAAKulJ,aAAapwI,MAAM,KAG5BsvI,SAAA3jJ,UAAA8xF,YAAA,WACgC,MAAxB5yF,KAAK6hJ,iBAA2B7hJ,KAAK6hJ,gBAAgBx4I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACvFzhF,KAAK6hJ,gBAAgBx4I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAI7DgjE,SAAA3jJ,UAAAm1H,kBAAA,WACIj2H,KAAKmrH,YAAYU,mBAOrB44B,SAAA3jJ,UAAA6lJ,kBAAA,SAAkBp2E,GACd,IAAK,GAAInrE,KAAOpF,MAAK2nG,OACb3nG,KAAK2nG,OAAOviG,IAAQpF,KAAK60H,cACzB70H,KAAK2nG,OAAOviG,GAAKua,QAAU4wD,IAKvCk0E,SAAA3jJ,UAAA88E,MAAA,SAAMD,GAAA,SAAAA,OAAA,GACF39E,KAAK2f,SAAU,EACf3f,KAAK2mJ,mBAAkB,GACnB3mJ,KAAK60H,aACL70H,KAAK60H,YAAYkC,SAAS,QAG9Bp1B,EAAA+C,kBAAkBC,wBAAwB,UAAW,IAGrB,MAA5BhiG,EAAAmG,YAAY6uE,cACsB,MAAlCh1E,EAAAmG,YAAY6uE,aAAa90D,OACe,MAAxClgB,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,QAI/BnkJ,KAAKq0H,aAAa+xB,UAAUzjJ,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,OAC3DnkJ,KAAKq0H,aAAawwB,eAAeliJ,EAAAmG,YAAY6uE,cAAc,IAG/DkJ,EAAAl2D,SAASzV,KAAK,cACd2rE,EAAAl2D,SAASzV,KAAK,oBACd2rE,EAAAl2D,SAAS0hE,KAAK,0BACdrsF,KAAKmrH,YAAYvtC,MAAMD,GACvB39E,KAAKylJ,YAAYtwI,MAAMnV,KAAKmlJ,iBAMhCV,SAAA3jJ,UAAAwlJ,aAAA,WAEoC,MAA5B3jJ,EAAAmG,YAAY6uE,cACsB,MAAlCh1E,EAAAmG,YAAY6uE,aAAa90D,OACe,MAAxClgB,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,OAE/BnkJ,KAAKq0H,aAAaqyB,aAAa/jJ,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,QAItEM,SAAA3jJ,UAAA2jG,cAAA,WAEIzkG,KAAK2mJ,mBAAkB,GACnB3mJ,KAAK60H,aACL70H,KAAK60H,YAAYkC,SAAS,SAG9B/2H,KAAKmrH,YAAY1mB,iBAGrBggD,SAAA3jJ,UAAA+8E,MAAA,WACgC,MAAxB79E,KAAK6hJ,iBAA4B7hJ,KAAK6hJ,gBAAgBx4I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACxFzhF,KAAK6hJ,gBAAgBx4I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAGtDzhF,KAAKq0H,aAAa95D,OAAM,GAEA,MAApBv6D,KAAK60H,aAEL70H,KAAK60H,YAAYkC,SAAS,SAG9B/2H,KAAK2mJ,mBAAkB,GACnB3mJ,KAAK60H,aACL70H,KAAK60H,YAAYkC,SAAS,QAG9B/2H,KAAKyzH,YAAYt+G,MAAMnV,KAAKolJ,iBAGhCX,SAAA3jJ,UAAA8iG,cAAA,WACI5jG,KAAKyzH,YAAYv+G,OACjBlV,KAAK2mJ,mBAAkB,GACnB3mJ,KAAK60H,aACL70H,KAAK60H,YAAYkC,SAAS,SAE9B/2H,KAAKmrH,YAAYvnB,iBAIrB6gD,SAAA3jJ,UAAA8jJ,eAAA,WACI5kJ,KAAKslJ,qBAAqBpwI,MAG1B,IAAI0xI,GAAa,SAAUjtH,EAAkB9gB,GACzC,GAAIguI,GAAcpoI,KAAKoE,MAAiB,IAAX8W,EAEzBktH,GAAc,KACd7mJ,KAAKmP,SAASulI,IAAI,WAAYkS,GAC9B/lE,EAAAl2D,SAAS0hE,KAAK,yBAA0B,IAAI,IAIpDxL,GAAAl2D,SAASzV,KAAK,yBAA0B,IACxC2rE,EAAAl2D,SAASoS,KAAK,qBAAsB,GAAG,EAAM6pH,GAEjB,MAAxB5mJ,KAAK6hJ,kBACDl/I,EAAAmG,YAAY6uE,cAAgBh1E,EAAAmG,YAAY6uE,aAAa90D,OACrDjgB,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS26D,6BACT1gE,EAAAmG,YAAY6uE,aAAa1+D,MAAMlL,WAAa,IAAMpL,EAAAmG,YAAY6uE,aAAawpE,WAAWpzI,YAG9F/N,KAAK6hJ,gBAAgBx4I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAGzDzhF,KAAK0lJ,sBAAsBvwI,MAAM,KAGrCsvI,SAAA3jJ,UAAA6kJ,qBAAA,WACI3lJ,KAAK0lJ,sBAAsBxwI,OAC3B7G,EAAA0B,cAAc+uE,mBAnYtB2lE,SAAAppI,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBjIqlpCxBw8H,WiIplpCsBp3B,EAAA0B,kBAAjB1uH,GAAAokJ,SAAQA,GjI4lpCf,SAASnkJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GkIpopCjE5Z,EAAAzB,EAAgC,GAChC6B,EAAA7B,EAA8B,GAC9B0b,EAAA1b,EAA+B,IAC/BktH,EAAAltH,EAAiC,IACjCosI,EAAApsI,EAAgC,KAChC2kE,EAAA3kE,EAA2B,IAG3B+yH,EAAA/yH,EAA4B,KAI5B0yI,EAAA1yI,EAAiC,KAE7B8kJ,EAAsBjjJ,EAAAiD,cAAcC,KAAK+/I,oBACzCC,EAAyBljJ,EAAAiD,cAAcC,KAAKggJ,uBAShDY,EAAA,SAAA5iJ,GAAqC3B,EAAAukJ,gBAAA5iJ,EAArC,SAAA4iJ,mBAAqC5iJ,EAAA7B,MAAArB,KAAAmD,WAsEvBnD,KAAA60I,mBAEA70I,KAAA8mJ,gBAA0B,GAI5B9mJ,KAAA+mJ,YAAsB,EACtB/mJ,KAAAsuF,aAAuB,EACvBtuF,KAAAgnJ,kBAA4B,EAI5BhnJ,KAAAinJ,YAAsB,EACtBjnJ,KAAAknJ,cAAwB,EACxBlnJ,KAAAmnJ,eA6iBZ,MAriBWrB,iBAAAhlJ,UAAA2c,aAAP,SAAoBD,GAChBta,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,IAGhBsoI,gBAAAhlJ,UAAA+C,WAAP,SAAkBsgJ,GACdnkJ,KAAKimJ,OAAS9B,EAEdnkJ,KAAKqtI,cACLrtI,KAAKonJ,YAAYjD,GACjBnkJ,KAAK4hG,oBAOFkkD,gBAAAhlJ,UAAA4zH,mBAAP,SAA0BtrH,GACtBpJ,KAAK60I,gBAAgBh0I,OAAO0qB,KAAKniB,GAAS,IAAMA,EAAQvI,OAAO0qB,KAAKniB,GAAS,KAG1E08I,gBAAAhlJ,UAAA+jJ,eAAP,SAAsBvuF,EAAkCniC,EAAiB8Q,GACrE,GAAIoiH,GAAUlzH,EAAQmiC,EAAS4S,SAAWlpE,KAAK+mJ,YAC3CO,EAAWnzH,EAAQmiC,EAASr9C,MAAQjZ,KAAKsuF,aACzCi5D,EAAgBpzH,EAAQmiC,EAAS6qF,WAAanhJ,KAAKgnJ,iBAEvDhnJ,MAAK+mJ,YAAczwF,EAAS4S,SAC5BlpE,KAAKsuF,aAAeh4B,EAASr9C,MAC7BjZ,KAAKgnJ,kBAAoB1wF,EAAS6qF,UAElC,IAAIqG,IAAwB,CA2C5B,OAzCIviH,IACIjlC,KAAK2nG,OAAa,MAAK3nG,KAAK2nG,OAAa,eAAa4kC,GAAAsE,kBACtD7wI,KAAK2nG,OAAa,KAAEspC,UAAUjxI,KAAK+mJ,aACnCS,GAAe,GAEfxnJ,KAAK2nG,OAAc,gBAAa4kC,GAAAsE,kBAChC7wI,KAAK2nG,OAAc,MAAEspC,UAAUjxI,KAAK+mJ,aACpCS,GAAe,GAEfxnJ,KAAK2nG,OAAmB,YAAK3nG,KAAK2nG,OAAmB,qBAAa4kC,GAAAsE,kBAClE7wI,KAAK2nG,OAAmB,WAAEspC,UAAUjxI,KAAK+mJ,aACzCS,GAAe,MAIfrzH,GACCkzH,GAAWrnJ,KAAK+mJ,aAAe/mJ,KAAK2nG,OAAa,MAAK3nG,KAAK2nG,OAAa,eAAa4kC,GAAAsE,mBAEtF7wI,KAAK2nG,OAAa,KAAE5qE,KAAK/8B,KAAK+mJ,YAAa5yH,EAAQn0B,KAAK+mJ,YAAcM,GACtEG,GAAe,IAGfrzH,GACCmzH,GAAYtnJ,KAAKsuF,cACdtuF,KAAK2nG,OAAc,OACnB3nG,KAAK2nG,OAAc,gBAAa4kC,GAAAsE,mBAEpC7wI,KAAK2nG,OAAc,MAAE5qE,KAAK/8B,KAAKsuF,aAAcn6D,EAAQn0B,KAAKsuF,aAAeg5D,GACzEE,GAAe,IAGfrzH,GACCozH,GAAiBvnJ,KAAKgnJ,mBACnBhnJ,KAAK2nG,OAAmB,YACxB3nG,KAAK2nG,OAAmB,qBAAa4kC,GAAAsE,mBAEzC7wI,KAAK2nG,OAAmB,WAAE5qE,KAAK/8B,KAAKgnJ,kBAAmB7yH,EAAQn0B,KAAKgnJ,kBAAoBO,GACxFC,GAAe,IAIhBA,GAOJ1B,gBAAAhlJ,UAAAslJ,UAAP,SAAiBqB,GACbznJ,KAAKknJ,cAAgB,KACrBlnJ,KAAKinJ,YAAc,EAEnBjnJ,KAAKmnJ,eACLnnJ,KAAK0nJ,aAAeD,CAEpB,KAAK,GAAI1nJ,GAAI,EAAGA,EAAI0nJ,EAAU17I,OAAQhM,IAClCC,KAAK2nJ,kBAAkB5nJ,EAG3B,KAAK,GAAIqF,KAAOqiJ,GACZznJ,KAAK4nJ,eAAeH,EAAUriJ,GAAK7E,KAQpCulJ,gBAAAhlJ,UAAA4lJ,aAAP,SAAoBe,GAChBznJ,KAAK0nJ,aAAeD,GAQd3B,gBAAAhlJ,UAAA+mJ,aAAV,SAAuBC,EAAmB/X,EAAmB9qG,GACzD,GAAI1kC,GACA4G,EAEA4gJ,EADAn7I,EAAgB,KAIhB65I,EAA2BzmJ,KAAK0nJ,aAAaI,EAcjD,IAbmB,MAAfrB,EAASlmJ,KACTA,EAAKkmJ,EAASlmJ,IAEK,MAAnBkmJ,EAASt/I,SACTA,EAASs/I,EAASt/I,QAEA,MAAlBs/I,EAAS75I,QACTA,EAAQ8I,SAAS+wI,EAAS75I,MAAQ,KAEZ,MAAtB65I,EAASsB,YACTA,EAAYtB,EAASsB,UAAUh6I,YAGlB,MAAb+5I,GAA+B,MAAV3gJ,GACM,MAAvBnH,KAAKkkG,gBAA4D,MAAlClkG,KAAKkkG,eAAe4jD,GAAoB,CACvE,GAAc,OAAVl7I,EAAgB,CAChB,GAAI+6F,GAAS3nG,KAAKkkG,eAAe4jD,GAAW,GAAGxuB,kBAC/C,KAAK,GAAIl0H,KAAOuiG,GACZ,GAAIA,EAAOviG,YAAgBytI,GAAAY,iBACvB,OAAQsU,GACJ,IAAK7C,GAAuBlE,KAAKjzI,WAC7B45F,EAAOviG,GAAK+tI,WAAW5zE,KAAOyoF,OAAOp7I,GACrC+6F,EAAOviG,GAAKguI,SACZ,MACJ,KAAK8R,GAAuB+C,MAAMl6I,WAC9B45F,EAAOviG,GAAK+tI,WAAW5zE,KAAO,IAAM3yD,EACpC+6F,EAAOviG,GAAKguI,SACZ,MACJ,KAAK8R,GAAuBgD,WAAWn6I,WACnC45F,EAAOviG,GAAK+tI,WAAW5zE,KAAO,IAAM3yD,EACpC+6F,EAAOviG,GAAKguI,WAOhC,GAAI+U,GAAiB,IAErB,QAAQhhJ,EAAO4G,YACX,IAAKk3I,GAAoBt1I,QAAQ5B,WAEA,MAAzB/N,KAAKotI,kBACLptI,KAAKmtI,sBAAsBr7H,SAAS9R,KAAKkkG,eAAe3jG,GAAI,IAEhE4nJ,EAAS,aAET,MACJ,KAAKlD,GAAoBpmE,SAAS9wE,WAK9B,OAH6B,MAAzB/N,KAAKotI,kBACLptI,KAAKmtI,sBAAsBr7H,SAAS9R,KAAKkkG,eAAe3jG,GAAI,IAExDwnJ,GACJ,IAAK7C,GAAuBlE,KAAKjzI,WAEzBo6I,EADAnoJ,KAAKkkG,eAAe4jD,GAAW,GAAGvuB,QAAQusB,gBAAgBsC,kBACjD,mBAEA,cAEb,MACJ,KAAKlD,GAAuB+C,MAAMl6I,WAE1Bo6I,EADAnoJ,KAAKkkG,eAAe4jD,GAAW,GAAGvuB,QAAQusB,gBAAgBuC,mBACjD,oBAEA,cAEb,MACJ,KAAKnD,GAAuBgD,WAAWn6I,WAE/Bo6I,EADAnoJ,KAAKkkG,eAAe4jD,GAAW,GAAGvuB,QAAQusB,gBAAgBwC,wBACjD,yBAEA,cAEb,MACJ,SACIH,EAAS,eAGjB,KACJ,KAAKlD,GAAoBsD,SAASx6I,WAK9B,GAJ6B,MAAzB/N,KAAKotI,kBACLptI,KAAKotI,iBAAiBt7H,SAAS9R,KAAKkkG,eAAe3jG,GAAI,IAGvDqM,GAAS,GACL5M,KAAKkkG,eAAe4jD,GAAW,GAAGvuB,QAAQusB,gBAAgB5Z,WAAY,CACtEic,EAAS,WACT,OAIR,OAAQJ,GACJ,IAAK7C,GAAuBlE,KAAKjzI,WAEzBo6I,EADAnoJ,KAAKkkG,eAAe4jD,GAAW,GAAGvuB,QAAQusB,gBAAgB0C,kBACjD,mBAEA,cAEb,MACJ,KAAKtD,GAAuB+C,MAAMl6I,WAE1Bo6I,EADAnoJ,KAAKkkG,eAAe4jD,GAAW,GAAGvuB,QAAQusB,gBAAgB2C,mBACjD,oBAEA,cAEb,MACJ,KAAKvD,GAAuBgD,WAAWn6I,WAE/Bo6I,EADAnoJ,KAAKkkG,eAAe4jD,GAAW,GAAGvuB,QAAQusB,gBAAgB4C,wBACjD,yBAEA,cAEb,MACJ,SACIP,EAAS,eAGjB,KACJ,KAAKlD,GAAoB0D,MAAM56I,WAK3B,OAJ6B,MAAzB/N,KAAKotI,kBACLptI,KAAKotI,iBAAiBt7H,SAAS9R,KAAKkkG,eAAe3jG,GAAI,IAGnDwnJ,GACJ,IAAK7C,GAAuBlE,KAAKjzI,WAEzBo6I,EADAnoJ,KAAKkkG,eAAe4jD,GAAW,GAAGvuB,QAAQusB,gBAAgB8C,eACjD,gBAEA,WAEb,MACJ,KAAK1D,GAAuB+C,MAAMl6I,WAE1Bo6I,EADAnoJ,KAAKkkG,eAAe4jD,GAAW,GAAGvuB,QAAQusB,gBAAgB+C,gBACjD,iBAEA,WAEb,MACJ,KAAK3D,GAAuBgD,WAAWn6I,WAE/Bo6I,EADAnoJ,KAAKkkG,eAAe4jD,GAAW,GAAGvuB,QAAQusB,gBAAgBgD,qBACjD,sBAEA,WAEb,MACJ,SACIX,EAAS,aAQX,MAAVA,GAEInoJ,KAAKkkG,eAAe4jD,GAAW,GAAGruB,kBAAoBqsB,gBAAgBqC,EAAS,SAC/EnoJ,KAAKkkG,eAAe4jD,GAAW,GAAG/wB,SAAS+uB,gBAAgB7gH,EAAOkjH,EAAS,OAASA,MAuBjGrC,gBAAAhlJ,UAAA0lJ,aAAP,SAAoBlwF,EAAkCrxB,GAClDjlC,KAAK+oJ,aAAezyF,EAASzzC,MAC7B7iB,KAAK6yF,WAAav8B,EAASzzC,MAAMqmD,QAEjC,IAAI8/E,GAAW,CASf,IARAhpJ,KAAK+oJ,aAAa5E,MAAM71H,QAAQ,SAAC26H,GACzBA,EAAK9hJ,QAAU89I,EAAoBsD,UACnCS,MAIRhpJ,KAAK6kJ,eAAevuF,GAAU,EAAOrxB,GAEjC+jH,EAAWhpJ,KAAKinJ,YAAa,CAC7BjnJ,KAAKinJ,YAAc+B,EAEnBhpJ,KAAK8tI,uBAAyB,CAE9B,KAAK,GAAI/tI,GAAI,EAAGA,EAAIC,KAAKgtI,YAAYjhI,OAAQhM,IACrCC,KAAK6yF,WAAa/tB,EAAAqD,WAAWK,KAAOxoE,KAAKgtI,YAAYjtI,KACrDC,KAAK8tI,uBAAyB/tI,EAQtC,OAJAC,MAAKguI,cAAc/oG,GAEnBjlC,KAAKiuI,WAAW6X,gBAAgB9vB,kBAAmB,IAE5Ch2H,KAAK8tI,wBAA0B,EAKtC,MAFA9tI,MAAKiuI,WAAW6X,gBAAgB5X,KAAMluI,KAAKmuI,wBAEpC,GAIL2X,gBAAAhlJ,UAAAktI,cAAV,SAAwB/oG,GAIpB,IAAK,GAAI7/B,KAAOpF,MAAK0nJ,aAEjB1nJ,KAAK6nJ,aAAa7nJ,KAAK0nJ,aAAatiJ,GAAK7E,IAAI,EAAO0kC,IAIlD6gH,gBAAAhlJ,UAAAkwI,kBAAV,WACI,GAAIkY,GAAc,IAgBlB,OAfAlpJ,MAAK0nJ,aAAap5H,QAAQ,SAAC26H,EAAM5kH,GAC7B,GAAI4kH,EAAK9hJ,QAAU89I,EAAoB0D,MACnC,OAAQM,EAAKlB,UAAUh6I,YACnB,IAAKm3I,GAAuBlE,KAAKjzI,WAC7Bm7I,EAAM,CACN,MACJ,KAAKhE,GAAuB+C,MAAMl6I,WAC9Bm7I,EAAM,CACN,MACJ,KAAKhE,GAAuBgD,WAAWn6I,WACnCm7I,EAAM,KAKfA,GAIDpD,gBAAAhlJ,UAAA0tI,eAAV,WACIxuI,KAAKmvI,sBAAwBnvI,KAAKgxI,oBAClChxI,KAAKovI,0BAA2B,EAEG,OAA/BpvI,KAAKmvI,uBAWN2W,gBAAAhlJ,UAAAy5D,MAAP,SAAa00E,EAA0B98C,GAAA,SAAAA,OAAA,GAEnCnyF,KAAK6hG,YAEDotC,IAAoB98C,GACpBnyF,KAAKiuI,WAAW6X,gBAAgB5X,KAAMluI,KAAKmuI,sBAK/C,IAAIe,GAAsBlvI,KAAK8tI,sBAG/B,OAFA9tI,MAAK8tI,0BAE6B,MAA9B9tI,KAAKmvI,sBACDnvI,KAAKovI,0BACLpvI,KAAK6tI,kBAEL7tI,KAAK4tI,YAAc,KACnB5tI,KAAK6yF,WAAa,MAEX,IAEP7yF,KAAKqvI,gBAELrvI,KAAK4tI,YAAc,KACnB5tI,KAAK6yF,WAAa,KAEXq8C,GAAuB,IAGlClvI,KAAK4tI,YAAc,KACnB5tI,KAAK6yF,WAAa,KAEXq8C,GAAuB,IAQ5B4W,gBAAAhlJ,UAAAyuI,gBAAV,WAGI,OAFAvvI,KAAKi5H,MAAM/jH,OAEHlV,KAAKsvI,aACT,IAAKwW,iBAAgB9vB,kBACjBh2H,KAAKiX,KAAK6uI,gBAAgB9vB,kBAC1B,MACJ,KAAK8vB,iBAAgBqD,MACjB,KACJ,KAAKrD,iBAAgBsD,aACjB,KACJ,KAAKtD,iBAAgBuD,OACjB,KACJ,KAAKvD,iBAAgBpC,eACjB,KACJ,KAAKoC,iBAAgBwD,QAEjB,KACJ,KAAKxD,iBAAgB5X,KACjBluI,KAAKwvI,SASPsW,gBAAAhlJ,UAAAsmJ,YAAV,SAAsBnhD,GAClBjmG,KAAKimG,QAAUA,EAEfjmG,KAAKmtI,sBAAwB,GAAI9f,GAAA0B,iBACjC/uH,KAAKmtI,sBAAsBxvH,KAAO,eAClC3d,KAAK8R,SAAS9R,KAAKmtI,uBAEnBntI,KAAKotI,iBAAmB,GAAI/f,GAAA0B,iBAC5B/uH,KAAKotI,iBAAiBzvH,KAAO,UAC7B3d,KAAK8R,SAAS9R,KAAKotI,kBAEnBptI,KAAKkkG,iBAEL,KAAK,GAAInkG,GAAI,EAAGA,EAAIC,KAAK4sI,UAAW7sI,IAAK,CACrCC,KAAKkkG,eAAex8E,QAEpB,KAAK,GAAI2b,GAAI,EAAGA,EAAIrjC,KAAK+sI,YAAa1pG,IAClCrjC,KAAKkkG,eAAenkG,GAAG2nB,KAAK,QAU9Bo+H,gBAAAhlJ,UAAA8mJ,eAAV,SAAyBpa,EAAmBiC,GACxC,GADwC,SAAAA,MAAA,GACY,OAAhDzvI,KAAKkkG,eAAespC,GAAWiC,GAAuB,CACtD,GAAIgX,GAA2BzmJ,KAAK0nJ,aAAala,EACjD,IAAmB,MAAfiZ,EAASlmJ,IAAiC,MAAnBkmJ,EAASt/I,OAAgB,CAChD,GAAIs+F,GAAiB,IAErB,QAAQghD,EAASt/I,OAAO4G,YACpB,IAAKk3I,GAAoBpmE,SAAS9wE,WAC9B03F,EAASzlG,KAAKimG,QAAQilC,UAAUub,EAASlmJ,GAAIulJ,gBAAgByD,aAC7D,MACJ,KAAKtE,GAAoBt1I,QAAQ5B,WAC7B03F,EAASzlG,KAAKimG,QAAQilC,UAAUub,EAASlmJ,GAAIulJ,gBAAgB0D,YAC7D,MACJ,KAAKvE,GAAoBwE,SAAS17I,WAC9B03F,EAASzlG,KAAKimG,QAAQilC,UAAUub,EAASlmJ,GAAIulJ,gBAAgB4D,aAC7D,MACJ,KAAKzE,GAAoBsD,SAASx6I,WAC9B03F,EAASzlG,KAAKimG,QAAQilC,UAAUub,EAASlmJ,GAAIulJ,gBAAgB6D,aAC7D,MACJ,KAAK1E,GAAoB0D,MAAM56I,WAC3B03F,EAASzlG,KAAKimG,QAAQilC,UAAUub,EAASlmJ,GAAIulJ,gBAAgB8D,WAGxC,MAAzB5pJ,KAAKotI,kBAAsC,MAAV3nC,IACjCzlG,KAAKotI,iBAAiBt7H,SAAS2zF,GAC/BA,EAAOrmF,SAASN,EAAI9e,KAAK6sI,MAAMW,GAAa/nC,EAAO4lC,QACnD5lC,EAAOrmF,SAASJ,EAAIhf,KAAK8sI,MAAMU,GAAaxtI,KAAK8rI,aAAe2D,EAAchqC,EAAO6lC,QACrFtrI,KAAKkkG,eAAespC,GAAWiC,GAAehqC,MAMpDqgD,gBAAAhlJ,UAAA6mJ,kBAAV,SAA4Bna,EAAmBiC,GAAA,SAAAA,MAAA,GACS,OAAhDzvI,KAAKkkG,eAAespC,GAAWiC,KAC/BzvI,KAAKimG,QAAQklC,aAAanrI,KAAKkkG,eAAespC,GAAWiC,IAEzDzvI,KAAKkkG,eAAespC,GAAWiC,GAAe,OAQ5CqW,gBAAAhlJ,UAAA0uI,KAAV,aA5lB0BsW,gBAAAqD,MAAgB,QAChBrD,gBAAAsD,aAAuB,eACvBtD,gBAAAuD,OAAiB,SACjBvD,gBAAApC,eAAyB,iBACzBoC,gBAAAwD,QAAkB,UAElBxD,gBAAA5X,KAAe,OAEf4X,gBAAA/W,UAAoB,YAMpB+W,gBAAAyD,aAAuB,iBACvBzD,gBAAAsC,iBAA2B,sBAC3BtC,gBAAAuC,kBAA4B,uBAC5BvC,gBAAAwC,uBAAiC,4BAEjCxC,gBAAA0D,YAAsB,gBAEtB1D,gBAAA4D,aAAuB,iBAEvB5D,gBAAA6D,aAAuB,iBACvB7D,gBAAA0C,iBAA2B,sBAC3B1C,gBAAA2C,kBAA4B,uBAC5B3C,gBAAA4C,uBAAiC,4BAEjC5C,gBAAA8D,UAAoB,cACpB9D,gBAAA8C,cAAwB,mBACxB9C,gBAAA+C,eAAyB,oBACzB/C,gBAAAgD,oBAA8B,yBAE9BhD,gBAAA5Z,UAAoB,cAGpB4Z,gBAAA+D,iBAA2B,sBAC3B/D,gBAAAgE,qBAA+B,2BAC/BhE,gBAAAiE,sBAAgC,4BAChCjE,gBAAAkE,2BAAqC,iCAErClE,gBAAAmE,gBAA0B,qBAE1BnE,gBAAAoE,iBAA2B,sBAE3BpE,gBAAAqE,iBAA2B,sBAC3BrE,gBAAAsE,qBAA+B,2BAC/BtE,gBAAAuE,sBAAgC,4BAChCvE,gBAAAwE,2BAAqC,iCAErCxE,gBAAAyE,cAAwB,mBACxBzE,gBAAA0E,kBAA4B,wBAC5B1E,gBAAA2E,mBAA6B,yBAC7B3E,gBAAA4E,wBAAkC,8BAElC5E,gBAAA6E,cAAwB,mBAjEtD7E,gBAAAzqI,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBlI6kqCxB69H,kBkI5kqC6B5yB,EAAAkB,YAAxB/zH,GAAAylJ,gBAAeA,EAmoBfzlJ,EAAAuqJ,2BAOTtxC,OAAQ,SAORozB,QAAS,YlIu8oCP,SAASpsI,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GmI5nqCjE5Z,EAAAzB,EAA6E,GAC7E6B,EAAA7B,EAAsD,GACtDyS,EAAAzS,EAA2E,GAC3E0b,EAAA1b,EAA+B,IAC/B6xF,EAAA7xF,EAA4B,IAC5Bo5G,EAAAp5G,EAA6B,IAC7BuC,EAAAvC,EAA+B,IAC/BwC,EAAAxC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IACzB4vH,EAAA5vH,EAA4B,IAC5B6vH,EAAA7vH,EAA+B,IAC/BqC,EAAArC,EAA2B,GAC3B2kE,EAAA3kE,EAA2B,IAC3BkO,EAAAlO,EAA8B,IAC9ByC,EAAAzC,EAA4B,IAC5BgzG,EAAAhzG,EAAwC,IACxC4kE,EAAA5kE,EAA+B,IAC/BoyE,EAAApyE,EAA4B,IAE5B0qJ,EAAA1qJ,EAAgC,IAChC0gF,EAAA1gF,EAAyB,IACzB2qJ,EAAA3qJ,EAAiC,KACjC4qJ,EAAA5qJ,EAA6B,KAC7B6qJ,EAAA7qJ,EAAqC,KAGjC2P,EAAc9N,EAAAiD,cAAcC,KAAK4K,YAIrCm7I,GAHiBjpJ,EAAAmjE,WAAWD,WAG5B,SAAAhiE,GAA8C3B,EAAA0pJ,yBAAA/nJ,EA6B1C,SAAA+nJ,4BACI/nJ,EAAAzC,KAAAT,KAAM,QAlBFA,KAAAkrJ,sBAAgC,EAChClrJ,KAAAmrJ,uBAAiC,EAEjCnrJ,KAAAmwH,eAAyB,EAOzBnwH,KAAAorJ,qBAA+B,EAI/BprJ,KAAAqrJ,sBAAgC,EAChCrrJ,KAAAsrJ,eAAyB,EAkmCrC,MA5lCIL,0BAAAnqJ,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKurJ,UAAY/tI,EAAKU,aAAa,aAAeV,EAAKe,aAAa,aAAe,cAEnFve,KAAKwrJ,iBAAmB,GAAIr4C,GAAAloF,UACrBjrB,KAAK45G,KAAI,mBACZh4G,EAAAkwD,uBAAuBgoD,iBAAiB95G,OAG5CA,KAAKm9G,kBAELn9G,KAAKswH,eAAiB19G,EAAAa,iBAAiB,iBACvCzT,KAAKswH,eAAe58G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKosH,oBAAoBv4G,KAAK7T,OAEhFA,KAAKuwH,eAAiB39G,EAAAa,iBAAiB,iBACvCzT,KAAKuwH,eAAe78G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKwwH,gBAAgB38G,KAAK7T,OAE5EA,KAAKywH,oBAAsB79G,EAAAa,iBAAiB,sBAC5CzT,KAAKywH,oBAAoB/8G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK0wH,mBAAmB78G,KAAK7T,OAEpFA,KAAK2wH,cAAgBznH,SAASC,eAAe,gBAE7CnJ,KAAKk/E,2BAA6BtsE,EAAAa,iBAAiB,6BACnDzT,KAAKk/E,2BAA2BxrE,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKi/E,0BAA0BprE,KAAK7T,OAElGA,KAAK6wH,qBAAuBj+G,EAAAa,iBAAiB,uBAC7CzT,KAAK6wH,qBAAqBn9G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKosH,oBAAoBv4G,KAAK7T,OAEtFA,KAAKyrJ,uBAAyB74I,EAAAa,iBAAiB,yBAC/CzT,KAAKyrJ,uBAAuB/3I,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK0rJ,wBAAwB73I,KAAK7T,OAE5FA,KAAK2rJ,gBAAkBziJ,SAASC,eAAe,kBAE/CnJ,KAAK4rJ,uBAAyB5rJ,KAAK4rJ,uBAAuB/3I,KAAK7T,MAG/DwC,EAAA+B,WAAWoJ,WAAW+F,GAAGs3I,EAAAa,qBAAqBC,OAAQ9rJ,KAAK4rJ,uBAE3D,IAAIG,GAAyB7iJ,SAASC,eAAe,aACjD6iJ,EAAsB9iJ,SAASC,eAAe,SAEhC,OAAd3G,EAAA+B,YAAsD,MAAhC/B,EAAA+B,WAAWC,oBAChB,MAAbunJ,IACIvpJ,EAAA+B,WAAWC,kBAAkB+I,UAC7Bw+I,EAAU1iJ,UAAUC,IAAI,WAExB9G,EAAA+B,WAAWC,kBAAkByJ,oBAC7B89I,EAAU1iJ,UAAUC,IAAI,kBAGlB,MAAV0iJ,GACIxpJ,EAAA+B,WAAWC,kBAAkByJ,oBAC7B+9I,EAAO3iJ,UAAUC,IAAI,mBAM7B2hJ,yBAAAnqJ,UAAA8qJ,uBAAR,WACQv9I,EAAA0B,cAAc8nE,gBAGdxpE,EAAA0B,cAAcylE,oBAAsBnnE,EAAA0B,cAAc0lE,oBAQtDjzE,EAAA+B,WAAWoJ,WAAWs+I,aAAajsJ,KAAKurJ,UAAW,GACnD/oJ,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,2BAG9CtrJ,OAAAkD,eAAcknJ,yBAAAnqJ,UAAA,mBnI6kqCTkD,ImI7kqCL,WACI,MAAOhE,MAAKwrJ,kBnI+kqCXtnJ,YAAY,EACZC,cAAc,ImI7kqCZ8mJ,yBAAAnqJ,UAAAqrJ,sBAAP,WACI,MAAOnsJ,MAAKwrJ,iBAAiBzxC,iBAGjCkxC,yBAAAnqJ,UAAA07E,cAAA,SAAcyV,GACVjyF,KAAKmrH,YAAcl5B,EACnBjyF,KAAKmrH,YAAYz3G,GAAGs8G,EAAAgB,eAAeC,aAAcjxH,KAAKsyF,aAAaz+E,KAAK7T,OACxEA,KAAKmrH,YAAYz3G,GAAGs8G,EAAAgB,eAAeE,eAAgBlxH,KAAKmxH,eAAet9G,KAAK7T,OAC5EA,KAAKmrH,YAAYz3G,GAAGs8G,EAAAgB,eAAetF,uBAAwB1rH,KAAK2rH,uBAAuB93G,KAAK7T,OAC5FA,KAAKmrH,YAAYz3G,GAAGs8G,EAAAgB,eAAepF,gBAAiB5rH,KAAK6rH,gBAAgBh4G,KAAK7T,OAC9EA,KAAKmrH,YAAYz3G,GAAGs8G,EAAAgB,eAAehF,cAAehsH,KAAKykG,cAAc5wF,KAAK7T,OAC1EA,KAAKmrH,YAAYz3G,GAAGs8G,EAAAgB,eAAe/E,cAAejsH,KAAK4jG,cAAc/vF,KAAK7T,OAC1EA,KAAKmrH,YAAYz3G,GAAGs8G,EAAAgB,eAAe6B,kBAAmB7yH,KAAKosJ,kBAAkBv4I,KAAK7T,QAGtFirJ,yBAAAnqJ,UAAAq8G,gBAAA,WACIn9G,KAAKy2E,QAAQ0mC,iBAAgBpxF,KACzBA,EAACimE,EAAAS,YAAYM,iBAAiB,EAC9BhnE,EAACimE,EAAAS,YAAYO,qBAAqB,EAClCjnE,EAACimE,EAAAS,YAAYY,oBAAoB,EACjCtnE,EAACimE,EAAAS,YAAYU,iBAAiB,EAC9BpnE,EAACimE,EAAAS,YAAYc,oBAAoB,EACjCxnE,EAACimE,EAAAS,YAAYgB,wBAAwB,EACrC1nE,EAACimE,EAAAS,YAAYkB,kBAAkB,EAC/B5nE,EAACimE,EAAAS,YAAYC,aAAa,EAC1B3mE,EAACimE,EAAAS,YAAYK,iBAAiB,EAC9B/mE,EAACimE,EAAAS,YAAYa,oBAAsB,IAAI,EACvCvnE,EAACimE,EAAAS,YAAYa,oBAAsB,IAAI,EACvCvnE,EAACimE,EAAAS,YAAYa,oBAAsB,IAAI,EACvCvnE,EAACimE,EAAAS,YAAYa,oBAAsB,IAAI,EACvCvnE,EAACimE,EAAAS,YAAYa,oBAAsB,IAAI,EACvCvnE,EAACimE,EAAAS,YAAYa,oBAAsB,IAAI,EACvCvnE,EAACimE,EAAAS,YAAYa,oBAAsB,IAAI,EACvCvnE,EAACimE,EAAAS,YAAYa,oBAAsB,IAAI,EACvCvnE,EAACimE,EAAAS,YAAYa,oBAAsB,IAAI,EACvCvnE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EnI8kqC/C9nE,ImI3kqCL/rB,KAAKqsJ,gBAAgBlvC,iBAAgBoV,KACjCA,EAACs4B,EAAAvgC,gBAAgBgiC,SAAS,EAC1B/5B,EAACs4B,EAAAvgC,gBAAgBiiC,cAAc,EAC/Bh6B,EAACs4B,EAAAvgC,gBAAgBkiC,mBAAmB,EACpCj6B,EAACs4B,EAAAvgC,gBAAgB76G,WAAW,EAC5B8iH,EAACs4B,EAAAvgC,gBAAgBmiC,cAAc,EnI8kqC9Bl6B,GAEJ,IAAIxmG,GAAIwmG,GmI5kqCb04B,yBAAAnqJ,UAAAizE,aAAA,WACI/zE,KAAKsxH,sBAAwBpoH,SAASC,eAAe,wBAErDjG,EAAApC,UAAMizE,aAAYtzE,KAAAT,MAElBA,KAAKmrH,YAAYp3C,eACjB/zE,KAAKmrH,YAAYuH,cAEjB1yH,KAAKuxH,UAAY,GAAIu5B,GAAA4B,iBACrB1sJ,KAAKuxH,UAAU1tH,aAEf7D,KAAK2sJ,MAAQ,GAAI5B,GAAA6B,aACjB5sJ,KAAK2sJ,MAAM9oJ,aAEqB,MAA5BlB,EAAAmG,YAAYsvD,eACZx1D,EAAA4F,YAAYC,yBAAyBhG,EAAAiG,SAAS45D,aAAc3/D,EAAAmG,YAAYsvD,aAAa8Q,SAASn7D,YACjD,MAAzCvL,EAAA+B,WAAWC,kBAAkB+I,UAA2C,MAAvBu3D,EAAAqD,WAAWgB,UAC5DvmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAAS65D,kBACT7sD,SACI9T,EAAAyL,YAAY+7D,OAAOzmE,EAAAmG,YAAYsvD,aAAa8Q,SAAUpE,EAAAqD,WAAWgB,UAAUp7D,YAC7EA,aAKY,MAAtB/N,KAAK2wH,eAA0BtiH,EAAA0B,cAAc8nE,iBAC7C73E,KAAK2wH,cAAcj/G,MAAMC,QAAU,QAGb,MAAtB3R,KAAK2wH,eACJtiH,EAAA0B,cAAc8nE,gBACd73E,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAEtDzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAGlB,MAA9BzhF,KAAKsxH,uBAAkCjjH,EAAA0B,cAAc8nE,iBACrD73E,KAAKsxH,sBAAsB5/G,MAAMC,QAAU,QAG/C/O,EAAA4F,YAAYkgE,qBAEZ1oE,KAAKuxH,UAAU72C,aAGnBuwE,yBAAAnqJ,UAAAwzE,gBAAA,WACQ3xE,EAAAmG,YAAY0vE,mBACZ71E,EAAAmG,YAAY2vE,iBAAkB,GAGlC71E,EAAA4F,YAAY8nE,UAAU,aACtBtwE,KAAKsrJ,eAAgB,EACrBpoJ,EAAApC,UAAMwzE,gBAAe7zE,KAAAT,MAErB4C,EAAA4F,YAAYypE,aAAc,EAC1BrvE,EAAA4F,YAAYkgE,qBAEZ1oE,KAAKosH,sBAELpsH,KAAKuxH,UAAUh3D,QACfv6D,KAAK2sJ,MAAMpyF,QAEX33D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAActiE,KAAKmwH,eAAepiH,YAC5B,MAAzCvL,EAAA+B,WAAWC,kBAAkB+I,UAA2C,MAAvBu3D,EAAAqD,WAAWgB,UAC5DvmE,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS65D,kBACT7sD,SAAS9T,EAAAyL,YAAY+7D,OAAOppE,KAAKmwH,eAAgBrrD,EAAAqD,WAAWgB,UAAUp7D,YAAYA,YAG1F/N,KAAKywH,oBAAoBv7G,OACzBlV,KAAKywH,oBAAoBt7G,MAAM,IAC/BnV,KAAKmwH,eAAiB,GAG1B86B,yBAAAnqJ,UAAAg1E,iBAAA,WACI5yE,EAAApC,UAAMwzE,gBAAe7zE,KAAAT,MAErB4C,EAAA4F,YAAYypE,aAAc,EAE1BjyE,KAAKosH,uBAGT6+B,yBAAAnqJ,UAAAwxF,aAAA,WACI1vF,EAAA4F,YAAY8nE,UAAU,sBAElB1tE,EAAA4F,YAAYiH,UACuC,SAAnDjN,EAAA+B,WAAWC,kBAAkBqoJ,mBAC7BrqJ,EAAA+B,WAAWC,kBAAkB8hE,qBACyB,IAAtD9jE,EAAA+B,WAAWC,kBAAkB+hE,qBAE7BvmE,KAAKkV,QAELlV,KAAKy2E,QAAQ4mC,kBACTrrB,EAAAS,YAAYK,eACZtwF,EAAA+B,WAAWC,kBAAkB8hE,qBAEjCtmE,KAAKqsJ,gBAAgBhvC,kBACjBwtC,EAAAvgC,gBAAgBkiC,iBAChBhqJ,EAAA+B,WAAWC,kBAAkB8hE,qBAEjC5jE,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCv3G,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,0BAE9CvpJ,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASm5D,cAG3CopF,yBAAAnqJ,UAAA02D,eAAA,SAAesmB,GACX,IAAIzvE,EAAA0B,cAAc8nE,iBAAkBxpE,EAAA0B,cAAc0lE,kBAAlD,CAIA,GAAIqI,IAAWkU,EAAAS,YAAYc,mBAAqBvzF,KAAKy2E,QAAQ6mC,eAAex/B,GAIxE,YAHiC,MAA7BhZ,EAAAqD,WAAWmS,gBACXxV,EAAAqD,WAAWmS,eAAeoS,SAKlC,IAAI5O,IAAWkU,EAAAS,YAAYgB,uBAAyBzzF,KAAKy2E,QAAQ6mC,eAAex/B,GAI5E,YAHqC,MAAjChZ,EAAAqD,WAAWqS,oBACX1V,EAAAqD,WAAWqS,mBAAmBkS,SAKtC,IAAI5O,IAAWkU,EAAAS,YAAYkB,iBAAmB3zF,KAAKy2E,QAAQ6mC,eAAex/B,GAItE,YAH+B,MAA3BhZ,EAAAqD,WAAWsS,cACX3V,EAAAqD,WAAWsS,aAAaiS,SAKhC,IAAIogE,GAA2B,EAE3BhvE,GAAOlhD,OAAO,EAAGo1D,EAAAS,YAAYe,uBAAuBznF,UAAYimF,EAAAS,YAAYe,wBAC5ExzF,KAAKy2E,QAAQ6mC,eAAetrB,EAAAS,YAAYc,qBAExCu5D,EAAmBhvE,EAAOlhD,OAAOo1D,EAAAS,YAAYe,uBAAuBznF,OAAQ+xE,EAAO/xE,QACnF+xE,EAASkU,EAAAS,YAAYc,kBAGzB,IAAIw5D,GAA+B,EAE/BjvE,GAAOlhD,OAAO,EAAGo1D,EAAAS,YAAYiB,2BAA2B3nF,UACpDimF,EAAAS,YAAYiB,4BAChB1zF,KAAKy2E,QAAQ6mC,eAAetrB,EAAAS,YAAYgB,yBAExCs5D,EAAuBjvE,EAAOlhD,OAAOo1D,EAAAS,YAAYiB,2BAA2B3nF,OAAQ+xE,EAAO/xE,QAC3F+xE,EAASkU,EAAAS,YAAYgB,sBAGzB,IAAIu5D,GAAyB,EAS7B,IAPIlvE,EAAOlhD,OAAO,EAAGo1D,EAAAS,YAAYmB,qBAAqB7nF,UAAYimF,EAAAS,YAAYmB,sBAC1E5zF,KAAKy2E,QAAQ6mC,eAAetrB,EAAAS,YAAYkB,mBAExCq5D,EAAiBlvE,EAAOlhD,OAAOo1D,EAAAS,YAAYmB,qBAAqB7nF,OAAQ+xE,EAAO/xE,QAC/E+xE,EAASkU,EAAAS,YAAYkB,iBAGrB7V,EAAOlhD,OAAO,EAAGo1D,EAAAS,YAAYa,oBAAoBvnF,UAAYimF,EAAAS,YAAYa,oBAEzE,WADAtzF,MAAKmrH,YAAYyH;AAIrB,GAAI90C,IAAWiyC,EAAA9F,YAAYC,iBACvB,GAAIlqH,KAAKy2E,QAAQ6mC,eAAetrB,EAAAS,YAAYC,YACxC5U,EAASkU,EAAAS,YAAYC,eAClB,KAAI1yF,KAAKy2E,QAAQ6mC,eAAetrB,EAAAS,YAAYK,gBAG/C,MAFAhV,GAASkU,EAAAS,YAAYK,eAgC7B,GA1BIhV,IAAW+sE,EAAAvgC,gBAAgBkiC,mBACvBxsJ,KAAKy2E,QAAQ6mC,eAAetrB,EAAAS,YAAYY,mBACxCvV,EAASkU,EAAAS,YAAYY,kBACdrzF,KAAKy2E,QAAQ6mC,eAAetrB,EAAAS,YAAYC,YAC/C5U,EAASkU,EAAAS,YAAYC,WACd1yF,KAAKy2E,QAAQ6mC,eAAetrB,EAAAS,YAAYK,kBAC/ChV,EAASkU,EAAAS,YAAYK,iBAIzBhV,IAAW+sE,EAAAvgC,gBAAgB76G,WACvBzP,KAAKy2E,QAAQ6mC,eAAetrB,EAAAS,YAAYM,iBACxCjV,EAASkU,EAAAS,YAAYM,eACrB/yF,KAAK2sJ,MAAMpyF,SACJv6D,KAAKy2E,QAAQ6mC,eAAetrB,EAAAS,YAAYO,sBAC/ClV,EAASkU,EAAAS,YAAYO,mBACrBhzF,KAAK2sJ,MAAMpyF,UAIfujB,IAAW+sE,EAAAvgC,gBAAgBmiC,aACvBzsJ,KAAKy2E,QAAQ6mC,eAAetrB,EAAAS,YAAYU,kBACxCrV,EAASkU,EAAAS,YAAYU,gBAIzBnzF,KAAKy2E,QAAQ6mC,eAAex/B,GAK5B,OAJA99E,KAAK2sJ,MAAMpyF,QACXsmB,EAAAl2D,SAASoS,KAAK,aACd75B,EAAApC,UAAM02D,eAAc/2D,KAAAT,KAAC89E,GAEbA,GACJ,IAAKkU,GAAAS,YAAYC,WACb1yF,KAAKmyF,OACLnyF,KAAK2sJ,MAAMpyF,OACX,MACJ,KAAKy3B,GAAAS,YAAYK,eACb9yF,KAAKkV,MACL,MACJ,KAAK88E,GAAAS,YAAYM,eACRnwF,EAAA4F,YAAYiH,UACb7M,EAAA4F,YAAY8nE,UAAU,mBAE1BtwE,KAAKwxH,UACL,MACJ,KAAKx/B,GAAAS,YAAYO,mBACbhzF,KAAKyxH,cACL,MACJ,KAAKz/B,GAAAS,YAAYU,eACbnzF,KAAK06E,WAAU,GAAO,GAAO,GACI,MAA7B5V,EAAAqD,WAAWmS,gBACXxV,EAAAqD,WAAWmS,eAAegD,UAEO,MAAjCxY,EAAAqD,WAAWqS,qBACX1V,EAAAqD,WAAWqS,mBAAmB8C,UAC9BxY,EAAAqD,WAAWqS,mBAAmByyE,eAEH,MAA3BnoF,EAAAqD,WAAWsS,eACX3V,EAAAqD,WAAWsS,aAAa6C,UACxBxY,EAAAqD,WAAWsS,aAAawyE,cAE5B,MACJ,KAAKj7D,GAAAS,YAAYY,kBACbrzF,KAAKk0E,SACL,MACJ,KAAK8d,GAAAS,YAAYc,kBACW,IAApBu5D,GACA9sJ,KAAK25E,YAAYr7D,WAAWwuI,GAEhC,MACJ,KAAK96D,GAAAS,YAAYgB,sBACe,IAAxBs5D,GACA/sJ,KAAKy7E,gBAAgBn9D,WAAWyuI,GAEpC,MACJ,KAAK/6D,GAAAS,YAAYkB,gBACS,IAAlBq5D,GACAhtJ,KAAKw7E,iBAAiBl9D,WAAW0uI,GAErC,MACJ,KAAKh7D,GAAAS,YAAYoB,6BAA+B,EAC5C7zF,KAAKktJ,uBAAuB,EAC5B,MACJ,KAAKl7D,GAAAS,YAAYoB,6BAA+B,EAC5C7zF,KAAKktJ,uBAAuB,EAC5B,MACJ,KAAKl7D,GAAAS,YAAYoB,6BAA+B,EAC5C7zF,KAAKktJ,uBAAuB,EAC5B,MACJ,KAAKl7D,GAAAS,YAAYoB,6BAA+B,EAC5C7zF,KAAKktJ,uBAAuB,EAC5B,MACJ,KAAKl7D,GAAAS,YAAYoB,6BAA+B,EAC5C7zF,KAAKktJ,uBAAuB,EAC5B,MACJ,KAAKl7D,GAAAS,YAAYoB,6BAA+B,EAC5C7zF,KAAKktJ,uBAAuB,EAC5B,MACJ,KAAKl7D,GAAAS,YAAYoB,6BAA+B,EAC5C7zF,KAAKktJ,uBAAuB,EAC5B,MACJ,KAAKl7D,GAAAS,YAAYoB,6BAA+B,EAC5C7zF,KAAKktJ,uBAAuB,EAC5B,MACJ,KAAKl7D,GAAAS,YAAYoB,6BAA+B,EAC5C7zF,KAAKktJ,uBAAuB,MAM5CjC,yBAAAnqJ,UAAAozE,QAAA,WACIhxE,EAAApC,UAAMozE,QAAOzzE,KAAAT,MAEbqO,EAAA0B,cAAcooE,gBACdn4E,KAAKs9E,UACLt9E,KAAK06G,mBAEL16G,KAAKmrH,YAAYj3C,UACZl0E,KAAKqrJ,uBACNzoJ,EAAA4F,YAAY8nE,UAAU,oBACtBtwE,KAAKqrJ,sBAAuB,GAE5B1oJ,EAAAmG,YAAYsvD,aAAa8Q,SAAW,GACpCtmE,EAAA4F,YAAY8nE,UAAU,qBAG1BiC,EAAAsD,YAAYte,cACZ50D,EAAAmG,YAAYorE,QAAQpkE,EAAY8lE,MAEa,MAAzCpzE,EAAA+B,WAAWC,kBAAkB+I,UAA2C,MAAvBu3D,EAAAqD,WAAWgB,UAC5DvmE,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS65D,kBACT7sD,SAAS9T,EAAAyL,YAAY+7D,OAAOppE,KAAKmwH,eAAgBrrD,EAAAqD,WAAWgB,UAAUp7D,YAAYA,YAG1FnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAActiE,KAAKmwH,eAAepiH,YACzE/N,KAAKywH,oBAAoBt7G,MAAM,KAGnC81I,yBAAAnqJ,UAAA4vH,mBAAA,WACI9tH,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS65D,kBAAmB,KAC1D3/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAAc,MAGzD2oF,yBAAAnqJ,UAAAqxF,KAAA,WACI,MAAIxvF,GAAAmG,YAAY0vE,sBACR71E,EAAAmG,YAAYsvD,aAAa8Q,SAAW,EACpClpE,KAAKk0E,UAELvxE,EAAAmG,YAAY2vE,iBAAkB,GAKjC1T,EAAAiD,eAAe+X,WAAU,GAAO,IAYrCn9E,EAAA4F,YAAYypE,aAAc,EAC1B5jE,EAAA0B,cAAcooE,gBACdz1E,EAAAyF,eAAewsF,iBAAiB,IAChC30F,KAAKy2E,QAAQ+mC,oBACbx9G,KAAKqsJ,gBAAgB7uC,oBACjB56G,EAAA4F,YAAYiH,WACZzP,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYO,mBAAoBpwF,EAAA4F,YAAYw9D,mBAC3EhmE,KAAKqsJ,gBAAgBhvC,kBAAkBwtC,EAAAvgC,gBAAgB76G,SAAU7M,EAAA4F,YAAYw9D,oBAEjFtjE,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCv3G,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,yBAC1CnsJ,KAAK06G,mBAEL31C,EAAAiD,eAAewX,aACV58E,EAAA4F,YAAYk/D,kBACb9kE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,cACvC1/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS65D,oBAGtCviE,KAAKqrJ,uBACNzoJ,EAAA4F,YAAY8nE,UAAU,oBACtBtwE,KAAKqrJ,sBAAuB,GAE3BrrJ,KAAKsrJ,gBACN1oJ,EAAA4F,YAAY8nE,UAAU,aACtBtwE,KAAKsrJ,eAAgB,GAGzB1oJ,EAAA4F,YAAY8nE,UAAU,qBACtBtwE,KAAKmrH,YAAYh5B,OAEjB5f,EAAAsD,YAAYte,cAEZv3D,KAAKuxH,UAAUh3D,YACfv6D,MAAK2sJ,MAAMpyF,UA7CH33D,EAAA4F,YAAYiH,UACZ7M,EAAA4F,YAAY8nE,UAAU,iBAE1B1tE,EAAA4F,YAAYiH,UAAW,EACvBpB,EAAA0B,cAAcooE,oBAGdn4E,MAAKosH,wBAyCb6+B,yBAAAnqJ,UAAAoU,KAAA,WACIlV,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYK,gBAAgB,GAC3D9yF,KAAKqsJ,gBAAgBhvC,kBAAkBwtC,EAAAvgC,gBAAgBkiC,kBAAkB,GACzE9pJ,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCv3G,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,yBAC1CzpJ,EAAAyF,eAAewsF,iBAAiB,IAChC30F,KAAKmrH,YAAYj2G,OACjBlV,KAAK2sJ,MAAMpyF,SAGf0wF,yBAAAnqJ,UAAA0vH,gBAAA,WACIxwH,KAAKuwH,eAAer7G,OAChBtS,EAAA4F,YAAYiH,SACZzP,KAAKwxH,WAELxxH,KAAKosH,uBAIb6+B,yBAAAnqJ,UAAA0wH,SAAA,WACIxxH,KAAKswH,eAAep7G,OAEc,MAA9BtS,EAAA4F,YAAYi9D,eACZ7iE,EAAA4F,YAAYiH,UAAW,EACvB7M,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASu6D,kBAAmBrgE,EAAA4F,YAAYi9D,eACtEzlE,KAAKmyF,SAELvvF,EAAA4F,YAAYi9D,eAAiB/vD,SAAS9S,EAAA4F,YAAYi9D,eAAiB,GAAG13D,WAClE2H,SAAS9S,EAAA4F,YAAYi9D,gBAAkB,GACvC7iE,EAAA4F,YAAYiH,UAAW,EACvB7M,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASu6D,kBAAmBrgE,EAAA4F,YAAYi9D,eACtEzlE,KAAKmyF,SAEDvvF,EAAA4F,YAAYiH,UACZ7M,EAAA4F,YAAY8nE,UAAU,iBAE1B1tE,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKosH,yBAKjB6+B,yBAAAnqJ,UAAA2wH,aAAA,WACQ7uH,EAAA4F,YAAYiH,UACZ7M,EAAA4F,YAAY8nE,UAAU,iBAE1B1tE,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYO,oBAAoB,GAC/DhzF,KAAKqsJ,gBAAgBhvC,kBAAkBwtC,EAAAvgC,gBAAgB76G,UAAU,GACjE/M,EAAAyF,eAAeqvF,oBAAoBxF,EAAAS,YAAYO,oBAAoB,GACnExwF,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,0BAG9ClB,yBAAAnqJ,UAAA06E,iBAAA,SAAiB5uE,GACRhK,EAAA4F,YAAYk/D,iBAGb1nE,KAAKmrH,YAAYj3C,UACjBtxE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAAc,KACrD1/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS65D,kBAAmB,KAC1DgQ,EAAAsD,YAAYte,eALZv3D,KAAKk0E,UAOTpP,EAAAqD,WAAWqT,iBAAiB5uE,GAC5B5M,KAAKuxH,UAAU72C,aAGnBuwE,yBAAAnqJ,UAAA26E,gBAAA,SAAgB7uE,GACPhK,EAAA4F,YAAYk/D,iBAGb1nE,KAAKmrH,YAAYj3C,UACjBtxE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAAc,KACrD1/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS65D,kBAAmB,KAC1DgQ,EAAAsD,YAAYte,eALZv3D,KAAKk0E,UAOTpP,EAAAqD,WAAWsT,gBAAgB7uE,GAC3B5M,KAAKuxH,UAAU72C,aAGnBuwE,yBAAAnqJ,UAAA64E,YAAA,SAAY/sE,GACHhK,EAAA4F,YAAYk/D,iBAGb1nE,KAAKmrH,YAAYj3C,UACjBtxE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAAc,KACrD1/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS65D,kBAAmB,KAC1DgQ,EAAAsD,YAAYte,eALZv3D,KAAKk0E,UAOTpP,EAAAqD,WAAWwR,YAAY/sE,GACvB5M,KAAKuxH,UAAU72C,aAGnBuwE,yBAAAnqJ,UAAA45E,UAAA,SAAUC,EAA2B/7C,EAAsB5N,GAAjD,SAAA2pD,OAAA,GAA2B,SAAA/7C,OAAA,GAAsB,SAAA5N,OAAA,GAClDpuB,EAAA4F,YAAYk/D,iBAGb1nE,KAAKmrH,YAAYj3C,UACjBtxE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAAc,KACrD1/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS65D,kBAAmB,KAC1D3/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASq5D,kBACvCn/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASo5D,iBACvCl/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASs5D,kBACvCuQ,EAAAsD,YAAYte,eARZv3D,KAAKk0E,UAUTpP,EAAAqD,WAAWuS,UAAUC,EAAU/7C,EAAK5N,GACpChxB,KAAKuxH,UAAU72C,aAGnBuwE,yBAAAnqJ,UAAAqwH,eAAA,WAOI,MANAnxH,MAAKsrJ,eAAgB,EACrBtrJ,KAAKqrJ,sBAAuB,EAE5BrrJ,KAAKywH,oBAAoBv7G,OACzBlV,KAAKmwH,eAAiBxtH,EAAAmG,YAAYsvD,aAAa8Q,SAE3C76D,EAAA0B,cAAc8nE,mBACd73E,MAAKs9E,UAILjvE,EAAA0B,cAAcylE,oBACuB,MAAjC7yE,EAAAmG,YAAYmnE,aAAaumD,MACzBx2H,KAAKuxH,UAAU1wD,SAASl+D,EAAAmG,YAAYmnE,aAAaumD,UAErDx2H,MAAKs9E,YAWiC,IAAtC36E,EAAAmG,YAAYmnE,aAAa/G,WACzBtmE,EAAA4F,YAAY8nE,UAAU,oBACtB1tE,EAAA4F,YAAY8nE,UAAU,aACtBtwE,KAAKqrJ,sBAAuB,EAC5BrrJ,KAAKsrJ,eAAgB,EACrB1oJ,EAAA4F,YAAYkgE,qBACR9lE,EAAA4F,YAAYk/D,iBAAmB/kE,EAAAmG,YAAY0vE,mBAC3C71E,EAAAmG,YAAY2vE,iBAAkB,IAKE,MAApC91E,EAAAmG,YAAYsvD,aAAakQ,SACiB,MAA1C3lE,EAAAmG,YAAYsvD,aAAakQ,QAAQC,OACjC5lE,EAAAmG,YAAYsvD,aAAakQ,QAAQC,MAAQzD,EAAAqD,WAAWK,KAEpDxoE,KAAKyoE,iBAG4B,MAAjC9lE,EAAAmG,YAAYmnE,aAAaumD,MACzBx2H,KAAKuxH,UAAU1wD,SAASl+D,EAAAmG,YAAYmnE,aAAaumD,MAEX,IAAtC7zH,EAAAmG,YAAYmnE,aAAa/G,WACzBtmE,EAAA4F,YAAYypE,aAAc,GAG9BjyE,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYK,gBAAgB,GAC3D9yF,KAAKqsJ,gBAAgBhvC,kBAAkBwtC,EAAAvgC,gBAAgBkiC,kBAAkB,GACrE7pJ,EAAAmG,YAAYmnE,aAAa/G,SAAW,GAChCtmE,EAAA4F,YAAYiH,WACP7M,EAAA4F,YAAYq/D,YACb7nE,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYC,YAAY,GACvD1yF,KAAKqsJ,gBAAgBhvC,kBAAkBwtC,EAAAvgC,gBAAgBkiC,kBAAkB,IAEzEn+I,EAAA0B,cAAc2sE,iBACd18E,KAAKqsJ,gBAAgBhvC,kBAAkBwtC,EAAAvgC,gBAAgBmiC,aAAa,IAG5EzsJ,KAAKswH,eAAen7G,MAAM,KAE1BnV,KAAKosH,sBAGT1pH,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCv3G,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,yBAEtCvpJ,EAAA4F,YAAYiH,UAAkD,IAAtC9M,EAAAmG,YAAYmnE,aAAa/G,UACjDlpE,KAAKuwH,eAAep7G,MAAM,QAG9B9G,GAAA0B,cAAc8sE,iBAGlBouE,yBAAAnqJ,UAAA6qH,uBAAA,WACI,MAAIt9G,GAAA0B,cAAc8nE,mBACd73E,MAAKs9E,UAILjvE,EAAA0B,cAAcylE,oBACdx1E,KAAKuxH,UAAU47B,aACfvqJ,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,kBACvC1/D,GAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS65D,qBAI3CviE,KAAKswH,eAAep7G,OAEpBtS,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,cACvC1/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS65D,mBAEnC3/D,EAAA4F,YAAYk/D,iBACZ9kE,EAAA4F,YAAYkgE,qBAEhB9lE,EAAA4F,YAAYypE,aAAc,EAC1BjyE,KAAKosH,sBAELpsH,KAAKuxH,UAAU47B,iBACf9+I,GAAA0B,cAAc8sE,iBAGlBouE,yBAAAnqJ,UAAA+qH,gBAAA,WAEI,MADA7rH,MAAKmwH,eAAiB,EAClB9hH,EAAA0B,cAAc8nE,mBACd73E,MAAKs9E,WAIJjvE,EAAA0B,cAAcylE,qBACf5yE,EAAA4F,YAAY8nE,UAAU,oBACtBtwE,KAAKqrJ,sBAAuB,GAE5BzoJ,EAAA4F,YAAYk/D,kBACZ9kE,EAAA4F,YAAY8nE,UAAU,aACtBtwE,KAAKsrJ,eAAgB,GAGrBj9I,EAAA0B,cAAcylE,oBACdnnE,EAAA0B,cAAcqtE,sBACdp9E,MAAKmrH,YAAY+G,sBAIrBlyH,KAAKswH,eAAep7G,OACpBlV,KAAKosH,2BACDxpH,EAAA4F,YAAYiH,WACZ7M,EAAA4F,YAAY8nE,UAAU,aACtBtwE,KAAKsrJ,eAAgB,EACrBtrJ,KAAKwxH,gBAIby5B,yBAAAnqJ,UAAA27E,UAAA,WAqBI,MApBAj6E,GAAA+B,WAAWoJ,WAAWs+I,aAAajsJ,KAAKurJ,UAAW,GAEnDroJ,EAAApC,UAAM27E,UAASh8E,KAAAT,MACfqO,EAAA0B,cAAc8sE,eACuB,MAAjCl6E,EAAAmG,YAAYmnE,aAAaumD,MACzBx2H,KAAKuxH,UAAU1wD,SAASl+D,EAAAmG,YAAYmnE,aAAaumD,MAErDx2H,KAAKmrH,YAAY1uC,YACS,MAAtBz8E,KAAK2wH,gBACL3wH,KAAK2wH,cAAcj/G,MAAMC,QAAU,SAGb,MAAtB3R,KAAK2wH,eAAyB3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACnFzhF,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGrB,MAA9BzhF,KAAKsxH,wBACLtxH,KAAKsxH,sBAAsB5/G,MAAMC,QAAU,SAG3CtD,EAAA0B,cAAcylE,oBACdnnE,EAAA0B,cAAcqtE,sBACdp9E,MAAKmrH,YAAY+G,sBAIrBlyH,KAAKosH,0BACL/9G,GAAA0B,cAAc8sE,iBAGlBouE,yBAAAnqJ,UAAA88E,MAAA,SAAMD,GAAA,SAAAA,OAAA,GACFn7E,EAAA+B,WAAWoJ,WAAWs+I,aAAajsJ,KAAKurJ,UAAW,GAEnDvrJ,KAAKmwH,eAAiBxtH,EAAAmG,YAAYsvD,aAAa8Q,SAE3CtmE,EAAA4F,YAAYk/D,kBACZ9kE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASq5D,kBACvCn/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASo5D,iBACvCl/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASs5D,mBAGvC2b,IACA/6E,EAAA4F,YAAY8nE,UAAU,oBACtBtwE,KAAKqrJ,sBAAuB,GAG5Bh9I,EAAA0B,cAAcylE,oBACd5yE,EAAA4F,YAAYiH,SAAWzP,KAAKmrJ,sBAC5BnrJ,KAAKmrH,YAAY+G,qBAEjBlyH,KAAKmrH,YAAYvtC,MAAMD,GAGD,MAAtB39E,KAAK2wH,gBACL3wH,KAAK2wH,cAAcj/G,MAAMC,QAAU,SAGL,MAA9B3R,KAAKsxH,wBACLtxH,KAAKsxH,sBAAsB5/G,MAAMC,QAAU,UAInDs5I,yBAAAnqJ,UAAA2jG,cAAA,WACQ9hG,EAAAmG,YAAY0vE,mBACZx4E,KAAKkrJ,sBAAuB,EACxBtoJ,EAAA4F,YAAYk/D,kBACZ/kE,EAAAmG,YAAY2vE,iBAAkB,IAGlCz4E,KAAKkrJ,uBACLtoJ,EAAA4F,YAAYiH,SAAWzP,KAAKkrJ,sBAG5BlrJ,KAAKmrJ,wBACLvoJ,EAAA4F,YAAYiH,SAAWzP,KAAKmrJ,uBAGhC98I,EAAA0B,cAAc8sE,eACd78E,KAAK6wH,qBAAqB17G,MAAM,IAC5BvS,EAAA4F,YAAYiH,WACRzP,KAAKmrJ,sBACLnrJ,KAAKuwH,eAAep7G,MAAM,IAE1BnV,KAAKwxH,WAETxxH,KAAKmrJ,uBAAwB,GAEP,MAAtBnrJ,KAAK2wH,eAAyB3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACnFzhF,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAIrB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE7DzhF,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAInEwpE,yBAAAnqJ,UAAA+8E,MAAA,WACI79E,KAAKqrJ,sBAAuB,EAC5BrrJ,KAAKsrJ,eAAgB,EACrBtrJ,KAAKswH,eAAep7G,OACpBlV,KAAKuwH,eAAer7G,OAEhB7G,EAAA0B,cAAc0lE,oBACdz1E,KAAKmrJ,wBAAwBnrJ,KAAKorJ,qBAAsBxoJ,EAAA4F,YAAYiH,UAExEzP,KAAKkrJ,qBAAuBtoJ,EAAA4F,YAAYiH,SACxC7M,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKorJ,qBAAsB,EACvB/8I,EAAA0B,cAAc0lE,oBACdz1E,KAAKkrJ,sBAAuB,EACF,MAAtBlrJ,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAIlB,MAA9BzhF,KAAKsxH,uBACJtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE9DzhF,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAGhEzhF,KAAKuxH,UAAUh3D,QACfv6D,KAAK2sJ,MAAMpyF,QACXv6D,KAAKmrH,YAAYttC,SAGrBotE,yBAAAnqJ,UAAA8iG,cAAA,WACQv1F,EAAA0B,cAAc0lE,mBACY,MAAtBz1E,KAAK2wH,gBACL3wH,KAAK2wH,cAAcj/G,MAAMC,QAAU,QAGL,MAA9B3R,KAAKsxH,wBACLtxH,KAAKsxH,sBAAsB5/G,MAAMC,QAAU,QAG/CtD,EAAA0B,cAAcotE,YAAYrtE,EAAY0nE,YAEtCnpE,EAAA0B,cAAcotE,YAAYrtE,EAAYqkE,SAI9C82E,yBAAAnqJ,UAAAsrH,oBAAA,WAGI,GAFApsH,KAAKswH,eAAep7G,OAEhBvS,EAAAmG,YAAY2vE,gBAEZ,WADA71E,GAAA4F,YAAY8nE,UAAU,mBAI1B,IAAI1tE,EAAA4F,YAAYq/D,UACRjlE,EAAA4F,YAAYiH,UACZ7M,EAAA4F,YAAY8nE,UAAU,iBAE1B1tE,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKmnG,YAEL,KAAKvkG,EAAA4F,YAAYiH,SAAU,CACvB,GAAI29I,GAAoBzqJ,EAAAmG,YAAYsvD,aAAa8Q,SAAW,CAE5DlpE,MAAKy2E,QAAQynC,oBAAmBnyF,KAC5BA,EAACimE,EAAAS,YAAYM,gBAAiBnwF,EAAA4F,YAAYw9D,kBAC1Cj6C,EAACimE,EAAAS,YAAYO,qBAAqB,EAClCjnE,EAACimE,EAAAS,YAAYY,oBAAqBzwF,EAAA4F,YAAYk/D,gBAC9C37C,EAACimE,EAAAS,YAAYU,gBAAiBvwF,EAAA4F,YAAYk/D,gBAC1C37C,EAACimE,EAAAS,YAAYc,mBAAoB3wF,EAAA4F,YAAYk/D,gBAC7C37C,EAACimE,EAAAS,YAAYgB,uBAAwB7wF,EAAA4F,YAAYk/D,gBACjD37C,EAACimE,EAAAS,YAAYkB,iBAAkB/wF,EAAA4F,YAAYk/D,gBAC3C37C,EAACimE,EAAAS,YAAYC,aAAa,EAC1B3mE,EAACimE,EAAAS,YAAYK,iBAAiB,EAC9B/mE,EAACimE,EAAAS,YAAYa,oBAAsB,GAAI1wF,EAAA4F,YAAYk/D,kBAAoB0lF,EACvErhI,EAACimE,EAAAS,YAAYa,oBAAsB,GAAI1wF,EAAA4F,YAAYk/D,kBAAoB0lF,EACvErhI,EAACimE,EAAAS,YAAYa,oBAAsB,GAAI1wF,EAAA4F,YAAYk/D,kBAAoB0lF,EACvErhI,EAACimE,EAAAS,YAAYa,oBAAsB,GAAI1wF,EAAA4F,YAAYk/D,kBAAoB0lF,EACvErhI,EAACimE,EAAAS,YAAYa,oBAAsB,GAAI1wF,EAAA4F,YAAYk/D,kBAAoB0lF,EACvErhI,EAACimE,EAAAS,YAAYa,oBAAsB,GAAI1wF,EAAA4F,YAAYk/D,kBAAoB0lF,EACvErhI,EAACimE,EAAAS,YAAYa,oBAAsB,GAAI1wF,EAAA4F,YAAYk/D,kBAAoB0lF,EACvErhI,EAACimE,EAAAS,YAAYa,oBAAsB,GAAI1wF,EAAA4F,YAAYk/D,kBAAoB0lF,EACvErhI,EAACimE,EAAAS,YAAYa,oBAAsB,GAAI1wF,EAAA4F,YAAYk/D,kBAAoB0lF,EnIo9pCtErhI,ImIj9pCL/rB,KAAKqsJ,gBAAgBnuC,oBAAmBqU,KACpCA,EAACs4B,EAAAvgC,gBAAgBgiC,QAAS3pJ,EAAAmG,YAAYsrE,UACtCm+C,EAACs4B,EAAAvgC,gBAAgBiiC,aAAc5pJ,EAAAmG,YAAYsrE,UAC3Cm+C,EAACs4B,EAAAvgC,gBAAgBkiC,mBAAmB,EACpCj6B,EAACs4B,EAAAvgC,gBAAgB76G,UAAW7M,EAAA4F,YAAYw9D,kBACxCusD,EAACs4B,EAAAvgC,gBAAgBmiC,aAAcp+I,EAAA0B,cAAc2sE,iBAAmB95E,EAAA4F,YAAYk/D,gBnIo9pC3E6qD,ImI/8pCb7vH,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCv3G,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,wBnIo9pCzC,IAAIpgI,GAAIwmG,GmIj9pCb04B,yBAAAnqJ,UAAAqmG,MAAA,WACI50B,EAAAsD,YAAYne,aAER90D,EAAA4F,YAAYk/D,iBACZ1nE,KAAKy2E,QAAQynC,oBAAmBnyF,KAC5BA,EAACimE,EAAAS,YAAYM,gBAAiBnwF,EAAA4F,YAAYw9D,kBAC1Cj6C,EAACimE,EAAAS,YAAYO,qBAAqB,EAClCjnE,EAACimE,EAAAS,YAAYY,oBAAoB,EACjCtnE,EAACimE,EAAAS,YAAYU,iBAAiB,EAC9BpnE,EAACimE,EAAAS,YAAYc,oBAAoB,EACjCxnE,EAACimE,EAAAS,YAAYgB,wBAAwB,EACrC1nE,EAACimE,EAAAS,YAAYkB,kBAAkB,EAC/B5nE,EAACimE,EAAAS,YAAYC,aAAa,EAC1B3mE,EAACimE,EAAAS,YAAYK,iBAAiB,EnIm9pC7B/mE,ImIj9pCL/rB,KAAKqsJ,gBAAgBnuC,oBAAmBqU,KACpCA,EAACs4B,EAAAvgC,gBAAgBgiC,QAAS3pJ,EAAAmG,YAAYsrE,UACtCm+C,EAACs4B,EAAAvgC,gBAAgBiiC,aAAc5pJ,EAAAmG,YAAYsrE,UAC3Cm+C,EAACs4B,EAAAvgC,gBAAgBkiC,mBAAmB,EACpCj6B,EAACs4B,EAAAvgC,gBAAgB76G,UAAW7M,EAAA4F,YAAYw9D,kBACxCusD,EAACs4B,EAAAvgC,gBAAgBmiC,cAAc,EnIo9pC9Bl6B,MmIj9pCLvyH,KAAKy2E,QAAQynC,oBAAmBmvC,KAC5BA,EAACr7D,EAAAS,YAAYM,iBAAiB,EAC9Bs6D,EAACr7D,EAAAS,YAAYO,qBAAqB,EAClCq6D,EAACr7D,EAAAS,YAAYY,oBAAoB,EACjCg6D,EAACr7D,EAAAS,YAAYU,iBAAiB,EAC9Bk6D,EAACr7D,EAAAS,YAAYc,oBAAoB,EACjC85D,EAACr7D,EAAAS,YAAYgB,wBAAwB,EACrC45D,EAACr7D,EAAAS,YAAYkB,kBAAkB,EAC/B05D,EAACr7D,EAAAS,YAAYC,aAAa,EAC1B26D,EAACr7D,EAAAS,YAAYK,iBAAiB,EnIs9pC7Bu6D,ImIp9pCLrtJ,KAAKqsJ,gBAAgBnuC,oBAAmBovC,KACpCA,EAACzC,EAAAvgC,gBAAgBgiC,QAAS3pJ,EAAAmG,YAAYsrE,UACtCk5E,EAACzC,EAAAvgC,gBAAgBiiC,aAAc5pJ,EAAAmG,YAAYsrE,UAC3Ck5E,EAACzC,EAAAvgC,gBAAgBkiC,mBAAmB,EACpCc,EAACzC,EAAAvgC,gBAAgB76G,WAAW,EAC5B69I,EAACzC,EAAAvgC,gBAAgBmiC,cAAc,EnIu9pC9Ba,IAGR,IAAIvhI,GAAIwmG,EAAI86B,EAAIC,GmIr9pCrBrC,yBAAAnqJ,UAAAw8E,QAAA,WACSt9E,KAAK2rJ,gBAAgBtiJ,UAAU0N,SAAS,cACzC/W,KAAK2rJ,gBAAgBtiJ,UAAUC,IAAI,aAEvCtJ,KAAKswH,eAAep7G,OACpBlV,KAAKy2E,QAAQ+mC,oBACbx9G,KAAKqsJ,gBAAgB7uC,oBACrB96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCv3G,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,0BAG9ClB,yBAAAnqJ,UAAAs9E,UAAA,WACIp+E,KAAK2sJ,MAAM37H,SAGfi6H,yBAAAnqJ,UAAAsrJ,kBAAA,WACIpsJ,KAAKs9E,UAELt9E,KAAKk/E,2BAA2B/pE,MAAM,IAElCnV,KAAK2rJ,gBAAgBtiJ,UAAU0N,SAAS,cACxC/W,KAAK2rJ,gBAAgBtiJ,UAAUsN,OAAO,aAG1C3W,KAAKutJ,sBAAsB,KAMrBtC,yBAAAnqJ,UAAAm+E,0BAAV,WACIj/E,KAAKy2E,QAAQynC,oBAAmBnyF,KAC5BA,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EAChD9nE,EAACimE,EAAAS,YAAYoB,6BAA+B,IAAI,EnI+8pC/C9nE,ImI78pCLrpB,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,gBnIg9pCxC,IAAIhuF,ImIz8pCTk/H,yBAAAnqJ,UAAAosJ,uBAAA,SAAuB3sJ,GACnBP,KAAKyrJ,uBAAuBv2I,OACvBlV,KAAKorJ,qBACN/8I,EAAA0B,cAAcsuE,yBAAwB,GAG1Cr+E,KAAKs9E,UACLjvE,EAAA0B,cAAcwtE,kBAGlB0tE,yBAAAnqJ,UAAAk+E,8BAAA,aAQAisE,yBAAAnqJ,UAAAi9E,yBAAA,SAAyBx9E,KAEzB0qJ,yBAAAnqJ,UAAAo9E,mBAAA,SAAmBD,KAEnBgtE,yBAAAnqJ,UAAAq9E,eAAA,WAC0B,MAAlBn+E,KAAKuxH,WACLvxH,KAAKuxH,UAAUpzC,kBAQhB8sE,yBAAAnqJ,UAAAu9E,wBAAP,SAA+BC,GAC3Bt+E,KAAKmrJ,sBAAwB7sE,GAMzB2sE,yBAAAnqJ,UAAA4qJ,wBAAR,WACI1rJ,KAAKyrJ,uBAAuBv2I,OAExB7G,EAAA0B,cAAcylE,oBACsC,MAAhDhzE,EAAA+B,WAAWC,kBAAkBgpJ,iBAA2BhrJ,EAAA+B,WAAWC,kBAAkBgpJ,kBACrFxtJ,KAAKorJ,qBAAsB,IAU7BH,yBAAAnqJ,UAAAysJ,sBAAV,SAAgCE,GAAA,SAAAA,MAAA,GACwB,MAAhDjrJ,EAAA+B,WAAWC,kBAAkBkpJ,iBAA2BlrJ,EAAA+B,WAAWC,kBAAkBkpJ,gBAAkB,GACvG1tJ,KAAKyrJ,uBAAuBt2I,MAAMs4I,EAAcjrJ,EAAA+B,WAAWC,kBAAkBkpJ,kBAIrFzC,yBAAAnqJ,UAAAy9E,iBAAA,WACI,MAAOv+E,MAAKqrJ,sBA5nCpBJ,yBAAA5vI,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,cnIkjsCxBugI,2BmIjjsCsC1xC,EAAAG,cAAjCr5G,GAAA4qJ,yBAAwBA,GnIyjsC/B,SAAS3qJ,EAAQD,EAASF,GAE/B,YoIzlsCD,IAAAyB,GAAAzB,EAAgD,GAEhDs4F,EAAAt4F,EAA8B,IAC9B2kE,EAAA3kE,EAA2B,IAC3BqC,EAAArC,EAA2B,GAE3BusJ,EAAA,WAOI,QAAAA,oBACI1sJ,KAAK2tJ,oBACL3tJ,KAAK4tJ,mBACL5tJ,KAAK6tJ,mBACL7tJ,KAAK8tJ,WAsOb,MAnOIpB,kBAAA5rJ,UAAA+C,WAAA,WACI7D,KAAKmmJ,MAAQj9I,SAASC,eAAe,eAErC,IAAIs8C,GAAkBgzC,EAAAO,cAAcvB,eAAsC,qBAE1E,IAAc,MAAVhyC,EAEA,IADA,GAAI1lC,GAAgB0lC,EAAOzlC,kBACZ,MAARD,GAAc,CACjB,GAAIA,EAAK7B,aAAa,UAAW,CAC7B,GAAI3d,GAAawf,EAAKxB,aAAa,UAC/B46E,EAAqB,KACrBC,EAAqB,KAErB20D,EAA6B7kJ,SAASC,eAAe,UAAY5I,EAChD,OAAjBwtJ,IACA/tJ,KAAK2tJ,iBAAiB,UAAYptJ,GAAMwtJ,GAGjC,MAAPxtJ,GAAqB,MAAPA,GAAqB,MAAPA,GAC5BA,EAAK,QACLwtJ,EAAgB7kJ,SAASC,eAAe,UAAY5I,GAC/B,MAAjBwtJ,IACA/tJ,KAAK2tJ,iBAAiB,UAAYptJ,GAAMwtJ,IAE9B,MAAPxtJ,GAAqB,MAAPA,GAAqB,MAAPA,IACnCA,EAAK,QACLwtJ,EAAgB7kJ,SAASC,eAAe,UAAY5I,GAC/B,MAAjBwtJ,IACA/tJ,KAAK2tJ,iBAAiB,UAAYptJ,GAAMwtJ,GAIhD,IAAIhuJ,GAAC,MACL,IAAIggB,EAAK7B,aAAa,UAAW,CAC7Bi7E,EAAap5E,EAAKxB,aAAa,SAC/B,IAAI86E,GAAwBt5E,EAAKxB,aAAa,UAAUqE,MAAM,IAC9D,KAAK7iB,EAAI,EAAGA,EAAIs5F,EAAOttF,OAAQhM,IAAK,CAChC,GAAIiuJ,GAA4B9kJ,SAASC,eAAe,SAAW5I,EAAK,IAAM84F,EAAOt5F,GACjE,OAAhBiuJ,IACAhuJ,KAAK4tJ,gBAAgB,SAAWrtJ,EAAK,IAAM84F,EAAOt5F,IAAMiuJ,EAG5D,IAAIC,GAAwB/kJ,SAASC,eAAe,gBAAkB5I,EAAK,IAAM84F,EAAOt5F,GACxE,OAAZkuJ,IACAA,EAAS1kJ,UAAY8vF,EAAOt5F,KAKxC,GAAIggB,EAAK7B,aAAa,UAAW,CAC7Bk7E,EAAar5E,EAAKxB,aAAa,SAC/B,IAAIiJ,GAAwBzH,EAAKxB,aAAa,UAAUqE,MAAM,KAC1DsrI,EAAiCnuI,EAAKxB,aAAa,UAAUqE,MAAM,IACvE,KAAK7iB,EAAI,EAAGA,EAAIynB,EAAOzb,OAAQhM,IAC3B,GAA0B,MAAtBmuJ,EAAgBnuJ,GAAY,CAC5B,GAAIouJ,GAA4BjlJ,SAASC,eACrC,gBAAkB5I,EAAK,IAAM2tJ,EAAgBnuJ,GAEjD,IAAoB,MAAhBouJ,EAAsB,CACtB,GAAIC,GAAc,MAEdA,GADA5rJ,EAAA+B,WAAWC,kBAAkB+I,UAAoC,MAAxBu3D,EAAAqD,WAAW4R,UACnCn4E,EAAAyL,YAAY2sE,SAASr9C,OAAOnV,EAAOznB,IAAK+kE,EAAAqD,WAAW4R,WAEnDn4E,EAAAyL,YAAY2sE,SAASr9C,OAAOnV,EAAOznB,IAAK+kE,EAAAqD,WAAWK,KAExE2lF,EAAa5kJ,UAAY6kJ,EACzBpuJ,KAAK6tJ,gBAAgB,gBAAkBttJ,EAAK,IAAM2tJ,EAAgBnuJ,IAC9DouJ,EACJnuJ,KAAK8tJ,QAAQ,gBAAkBvtJ,EAAK,IAAM2tJ,EAAgBnuJ,IAAMynB,EAAOznB,MAM3FggB,EAAOA,EAAKK,mBAIpBpgB,KAAKquJ,sBAGT3B,iBAAA5rJ,UAAA45E,UAAA,WACI16E,KAAKu6D,OAEL,KAAK,GAAIn1D,KAAOpF,MAAK6tJ,gBAAiB,CAElC,GAAyB,MAArB7tJ,KAAK8tJ,QAAQ1oJ,GAAc,CAC3B,GAAIkpJ,GAAc,MAEdA,GADA9rJ,EAAA+B,WAAWC,kBAAkB+I,UAAoC,MAAxBu3D,EAAAqD,WAAW4R,UACnCn4E,EAAAyL,YAAY2sE,SAASh6E,KAAK8tJ,QAAQ1oJ,GAAM0/D,EAAAqD,WAAW4R,WAEnDn4E,EAAAyL,YAAY2sE,SAASh6E,KAAK8tJ,QAAQ1oJ,GAAM0/D,EAAAqD,WAAWK,KAExExoE,KAAK6tJ,gBAAgBzoJ,GAAKmE,UAAY+kJ,KAKlD5B,iBAAA5rJ,UAAA+/D,SAAA,SAAS21D,GACLx2H,KAAKu6D,OAEL,IAAIg0F,GAAe3sJ,EAAAysG,OAAOnsF,IAAIs0G,EAAM,SAACrmD,GAAiC,MAAAA,GAAIq+E,WAAUt0H,KAAK,KACrFu0H,EAAY7sJ,EAAAysG,OAAOnsF,IAAIs0G,EAAM,SAACrmD,GAAiC,MAAAA,GAAIl3D,QAAOihB,KAAK,KAC/Ew0H,EAAa9sJ,EAAAysG,OAAOnsF,IAAIs0G,EAAM,SAACrmD,GAAiC,MAAAA,GAAI81B,UAAS/rE,KAAK,KAClFy0H,EAAY/sJ,EAAAogB,WAAWC,YAAYssI,GACnCl1D,EAASz3F,EAAAogB,WAAWC,YAAYwsI,EAGpC,IAAoB,IAAhBF,EACA,IAAK,GAAInpJ,KAAOpF,MAAK2tJ,iBACXe,EAAWv0H,QAAQ,UAAqB,aAAP/0B,GAEnCpF,KAAK2tJ,iBAAiBvoJ,GAAKiE,UAAUC,IAAI,SAKrD,KAAK,GAAIvJ,GAAY,EAAGA,EAAI4uJ,EAAU5iJ,OAAQhM,IAAK,CAC/C,GAAIyuJ,GAAWG,EAAU5uJ,GACrBkZ,EAAQogF,EAAOt5F,EAIH,KAAZyuJ,GAC+C,MAA/CxuJ,KAAK2tJ,iBAAiB,UAAYa,IACjCxuJ,KAAK2tJ,iBAAiB,UAAYa,GAAUnlJ,UAAU0N,SAAS,eAEhE/W,KAAK2tJ,iBAAiB,UAAYa,GAAUnlJ,UAAUC,IAAI,aAC1DtJ,KAAK2tJ,iBAAiB,UAAYa,GAAUnlJ,UAAUsN,OAAO,UAIjE,IAAIi4I,GAAa,EACA,KAAbJ,GAA+B,IAAbA,GAA+B,IAAbA,EACpCI,EAAa,QACO,IAAbJ,GAA+B,IAAbA,GAA+B,IAAbA,IAC3CI,EAAa,SAGC,IAAdA,GAGiE,MAA7D5uJ,KAAK4tJ,gBAAgB,SAAWgB,EAAa,IAAM31I,IAClDjZ,KAAK4tJ,gBAAgB,SAAWgB,EAAa,IAAM31I,GAAO5P,UAAU0N,SAAS,cAE9E/W,KAAK4tJ,gBAAgB,SAAWgB,EAAa,IAAM31I,GAAO5P,UAAUC,IAAI,aAIvB,MAAjDtJ,KAAK2tJ,iBAAiB,UAAYiB,IACjC5uJ,KAAK2tJ,iBAAiB,UAAYiB,GAAYvlJ,UAAU0N,SAAS,eAElE/W,KAAK2tJ,iBAAiB,UAAYiB,GAAYvlJ,UAAUC,IAAI,aAC5DtJ,KAAK2tJ,iBAAiB,UAAYiB,GAAYvlJ,UAAUsN,OAAO,YAEnD,MAATsC,IAEwD,MAA3DjZ,KAAK4tJ,gBAAgB,SAAWY,EAAW,IAAMv1I,IAChDjZ,KAAK4tJ,gBAAgB,SAAWY,EAAW,IAAMv1I,GAAO5P,UAAU0N,SAAS,cAE5E/W,KAAK4tJ,gBAAgB,SAAWY,EAAW,IAAMv1I,GAAO5P,UAAUC,IAAI,gBAMtFojJ,iBAAA5rJ,UAAAqsJ,WAAA,WACsB,MAAdntJ,KAAKmmJ,OAAkBnmJ,KAAKmmJ,MAAM98I,UAAU0N,SAAS,YACpD/W,KAAKmmJ,MAAM98I,UAAUC,IAAI,WAIlCojJ,iBAAA5rJ,UAAAy5D,MAAA,WACsB,MAAdv6D,KAAKmmJ,OAAiBnmJ,KAAKmmJ,MAAM98I,UAAU0N,SAAS,YACnD/W,KAAKmmJ,MAAM98I,UAAUsN,OAAO,SAIjC,KADA,GAAIiyD,GAAW1/D,SAASyxD,uBAAuB,aACxCiO,EAAS78D,OAAS,GACrB68D,EAAS,GAAGv/D,UAAUsN,OAAO,YAIjC,KADA,GAAIiyD,GAAW1/D,SAASyxD,uBAAuB,UACxCiO,EAAS78D,OAAS,GACrB68D,EAAS,GAAGv/D,UAAUsN,OAAO,WAIrC+1I,iBAAA5rJ,UAAAq9E,eAAA,WACIn+E,KAAKquJ,sBAGT3B,iBAAA5rJ,UAAAutJ,mBAAA,WACI,GAAI5oG,GAAkBgzC,EAAAO,cAAcvB,eAAsC,qBAE1E,IAAc,MAAVhyC,EAEA,IADA,GAAI1lC,GAAgB0lC,EAAOzlC,kBACZ,MAARD,GAAc,CACjB,GAAIA,EAAK7B,aAAa,UAAW,CAC7B,GAAI3d,GAAawf,EAAKxB,aAAa,UAE/Bxe,EAAC,MACL,IAAIggB,EAAK7B,aAAa,aAAc,CAChC,GAAI2iI,GAAkB9gI,EAAKxB,aAAa,aACpCswI,EAA8B3lJ,SAASC,eAAe,kBAAoB5I,EAExD,OAAlBsuJ,IACAA,EAAetlJ,UAAYslJ,EAAetlJ,UAAU0D,QAAQ,KAAM4zI,IAI1E,GAAI9gI,EAAK7B,aAAa,eAAgB,CAClC,GAAI8uH,GAA6BjtH,EAAKxB,aAAa,eAAeqE,MAAM,IACxE,KAAK7iB,EAAI,EAAGA,EAAIitI,EAAYjhI,OAAQhM,IAAK,CACrC,GAAI8uJ,GAA8B3lJ,SAASC,eACvC,uBAAyB5I,EAAK,IAAMR,EAElB,OAAlB8uJ,IACAA,EAAetlJ,UAAYslJ,EAAetlJ,UAAU0D,QAAQ,KAAM+/H,EAAYjtI,OAK9FggB,EAAOA,EAAKK,qBAI5BssI,mBAjParsJ,GAAAqsJ,iBAAgBA,GpIiysCvB,SAASpsJ,EAAQD,GAEtB,YqIvysCD,IAAAusJ,GAAA,WAGI,QAAAA,gBAFQ5sJ,KAAA8uJ,mBA0CZ,MAtCIlC,cAAA9rJ,UAAA+C,WAAA,aAEA+oJ,aAAA9rJ,UAAAkwB,MAAA,WACIhxB,KAAK8uJ,iBACL,IAAI/uJ,GAEA6oE,EAAW1/D,SAASyxD,uBAAuB,WAC/C,KAAK56D,EAAI,EAAGA,EAAI6oE,EAAS78D,OAAQhM,IAC5B6oE,EAAS7oE,GAAsB2R,MAAMC,QAAU,MAGpD,IAAIo9I,GAAiB7lJ,SAASyxD,uBAAuB,aACrD,KAAK56D,EAAI,EAAGA,EAAIgvJ,EAAehjJ,OAAQhM,IAClCgvJ,EAAehvJ,GAAsBsJ,UAAUsN,OAAO,UAG3D,IAAIvN,GAAUF,SAASC,eAAe,OACvB,OAAXC,IACAA,EAAQsI,MAAMC,QAAU,SAGU,MAAlCi3D,EAAS5oE,KAAK8uJ,kBACblmF,EAAS5oE,KAAK8uJ,iBAAoCp9I,MAAMC,QAAU,QACvB,MAAxCo9I,EAAe/uJ,KAAK8uJ,kBACnBC,EAAe/uJ,KAAK8uJ,iBAAoCzlJ,UAAUC,IAAI,YAG3EtJ,KAAKu6D,OAAM,IAInBqyF,aAAA9rJ,UAAAy5D,MAAA,SAAMpmC,GAAA,SAAAA,OAAA,GACFn0B,KAAK8uJ,kBACL,IAAI1lJ,GAAUF,SAASC,eAAe,OACvB,OAAXC,IACAA,EAAQsI,MAAMC,QAAU,SAGpCi7I,eA3CavsJ,GAAAusJ,aAAYA,GrIq1sCnB,SAAStsJ,EAAQD,GAEtB,YsIz1sCD,IAAAwrJ,GAAA,mBAAAA,yBAIA,MAHIhrJ,QAAAkD,eAAkB8nJ,qBAAA,UtI61sCb7nJ,IsI71sCL,WACI,MAAO,UtI+1sCNE,YAAY,EACZC,cAAc,IsI91sCvB0nJ,uBAJaxrJ,GAAAwrJ,qBAAoBA,GtI22sC3B,SAASvrJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GuIv3sCjE5Z,EAAAzB,EAAyF,GACzF6B,EAAA7B,EAA8B,GAC9ByS,EAAAzS,EAA2E,GAC3E0b,EAAA1b,EAA+B,IAC/Bo5G,EAAAp5G,EAA6B,IAC7BuC,EAAAvC,EAA+B,IAC/BwC,EAAAxC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IAEzBqC,EAAArC,EAA2B,GAC3BkO,EAAAlO,EAA8B,IAC9ByC,EAAAzC,EAA4B,IAC5BoyE,EAAApyE,EAA4B,IAC5Bw/I,EAAAx/I,EAAoC,KACpCy/I,EAAAz/I,EAAiC,IACjCgzG,EAAAhzG,EAAwC,IACxC0qJ,EAAA1qJ,EAAgC,IAChC4qJ,EAAA5qJ,EAA6B,KAC7B2qJ,EAAA3qJ,EAAiC,KAGjC2kE,EAAA3kE,EAA2B,IAC3B6qJ,EAAA7qJ,EAAqC,KAEjC2P,EAAc9N,EAAAiD,cAAcC,KAAK4K,YAIrCk/I,GAHchtJ,EAAAiD,cAAcC,KAAK46I,QAGjC,SAAA58I,GAAmD3B,EAAAytJ,8BAAA9rJ,EA6B/C,SAAA8rJ,iCACI9rJ,EAAAzC,KAAAT,KAAM,aATFA,KAAAivJ,mBAA6B,EAM7BjvJ,KAAAsrJ,eAAyB,EAi7BrC,MA36BI0D,+BAAAluJ,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKkvJ,WAAa1xI,EAAKU,aAAa,cAC9Btc,EAAAogB,WAAW+E,YAAYvJ,EAAKe,aAAa,cAAe,MACvD,UAAW,UAAW,cAAe,UAAW,aAEvDve,KAAKwrJ,iBAAmB,GAAIr4C,GAAAloF,UACrBjrB,KAAK45G,KAAI,mBACZh4G,EAAAkwD,uBAAuBgoD,iBAAiB95G,OAG5CA,KAAKm9G,kBAELn9G,KAAKswH,eAAiB19G,EAAAa,iBAAiB,iBACvCzT,KAAKswH,eAAe58G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKosH,oBAAoBv4G,KAAK7T,OAEhFA,KAAKuwH,eAAiB39G,EAAAa,iBAAiB,iBACvCzT,KAAKuwH,eAAe78G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKwwH,gBAAgB38G,KAAK7T,OAE5EA,KAAK+/I,WAAantI,EAAAa,iBAAiB,aACnCzT,KAAK+/I,WAAWrsI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKggJ,KAAKnsI,KAAK7T,OAE7DA,KAAKigJ,iBAAmBrtI,EAAAa,iBAAiB,mBACzCzT,KAAKigJ,iBAAiBvsI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKkgJ,WAAWrsI,KAAK7T,OAEzEA,KAAK6wH,qBAAuBj+G,EAAAa,iBAAiB,uBAC7CzT,KAAK6wH,qBAAqBn9G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKosH,oBAAoBv4G,KAAK7T,OAEtFA,KAAKmvJ,qBAAuBv8I,EAAAa,iBAAiB,uBAC7CzT,KAAKmvJ,qBAAqBz7I,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKovJ,sBAAsBv7I,KAAK7T,OAExFA,KAAKqvJ,sBAAwBz8I,EAAAa,iBAAiB,wBAC9CzT,KAAKqvJ,sBAAsB37I,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKsvJ,uBAAuBz7I,KAAK7T,OAE1FA,KAAK2wH,cAAgBznH,SAASC,eAAe,yBAE7CnJ,KAAKqiJ,cAAgBn5I,SAASC,eAAe,gBAC7CnJ,KAAKuvJ,aAAermJ,SAASC,eAAe,eAE5CnJ,KAAKwvJ,gCAAkC58I,EAAAa,iBAAiB,kCACxDzT,KAAKwvJ,gCAAgC97I,GACjCd,EAAAe,iBAAiBC,SACjB5T,KAAKyvJ,qBAAqB57I,KAAK7T,KAAMA,KAAKqiJ,eAAe,IAG7DriJ,KAAK4rJ,uBAAyB5rJ,KAAK4rJ,uBAAuB/3I,KAAK7T,MAG/DwC,EAAA+B,WAAWoJ,WAAW+F,GAAGs3I,EAAAa,qBAAqBC,OAAQ9rJ,KAAK4rJ,uBAE3D,IAAIG,GAAyB7iJ,SAASC,eAAe,eACjD6iJ,EAAsB9iJ,SAASC,eAAe,WAEhC,OAAd3G,EAAA+B,YAAsD,MAAhC/B,EAAA+B,WAAWC,oBAChB,MAAbunJ,IACIvpJ,EAAA+B,WAAWC,kBAAkB+I,UAC7Bw+I,EAAU1iJ,UAAUC,IAAI,WAExB9G,EAAA+B,WAAWC,kBAAkByJ,oBAC7B89I,EAAU1iJ,UAAUC,IAAI,kBAGlB,MAAV0iJ,GACIxpJ,EAAA+B,WAAWC,kBAAkByJ,oBAC7B+9I,EAAO3iJ,UAAUC,IAAI,mBAM7B0lJ,8BAAAluJ,UAAA8qJ,uBAAR,WACQv9I,EAAA0B,cAAc8nE,iBAQdxpE,EAAA0B,cAAcylE,oBAAsBnnE,EAAA0B,cAAc0lE,qBAClDz1E,KAAK0vJ,cAAa,GAClBltJ,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,2BAIlDtrJ,OAAAkD,eAAcirJ,8BAAAluJ,UAAA,mBvI8zsCTkD,IuI9zsCL,WACI,MAAOhE,MAAKwrJ,kBvIg0sCXtnJ,YAAY,EACZC,cAAc,IuI9zsCZ6qJ,8BAAAluJ,UAAAqrJ,sBAAP,WACI,MAAOnsJ,MAAKwrJ,iBAAiBzxC,iBAGjCi1C,8BAAAluJ,UAAA07E,cAAA,SAAcyV,GACVjyF,KAAKmrH,YAAcl5B,EACnBjyF,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBn1B,cAAerrH,KAAKkyF,cAAcr+E,KAAK7T,OAC/EA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBvvB,aAAcjxH,KAAKsyF,aAAaz+E,KAAK7T,OAC7EA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoB7tB,YAAa3yH,KAAK4yF,YAAY/+E,KAAK7T,OAC3EA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBtvB,eAAgBlxH,KAAKmxH,eAAet9G,KAAK7T,OACjFA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoB90B,uBAAwB1rH,KAAK2rH,uBAAuB93G,KAAK7T,OACjGA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoB50B,gBAAiB5rH,KAAK6rH,gBAAgBh4G,KAAK7T;AACnFA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBx0B,cAAehsH,KAAKykG,cAAc5wF,KAAK7T,OAC/EA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBv0B,cAAejsH,KAAK4jG,cAAc/vF,KAAK7T,QAGnFgvJ,8BAAAluJ,UAAAq8G,gBAAA,WACIn9G,KAAKy2E,QAAQ0mC,iBAAgBpxF,KACzBA,EAAC6zH,EAAAp2B,iBAAiBC,cAAc,EAChC19F,EAAC6zH,EAAAp2B,iBAAiBE,aAAa,EAC/B39F,EAAC6zH,EAAAp2B,iBAAiBz2B,iBAAiB,EACnChnE,EAAC6zH,EAAAp2B,iBAAiBx2B,qBAAqB,EACvCjnE,EAAC6zH,EAAAp2B,iBAAiB92B,aAAa,EAC/B3mE,EAAC6zH,EAAAp2B,iBAAiB12B,iBAAiB,EvI+zsClC/mE,IuI5zsCL/rB,KAAKqsJ,gBAAgBlvC,iBAAgBoV,KACjCA,EAACs4B,EAAAvgC,gBAAgBgiC,SAAS,EAC1B/5B,EAACs4B,EAAAvgC,gBAAgBiiC,cAAc,EAC/Bh6B,EAACs4B,EAAAvgC,gBAAgBkiC,mBAAmB,EACpCj6B,EAACs4B,EAAAvgC,gBAAgB76G,WAAW,EvI+zsC3B8iH,GAEJ,IAAIxmG,GAAIwmG,GuI7zsCby8B,8BAAAluJ,UAAAizE,aAAA,WACI/zE,KAAKsxH,sBAAwBpoH,SAASC,eAAe,wBAErDjG,EAAApC,UAAMizE,aAAYtzE,KAAAT,MAElBA,KAAKmrH,YAAYp3C,eACjB/zE,KAAKmrH,YAAYuH,cAES,MAAtB1yH,KAAK2wH,gBACL3wH,KAAK2wH,cAAcj/G,MAAMC,QAAU,QAEb,MAAtB3R,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAGpDzhF,KAAKuxH,UAAY,GAAIu5B,GAAA4B,iBACrB1sJ,KAAKuxH,UAAU1tH,aACf7D,KAAKuxH,UAAU72C,YAEf16E,KAAK2sJ,MAAQ,GAAI5B,GAAA6B,aACjB5sJ,KAAK2sJ,MAAM9oJ,cAGfmrJ,8BAAAluJ,UAAAoxF,cAAA,SAAc0uD,GACNA,EACAvyI,EAAA0B,cAAcitE,YAAYltE,EAAY8lE,MAEtCvnE,EAAA0B,cAAcivE,iCAItBgwE,8BAAAluJ,UAAAwxF,aAAA,WACI1vF,EAAA4F,YAAY8nE,UAAU,oBAElB1tE,EAAA4F,YAAYiH,UACuC,SAAnDjN,EAAA+B,WAAWC,kBAAkBqoJ,mBAC7BrqJ,EAAA+B,WAAWC,kBAAkB8hE,qBACyB,IAAtD9jE,EAAA+B,WAAWC,kBAAkB+hE,qBAE7BvmE,KAAKkV,QAELlV,KAAKy2E,QAAQ4mC,kBACTuiC,EAAAp2B,iBAAiB12B,eACjBtwF,EAAA+B,WAAWC,kBAAkB8hE,qBAEjCtmE,KAAKqsJ,gBAAgBhvC,kBACjBwtC,EAAAvgC,gBAAgBkiC,iBAChBhqJ,EAAA+B,WAAWC,kBAAkB8hE,qBAEjC5jE,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCv3G,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,2BAIlD6C,8BAAAluJ,UAAA8xF,YAAA,WACIvkF,EAAA0B,cAAcitE,YAAYltE,EAAY0nE,YAG1Cw3E,8BAAAluJ,UAAA02D,eAAA,SAAesmB,GAuBX,GAtBIA,IAAW+sE,EAAAvgC,gBAAgBkiC,mBACvBxsJ,KAAKy2E,QAAQ6mC,eAAesiC,EAAAp2B,iBAAiBC,aAC7C3rC,EAAS8hE,EAAAp2B,iBAAiBC,YACnBzpH,KAAKy2E,QAAQ6mC,eAAesiC,EAAAp2B,iBAAiBE,YACpD5rC,EAAS8hE,EAAAp2B,iBAAiBE,WACnB1pH,KAAKy2E,QAAQ6mC,eAAesiC,EAAAp2B,iBAAiB92B,YACpD5U,EAAS8hE,EAAAp2B,iBAAiB92B,WACnB1yF,KAAKy2E,QAAQ6mC,eAAesiC,EAAAp2B,iBAAiB12B,kBACpDhV,EAAS8hE,EAAAp2B,iBAAiB12B,iBAI9BhV,IAAW+sE,EAAAvgC,gBAAgB76G,WACvBzP,KAAKy2E,QAAQ6mC,eAAesiC,EAAAp2B,iBAAiBz2B,iBAC7CjV,EAAS8hE,EAAAp2B,iBAAiBz2B,eAC1B/yF,KAAK2sJ,MAAMpyF,SACJv6D,KAAKy2E,QAAQ6mC,eAAesiC,EAAAp2B,iBAAiBx2B,sBACpDlV,EAAS8hE,EAAAp2B,iBAAiBx2B,mBAC1BhzF,KAAK2sJ,MAAMpyF,UAIfv6D,KAAKy2E,QAAQ6mC,eAAex/B,GAG5B,OAFA56E,EAAApC,UAAM02D,eAAc/2D,KAAAT,KAAC89E,GAEbA,GAIJ,IAAK8hE,GAAAp2B,iBAAiBE,WAClB1pH,KAAKggJ,MACL,MACJ,KAAKJ,GAAAp2B,iBAAiB92B,WAClB1yF,KAAKmyF,OACLnyF,KAAK2sJ,MAAMpyF,OACX,MACJ,KAAKqlF,GAAAp2B,iBAAiB12B,eAClB9yF,KAAKkV,MACL,MACJ,KAAK0qI,GAAAp2B,iBAAiBz2B,eAClB/yF,KAAKwxH,UACL,MACJ,KAAKouB,GAAAp2B,iBAAiBx2B,mBAClBhzF,KAAKyxH,iBAMrBu9B,8BAAAluJ,UAAAqU,MAAA,SAAM5U,GACFP,KAAKy2E,QAAQ+mC,oBACbx9G,KAAKqsJ,gBAAgB7uC,oBACrB96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCv3G,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,yBAC1CnsJ,KAAKmrH,YAAYh2G,MAAM5U,IAG3ByuJ,8BAAAluJ,UAAAqxF,KAAA,WACInyF,KAAKqvJ,sBAAsBn6I,OAE3BtS,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS46D,6BACR3gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,eAAiB,GAAGr5E,YAGjE/N,KAAKuvJ,aAAalmJ,UAAUsN,OAAO,gBACnC3W,KAAKqiJ,cAAch5I,UAAUsN,OAAO,gBACpC3W,KAAKqiJ,cAAch5I,UAAUsN,OAAO,YAEpC3W,KAAKy2E,QAAQ+mC,oBACbx9G,KAAKqsJ,gBAAgB7uC,oBACjB56G,EAAA4F,YAAYiH,UACZzP,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiBx2B,oBAAoB,GACpEhzF,KAAKqsJ,gBAAgBhvC,kBAAkBwtC,EAAAvgC,gBAAgB76G,UAAU,IAEjE/M,EAAAyF,eAAewsF,iBAAiB,IAEpC/xF,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,cACnC9/D,EAAA+B,WAAWC,kBAAkB+I,UAAmC,MAAvBu3D,EAAAqD,WAAWgB,WACpDvmE,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS65D,kBACT7sD,SACI9T,EAAAyL,YAAY+7D,OAAOzmE,EAAAmG,YAAYsvD,aAAa8Q,SAAUpE,EAAAqD,WAAWgB,UAAUp7D,YAC7EA,YAENnL,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAAS65D,kBACT7sD,SACI9T,EAAAyL,YAAY+7D,OAAOzmE,EAAAmG,YAAYsvD,aAAa8Q,SAAUpE,EAAAqD,WAAWgB,UAAUp7D,YAC7EA,aAGVrL,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCv3G,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,yBAC1CnsJ,KAAKmrH,YAAYh5B,OACjBnyF,KAAKuxH,UAAUh3D,QACfv6D,KAAK2sJ,MAAMpyF,QACNv6D,KAAKsrJ,eACN1oJ,EAAA4F,YAAY8nE,UAAU,kBAE1B1tE,EAAA4F,YAAY8nE,UAAU,oBAG1B0+E,8BAAAluJ,UAAAk/I,KAAA,WACIhgJ,KAAKmvJ,qBAAqBj6I,OAC1BlV,KAAKqvJ,sBAAsBn6I,OAEtBlV,KAAKivJ,mBACN5gJ,EAAA0B,cAAcsuE,yBAAwB,GAG1Cr+E,KAAK+/I,WAAW7qI,OAChBlV,KAAKs9E,UACLjvE,EAAA0B,cAAcytE,gBAGlBwxE,8BAAAluJ,UAAAoU,KAAA,WACIlV,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiB12B,gBAAgB,GAChE9yF,KAAKqsJ,gBAAgBhvC,kBAAkBwtC,EAAAvgC,gBAAgBkiC,kBAAkB,GACzE9pJ,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCv3G,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,yBAC1CzpJ,EAAAyF,eAAewsF,iBAAiB,IAChC30F,KAAKmrH,YAAYj2G,OACjBlV,KAAK2sJ,MAAMpyF,SAGfy0F,8BAAAluJ,UAAA69B,IAAA,WACI3+B,KAAKmrH,YAAYxsF,OAGrBqwH,8BAAAluJ,UAAA0vH,gBAAA,WACIxwH,KAAKuwH,eAAer7G,OAChBtS,EAAA4F,YAAYiH,SACZzP,KAAKwxH,YAELxxH,KAAKosH,sBACLpsH,KAAK2vJ,yBAIbX,8BAAAluJ,UAAA0wH,SAAA,WACIxxH,KAAKswH,eAAep7G,OAEc,MAA9BtS,EAAA4F,YAAYi9D,eACZ7iE,EAAA4F,YAAYiH,UAAW,EACvB7M,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASu6D,kBAAmBrgE,EAAA4F,YAAYi9D,eACtEzlE,KAAKmyF,SAELvvF,EAAA4F,YAAYi9D,eAAiB/vD,SAAS9S,EAAA4F,YAAYi9D,eAAiB,GAAG13D,WAClE2H,SAAS9S,EAAA4F,YAAYi9D,gBAAkB,GACvC7iE,EAAA4F,YAAYiH,UAAW,EACvB7M,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASu6D,kBAAmBrgE,EAAA4F,YAAYi9D,eACtEzlE,KAAKmyF,SAELvvF,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKosH,yBAKjB4iC,8BAAAluJ,UAAA2wH,aAAA,WACIpjH,EAAA0B,cAAcsuE,yBAAwB,GAEtCz7E,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiBx2B,oBAAoB,GACpEhzF,KAAKqsJ,gBAAgBhvC,kBAAkBwtC,EAAAvgC,gBAAgB76G,UAAU,GACjE/M,EAAAyF,eAAeqvF,oBAAoBooD,EAAAp2B,iBAAiBx2B,oBAAoB,GACxExwF,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,0BAG9C6C,8BAAAluJ,UAAAo/I,WAAA,WACIlgJ,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiBE,YAAY,GAC5D1pH,KAAKqsJ,gBAAgBhvC,kBAAkBwtC,EAAAvgC,gBAAgBkiC,kBAAkB,GACzE9pJ,EAAAyF,eAAeqvF,oBAAoBooD,EAAAp2B,iBAAiBE,YAAY,GAChElnH,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,0BAG9C6C,8BAAAluJ,UAAAqwH,eAAA,WAWI,GAVAnxH,KAAKsrJ,eAAgB,EAC4B,IAA7C3oJ,EAAAmG,YAAY2uE,kBAAkBob,aAC9BjwF,EAAA4F,YAAY8nE,UAAU,kBACtBtwE,KAAKsrJ,eAAgB,GAGiB,MAAtC3oJ,EAAAmG,YAAY2uE,kBAAkB++C,MAC9Bx2H,KAAKuxH,UAAU1wD,SAASl+D,EAAAmG,YAAY2uE,kBAAkB++C,MAGtD7zH,EAAAmG,YAAY2uE,kBAAkBob,WAAa,EAAG,CAK9C,IAAK,GAFDkuD,IAAwB,EAEnBhhJ,EAAI,EAAGA,EAAI4C,EAAAmG,YAAY2uE,kBAAkB++C,KAAKzqH,OAAQhM,IACvD4C,EAAAmG,YAAY2uE,kBAAkB++C,KAAKz2H,GAAGiwI,UAAYhuI,EAAAiD,cAAcC,KAAK+qI,WAAWE,QAC5ExtI,EAAAmG,YAAY2uE,kBAAkB++C,KAAKz2H,GAAGw0B,OAASvyB,EAAAiD,cAAcC,KAAK46I,QAAQgB,YAC1EC,GAAwB,GAErBp+I,EAAAmG,YAAY2uE,kBAAkB++C,KAAKz2H,GAAGiwI,UAAYhuI,EAAAiD,cAAcC,KAAK+qI,WAAWI,KACnF1tI,EAAAmG,YAAY2uE,kBAAkB++C,KAAKz2H,GAAGw0B,OAASvyB,EAAAiD,cAAcC,KAAK46I,QAAQkB,IAKlFD,IACA/gJ,KAAK4vJ,2BAA2Bz6I,MAAM,KACtCnV,KAAKyvJ,qBAAqBzvJ,KAAKuvJ,cAAc,GAGzC5sJ,EAAAmG,YAAY2uE,kBAAkB12E,eAAe,eACiB,MAA9D4B,EAAAmG,YAAY2uE,kBAAkBthB,WAA2B,gBAEzDn2D,KAAKswH,eAAen7G,MAAM,KAC1BnV,KAAK6vJ,0BAA0B16I,MAAM,KACrCnV,KAAKwvJ,gCAAgCr6I,MAAM,MAE3CnV,KAAKswH,eAAen7G,MAAM,MAI1BxS,EAAAmG,YAAY2uE,kBAAkB12E,eAAe,eACiB,MAA9D4B,EAAAmG,YAAY2uE,kBAAkBthB,WAA2B,gBAEzDn2D,KAAKswH,eAAen7G,MAAM,KAC1BnV,KAAK6vJ,0BAA0B16I,MAAM,KACrCnV,KAAKyvJ,qBAAqBzvJ,KAAKqiJ,eAAe,IAE9CriJ,KAAKswH,eAAen7G,MAAM,IAKtC,MAAInV,MAAKihJ,kBACLjhJ,KAAKswH,eAAep7G,OACpBtS,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKy2E,QAAQ+mC,oBACbx9G,KAAKqsJ,gBAAgB7uC,oBAC4B,IAA7C76G,EAAAmG,YAAY2uE,kBAAkBob,aACgB,MAA1ClwF,EAAAmG,YAAY2uE,kBAAkBvO,WAC1B1mE,EAAA+B,WAAWC,kBAAkB+I,UAAmC,MAAvBu3D,EAAAqD,WAAWgB,SACpDvmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASy6D,0BACTztD,SACI9T,EAAAyL,YAAY+7D,OACRzmE,EAAAmG,YAAY2uE,kBAAkBvO,SAC9BpE,EAAAqD,WAAWgB,UACbp7D,YACJA,YAGNnL,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASw6D,qBACTvgE,EAAAmG,YAAY2uE,kBAAkBvO,SAASn7D,aAInDnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASw6D,sBACvCtgE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASy6D,2BAGnCnjE,KAAKkhJ,oBAAsB,IAAMt+I,EAAA4F,YAAYq/D,WAC7C7nE,KAAKivJ,mBAAoB,EACzBjvJ,KAAK+/I,WAAW5qI,MAAM,MAEtBnV,KAAKigJ,iBAAiB9qI,MAAM,IAE5BnV,KAAK8vJ,oBAAoB,UAGjCptJ,GAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,mBAI7C/5G,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiB12B,gBAAgB,GAChE9yF,KAAKqsJ,gBAAgBhvC,kBAAkBwtC,EAAAvgC,gBAAgBkiC,kBAAkB,GAExB,IAA7C7pJ,EAAAmG,YAAY2uE,kBAAkBob,YAC9B7yF,KAAKosH,sBAGT1pH,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCv3G,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,8BAEO,IAA7CxpJ,EAAAmG,YAAY2uE,kBAAkBob,aAC1BjwF,EAAA4F,YAAYiH,SACZzP,KAAKuwH,eAAep7G,MAAM,IAE1BnV,KAAK2vJ,2BAKjBX,8BAAAluJ,UAAA6qH,uBAAA,WAuCI,MAtCA3rH,MAAKuxH,UAAU47B,aAEfntJ,KAAKswH,eAAep7G,OAEpBtS,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,cACnC9/D,EAAA+B,WAAWC,kBAAkB+I,UAAmC,MAAvBu3D,EAAAqD,WAAWgB,WACpDvmE,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS65D,kBACT7sD,SACI9T,EAAAyL,YAAY+7D,OAAOzmE,EAAAmG,YAAYsvD,aAAa8Q,SAAUpE,EAAAqD,WAAWgB,UAAUp7D,YAC7EA,YAENnL,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAAS65D,kBACT7sD,SACI9T,EAAAyL,YAAY+7D,OAAOzmE,EAAAmG,YAAYsvD,aAAa8Q,SAAUpE,EAAAqD,WAAWgB,UAAUp7D,YAC7EA,YAGwC,MAA1CpL,EAAAmG,YAAY2uE,kBAAkBvO,UAC9BtmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASy6D,0BACTztD,SACI9T,EAAAyL,YAAY+7D,OAAOzmE,EAAAmG,YAAY2uE,kBAAkBvO,SAAUpE,EAAAqD,WAAWgB,UAAUp7D,YAClFA,aAKgC,MAA1CpL,EAAAmG,YAAY2uE,kBAAkBvO,UAC9BtmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASw6D,qBACTvgE,EAAAmG,YAAY2uE,kBAAkBvO,SAASn7D,YAG/CnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASw6D,sBACvCtgE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASy6D,2BAEnCnjE,KAAKihJ,kBACLr+I,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKy2E,QAAQ+mC,wBACb96G,GAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,sBAI7C/5G,MAAKosH,uBAGT4iC,8BAAAluJ,UAAA+qH,gBAAA,WAMI,MALAjpH,GAAA4F,YAAY8nE,UAAU,kBACtBtwE,KAAKsrJ,eAAgB,EAErBtrJ,KAAKswH,eAAep7G,OAEhBlV,KAAKihJ,kBACLr+I,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKy2E,QAAQ+mC,oBAGTx9G,KAAKkhJ,oBAAsB,IAAMt+I,EAAA4F,YAAYq/D,WAC7C7nE,KAAKivJ,mBAAoB,EACzBjvJ,KAAKggJ,SAELhgJ,KAAKigJ,iBAAiB9qI,MAAM,IAC5BnV,KAAK8vJ,oBAAoB,KAG7BptJ,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,qBACzCv3G,GAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,2BAI9CnsJ,KAAKosH,2BACDxpH,EAAA4F,YAAYiH,SACZzP,KAAKwxH,WAELxxH,KAAK2vJ,0BAIbX,8BAAAluJ,UAAA27E,UAAA,WA0EI,MAzEAz8E,MAAK0vJ,cAAa,GAElB9sJ,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS46D,4BACT3gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,eAAer5E,YAE3DnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS86D,wBACT7gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAUK,WAAWpzI,YAGvDnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAAc3/D,EAAAmG,YAAYsvD,aAAa8Q,SAASn7D,YACvFnL,EAAA4F,YAAYC,yBAAyBhG,EAAAiG,SAAS45D,aAAc3/D,EAAAmG,YAAYsvD,aAAa8Q,SAASn7D,YAC1FvL,EAAA+B,WAAWC,kBAAkB+I,UAAmC,MAAvBu3D,EAAAqD,WAAWgB,WACpDvmE,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS65D,kBACT7sD,SACI9T,EAAAyL,YAAY+7D,OAAOzmE,EAAAmG,YAAYsvD,aAAa8Q,SAAUpE,EAAAqD,WAAWgB,UAAUp7D,YAC7EA,YAENnL,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAAS65D,kBACT7sD,SACI9T,EAAAyL,YAAY+7D,OAAOzmE,EAAAmG,YAAYsvD,aAAa8Q,SAAUpE,EAAAqD,WAAWgB,UAAUp7D,YAC7EA,YAGwC,MAA1CpL,EAAAmG,YAAY2uE,kBAAkBvO,UAC9BtmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASy6D,0BACTztD,SACI9T,EAAAyL,YAAY+7D,OAAOzmE,EAAAmG,YAAY2uE,kBAAkBvO,SAAUpE,EAAAqD,WAAWgB,UAAUp7D,YAClFA,aAKd/N,KAAKuvJ,aAAalmJ,UAAUsN,OAAO,aACnC3W,KAAKqiJ,cAAch5I,UAAUsN,OAAO,aAEU,MAA1ChU,EAAAmG,YAAY2uE,kBAAkBvO,UAC9BtmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASw6D,qBACTvgE,EAAAmG,YAAY2uE,kBAAkBvO,SAASn7D,YAG/CnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASw6D,sBACvCtgE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASy6D,2BAEb,MAAtBnjE,KAAK2wH,gBACL3wH,KAAK2wH,cAAcj/G,MAAMC,QAAU,SAEL,MAA9B3R,KAAKsxH,wBACLtxH,KAAKsxH,sBAAsB5/G,MAAMC,QAAU,SAGrB,MAAtB3R,KAAK2wH,eAAyB3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACnFzhF,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGrB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE7DzhF,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGrB,MAAtC9+E,EAAAmG,YAAY2uE,kBAAkB++C,MAC9Bx2H,KAAKuxH,UAAU1wD,SAASl+D,EAAAmG,YAAY2uE,kBAAkB++C,MAG1DtzH,EAAApC,UAAM27E,UAASh8E,KAAAT,MACfA,KAAKmrH,YAAY1uC,YAEbz8E,KAAKihJ,kBACLjhJ,KAAKy2E,QAAQ+mC,oBAGTx9G,KAAKkhJ,oBAAsB,IAAMt+I,EAAA4F,YAAYq/D,WAC7C7nE,KAAKivJ,mBAAoB,EACzBjvJ,KAAK+/I,WAAW5qI,MAAM,MAEtBnV,KAAKigJ,iBAAiB9qI,MAAM,IAC5BnV,KAAK8vJ,oBAAoB,KAG7BptJ,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,qBACzCv3G,GAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,2BAI9CnsJ,KAAKosH,0BAELpsH,MAAK2vJ,yBAGTX,8BAAAluJ,UAAA88E,MAAA,SAAMD,GAAA,SAAAA,OAAA,GACF/6E,EAAA4F,YAAY8nE,UAAU,iBAEtBtwE,KAAK0vJ,cAAa,GAElB9sJ,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS46D,4BACT3gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,eAAer5E,YAG3D/N,KAAKuvJ,aAAalmJ,UAAUsN,OAAO,aACnC3W,KAAKqiJ,cAAch5I,UAAUsN,OAAO,aAEpC3W,KAAKmrH,YAAYvtC,MAAMD,GAEG,MAAtB39E,KAAK2wH,gBACL3wH,KAAK2wH,cAAcj/G,MAAMC,QAAU,SAGL,MAA9B3R,KAAKsxH,wBACLtxH,KAAKsxH,sBAAsB5/G,MAAMC,QAAU,UAInDq9I,8BAAAluJ,UAAA2jG,cAAA,WACIzkG,KAAK6wH,qBAAqB17G,MAAM,IACN,MAAtBnV,KAAK2wH,eAAyB3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACnFzhF,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAIrB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE7DzhF,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAG/DzhF,KAAK2vJ,wBAGTX,8BAAAluJ,UAAA+8E,MAAA,WACIj7E,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKivJ,mBAAoB,EAEzBjvJ,KAAKmrH,YAAYttC,QACjB79E,KAAKuxH,UAAUh3D,QACfv6D,KAAK2sJ,MAAMpyF,QAEe,MAAtBv6D,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAIlB,MAA9BzhF,KAAKsxH,uBACJtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE9DzhF,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAIhEutE,8BAAAluJ,UAAA8iG,cAAA,WACIv1F,EAAA0B,cAAcotE,YAAYrtE,EAAY8lE,MAAM,GAClB,MAAtB51E,KAAK2wH,gBACL3wH,KAAK2wH,cAAcj/G,MAAMC,QAAU,SAIjCq9I,8BAAAluJ,UAAA4uJ,aAAV,SAAuBK,GACnB,GAAMrgG,GAAOqgG,EAAQ,EAAI,CAEzB,IACIptJ,EAAAmG,YAAY2uE,kBAAkB12E,eAAe,eACiB,MAA9D4B,EAAAmG,YAAY2uE,kBAAkBthB,WAA2B,eAEzD,OAAQxzD,EAAAmG,YAAY2uE,kBAAkBthB,WAA2B,gBAC7D,IAAK,GAED,WADA3zD,GAAA+B,WAAWoJ,WAAWs+I,aAAajsJ,KAAKkvJ,WAAW,GAAIx/F,EAE3D,KAAK,GAED,WADAltD,GAAA+B,WAAWoJ,WAAWs+I,aAAajsJ,KAAKkvJ,WAAW,GAAIx/F,EAE3D,KAAK,GAED,WADAltD,GAAA+B,WAAWoJ,WAAWs+I,aAAajsJ,KAAKkvJ,WAAW,GAAIx/F,EAE3D,KAAK,IAED,WADAltD,GAAA+B,WAAWoJ,WAAWs+I,aAAajsJ,KAAKkvJ,WAAW,GAAIx/F,EAE3D,KAAK,IAED,WADAltD,GAAA+B,WAAWoJ,WAAWs+I,aAAajsJ,KAAKkvJ,WAAW,GAAIx/F,KAM/Ds/F,8BAAAluJ,UAAA2uJ,qBAAR,SAA6B72F,EAAmBo3F,GAChC,MAARp3F,IACIo3F,EACAp3F,EAAKvvD,UAAUC,IAAI,WAEnBsvD,EAAKvvD,UAAUsN,OAAO,aAKlCq4I,8BAAAluJ,UAAAsrH,oBAAA,WACIpsH,KAAKswH,eAAep7G,OAE0B,MAA1CvS,EAAAmG,YAAY2uE,kBAAkBvO,WAC1B1mE,EAAA+B,WAAWC,kBAAkB+I,UAAmC,MAAvBu3D,EAAAqD,WAAWgB,SACpDvmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASy6D,0BACTztD,SACI9T,EAAAyL,YAAY+7D,OAAOzmE,EAAAmG,YAAY2uE,kBAAkBvO,SAAUpE,EAAAqD,WAAWgB,UAAUp7D,YAClFA,YAGNnL,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASw6D,qBACTvgE,EAAAmG,YAAY2uE,kBAAkBvO,SAASn7D,aAKnDnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASw6D,sBACvCtgE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASy6D,2BAEnCvgE,EAAA4F,YAAYq/D,WACZjlE,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKmnG,SAEAvkG,EAAA4F,YAAYiH,WACbzP,KAAKy2E,QAAQynC,oBAAmBnyF,KAC5BA,EAAC6zH,EAAAp2B,iBAAiBC,cAAc,EAChC19F,EAAC6zH,EAAAp2B,iBAAiBE,aAAa,EAC/B39F,EAAC6zH,EAAAp2B,iBAAiBz2B,iBAAkBnwF,EAAA4F,YAAYiH,UAAY7M,EAAA4F,YAAYw9D,kBACxEj6C,EAAC6zH,EAAAp2B,iBAAiBx2B,oBAAqBpwF,EAAA4F,YAAYiH,UAAY7M,EAAA4F,YAAYw9D,kBAC3Ej6C,EAAC6zH,EAAAp2B,iBAAiB92B,aAAa,EAC/B3mE,EAAC6zH,EAAAp2B,iBAAiB12B,iBAAiB,EvIopsClC/mE,IuIjpsCL/rB,KAAKqsJ,gBAAgBnuC,oBAAmBqU,KACpCA,EAACs4B,EAAAvgC,gBAAgBkiC,mBAAmB,EACpCj6B,EAACs4B,EAAAvgC,gBAAgB76G,WAAY7M,EAAA4F,YAAYiH,UAAY7M,EAAA4F,YAAYw9D,kBvIopsChEusD,KuI/osCb7vH,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCv3G,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,wBvIopsCzC,IAAIpgI,GAAIwmG,GuIjpsCby8B,8BAAAluJ,UAAAqmG,MAAA,WACI50B,EAAAsD,YAAYne,aAEZ13D,KAAKy2E,QAAQynC,oBAAmBnyF,KAC5BA,EAAC6zH,EAAAp2B,iBAAiBC,cAAc,EAChC19F,EAAC6zH,EAAAp2B,iBAAiBE,aAAa,EAC/B39F,EAAC6zH,EAAAp2B,iBAAiBz2B,iBAAiB,EACnChnE,EAAC6zH,EAAAp2B,iBAAiBx2B,qBAAqB,EACvCjnE,EAAC6zH,EAAAp2B,iBAAiB92B,aAAa,EAC/B3mE,EAAC6zH,EAAAp2B,iBAAiB12B,iBAAiB,EvImpsClC/mE,IuIhpsCL/rB,KAAKqsJ,gBAAgBnuC,oBAAmBqU,KACpCA,EAACs4B,EAAAvgC,gBAAgBkiC,mBAAmB,EACpCj6B,EAACs4B,EAAAvgC,gBAAgB76G,WAAW,EvImpsC3B8iH,GAEJ,IAAIxmG,GAAIwmG,GuIjpsCby8B,8BAAAluJ,UAAAg8E,OAAA,WACIl6E,EAAA4F,YAAY8nE,UAAU,sBACtB1tE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAAS46D,4BACT3gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,eAAer5E,YAE3DnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS46D,4BACT3gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,eAAer5E,YAE3DnL,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAAS06D,mBACTzgE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAUM,WAAWrzI,YAEvDnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS06D,mBACTzgE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAUM,WAAWrzI,YAEvD/N,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiBC,aAAa,GAC7DzpH,KAAKqsJ,gBAAgBhvC,kBAAkBwtC,EAAAvgC,gBAAgBkiC,kBAAkB,GACzE9pJ,EAAAyF,eAAeqvF,oBAAoBooD,EAAAp2B,iBAAiBC,aAAa,GACjEjnH,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,yBAC1CnsJ,KAAKmrH,YAAYruC,UAGrBkyE,8BAAAluJ,UAAAw8E,QAAA,WACIt9E,KAAKy2E,QAAQ+mC,oBACbx9G,KAAKqsJ,gBAAgB7uC,oBACrB96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCv3G,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,0BAGtC6C,8BAAAluJ,UAAAmgJ,eAAR,WACI,MAAIr+I,GAAA4F,YAAYq/D,WACZ7nE,KAAKmnG,SACE,GAIoC,MAA3CxkG,EAAAmG,YAAY2uE,kBAAkBqpE,WAC4B,MAA1Dn+I,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,gBACmB,IAA3DzkF,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,gBAQhD4nE,8BAAAluJ,UAAAs9E,UAAA,WACIp+E,KAAK2sJ,MAAM37H,SAOPg+H,8BAAAluJ,UAAAogJ,kBAAR,WACI,MACIv+I,GAAAmG,YAAY2uE,kBAAkB12E,eAAe,eACiB,MAA9D4B,EAAAmG,YAAY2uE,kBAAkBthB,WAA2B,eAElDxzD,EAAAmG,YAAY2uE,kBAAkBthB,WAA2B,eAG7D,MAMH64F,8BAAAluJ,UAAAsuJ,sBAAR,WACIpvJ,KAAKmvJ,qBAAqBj6I,OAC1BlV,KAAKivJ,mBAAoB,EACzBjvJ,KAAKw3D,eAAeooF,EAAAp2B,iBAAiBE,aAUjCslC,8BAAAluJ,UAAAwuJ,uBAAR,WACItvJ,KAAKqvJ,sBAAsBn6I,OAC3BlV,KAAKw3D,eAAeooF,EAAAp2B,iBAAiBz2B,iBAY/Bi8D,8BAAAluJ,UAAAgvJ,oBAAV,SAA8BrC,GAAA,SAAAA,MAAA,GAC0B,MAAhDjrJ,EAAA+B,WAAWC,kBAAkBkpJ,iBAA2BlrJ,EAAA+B,WAAWC,kBAAkBkpJ,gBAAkB,GACvG1tJ,KAAKmvJ,qBAAqBh6I,MAAMs4I,EAAcjrJ,EAAA+B,WAAWC,kBAAkBkpJ,kBAQzEsB,8BAAAluJ,UAAA6uJ,qBAAV,WACwD,MAAhDntJ,EAAA+B,WAAWC,kBAAkBkpJ,iBAA2BlrJ,EAAA+B,WAAWC,kBAAkBkpJ,gBAAkB,GACvG1tJ,KAAKqvJ,sBAAsBl6I,MAAM3S,EAAA+B,WAAWC,kBAAkBkpJ,kBAItEsB,8BAAAluJ,UAAAi+E,qBAAA,WACI/+E,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiBC,aAAa,GAC7D/mH,EAAAyF,eAAeqvF,oBAAoBooD,EAAAp2B,iBAAiBC,aAAa,IA38BzEulC,8BAAA3zI,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,cvIkjuCxBskI,gCuIjjuC2Cz1C,EAAAG,cAAtCr5G,GAAA2uJ,8BAA6BA,GvIyjuCpC,SAAS1uJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GwIjmuCjE5Z,EAAAzB,EAAgE,GAEhE0b,EAAA1b,EAA+B,IAC/BoqH,EAAApqH,EAA8B,IAC9ByC,EAAAzC,EAA4B,IAC5BwC,EAAAxC,EAA4B,IAC5B+iJ,EAAA/iJ,EAAmC,IACnCgzG,EAAAhzG,EAAwC,IACxC0qJ,EAAA1qJ,EAAgC,IAChCqC,EAAArC,EAA2B,GAC3B6qJ,EAAA7qJ,EAAqC,KACrCkO,EAAAlO,EAA8B,IAI9B8vJ,EAAA,SAAA/sJ,GAAgD3B,EAAA0uJ,2BAAA/sJ,EAK5C,SAAA+sJ,8BACI/sJ,EAAAzC,KAAAT,MAkMR,MA/LIiwJ,4BAAAnvJ,UAAAa,OAAA,SAAO6b,GACHxd,KAAKwrJ,iBAAmB,GAAIr4C,GAAAloF,UACrBjrB,KAAK45G,KAAI,mBACZh4G,EAAAkwD,uBAAuBgoD,iBAAiB95G,OAG5CkD,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKurJ,UAAY/tI,EAAKU,aAAa,aAAeV,EAAKe,aAAa,aAAe,cAEnFve,KAAK4rJ,uBAAyB5rJ,KAAK4rJ,uBAAuB/3I,KAAK7T,MAG/DwC,EAAA+B,WAAWoJ,WAAW+F,GAAGs3I,EAAAa,qBAAqBC,OAAQ9rJ,KAAK4rJ,yBAGvDqE,2BAAAnvJ,UAAA8qJ,uBAAR,WACSv9I,EAAA0B,cAAc8nE,iBAQnBr1E,EAAA+B,WAAWoJ,WAAWs+I,aAAajsJ,KAAKurJ,UAAW,GACnD/oJ,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,2BAG9CtrJ,OAAAkD,eAAcksJ,2BAAAnvJ,UAAA,mBxIgluCTkD,IwIhluCL,WACI,MAAOhE,MAAKwrJ,kBxIkluCXtnJ,YAAY,EACZC,cAAc,IwIhluCZ8rJ,2BAAAnvJ,UAAAqrJ,sBAAP,WACI,MAAOnsJ,MAAKwrJ,iBAAiBzxC,iBAGjCk2C,2BAAAnvJ,UAAAq8G,gBAAA,WACIj6G,EAAApC,UAAMq8G,gBAAe18G,KAAAT,MACrBA,KAAKqsJ,gBAAgBlvC,iBAAgBpxF,KACjCA,EAAC8+H,EAAAvgC,gBAAgBgiC,SAAS,EAC1BvgI,EAAC8+H,EAAAvgC,gBAAgBiiC,cAAc,EAC/BxgI,EAAC8+H,EAAAvgC,gBAAgBkiC,mBAAmB,EACpCzgI,EAAC8+H,EAAAvgC,gBAAgB4lC,aAAa,EAC9BnkI,EAAC8+H,EAAAvgC,gBAAgB6lC,cAAc,EAC/BpkI,EAAC8+H,EAAAvgC,gBAAgBmiC,cAAc,ExIkluC9B1gI,GAEJ,IAAIA,IwIhluCTkkI,2BAAAnvJ,UAAA02D,eAAA,SAAesmB,GACPA,IAAW+sE,EAAAvgC,gBAAgBkiC,kBACvBxsJ,KAAKy2E,QAAQ6mC,eAAeiN,EAAAZ,cAAcK,uBAC1ClsC,EAASysC,EAAAZ,cAAcK,qBAI3BlsC,IAAW+sE,EAAAvgC,gBAAgBmiC,aACvBzsJ,KAAKy2E,QAAQ6mC,eAAeiN,EAAAZ,cAAcC,qBAC1C9rC,EAASysC,EAAAZ,cAAcC,mBAI3B9rC,IAAW+sE,EAAAvgC,gBAAgB4lC,YACvBlwJ,KAAKy2E,QAAQ6mC,eAAeiN,EAAAZ,cAAcE,mBAC1C/rC,EAASysC,EAAAZ,cAAcE,iBAI3B/rC,IAAW+sE,EAAAvgC,gBAAgB6lC,aACvBnwJ,KAAKy2E,QAAQ6mC,eAAeiN,EAAAZ,cAAcG,qBAC1ChsC,EAASysC,EAAAZ,cAAcG,mBAI/B5mH,EAAApC,UAAM02D,eAAc/2D,KAAAT,KAAC89E,IAGzBmyE,2BAAAnvJ,UAAAsrH,oBAAA,WAGI,GAFAlpH,EAAApC,UAAMsrH,oBAAmB3rH,KAAAT,OAEpB4C,EAAA4F,YAAYq/D,UAAW,CACxB,GAAI6kD,IAAqB,CACmB,KAAxC/pH,EAAAmG,YAAY2kE,eAAe4+C,WAC3BK,GAAY,GAGhB1sH,KAAKqsJ,gBAAgBnuC,oBAAmBnyF,KACpCA,EAAC8+H,EAAAvgC,gBAAgBkiC,mBAAmB,EACpCzgI,EAAC8+H,EAAAvgC,gBAAgB4lC,aAAcxjC,EAC/B3gG,EAAC8+H,EAAAvgC,gBAAgB6lC,cAAezjC,EAChC3gG,EAAC8+H,EAAAvgC,gBAAgBmiC,cAAc,ExI4kuC9B1gI,IwIxkuCTvpB,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,wBxI4kuCzC,IAAIpgI,IwIzkuCTkkI,2BAAAnvJ,UAAA27E,UAAA,WACIj6E,EAAA+B,WAAWoJ,WAAWs+I,aAAajsJ,KAAKurJ,UAAW,GAEnDroJ,EAAApC,UAAM27E,UAASh8E,KAAAT,OAGnBiwJ,2BAAAnvJ,UAAA88E,MAAA,WACIp7E,EAAA+B,WAAWoJ,WAAWs+I,aAAajsJ,KAAKurJ,UAAW,GAEnDroJ,EAAApC,UAAM88E,MAAKn9E,KAAAT,OAGfiwJ,2BAAAnvJ,UAAA+8E,MAAA,WACI36E,EAAApC,UAAM+8E,MAAKp9E,KAAAT,OAGfiwJ,2BAAAnvJ,UAAA8iG,cAAA,WACI1gG,EAAApC,UAAM8iG,cAAanjG,KAAAT,MACnB2C,EAAAmG,YAAY6vE,oBAAqB,GAGrCs3E,2BAAAnvJ,UAAAozE,QAAA,WACIvxE,EAAAmG,YAAY6vE,oBAAqB,EACjCz1E,EAAApC,UAAMozE,QAAOzzE,KAAAT,MACb4C,EAAA4F,YAAY8nE,UAAU,+BAG1B2/E,2BAAAnvJ,UAAAqU,MAAA,WACS9G,EAAA0B,cAAcwuE,oBACf37E,EAAA4F,YAAY8nE,UAAU,oBAE1BptE,EAAApC,UAAMqU,MAAK1U,KAAAT,OAGfiwJ,2BAAAnvJ,UAAAwrH,MAAA,WACIppH,EAAApC,UAAMwrH,MAAK7rH,KAAAT,MACX4C,EAAA4F,YAAY8nE,UAAU,wBAG1B2/E,2BAAAnvJ,UAAAyrH,OAAA,SAAO9lH,GACH9D,EAAAmG,YAAY6vE,oBAAqB,EACjCz1E,EAAApC,UAAMyrH,OAAM9rH,KAAAT,KAACyG,GACb7D,EAAA4F,YAAY8nE,UAAU,wBAG1B2/E,2BAAAnvJ,UAAAirH,KAAA,WACInpH,EAAA4F,YAAY8nE,UAAU,sBACtB1tE,EAAA4F,YAAY8nE,UAAU,aACtBptE,EAAApC,UAAMirH,KAAItrH,KAAAT,OAGdiwJ,2BAAAnvJ,UAAAoxF,cAAA,WACIhvF,EAAApC,UAAMoxF,cAAazxF,KAAAT,MACnB4C,EAAA4F,YAAY8nE,UAAU,yBAG1B2/E,2BAAAnvJ,UAAA2qH,cAAA,WACIvoH,EAAApC,UAAM2qH,cAAahrH,KAAAT,MACnB4C,EAAA4F,YAAY8nE,UAAU,yBAG1B2/E,2BAAAnvJ,UAAAyqH,eAAA,WACIroH,EAAApC,UAAMyqH,eAAc9qH,KAAAT,MACpB4C,EAAA4F,YAAY8nE,UAAU,wBAClB3tE,EAAAmG,YAAYsvD,aAAa8Q,SAAW,GACpCtmE,EAAA4F,YAAY8nE,UAAU,yBAI9B2/E,2BAAAnvJ,UAAAwzE,gBAAA,WACI1xE,EAAA4F,YAAY8nE,UAAU,sBACtB1tE,EAAA4F,YAAY8nE,UAAU,aACtBptE,EAAApC,UAAMwzE,gBAAe7zE,KAAAT,OAGzBiwJ,2BAAAnvJ,UAAAqmG,MAAA,WACIjkG,EAAApC,UAAMqmG,MAAK1mG,KAAAT,MAEXA,KAAKqsJ,gBAAgBnuC,oBAAmBnyF,KACpCA,EAAC8+H,EAAAvgC,gBAAgBkiC,mBAAmB,EACpCzgI,EAAC8+H,EAAAvgC,gBAAgB4lC,aAAa,EAC9BnkI,EAAC8+H,EAAAvgC,gBAAgB6lC,cAAc,EAC/BpkI,EAAC8+H,EAAAvgC,gBAAgBmiC,cAAc,ExI4juC9B1gI,IwIzjuCLvpB,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,wBxI4juCzC,IAAIpgI,IwIzjuCTkkI,2BAAAnvJ,UAAAw8E,QAAA,WACIp6E,EAAApC,UAAMw8E,QAAO78E,KAAAT,MAEbA,KAAKqsJ,gBAAgB7uC,oBACrBh7G,EAAA+B,WAAWoJ,WAAWu+I,eAAelsJ,KAAKmsJ,0BAvMlD8D,2BAAA50I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,cxIqwuCxBulI,6BwIpwuCwC/M,EAAAx4B,mBAAnCrqH,GAAA4vJ,2BAA0BA,GxI4wuCjC,SAAS3vJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GyIvyuCjE5Z,EAAAzB,EAA6C,GAC7C6B,EAAA7B,EAAiE,GACjEyS,EAAAzS,EAA2E,GAC3E0b,EAAA1b,EAA+B,IAC/B6xF,EAAA7xF,EAA4B,IAC5Bo5G,EAAAp5G,EAA6B,IAC7BuC,EAAAvC,EAA+B,IAC/BwC,EAAAxC,EAA4B,IAC5BsyE,EAAAtyE,EAAyB,IACzBsC,EAAAtC,EAAyB,IACzB4vH,EAAA5vH,EAA4B,IAC5B6vH,EAAA7vH,EAA+B,IAC/BqC,EAAArC,EAA2B,GAC3B2kE,EAAA3kE,EAA2B,IAC3BkO,EAAAlO,EAA8B,IAC9ByC,EAAAzC,EAA4B,IAC5B0gF,EAAA1gF,EAAyB,IACzB4kE,EAAA5kE,EAA+B,IAC/BoyE,EAAApyE,EAA4B,IAC5BiyE,EAAAjyE,EAAmC,IACnC2C,EAAA3C,EAA+B,IAC/B0S,EAAA1S,EAAwB,IACxB44E,EAAA54E,EAAuC,IACvCwkF,EAAAxkF,EAAqC,IACrCykF,EAAAzkF,EAAmC,IAE/B2P,EAAc9N,EAAAiD,cAAcC,KAAK4K,YAGrCsgJ,EAAA,SAAAltJ,GAA4C3B,EAAA6uJ,uBAAAltJ,EAsBxC,SAAAktJ,0BACIltJ,EAAAzC,KAAAT,KAAM,QAZFA,KAAAkwH,iBAA2B,EAC3BlwH,KAAAmwH,eAAyB,EAEzBnwH,KAAAowH,iBAA2B,EAM3BpwH,KAAAqwH,WAAqB,EA0jCjC,MApjCI+/B,wBAAAtvJ,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKm9G,kBAELn9G,KAAKswH,eAAiB19G,EAAAa,iBAAiB,iBACvCzT,KAAKswH,eAAe58G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKosH,oBAAoBv4G,KAAK7T,OAEhFA,KAAKuwH,eAAiB39G,EAAAa,iBAAiB,iBACvCzT,KAAKuwH,eAAe78G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKwwH,gBAAgB38G,KAAK7T,OAE5EA,KAAKywH,oBAAsB79G,EAAAa,iBAAiB,sBAC5CzT,KAAKywH,oBAAoB/8G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK0wH,mBAAmB78G,KAAK7T,OAEpFA,KAAK2wH,cAAgBznH,SAASC,eAAe,gBAC7CnJ,KAAK4wH,gBAAkB1nH,SAASC,eAAe,yBAE/CnJ,KAAKqwJ,aAAennJ,SAASC,eAAe,eACnB,MAArBnJ,KAAKqwJ,cAAyBrwJ,KAAKqwJ,aAAahnJ,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAClFzhF,KAAKqwJ,aAAahnJ,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAEnDzhF,KAAK6wH,qBAAuBj+G,EAAAa,iBAAiB,uBAC7CzT,KAAK6wH,qBAAqBn9G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKosH,oBAAoBv4G,KAAK7T,OAEtFA,KAAK8wH,uBAAyBl+G,EAAAa,iBAAiB,yBAC/CzT,KAAK8wH,uBAAuBp9G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK+wH,sBAAsBl9G,KAAK7T,QAG9FowJ,uBAAAtvJ,UAAA07E,cAAA,SAAcyV,GACVjyF,KAAKmrH,YAAcl5B,EACnBjyF,KAAKmrH,YAAYz3G,GAAGs8G,EAAAgB,eAAeC,aAAcjxH,KAAKsyF,aAAaz+E,KAAK7T,OACxEA,KAAKmrH,YAAYz3G,GAAGs8G,EAAAgB,eAAeE,eAAgBlxH,KAAKmxH,eAAet9G,KAAK7T,OAC5EA,KAAKmrH,YAAYz3G,GAAGs8G,EAAAgB,eAAetF,uBAAwB1rH,KAAK2rH,uBAAuB93G,KAAK7T,OAC5FA,KAAKmrH,YAAYz3G,GAAGs8G,EAAAgB,eAAepF,gBAAiB5rH,KAAK6rH,gBAAgBh4G,KAAK7T,OAC9EA,KAAKmrH,YAAYz3G,GAAGs8G,EAAAgB,eAAehF,cAAehsH,KAAKykG,cAAc5wF,KAAK7T,OAC1EA,KAAKmrH,YAAYz3G,GAAGs8G,EAAAgB,eAAe/E,cAAejsH,KAAK4jG,cAAc/vF,KAAK7T,OAC1EA,KAAKmrH,YAAYz3G,GAAGs8G,EAAAgB,eAAeI,4BAA6BpxH,KAAKqxH,4BAA4Bx9G,KAAK7T,QAG1GowJ,uBAAAtvJ,UAAAq8G,gBAAA,WACIn9G,KAAKy2E,QAAQ0mC,iBAAgBpxF,KACzBA,EAACimE,EAAAS,YAAYM,iBAAiB,EAC9BhnE,EAACimE,EAAAS,YAAYO,qBAAqB,EAClCjnE,EAACimE,EAAAS,YAAYY,oBAAoB,EACjCtnE,EAACimE,EAAAS,YAAYU,iBAAiB,EAC9BpnE,EAACimE,EAAAS,YAAYQ,gBAAgB,EAC7BlnE,EAACimE,EAAAS,YAAYS,iBAAiB,EAC9BnnE,EAACimE,EAAAS,YAAYC,aAAa,EAC1B3mE,EAACimE,EAAAS,YAAYK,iBAAiB;AzI6wuC7B/mE,IyI1wuCoB,MAArB/rB,KAAKqwJ,cAAyBrwJ,KAAKqwJ,aAAahnJ,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAClFzhF,KAAKqwJ,aAAahnJ,UAAUC,IAAI5G,EAAAyF,eAAes5E,czI8wuClD,IAAI11D,IyI1wuCTqkI,uBAAAtvJ,UAAAizE,aAAA,WACI/zE,KAAKsxH,sBAAwBpoH,SAASC,eAAe,wBAErDjG,EAAApC,UAAMizE,aAAYtzE,KAAAT,MAElBA,KAAKmrH,YAAYp3C,eAEjB/zE,KAAKuxH,UAAY,GAAI9+C,GAAAY,SACrBrzE,KAAKuxH,UAAU1tH,aAEiB,MAA5BlB,EAAAmG,YAAYsvD,eACNt1D,EAAAuC,eAAe4jE,OAAyC,eAAhCnmE,EAAAuC,eAAe0iE,cACzCnlE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAAS45D,aACT3/D,EAAAmG,YAAYsvD,aAAa8Q,SAASn7D,aAKpB,MAAtB/N,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAIlB,MAA9BzhF,KAAKsxH,uBACJtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE9DzhF,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAG5D7+E,EAAA4F,YAAYkgE,sBAGhB0nF,uBAAAtvJ,UAAAwzE,gBAAA,WA8BI,GA7BAxxE,EAAAuC,eAAeu1E,WACf54E,EAAAqC,UAAUA,UAAU6nH,YAChB3rH,GAAIoC,EAAAmG,YAAYsvD,aAAauQ,QAC7BwH,IAAKnwE,KAAKmwH,eACVhE,aAAc7tG,WAAW1b,EAAA4F,YAAY0rD,YAAYzxD,EAAAiG,SAASs5D,qBAE9DhgE,EAAAqC,UAAUA,UAAUs8E,gBAAiB1iD,OAAQt7B,EAAAmG,YAAYsvD,aAAakQ,QAAQgN,OAE9EpyE,EAAApC,UAAMwzE,gBAAe7zE,KAAAT,MAErBA,KAAKkwH,iBAAkB,EACvBttH,EAAA4F,YAAYypE,aAAc,EAC1BrvE,EAAA4F,YAAYkgE,qBAEZ1oE,KAAKosH,sBAED5pH,EAAA+B,WAAWC,kBAAkBygG,0BAA4BjlG,KAAKmwH,eAAiB,GAC/EvtH,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAActiE,KAAKmwH,eAAepiH,YACzE/N,KAAK26G,cAAa,KAEZ73G,EAAAuC,eAAe4jE,OAAyC,eAAhCnmE,EAAAuC,eAAe0iE,cACzCnlE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAAc,KAEzDtiE,KAAK26G,gBAET36G,KAAKywH,oBAAoBv7G,OAEzBlV,KAAKmwH,eAAiB,EAElBrtH,EAAAuC,eAAeyiE,UAGf,MAFAhlE,GAAAuC,eAAemhF,oBACfn4E,GAAA0B,cAAcmoE,eAKtBk4E,uBAAAtvJ,UAAAg1E,iBAAA,SAAiB5B,GAAA,SAAAA,OAAA,GACbhxE,EAAApC,UAAMwzE,gBAAe7zE,KAAAT,MACrBA,KAAK26G,aAAazmC,GAElBpxE,EAAAuC,eAAeu1E,WAEfh4E,EAAA4F,YAAYypE,aAAc,EAEC,GAAvBjyE,KAAKmwH,gBACLnwH,KAAKmrH,YAAY/yC,mBAErBp4E,KAAKosH,uBAGTgkC,uBAAAtvJ,UAAAwxF,aAAA,WACIxvF,EAAAuC,eAAe4gF,UAEXrjF,EAAA4F,YAAY29D,oBAEZnmE,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYK,gBAAgB,GAC3DpwF,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCr3G,EAAAyF,eAAewsF,iBAAiB,IAChC/xF,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASm5D,aACvC7hE,KAAKmrH,YAAYj2G,SAEjBlV,KAAKy2E,QAAQ4mC,kBACTrrB,EAAAS,YAAYK,eACZtwF,EAAA+B,WAAWC,kBAAkB8hE,qBAEjC5jE,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCn3G,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASm5D,eAI/CuuF,uBAAAtvJ,UAAA02D,eAAA,SAAesmB,GACX,IAAIzvE,EAAA0B,cAAc8nE,iBAAkBxpE,EAAA0B,cAAc0lE,kBAAlD,CAIA,GAAIqI,IAAWiyC,EAAA9F,YAAYC,iBACvB,GAAIlqH,KAAKy2E,QAAQ6mC,eAAetrB,EAAAS,YAAYC,YACxC5U,EAASkU,EAAAS,YAAYC,eAClB,KAAI1yF,KAAKy2E,QAAQ6mC,eAAetrB,EAAAS,YAAYK,gBAG/C,MAFAhV,GAASkU,EAAAS,YAAYK,eAM7B,GAAI9yF,KAAKy2E,QAAQ6mC,eAAex/B,GAU5B,OATIA,IAAWkU,EAAAS,YAAYY,kBACvBrzF,KAAK26G,cAAa,GAElB36G,KAAK26G,eAGT95B,EAAAl2D,SAASoS,KAAK,aACd75B,EAAApC,UAAM02D,eAAc/2D,KAAAT,KAAC89E,GAEbA,GACJ,IAAKkU,GAAAS,YAAYC,WACb1yF,KAAKmyF,MACL,MACJ,KAAKH,GAAAS,YAAYK,eACb9yF,KAAKkV,MACL,MACJ,KAAK88E,GAAAS,YAAYM,eACb/yF,KAAKwxH,UACL,MACJ,KAAKx/B,GAAAS,YAAYO,mBACbhzF,KAAKyxH,cACL,MACJ,KAAKz/B,GAAAS,YAAYU,eACbnzF,KAAK06E,WAAU,GAAO,GAAO,EAC7B,MACJ,KAAKsX,GAAAS,YAAYQ,cACbjzF,KAAK06E,WAAU,GAAO,GAAO,EAC7B,MACJ,KAAKsX,GAAAS,YAAYS,eACblzF,KAAK06E,WAAU,GAAM,GAAO,EAC5B,MACJ,KAAKsX,GAAAS,YAAYY,kBACbrzF,KAAKk0E,aAMrBk8E,uBAAAtvJ,UAAAozE,QAAA,WACSl0E,KAAKkwH,iBAC0B,MAA5BvtH,EAAAmG,YAAYmnE,cAAwBttE,EAAAmG,YAAYmnE,aAAa4iB,WAAa,GAC1E7wF,EAAAqC,UAAUA,UAAU8rE,IAAIxtE,EAAAmG,YAAYmnE,aAAa4iB,YAIzD3vF,EAAApC,UAAMozE,QAAOzzE,KAAAT,MAEbqO,EAAA0B,cAAcooE,gBACdn4E,KAAKs9E,UACLt9E,KAAK06G,mBAEL16G,KAAKmrH,YAAYj3C,UAEjB3B,EAAAsD,YAAYte,cACZ50D,EAAAmG,YAAYorE,QAAQpkE,EAAY8lE,MAE1B9yE,EAAAuC,eAAe4jE,OAAyC,eAAhCnmE,EAAAuC,eAAe0iE,cACzCnlE,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS45D,aACR9/D,EAAA+B,WAAW2B,eAAeiuE,OAAen0E,KAAKmwH,eAAepiH,WAA1B,MAMhDqiJ,uBAAAtvJ,UAAA4vH,mBAAA,WACI9tH,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAAc,MAGzD8tF,uBAAAtvJ,UAAAqxF,KAAA,WAII,GAHAnyF,KAAKowH,iBAAkB,EAEvBttH,EAAAuC,eAAekuE,YACXzwE,EAAAuC,eAAe0iF,oBAOf,YANIplF,EAAAmG,YAAYsvD,aAAa8Q,SAAW,IAAMtmE,EAAA4F,YAAYk/D,iBACtD1nE,KAAK26G,cAAa,GAClB36G,KAAKk0E,WAELpxE,EAAAuC,eAAeu1E,WAKvB,KAAI56E,KAAK0xH,uBAAT,CAIA,GACIt/C,EAAA2F,mBAAmBC,mCACjBl1E,EAAAuC,eAAe4jE,OAAyC,eAAhCnmE,EAAAuC,eAAe0iE,cAUzC,YARIplE,EAAAmG,YAAYsvD,aAAa8Q,SAAW,GACpClpE,KAAK26G,cAAa,GAClB36G,KAAKk0E,YAELvxE,EAAAmG,YAAYsrE,UACZp0E,KAAK26G,gBAMb,IAAI5hC,EAAAoB,uBAAuBiV,gBAMvB,MALIzsF,GAAAmG,YAAYsvD,aAAa8Q,SAAW,IACpClpE,KAAK26G,cAAa,GAClB36G,KAAKk0E,eAET6E,GAAAoB,uBAAuBziB,YAI3B,IAAI+a,EAAAY,SAASynB,YAAW,GAAM,GAO1B,YANIn4F,EAAAmG,YAAYsvD,aAAa8Q,SAAW,GACpClpE,KAAK26G,cAAa,GAClB36G,KAAKk0E,WAELzB,EAAAY,SAASvf,OAKjB,MACKlxD,EAAA4F,YAAYiH,UACZzP,KAAKkwH,iBACLttH,EAAA4F,YAAYk/D,kBACbllE,EAAA+B,WAAWC,kBAAkBygG,yBAI7B,MAFAjlG,MAAK26G,cAAa,OAClB36G,MAAKk0E,SAWT,IARIl0E,KAAK26G,eACA36G,KAAKkwH,iBAC0B,MAA5BvtH,EAAAmG,YAAYmnE,cAAwBttE,EAAAmG,YAAYmnE,aAAa4iB,WAAa,GAC1E7wF,EAAAqC,UAAUA,UAAU8rE,IAAIxtE,EAAAmG,YAAYmnE,aAAa4iB,YAKzDlwF,EAAAmG,YAAYsvD,aAAa8Q,SAAW,IAAMtmE,EAAA4F,YAAYk/D,gBAAiB,CACvE,GAAMiqD,GAAerzG,WAAW1b,EAAA4F,YAAY0rD,YAAYzxD,EAAAiG,SAASs5D,mBAC3DmqD,EAAe7tG,WAAW1c,EAAAyL,YAAY/D,IAAI3G,EAAAmG,YAAYsvD,aAAa8Q,SAAUyoD,GACnF3vH,GAAAqC,UAAUA,UAAU6nH,YAChB3rH,GAAIoC,EAAAmG,YAAYsvD,aAAauQ,QAC7BwH,IAAKxtE,EAAAmG,YAAYsvD,aAAa8Q,SAC9BijD,aAAcA,EACdyF,QAAQ,IAIhB,IAAK5vH,EAAAqC,UAAUA,UAAUilH,iBAIrB,MAHAtpH,MAAKyxH,eACLzxH,KAAK26G,cAAa,OAClB36G,MAAKk0E,SAIT,KAAKnP,EAAAiD,eAAe+X,WAAU,GAAO,GAIjC,MAHAn9E,GAAA4F,YAAYiH,UAAW,EACvBpB,EAAA0B,cAAcooE,oBACdn4E,MAAKosH,qBAITxpH,GAAA4F,YAAYypE,aAAc,EAC1B5jE,EAAA0B,cAAcooE,gBACdn4E,KAAKy2E,QAAQ+mC,oBACY,MAArBx9G,KAAKqwJ,cAAyBrwJ,KAAKqwJ,aAAahnJ,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAClFzhF,KAAKqwJ,aAAahnJ,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAE/C7+E,EAAA4F,YAAYiH,YAEP7M,EAAA4F,YAAY68D,iBACe,MAA5B1iE,EAAAmG,YAAYmnE,cACyB,MAArCttE,EAAAmG,YAAYmnE,aAAa/G,UACzBvmE,EAAAmG,YAAYmnE,aAAa/G,SAAW,GAEpCtmE,EAAA4F,YAAY0nE,gBAAgBvtE,EAAAmG,YAAYmnE,aAAa/G,UAEzDtmE,EAAA4F,YAAY0nE,kBACZlwE,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYO,mBAAoBpwF,EAAA4F,YAAYw9D,oBAE/EtjE,EAAAyF,eAAewsF,iBAAiB,IAChCjyF,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzC/5G,KAAK06G,mBAEL93G,EAAA4F,YAAY6gE,iBAAgB,GAC5BtE,EAAAiD,eAAewX,eACV58E,EAAA4F,YAAYk/D,iBAAoB5kE,EAAAuC,eAAe4jE,OAAyC,eAAhCnmE,EAAAuC,eAAe0iE,eACxEnlE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,cAE3CtiE,KAAKmrH,YAAYh5B,OAEjB5f,EAAAsD,YAAYte,cAEZv3D,KAAKkwH,iBAAkB,EAEvBluH,EAAAqC,UAAUA,UAAUkuF,cAChB9Y,SAAU3U,EAAAqD,WAAWK,IACrBgqB,UAAW1vF,EAAAuC,eAAe4jE,MAC1BvkE,WAAY9B,EAAA4F,YAAYonE,qBAAqBoiB,EAAAS,YAAYC,cAE7D1wF,EAAAqC,UAAUA,UAAUwtH,cACpB7vH,EAAAqC,UAAUA,UAAUs8E,gBAAiB1iD,OAAQ3f,WAAW1b,EAAA4F,YAAY0rD,YAAYzxD,EAAAiG,SAASs5D,uBAG7FouF,uBAAAtvJ,UAAAoU,KAAA,WACIlV,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYK,gBAAgB,GAC3DpwF,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCr3G,EAAAyF,eAAewsF,iBAAiB,IAChC/xF,EAAA4F,YAAYu+D,mBACZ/mE,KAAKmrH,YAAYj2G,QAGrBk7I,uBAAAtvJ,UAAA0vH,gBAAA,WACIxwH,KAAKuwH,eAAer7G,OAChBtS,EAAA4F,YAAYiH,SACZzP,KAAKwxH,WAELxxH,KAAKosH,uBAIbgkC,uBAAAtvJ,UAAA0wH,SAAA,WACIxxH,KAAKswH,eAAep7G,OAEhBlV,KAAK0xH,yBAIyB,MAA9B9uH,EAAA4F,YAAYi9D,eACZ7iE,EAAA4F,YAAYiH,UAAW,EACvB7M,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASu6D,kBAAmBrgE,EAAA4F,YAAYi9D,eACtEzlE,KAAKmyF,SAELvvF,EAAA4F,YAAYi9D,eAAiB/vD,SAAS9S,EAAA4F,YAAYi9D,eAAiB,GAAG13D,WAClE2H,SAAS9S,EAAA4F,YAAYi9D,gBAAkB,GACvC7iE,EAAA4F,YAAYiH,UAAW,EACvB7M,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASu6D,kBAAmBrgE,EAAA4F,YAAYi9D,eACtEzlE,KAAKmyF,SAELvvF,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKosH,0BAKjBgkC,uBAAAtvJ,UAAA2wH,aAAA,WACI7uH,EAAA4F,YAAYiH,UAAW,EAEvBzN,EAAAqC,UAAUA,UAAUotH,eAEhBzxH,KAAKowH,iBACDxtH,EAAA4F,YAAYk/D,kBACZ5kE,EAAAuC,eAAeu1E,WACf54E,EAAAqC,UAAUA,UAAU6nH,aAChBppH,EAAAuC,eAAeyiE,YACfhlE,EAAAuC,eAAemhF,gBACfn4E,EAAA0B,cAAcmoE,gBAK1Bl4E,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYO,oBAAoB,GAC/DtwF,EAAAyF,eAAeqvF,oBAAoBxF,EAAAS,YAAYO,oBAAoB,IAGvEo9D,uBAAAtvJ,UAAA45E,UAAA,SAAUC,EAA2B/7C,EAAsB5N,GAAjD,SAAA2pD,OAAA,GAA2B,SAAA/7C,OAAA,GAAsB,SAAA5N,OAAA,GAClDpuB,EAAA4F,YAAYk/D,iBAMb1nE,KAAKmrH,YAAYj3C,UACjBtxE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAAc,KACrD1/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASq5D,kBACvCn/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASo5D,iBACvCl/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASs5D,kBACvCuQ,EAAAsD,YAAYte,gBAVZv3D,KAAKmwH,eAAiB,EACtBvtH,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAAc,KACrDtiE,KAAK26G,eACL36G,KAAKk0E,WASTpP,EAAAqD,WAAWuS,UAAUC,EAAU/7C,EAAK5N,GACpChxB,KAAKuxH,UAAUl7B,mBAEXvxB,EAAAqD,WAAWyT,QACX57E,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYS,gBAAgB,GAC3DxwF,EAAAyF,eAAeqvF,oBAAoBxF,EAAAS,YAAYS,gBAAgB,GAC/DlzF,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYQ,eAAe,GAC1DvwF,EAAAyF,eAAeqvF,oBAAoBxF,EAAAS,YAAYQ,eAAe,IACvDnuB,EAAAqD,WAAW0T,QAClB77E,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYQ,eAAe,GAC1DvwF,EAAAyF,eAAeqvF,oBAAoBxF,EAAAS,YAAYQ,eAAe,GAC9DjzF,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYS,gBAAgB,GAC3DxwF,EAAAyF,eAAeqvF,oBAAoBxF,EAAAS,YAAYS,gBAAgB,KAE/DlzF,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYQ,eAAe,GAC1DvwF,EAAAyF,eAAeqvF,oBAAoBxF,EAAAS,YAAYQ,eAAe,GAC9DjzF,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYS,gBAAgB,GAC3DxwF,EAAAyF,eAAeqvF,oBAAoBxF,EAAAS,YAAYS,gBAAgB,KAIvEk9D,uBAAAtvJ,UAAAqwH,eAAA,SAAea,GAOX,MANAhyH,MAAKowH,iBAAkB,EACvBpuH,EAAAqC,UAAUA,UAAU4tH,YAEpBrvH,EAAA4F,YAAYunE,0BACZntE,EAAA4F,YAAY6nE,yBAERztE,EAAA4F,YAAYk/D,iBAAyD,IAAtC/kE,EAAAmG,YAAYmnE,aAAa/G,WACxDpmE,EAAAuC,eAAeu1E,WACf54E,EAAAqC,UAAUA,UAAU6nH,YAChB3rH,GAAIoC,EAAAmG,YAAYsvD,aAAauQ,QAC7BwH,IAAKxtE,EAAAmG,YAAYsvD,aAAa8Q,SAC9BijD,aAAc7tG,WAAW1b,EAAA4F,YAAY0rD,YAAYzxD,EAAAiG,SAASs5D,qBAE1Dl/D,EAAAuC,eAAeyiE,YACfhlE,EAAAuC,eAAemhF,oBACfn4E,GAAA0B,cAAcmoE,gBAKtBl4E,KAAKywH,oBAAoBv7G,OACzBlV,KAAKmwH,eAAiBxtH,EAAAmG,YAAYsvD,aAAa8Q,SAE3C76D,EAAA0B,cAAc8nE,mBACd73E,MAAKs9E,UAILjvE,EAAA0B,cAAc2lE,eACd5yE,EAAAuC,eAAekuE,gBACfvzE,MAAKs9E,YAIL16E,EAAA4F,YAAYiH,UACsB,MAA9B7M,EAAA4F,YAAYi9D,gBACZ7iE,EAAA4F,YAAYiH,UAAW,GAIW,IAAtC9M,EAAAmG,YAAYmnE,aAAa/G,UACzBlpE,KAAKkwH,iBAAkB,EACvBttH,EAAA4F,YAAYypE,aAAc,GAE1BjyE,KAAKkwH,iBAAkB,EAG3B7hH,EAAA0B,cAAc8sE,eACd78E,KAAKy2E,QAAQ4mC,kBAAkBrrB,EAAAS,YAAYK,gBAAgB,GAC3D9yF,KAAKswH,eAAep7G,OAChB88G,EACAhyH,KAAKswH,eAAen7G,MAAM,IAEtBxS,EAAAmG,YAAYmnE,aAAa/G,SAAW,EACpClpE,KAAKswH,eAAen7G,MAAM,IAE1BnV,KAAKosH,sBAIb1pH,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBAErCn3G,EAAA4F,YAAYiH,UAAkD,IAAtC9M,EAAAmG,YAAYmnE,aAAa/G,UACjDlpE,KAAKuwH,eAAep7G,MAAM,IAG1BvS,EAAA4F,YAAYk/D,iBAAmB/kE,EAAAmG,YAAYmnE,aAAa/G,SAAW,GAC/DpmE,EAAAuC,eAAeyiE,cACf9nE,MAAKw9G,oBAMT16G,EAAAuC,eAAeyiE,WAA6C,eAAhChlE,EAAAuC,eAAe0iE,eAEtCnlE,EAAA4F,YAAYk/D,iBACb/kE,EAAAmG,YAAYmnE,aAAa/G,SAAW,GACI,IAAxCvmE,EAAAmG,YAAYmnE,aAAa4iB,YAEzB7yF,KAAKmrH,YAAY/yC,uBACjBp4E,MAAKk0E,gBAKTpxE,EAAAuC,eAAe4jE,OAAyC,eAAhCnmE,EAAAuC,eAAe0iE,cACnCnlE,EAAA4F,YAAYk/D,iBACZ/kE,EAAAmG,YAAYsrE,cAKxBg8E,uBAAAtvJ,UAAAuwH,4BAAA,WACoC,MAA5B1uH,EAAAmG,YAAYmnE,cAAwBttE,EAAAmG,YAAYmnE,aAAa4iB,WAAa,IAAM7yF,KAAKkwH,iBACrFluH,EAAAqC,UAAUA,UAAU8rE,IAAIxtE,EAAAmG,YAAYmnE,aAAa4iB,YAGrD7yF,KAAKkwH,iBAAkB,EACvBttH,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,eAG3C8tF,uBAAAtvJ,UAAA6qH,uBAAA,WASI,GARI/oH,EAAA4F,YAAYk/D,iBACZ1lE,EAAAqC,UAAUA,UAAU6nH,YAChB3rH,GAAIoC,EAAAmG,YAAYsvD,aAAauQ,QAC7BwH,IAAKxtE,EAAAmG,YAAYsvD,aAAa8Q,SAC9BijD,aAAc7tG,WAAW1b,EAAA4F,YAAY0rD,YAAYzxD,EAAAiG,SAASs5D,qBAI9D3zD,EAAA0B,cAAc8nE,eAEd,WADA73E,MAAKs9E,SAIT,IAAIjvE,EAAA0B,cAAcylE,mBAEd,WADA5yE,GAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAI3C,KAAIj0D,EAAA0B,cAAc2lE,cAclB,GAVA11E,KAAKswH,eAAep7G,OAEpBtS,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,eACnC1/D,EAAA4F,YAAYk/D,iBAAqB5kE,EAAAuC,eAAe4jE,OAAyC,eAAhCnmE,EAAAuC,eAAe0iE,cACxEnlE,EAAA4F,YAAYkgE,qBAEhBr6D,EAAA0B,cAAc8sE,eACdj6E,EAAA4F,YAAYypE,aAAc,EAC1BjyE,KAAKosH,sBAEDxpH,EAAA4F,YAAYk/D,iBAAmB/kE,EAAAmG,YAAYmnE,aAAa/G,SAAW,GAInE,GAHK76D,EAAA0B,cAAc2sE,iBACf55E,EAAAuC,eAAeu1E,WAEf93E,EAAAuC,eAAeyiE,UAEf,WADA9nE,MAAKw9G,wBAIT16G,GAAAuC,eAAemjF,uBAIvB4nE,uBAAAtvJ,UAAA+qH,gBAAA,WASI,MARA/oH,GAAAuC,eAAemjF,sBAEiB,MAA5B7lF,EAAAmG,YAAYmnE,cAAwBttE,EAAAmG,YAAYmnE,aAAa4iB,WAAa,IAAM7yF,KAAKkwH,iBACrFluH,EAAAqC,UAAUA,UAAU8rE,IAAIxtE,EAAAmG,YAAYmnE,aAAa4iB,YAGrD7yF,KAAKkwH,iBAAkB,EAEnB7hH,EAAA0B,cAAc8nE,mBACd73E,MAAKs9E,UAILjvE,EAAA0B,cAAcylE,uBACdnnE,GAAA0B,cAAcqtE,kBAId/uE,EAAA0B,cAAc2lE,eACdrnE,EAAA0B,cAAcstE,iBACdr9E,MAAKs9E,YAITt9E,KAAKswH,eAAep7G,OACpBlV,KAAKosH,sBACL/9G,EAAA0B,cAAc8sE,eACVj6E,EAAA4F,YAAYiH,UAAYzP,KAAKy2E,QAAQ6mC,eAAetrB,EAAAS,YAAYO,qBAChEhzF,KAAKwxH,WAGL5uH,EAAA4F,YAAYk/D,iBAAmB/kE,EAAAmG,YAAYmnE,aAAa/G,SAAW,GAC/DpmE,EAAAuC,eAAeyiE,WACf9nE,KAAKmrH,YAAY/yC,mBACjBt1E,EAAAuC,eAAemhF,oBACfn4E,GAAA0B,cAAcmoE,eAKlBp1E,EAAAuC,eAAeyiE,WAA6C,eAAhChlE,EAAAuC,eAAe0iE,eACtCnlE,EAAA4F,YAAYk/D,iBAAmB/kE,EAAAmG,YAAYmnE,aAAa/G,SAAW,GACpElpE,KAAKmrH,YAAY/yC,uBACjBp4E,MAAKk0E,WAHb,SASJk8E,uBAAAtvJ,UAAA27E,UAAA,WAcI,MAbAv5E,GAAApC,UAAM27E,UAASh8E,KAAAT,MACfA,KAAKmrH,YAAY1uC,YACS,MAAtBz8E,KAAK2wH,eAAyB3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACnFzhF,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAIrB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE7DzhF,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAG3DpzE,EAAA0B,cAAcylE,oBACdnnE,EAAA0B,cAAcqtE,sBACdp9E,MAAKmrH,YAAY+G,qBAIjB7jH,EAAA0B,cAAc2lE,kBACd5yE,GAAAuC,eAAekuE,aAKnBvzE,KAAKosH,sBACL/9G,EAAA0B,cAAc8sE,eACd78E,KAAKmwH,eAAiBxtH,EAAAmG,YAAYsvD,aAAa8Q,SAE3CpmE,EAAAuC,eAAeyiE,WAA6C,eAAhChlE,EAAAuC,eAAe0iE,kBACvCnlE,EAAA4F,YAAYk/D,kBACZ5kE,EAAAuC,eAAemhF,gBACfn4E,EAAA0B,cAAcmoE,gBAHtB,SASJk4E,uBAAAtvJ,UAAA88E,MAAA,SAAMD,GAAA,SAAAA,OAAA,GACF39E,KAAKkwH,iBAAkB,EAGvBlwH,KAAKmwH,eAAiBxtH,EAAAmG,YAAYsvD,aAAa8Q,SAG/ClpE,KAAKqwH,UAAY1yC,EAEb/6E,EAAA4F,YAAYk/D,kBACZ9kE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASq5D,kBACvCn/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASo5D,iBACvCl/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASs5D,kBAEvCp/D,EAAA4F,YAAYypE,aAAc,GAG1B5jE,EAAA0B,cAAcylE,mBACdx1E,KAAKmrH,YAAY+G,oBAEjBlyH,KAAKmrH,YAAYvtC,MAAMD,GAG3B39E,KAAK8wH,uBAAuB37G,MAAM,KAGtCi7I,uBAAAtvJ,UAAA2jG,cAAA,WAyBI,MAxBI7hG,GAAA4F,YAAYk/D,iBACZ1lE,EAAAqC,UAAUA,UAAU6nH,aAEnB95C,EAAA2F,mBAAmBmI,SACpBt9E,EAAA4F,YAAYiH,SAAW7M,EAAA4F,YAAY0pE,qBAGvC7jE,EAAA0B,cAAc8sE,eACd78E,KAAK6wH,qBAAqB17G,MAAM,IAC5BvS,EAAA4F,YAAYiH,UACZzP,KAAKwxH,WAGTxxH,KAAK8wH,uBAAuB37G,MAAM,IAG9BnV,KAAKqwH,WACLztH,EAAA4F,YAAYk/D,kBACU,MAArB5kE,EAAAuC,eAAe9E,IAAcuC,EAAAuC,eAAey8E,aAAa/1E,OAAS,KAEnEjJ,EAAAuC,eAAeu1E,WACf56E,KAAKqwH,WAAY,GAGjBvtH,EAAAuC,eAAeyiE,WAAallE,EAAA4F,YAAYk/D,iBACxC1nE,KAAK6wH,qBAAqB37G,OAC1BpS,EAAAuC,eAAemhF,oBACfn4E,GAAA0B,cAAcmoE,oBAKdp1E,EAAAuC,eAAeyiE,WAA6C,eAAhChlE,EAAAuC,eAAe0iE,eACtCnlE,EAAA4F,YAAYk/D,iBAAmB/kE,EAAAmG,YAAYsvD,aAAa8Q,SAAW,IACpElpE,KAAK6wH,qBAAqB37G,OAC1B7G,EAAA0B,cAAcmkE,QAAQpkE,EAAY8lE,SAK9Cw6E,uBAAAtvJ,UAAA+8E,MAAA,WACS79E,KAAKkwH,iBAC0B,MAA5BvtH,EAAAmG,YAAYsvD,cAAwBz1D,EAAAmG,YAAYsvD,aAAa8Q,SAAW,GACxElnE,EAAAqC,UAAUA,UAAU8rE,IAAIxtE,EAAAmG,YAAYsvD,aAAa8Q,UAIzDlpE,KAAKswH,eAAep7G,OACpBlV,KAAKuwH,eAAer7G,OACpBtS,EAAA4F,YAAY0pE,oBAAsBtvE,EAAA4F,YAAYiH,SAC9C7M,EAAA4F,YAAYiH,UAAW,EACnBpB,EAAA0B,cAAc0lE,mBACd7yE,EAAA4F,YAAY0pE,qBAAsB,EACR,MAAtBlyE,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAIxB,MAAxBzhF,KAAK4wH,iBACJ5wH,KAAK4wH,gBAAgBvnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAExDzhF,KAAK4wH,gBAAgBvnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAIpB,MAA9BzhF,KAAKsxH,uBACJtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE9DzhF,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAErDpzE,EAAA0B,cAAcotE,YAAYrtE,EAAY4nE,OAC7CrpE,EAAA0B,cAAcotE,YAAYrtE,EAAY4nE,MAG1C13E,KAAKmrH,YAAYttC,SAGrBuyE,uBAAAtvJ,UAAAu9E,wBAAA,SAAwBzxE,GACpBhK,EAAA4F,YAAY0pE,oBAAsBtlE,GAGtCwjJ,uBAAAtvJ,UAAA8iG,cAAA,WACQv1F,EAAA0B,cAAc0lE,mBACY,MAAtBz1E,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAIlB,MAA9BzhF,KAAKsxH,uBACJtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE9DzhF,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAG5DpzE,EAAA0B,cAAcotE,YAAYrtE,EAAY0nE,YAC/BnpE,EAAA0B,cAAc4lE,cAGrBtnE,EAAA0B,cAAcotE,YAAYrtE,EAAYqkE,SAI9Ci8E,uBAAAtvJ,UAAAsrH,oBAAA,WAGI,GAFApsH,KAAKswH,eAAep7G,SAEhBlV,KAAKmyH,0BAIL//C,EAAA2F,mBAAmBmI,SAIvBnH,EAAAoB,uBAAuBziB,aACvB+a,EAAAY,SAASC,aAAY,GAEjByF,EAAAoB,uBAAuBiV,iBAAmBzK,EAAAa,qBAAqBqG,iBAAnE,CAIIjpF,EAAA4F,YAAYq/D,WACZjlE,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKmnG,SAEAvkG,EAAA4F,YAAYiH,WACbzP,KAAKy2E,QAAQynC,oBAAmBnyF,KAC5BA,EAACimE,EAAAS,YAAYM,iBACRnwF,EAAA4F,YAAYk/D,iBACR5kE,EAAAuC,eAAe4jE,OACoB,eAAhCnmE,EAAAuC,eAAe0iE,eACdjlE,EAAAuC,eAAeyiE,YACxBllE,EAAA4F,YAAYw9D,kBAChBj6C,EAACimE,EAAAS,YAAYO,qBAAqB,EAClCjnE,EAACimE,EAAAS,YAAYY,qBACTvwF,EAAAuC,eAAe4jE,OAAyC,eAAhCnmE,EAAAuC,eAAe0iE,gBAEhCnlE,EAAA4F,YAAYk/D,gBACvB37C,EAACimE,EAAAS,YAAYU,iBAAkB9kF,EAAA0B,cAAc2sE,gBAC7C3wD,EAACimE,EAAAS,YAAYQ,gBAAiBnuB,EAAAqD,WAAW0T,OACzC9vD,EAACimE,EAAAS,YAAYS,iBAAkBpuB,EAAAqD,WAAWyT,OAC1C7vD,EAACimE,EAAAS,YAAYC,aAAc5vF,EAAAuC,eAAeyiE,UAC1C/7C,EAACimE,EAAAS,YAAYK,iBAAiB,EzIsouC7B/mE,IyIpouCoB,MAArB/rB,KAAKqwJ,eACAhiJ,EAAA0B,cAAc2sE,gBAKV18E,KAAKqwJ,aAAahnJ,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACrDzhF,KAAKqwJ,aAAahnJ,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAL/CzhF,KAAKqwJ,aAAahnJ,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpDzhF,KAAKqwJ,aAAahnJ,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAQtD3+E,EAAAuC,eAAe4jE,QACVjpE,KAAKqwJ,aAAahnJ,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACrDzhF,KAAKqwJ,aAAahnJ,UAAUC,IAAI5G,EAAAyF,eAAes5E,iBAKvD7+E,EAAA4F,YAAYk/D,iBACZ1lE,EAAAqC,UAAUA,UAAUguH,aAKhC3vH,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,gBzIqouCxC,IAAIhuF,KyIlouCDqkI,uBAAAtvJ,UAAAqxH,uBAAR,WACI,GAAIvvH,EAAA4F,YAAYk/D,iBAAmB70D,EAAAwD,QAAQ6hD,gBAAkBp1D,EAAAuC,eAAe4jE,MAAO,CAC/E,GAAIp2D,EAAAwD,QAAQ4hD,sBAAwBj4D,KAAKkwH,gBAOrC,MANAttH,GAAA4F,YAAYiH,UAAW,EACvBzP,KAAKo4E,mBACLp4E,KAAKs9E,UACLx6E,EAAAuC,eAAekuE,YACf1gE,EAAAwD,QAAQyhD,iBAED,CAEP,IAAMw6D,GAAOtyH,IAkBb,IAfIA,KAAKkwH,iBACLr9G,EAAAwD,QAAQuhD,cAAa,EAAM,WACvB06D,EAAKl6C,mBACLk6C,EAAKh1C,UACL16E,EAAA4F,YAAYiH,UAAW,EACvB3M,EAAAuC,eAAekuE,cAKnB3wE,EAAA4F,YAAYq/D,YACZjlE,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKmnG,SAGLt0F,EAAAwD,QAAQmiD,gCAWR,MATAx4D,MAAKy2E,QAAQ+mC,oBACb96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBAEhB,MAArB/5G,KAAKqwJ,cACJrwJ,KAAKqwJ,aAAahnJ,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAErDzhF,KAAKqwJ,aAAahnJ,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAG5C,EAKnB,OAAO,GAGH2uE,uBAAAtvJ,UAAA4wH,qBAAR,WACI,SAAK7+G,EAAAwD,QAAQ6hD,eAAiBp1D,EAAAuC,eAAe4jE,SAIzCp2D,EAAAwD,QAAQ4hD,sBAAwBplD,EAAAwD,QAAQmiD,iCACpC71D,EAAAmG,YAAYsvD,aAAa8Q,SAAW,GACpClpE,KAAK26G,eACL36G,KAAKkwH,iBAAkB,EAElBttH,EAAA4F,YAAYk/D,iBAIb1nE,KAAK06G,mBACL93G,EAAA4F,YAAYkgE,qBACZ1oE,KAAKosH,uBALLpsH,KAAKk0E,WAQTl0E,KAAKosH,uBAGF,IAEPv5G,EAAAwD,QAAQuhD,cAAa,EAAO,MAC5B/kD,EAAAwD,QAAQiiD,4BAED,KAIf83F,uBAAAtvJ,UAAAqmG,MAAA,WACI50B,EAAAsD,YAAYne,aAER90D,EAAA4F,YAAYk/D,iBACZ1nE,KAAKy2E,QAAQynC,oBAAmBnyF,KAC5BA,EAACimE,EAAAS,YAAYM,gBAAiBnwF,EAAA4F,YAAYw9D,kBAC1Cj6C,EAACimE,EAAAS,YAAYO,qBAAqB,EAClCjnE,EAACimE,EAAAS,YAAYY,oBAAoB,EACjCtnE,EAACimE,EAAAS,YAAYU,iBAAiB,EAC9BpnE,EAACimE,EAAAS,YAAYQ,gBAAiBnuB,EAAAqD,WAAW0T,OACzC9vD,EAACimE,EAAAS,YAAYS,iBAAkBpuB,EAAAqD,WAAWyT,OAC1C7vD,EAACimE,EAAAS,YAAYC,aAAa,EAC1B3mE,EAACimE,EAAAS,YAAYK,iBAAiB,EzIsnuC7B/mE,IyIpnuCoB,MAArB/rB,KAAKqwJ,cAAwBrwJ,KAAKqwJ,aAAahnJ,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACjFzhF,KAAKqwJ,aAAahnJ,UAAUsN,OAAOjU,EAAAyF,eAAes5E,iBAGtDzhF,KAAKy2E,QAAQynC,oBAAmBqU,KAC5BA,EAACvgC,EAAAS,YAAYM,iBAAiB,EAC9Bw/B,EAACvgC,EAAAS,YAAYO,qBAAqB,EAClCu/B,EAACvgC,EAAAS,YAAYY,oBAAoB,EACjCk/B,EAACvgC,EAAAS,YAAYU,iBAAiB,EAC9Bo/B,EAACvgC,EAAAS,YAAYQ,gBAAgB,EAC7Bs/B,EAACvgC,EAAAS,YAAYS,iBAAiB,EAC9Bq/B,EAACvgC,EAAAS,YAAYC,aAAa,EAC1B6/B,EAACvgC,EAAAS,YAAYK,iBAAiB,EzIwnuC7By/B,IyItnuCoB,MAArBvyH,KAAKqwJ,cAAyBrwJ,KAAKqwJ,aAAahnJ,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAClFzhF,KAAKqwJ,aAAahnJ,UAAUC,IAAI5G,EAAAyF,eAAes5E,ezI2nuCtD,IAAI11D,GAAIwmG,GyItnuCb69B,uBAAAtvJ,UAAAw8E,QAAA,WACIt9E,KAAKswH,eAAep7G,OACpBlV,KAAKy2E,QAAQ+mC,oBACb54B,EAAAM,mBAAmBmD,oBACnB3lF,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBAEzC/5G,KAAKmrH,YAAYjzC,cAEQ,MAArBl4E,KAAKqwJ,cAAyBrwJ,KAAKqwJ,aAAahnJ,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAClFzhF,KAAKqwJ,aAAahnJ,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAM/C2uE,uBAAAtvJ,UAAA08G,kBAAR,WACIx9G,KAAKswH,eAAep7G,OACpBlV,KAAKy2E,QAAQ+mC,oBACb96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBAChB,MAArB/5G,KAAKqwJ,cAAyBrwJ,KAAKqwJ,aAAahnJ,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAClFzhF,KAAKqwJ,aAAahnJ,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAQvD2uE,uBAAAtvJ,UAAAi9E,yBAAA,SAAyBx9E,KAEzB6vJ,uBAAAtvJ,UAAAo9E,mBAAA,SAAmBD,KAEnBmyE,uBAAAtvJ,UAAAq9E,eAAA,aAEAiyE,uBAAAtvJ,UAAAiwH,sBAAA,WAC8B,MAAtB/wH,KAAK2wH,eAAyB3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACnFzhF,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAIrB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE7DzhF,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAInE2uE,uBAAAtvJ,UAAAs3E,iBAAA,WACIp4E,KAAKmrH,YAAY/yC,oBA7kCzBg4E,uBAAA/0I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,czIwrwCxB0lI,yByIvrwCoC72C,EAAAG,aAA/Br5G,GAAA+vJ,uBAAsBA,GzI+rwC7B,SAAS9vJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G0IxuwCjE5Z,EAAAzB,EAAgC,GAChC6B,EAAA7B,EAAyC,GACzCyS,EAAAzS,EAA2E,GAC3E0b,EAAA1b,EAA+B,IAC/Bo5G,EAAAp5G,EAA6B,IAC7BuC,EAAAvC,EAA+B,IAC/BwC,EAAAxC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IACzB4vH,EAAA5vH,EAA4B,IAC5BqC,EAAArC,EAA2B,GAC3BkO,EAAAlO,EAA8B,IAC9ByC,EAAAzC,EAA4B,IAC5BoyE,EAAApyE,EAA4B,IAC5Bw/I,EAAAx/I,EAAoC,KACpCy/I,EAAAz/I,EAAiC,IACjC0gF,EAAA1gF,EAAyB,IAEzB2C,EAAA3C,EAA+B,IAC/BwtB,EAAAxtB,EAA0B,IAEtB2P,EAAc9N,EAAAiD,cAAcC,KAAK4K,YAIrCwgJ,GAHctuJ,EAAAiD,cAAcC,KAAK46I,QAGjC,SAAA58I,GAAiD3B,EAAA+uJ,4BAAAptJ,EAoB7C,SAAAotJ,+BACIptJ,EAAAzC,KAAAT,KAAM,aAHFA,KAAAkwH,iBAA2B,EAorBvC,MA9qBIogC,6BAAAxvJ,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKm9G,kBAELn9G,KAAKswH,eAAiB19G,EAAAa,iBAAiB,iBACvCzT,KAAKswH,eAAe58G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKosH,oBAAoBv4G,KAAK7T,OAEhFA,KAAKuwH,eAAiB39G,EAAAa,iBAAiB,iBACvCzT,KAAKuwH,eAAe78G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKwwH,gBAAgB38G,KAAK7T,OAE5EA,KAAK+/I,WAAantI,EAAAa,iBAAiB,aACnCzT,KAAK+/I,WAAWrsI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKggJ,KAAKnsI,KAAK7T,OAE7DA,KAAKigJ,iBAAmBrtI,EAAAa,iBAAiB,mBACzCzT,KAAKigJ,iBAAiBvsI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKkgJ,WAAWrsI,KAAK7T,OAEzEA,KAAK6wH,qBAAuBj+G,EAAAa,iBAAiB,uBAC7CzT,KAAK6wH,qBAAqBn9G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKosH,oBAAoBv4G,KAAK7T,OAEtFA,KAAK2wH,cAAgBznH,SAASC,eAAe,yBAE7CnJ,KAAK8wH,uBAAyBl+G,EAAAa,iBAAiB,yBAC/CzT,KAAK8wH,uBAAuBp9G,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK+wH,sBAAsBl9G,KAAK7T,OAE1FA,KAAKmgJ,2BAA6BvtI,EAAAa,iBAAiB,yBACnDzT,KAAKmgJ,2BAA2BzsI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKogJ,0BAA0BvsI,KAAK7T,OAElGA,KAAKqgJ,oBAAsBztI,EAAAa,iBAAiB,sBAC5CzT,KAAKqgJ,oBAAoB3sI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKsgJ,mBAAmBzsI,KAAK7T,OAEpFA,KAAKugJ,WAAar3I,SAASC,eAAe,WAAYD,SAASC,eAAe,kBAGlFmnJ,4BAAAxvJ,UAAA07E,cAAA,SAAcyV,GACVjyF,KAAKmrH,YAAcl5B,EACnBjyF,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBn1B,cAAerrH,KAAKkyF,cAAcr+E,KAAK7T,OAC/EA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBC,gBAAiBzgJ,KAAK0gJ,gBAAgB7sI,KAAK7T,OACnFA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBvvB,aAAcjxH,KAAKsyF,aAAaz+E,KAAK7T,OAC7EA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoB7tB,YAAa3yH,KAAK4yF,YAAY/+E,KAAK7T,OAC3EA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBtvB,eAAgBlxH,KAAKmxH,eAAet9G,KAAK7T,OACjFA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoB90B,uBAAwB1rH,KAAK2rH,uBAAuB93G,KAAK7T,OACjGA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoB50B,gBAAiB5rH,KAAK6rH,gBAAgBh4G,KAAK7T,OACnFA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBx0B,cAAehsH,KAAKykG,cAAc5wF,KAAK7T,OAC/EA,KAAKmrH,YAAYz3G,GAAGisI,EAAAa,oBAAoBv0B,cAAejsH,KAAK4jG,cAAc/vF,KAAK7T,OAC/EA,KAAKmrH,YAAYz3G,GACbisI,EAAAa,oBAAoBpvB,4BACpBpxH,KAAKqxH,4BAA4Bx9G,KAAK7T,QAI9CswJ,4BAAAxvJ,UAAAq8G,gBAAA,WACIn9G,KAAKy2E,QAAQ0mC,iBAAgBpxF,KACzBA,EAAC6zH,EAAAp2B,iBAAiBC,cAAc,EAChC19F,EAAC6zH,EAAAp2B,iBAAiBE,aAAa,EAC/B39F,EAAC6zH,EAAAp2B,iBAAiBz2B,iBAAiB,EACnChnE,EAAC6zH,EAAAp2B,iBAAiBx2B,qBAAqB,EACvCjnE,EAAC6zH,EAAAp2B,iBAAiB92B,aAAa,EAC/B3mE,EAAC6zH,EAAAp2B,iBAAiB12B,iBAAiB,E1IqswClC/mE,GAEJ,IAAIA,I0InswCTukI,4BAAAxvJ,UAAAizE,aAAA,WACI/zE,KAAKsxH,sBAAwBpoH,SAASC,eAAe,wBACrDnJ,KAAK2gJ,kBAAoBz3I,SAASC,eAAe,gBAEjDjG,EAAApC,UAAMizE,aAAYtzE,KAAAT,MAElBA,KAAKmrH,YAAYp3C,eAES,MAAtB/zE,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAIlB,MAA9BzhF,KAAKsxH,uBACJtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE9DzhF,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAIhE6uE,4BAAAxvJ,UAAAg1E,iBAAA,WACI91E,KAAKosH,uBAGTkkC,4BAAAxvJ,UAAAoxF,cAAA,SAAc0uD,GAKoB,MAA1B5gJ,KAAK2gJ,mBACJ3gJ,KAAK2gJ,kBAAkBt3I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE1DzhF,KAAK2gJ,kBAAkBt3I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAG9B,MAAtBzhF,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAOpDpzE,EAAA0B,cAAcitE,YAAYltE,EAAY4nE,OAG1C44E,4BAAAxvJ,UAAA4/I,gBAAA,WACIryI,EAAA0B,cAAcitE,YAAYltE,EAAY8lE,OAG1C06E,4BAAAxvJ,UAAAwxF,aAAA,WACI,GAAIuuD,GAAU33I,SAASskF,cAAc,mBACjCopC,EAAOjpG,EAAAoB,UAAUR,GAAGsyH,EAAS,IAAOhjI,MAAO,GAC/C+4G,GAAKjoG,cAAc,aAAc,WAC7B/rB,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS46D,4BACT3gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,eAAer5E,YAG3D4f,EAAAoB,UAAUR,GAAGsyH,EAAS,IAAOhjI,MAAO,MAGpCjb,EAAA4F,YAAY29D,oBAEZnmE,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiB12B,gBAAgB,GAChEpwF,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCr3G,EAAAyF,eAAewsF,iBAAiB,IAChC30F,KAAKmrH,YAAYj2G,SAEjBlV,KAAKy2E,QAAQ4mC,kBACTuiC,EAAAp2B,iBAAiB12B,eACjBtwF,EAAA+B,WAAWC,kBAAkB8hE,qBAEjC5jE,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,mBAIjDu2C,4BAAAxvJ,UAAA8xF,YAAA,WACIvkF,EAAA0B,cAAcitE,YAAYltE,EAAY0nE,YAG1C84E,4BAAAxvJ,UAAA02D,eAAA,SAAesmB,GACX,GAAIA,IAAWiyC,EAAA9F,YAAYC,iBACvB,GAAIlqH,KAAKy2E,QAAQ6mC,eAAesiC,EAAAp2B,iBAAiBE,YAC7C5rC,EAAS8hE,EAAAp2B,iBAAiBE,eACvB,IAAI1pH,KAAKy2E,QAAQ6mC,eAAesiC,EAAAp2B,iBAAiB92B,YACpD5U,EAAS8hE,EAAAp2B,iBAAiB92B,eACvB,KAAI1yF,KAAKy2E,QAAQ6mC,eAAesiC,EAAAp2B,iBAAiB12B,gBAGpD,MAFAhV,GAAS8hE,EAAAp2B,iBAAiB12B,eAMlC,GAAI9yF,KAAKy2E,QAAQ6mC,eAAex/B,GAI5B,OAHA+C,EAAAl2D,SAASoS,KAAK,aACd75B,EAAApC,UAAM02D,eAAc/2D,KAAAT,KAAC89E,GAEbA,GACJ,IAAK8hE,GAAAp2B,iBAAiBC,YAClBzpH,KAAKmV,OACL,MACJ,KAAKyqI,GAAAp2B,iBAAiBE,WAClB1pH,KAAKggJ,MACL,MACJ,KAAKJ,GAAAp2B,iBAAiB92B,WAClB1yF,KAAKmyF,MACL,MACJ,KAAKytD,GAAAp2B,iBAAiB12B,eAClB9yF,KAAKkV,MACL,MACJ,KAAK0qI,GAAAp2B,iBAAiBz2B,eAClB/yF,KAAKwxH,UACL,MACJ,KAAKouB,GAAAp2B,iBAAiBx2B,mBAClBhzF,KAAKyxH,iBAMrB6+B,4BAAAxvJ,UAAAqU,MAAA,SAAM5U;AACFP,KAAKy2E,QAAQ+mC,oBACb96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzC/5G,KAAKmrH,YAAYh2G,MAAM5U,IAG3B+vJ,4BAAAxvJ,UAAAqxF,KAAA,WACSnyF,KAAKkwH,iBAC+B,MAAjCvtH,EAAAmG,YAAY2uE,mBAA6B90E,EAAAmG,YAAY2uE,kBAAkBob,WAAa,GACpF7wF,EAAAqC,UAAUA,UAAU8rE,IAAIxtE,EAAAmG,YAAY2uE,kBAAkBob,YAI9D7yF,KAAKy2E,QAAQ+mC,oBACT56G,EAAA4F,YAAYiH,UACZzP,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiBx2B,mBAAoBpwF,EAAA4F,YAAYw9D,mBAEpFtjE,EAAAyF,eAAewsF,iBAAiB,IAChC/xF,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,cACvC5/D,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzC/5G,KAAKmrH,YAAYh5B,OAEjBnwF,EAAAqC,UAAUA,UAAUwtH,eAGxBy+B,4BAAAxvJ,UAAAk/I,KAAA,WACIhgJ,KAAK+/I,WAAW7qI,OAChBlV,KAAKs9E,UACLjvE,EAAA0B,cAAcytE,gBAGlB8yE,4BAAAxvJ,UAAAoU,KAAA,WACIlV,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiB12B,gBAAgB,GAChEpwF,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzCr3G,EAAAyF,eAAewsF,iBAAiB,IAChC/xF,EAAA4F,YAAYu+D,mBACZ/mE,KAAKmrH,YAAYj2G,QAGrBo7I,4BAAAxvJ,UAAA69B,IAAA,WACyC,MAAjCh8B,EAAAmG,YAAY2uE,mBAA6B90E,EAAAmG,YAAY2uE,kBAAkBvO,SAAW,GAClFlnE,EAAAqC,UAAUA,UAAU8rE,IAAIxtE,EAAAmG,YAAY2uE,kBAAkBvO,UAAU,GAGpElpE,KAAKmrH,YAAYxsF,OAGrB2xH,4BAAAxvJ,UAAA0vH,gBAAA,WACIxwH,KAAKuwH,eAAer7G,OAChBtS,EAAA4F,YAAYiH,SACZzP,KAAKwxH,WAELxxH,KAAKosH,uBAIbkkC,4BAAAxvJ,UAAA0wH,SAAA,WACIxxH,KAAKswH,eAAep7G,OAEc,MAA9BtS,EAAA4F,YAAYi9D,eACZ7iE,EAAA4F,YAAYiH,UAAW,EACvB7M,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASu6D,kBAAmBrgE,EAAA4F,YAAYi9D,eACtEzlE,KAAKmyF,SAELvvF,EAAA4F,YAAYi9D,eAAiB/vD,SAAS9S,EAAA4F,YAAYi9D,eAAiB,GAAG13D,WAClE2H,SAAS9S,EAAA4F,YAAYi9D,gBAAkB,GACvC7iE,EAAA4F,YAAYiH,UAAW,EACvB7M,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASu6D,kBAAmBrgE,EAAA4F,YAAYi9D,eACtEzlE,KAAKmyF,SAELvvF,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKosH,yBAKjBkkC,4BAAAxvJ,UAAA2wH,aAAA,WACI7uH,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiBx2B,oBAAoB,GACpEtwF,EAAAyF,eAAeqvF,oBAAoBooD,EAAAp2B,iBAAiBx2B,oBAAoB,IAG5Es9D,4BAAAxvJ,UAAAo/I,WAAA,WACIlgJ,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiBE,YAAY,GAC5DhnH,EAAAyF,eAAeqvF,oBAAoBooD,EAAAp2B,iBAAiBE,YAAY,IAGpE4mC,4BAAAxvJ,UAAAqwH,eAAA,SAAea,GASX,GARAhwH,EAAAqC,UAAUA,UAAU4tH,YAE6B,IAA7CtvH,EAAAmG,YAAY2uE,kBAAkBob,WAC9B7yF,KAAKkwH,iBAAkB,EAEvBlwH,KAAKkwH,iBAAkB,EAGvBvtH,EAAAmG,YAAY2uE,kBAAkBob,WAAa,EAAG,CAK9C,IAAK,GAFDkuD,IAAwB,EAEnBhhJ,EAAI,EAAGA,EAAI4C,EAAAmG,YAAY2uE,kBAAkB++C,KAAKzqH,OAAQhM,IACvD4C,EAAAmG,YAAY2uE,kBAAkB++C,KAAKz2H,GAAGiwI,UAAYhuI,EAAAiD,cAAcC,KAAK+qI,WAAWE,QAC5ExtI,EAAAmG,YAAY2uE,kBAAkB++C,KAAKz2H,GAAGw0B,OAASvyB,EAAAiD,cAAcC,KAAK46I,QAAQgB,YAC1EC,GAAwB,GAErBp+I,EAAAmG,YAAY2uE,kBAAkB++C,KAAKz2H,GAAGiwI,UAAYhuI,EAAAiD,cAAcC,KAAK+qI,WAAWI,KACnF1tI,EAAAmG,YAAY2uE,kBAAkB++C,KAAKz2H,GAAGw0B,OAASvyB,EAAAiD,cAAcC,KAAK46I,QAAQkB,IAKtFhhJ,MAAKswH,eAAep7G,OAChB88G,EACAhyH,KAAKswH,eAAen7G,MAAM,IAEtBxS,EAAAmG,YAAY2uE,kBAAkBvO,SAAW,EACzClpE,KAAKswH,eAAen7G,MAAM,IAE1BnV,KAAKosH,sBAKjB,MAAIpsH,MAAKihJ,kBACLjhJ,KAAKswH,eAAep7G,OACpBtS,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKy2E,QAAQ+mC,oBACoC,IAA7C76G,EAAAmG,YAAY2uE,kBAAkBob,aACgB,MAA1ClwF,EAAAmG,YAAY2uE,kBAAkBvO,UAC9BtmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASw6D,qBACTvgE,EAAAmG,YAAY2uE,kBAAkBvO,SAASn7D,YAG/CnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASw6D,sBAGnCljE,KAAKkhJ,oBAAsB,IAAMt+I,EAAA4F,YAAYq/D,UAC7C7nE,KAAK+/I,WAAW5qI,MAAM,IAEtBnV,KAAKigJ,iBAAiB9qI,MAAM,SAGpCzS,GAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,mBAI7C/5G,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiB12B,gBAAgB,GAEf,IAA7CnwF,EAAAmG,YAAY2uE,kBAAkBob,YAC9B7yF,KAAKosH,sBAGT1pH,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,sBAErCn3G,EAAA4F,YAAYiH,UAAyD,IAA7C9M,EAAAmG,YAAY2uE,kBAAkBob,YACtD7yF,KAAKuwH,eAAep7G,MAAM,OAIlCm7I,4BAAAxvJ,UAAAuwH,4BAAA,WAEyC,MAAjC1uH,EAAAmG,YAAY2uE,mBACZ90E,EAAAmG,YAAY2uE,kBAAkBob,WAAa,IAC1C7yF,KAAKkwH,iBAENluH,EAAAqC,UAAUA,UAAU8rE,IAAIxtE,EAAAmG,YAAY2uE,kBAAkBob,YAG1D7yF,KAAKkwH,iBAAkB,EACvBttH,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,eAG3CguF,4BAAAxvJ,UAAA6qH,uBAAA,WAaI,MAZA3rH,MAAKswH,eAAep7G,OAEpBtS,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,cAEO,MAA1C3/D,EAAAmG,YAAY2uE,kBAAkBvO,UAC9BtmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASw6D,qBACTvgE,EAAAmG,YAAY2uE,kBAAkBvO,SAASn7D,YAG/CnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASw6D,sBAEnCljE,KAAKihJ,kBACLr+I,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKy2E,QAAQ+mC,wBACb96G,GAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,sBAI7C/5G,MAAKosH,uBAGTkkC,4BAAAxvJ,UAAA+qH,gBAAA,WAaI,MAXqC,OAAjClpH,EAAAmG,YAAY2uE,mBACZ90E,EAAAmG,YAAY2uE,kBAAkBob,WAAa,IAC1C7yF,KAAKkwH,iBAENluH,EAAAqC,UAAUA,UAAU8rE,IAAIxtE,EAAAmG,YAAY2uE,kBAAkBob,YAG1D7yF,KAAKkwH,iBAAkB,EAEvBlwH,KAAKswH,eAAep7G,OAEhBlV,KAAKihJ,kBACLr+I,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKy2E,QAAQ+mC,oBAGTx9G,KAAKkhJ,oBAAsB,IAAMt+I,EAAA4F,YAAYq/D,UAC7C7nE,KAAKggJ,OAELhgJ,KAAKigJ,iBAAiB9qI,MAAM,QAGhCzS,GAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,mBAI7C/5G,KAAKosH,2BACDxpH,EAAA4F,YAAYiH,UACZzP,KAAKwxH,cAIb8+B,4BAAAxvJ,UAAA27E,UAAA,WAoCI,MAnCA35E,GAAAuC,eAAekuE,YACf3wE,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS46D,4BACT3gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,eAAer5E,YAE3DnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS86D,wBACT7gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAUK,WAAWpzI,YAGvDnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,cAEO,MAA1C3/D,EAAAmG,YAAY2uE,kBAAkBvO,UAC9BtmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASw6D,qBACTvgE,EAAAmG,YAAY2uE,kBAAkBvO,SAASn7D,YAG/CnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASw6D,sBAEb,MAAtBljE,KAAK2wH,eAAyB3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACnFzhF,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAIrB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE7DzhF,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAG/Dv+E,EAAApC,UAAM27E,UAASh8E,KAAAT,MACfA,KAAKmrH,YAAY1uC,YACjBz6E,EAAAqC,UAAUA,UAAUyhF,aAAcvxD,KAAMvyB,EAAAiD,cAAcC,KAAK4K,YAAY0nE,YAEnEx3E,KAAKihJ,kBACLjhJ,KAAKy2E,QAAQ+mC,oBAGTx9G,KAAKkhJ,oBAAsB,IAAMt+I,EAAA4F,YAAYq/D,UAC7C7nE,KAAK+/I,WAAW5qI,MAAM,IAEtBnV,KAAKigJ,iBAAiB9qI,MAAM,QAGhCzS,GAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,sBAI7C/5G,MAAKosH,uBAGTkkC,4BAAAxvJ,UAAA88E,MAAA,SAAMD,GAAA,SAAAA,OAAA,GACF76E,EAAAuC,eAAekuE,YACf3wE,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS46D,4BACT3gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,eAAer5E,YAE3DnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS06D,mBACTzgE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAUM,WAAWrzI,YAEvDnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS86D,wBACT7gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAUK,WAAWpzI,WAGvD,KAAiB,GAAApB,GAAA,EAAAof,EAAA/rB,KAAKugJ,UAAL5zI,EAAAof,EAAAhgB,OAAAY,IAAe,CAA3B,GAAIgmD,GAAI5mC,EAAApf,EACTgmD,GAAKtpD,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGzCzhF,KAAKmrH,YAAYvtC,MAAMD,GAEvB39E,KAAK8wH,uBAAuB37G,MAAM,MAGtCm7I,4BAAAxvJ,UAAA2jG,cAAA,WAC8B,MAAtBzkG,KAAK2wH,eACL3wH,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAEvDzhF,KAAK6wH,qBAAqB17G,MAAM,KAChCnV,KAAK8wH,uBAAuB37G,MAAM,MAGtCm7I,4BAAAxvJ,UAAA+8E,MAAA,WACIj7E,EAAA4F,YAAYiH,UAAW,EAEvBzP,KAAKmrH,YAAYttC,QAES,MAAtB79E,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAIlB,MAA9BzhF,KAAKsxH,uBACJtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE9DzhF,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAIhE6uE,4BAAAxvJ,UAAA8iG,cAAA,WACIv1F,EAAA0B,cAAcotE,YAAYrtE,EAAY8lE,MAAM,GAElB,MAAtB51E,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAIlB,MAA9BzhF,KAAKsxH,uBACJtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE9DzhF,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAIhE6uE,4BAAAxvJ,UAAAsrH,oBAAA,WACIpsH,KAAKswH,eAAep7G,OAE0B,MAA1CvS,EAAAmG,YAAY2uE,kBAAkBvO,UAC9BtmE,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAASw6D,qBACTvgE,EAAAmG,YAAY2uE,kBAAkBvO,SAASn7D,YAG/CnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAASw6D,sBAEnCtgE,EAAA4F,YAAYq/D,WACZjlE,EAAA4F,YAAYiH,UAAW,EACvBzP,KAAKmnG,SAEAvkG,EAAA4F,YAAYiH,UACbzP,KAAKy2E,QAAQynC,oBAAmBnyF,KAC5BA,EAAC6zH,EAAAp2B,iBAAiBC,cAAc,EAChC19F,EAAC6zH,EAAAp2B,iBAAiBE,aAAa,EAC/B39F,EAAC6zH,EAAAp2B,iBAAiBz2B,iBAAkBnwF,EAAA4F,YAAYiH,UAAY7M,EAAA4F,YAAYw9D,kBACxEj6C,EAAC6zH,EAAAp2B,iBAAiBx2B,oBAAqBpwF,EAAA4F,YAAYiH,UAAY7M,EAAA4F,YAAYw9D,kBAC3Ej6C,EAAC6zH,EAAAp2B,iBAAiB92B,aAAa,EAC/B3mE,EAAC6zH,EAAAp2B,iBAAiB12B,iBAAiB,E1I4kwClC/mE,I0IvkwCbrpB,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,gB1I4kwCxC,IAAIhuF,I0IzkwCTukI,4BAAAxvJ,UAAAqmG,MAAA,WACI50B,EAAAsD,YAAYne,aAEZ13D,KAAKy2E,QAAQynC,oBAAmBnyF,KAC5BA,EAAC6zH,EAAAp2B,iBAAiBC,cAAc,EAChC19F,EAAC6zH,EAAAp2B,iBAAiBE,aAAa,EAC/B39F,EAAC6zH,EAAAp2B,iBAAiBz2B,iBAAiB,EACnChnE,EAAC6zH,EAAAp2B,iBAAiBx2B,qBAAqB,EACvCjnE,EAAC6zH,EAAAp2B,iBAAiB92B,aAAa,EAC/B3mE,EAAC6zH,EAAAp2B,iBAAiB12B,iBAAiB,E1I2kwClC/mE,GAEJ,IAAIA,I0IzkwCTukI,4BAAAxvJ,UAAAw/I,mBAAA,WACItgJ,KAAKy2E,QAAQ4mC,kBAAkBuiC,EAAAp2B,iBAAiBC,aAAa,GAC7D/mH,EAAAyF,eAAeqvF,oBAAoBooD,EAAAp2B,iBAAiBC,aAAa,IAGrE6mC,4BAAAxvJ,UAAAg8E,OAAA,WACIl6E,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS46D,4BACT3gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,eAAer5E,YAE3DnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS06D,mBACTzgE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAUM,WAAWrzI,YAEvDnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS86D,wBACT7gE,EAAAmG,YAAY2uE,kBAAkBqpE,UAAUK,WAAWpzI,YAGvD/N,KAAKqgJ,oBAAoBlrI,MAAM,IAE/BnV,KAAKmrH,YAAYruC,UASrBwzE,4BAAAxvJ,UAAAw8E,QAAA,WACIt9E,KAAKy2E,QAAQ+mC,oBACb96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,kBAOrCu2C,4BAAAxvJ,UAAAmgJ,eAAR,WACI,MAAIr+I,GAAA4F,YAAYq/D,WACZ7nE,KAAKmnG,SACE,GAIoC,MAA3CxkG,EAAAmG,YAAY2uE,kBAAkBqpE,WAC4B,MAA1Dn+I,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,gBACmB,IAA3DzkF,EAAAmG,YAAY2uE,kBAAkBqpE,UAAU15D,gBAYxCkpE,4BAAAxvJ,UAAAogJ,kBAAR,WACI,MACIv+I,GAAAmG,YAAY2uE,kBAAkB12E,eAAe,eACiB,MAA9D4B,EAAAmG,YAAY2uE,kBAAkBthB,WAA2B,eAElDxzD,EAAAmG,YAAY2uE,kBAAkBthB,WAA2B,eAG7D,MAGXm6F,4BAAAxvJ,UAAAiwH,sBAAA,WAC8B,MAAtB/wH,KAAK2wH,eAAyB3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACnFzhF,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAIrB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE7DzhF,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAInE6uE,4BAAAxvJ,UAAAs/I,0BAAA,WACkC,MAA1BpgJ,KAAK2gJ,mBAA6B3gJ,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACvFzhF,KAAK2gJ,kBAAkBt3I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAIzB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAE7DzhF,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAInE6uE,4BAAAxvJ,UAAAu+E,eAAA,WACI,IAAiB,GAAA1yE,GAAA,EAAAof,EAAA/rB,KAAKugJ,UAAL5zI,EAAAof,EAAAhgB,OAAAY,IAAe,CAA3B,GAAIgmD,GAAI5mC,EAAApf,EACG,OAARgmD,GAAiBA,EAAKtpD,UAAU0N,SAAS,eACzC47C,EAAKtpD,UAAUC,IAAI,gBAK/BgnJ,4BAAAxvJ,UAAAw+E,qBAAA,WACI,IAAiB,GAAA3yE,GAAA,EAAAof,EAAA/rB,KAAKugJ,UAAL5zI,EAAAof,EAAAhgB,OAAAY,IAAe,CAA3B,GAAIgmD,GAAI5mC,EAAApf,EACG,OAARgmD,GAAgBA,EAAKtpD,UAAU0N,SAAS,eACxC47C,EAAKtpD,UAAUsN,OAAO,gBAnsBtC25I,4BAAAj1I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,c1IwuxCxB4lI,8B0IvuxCyC/2C,EAAAG,cAApCr5G,GAAAiwJ,4BAA2BA,G1I+uxClC,SAAShwJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G2InxxCjE5Z,EAAAzB,EAAgC,GAChC6B,EAAA7B,EAA8B,GAC9B0b,EAAA1b,EAA+B,IAC/BkO,EAAAlO,EAA8B,IAC9B+iJ,EAAA/iJ,EAAmC,IAE/B2P,EAAc9N,EAAAiD,cAAcC,KAAK4K,YAGrCygJ,EAAA,SAAArtJ,GAA8C3B,EAAAgvJ,yBAAArtJ,EAA9C,SAAAqtJ,4BAA8CrtJ,EAAA7B,MAAArB,KAAAmD,WAO9C,MALIotJ,0BAAAzvJ,UAAA27E,UAAA,WACIpuE,EAAA0B,cAAciuE,yBAAyBluE,EAAY8lE,KAAM,GAEzD1yE,EAAApC,UAAM27E,UAASh8E,KAAAT,OANvBuwJ,yBAAAl1I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,c3I8xxCxB6lI,2B2I7xxCsCrN,EAAAx4B,mBAAjCrqH,GAAAkwJ,yBAAwBA,G3IqyxC/B,SAASjwJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G4I1zxCjE5Z,EAAAzB,EAAgC,GAChC6B,EAAA7B,EAAyC,GACzC0b,EAAA1b,EAA+B,IAC/Bo5G,EAAAp5G,EAA6B,IAC7BuC,EAAAvC,EAA+B,IAC/B4vH,EAAA5vH,EAA4B,IAC5BkO,EAAAlO,EAA8B,IAC9BijJ,EAAAjjJ,EAA4B,IAC5BkjJ,EAAAljJ,EAA+B,KAC/BwC,EAAAxC,EAA4B,IAC5BsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAC5ByS,EAAAzS,EAA2E,GAEvE2P,EAAc9N,EAAAiD,cAAcC,KAAK4K,YAIrC0gJ,GAHmBxuJ,EAAAiD,cAAcC,KAAKg3E,iBAGtC,SAAAh5E,GAA4C3B,EAAAivJ,uBAAAttJ,EAexC,SAAAstJ,0BACIttJ,EAAAzC,KAAAT,KAAM,QA4ad,MAzaIwwJ,wBAAA1vJ,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKm9G,kBAELn9G,KAAK2wH,cAAgBznH,SAASC,eAAe,oBAC7CnJ,KAAK8hJ,oBAAsB54I,SAASC,eAAe,sBAEnDnJ,KAAK+/I,WAAantI,EAAAa,iBAAiB,aACnCzT,KAAK+/I,WAAWrsI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKggJ,KAAKnsI,KAAK7T,OAE7DA,KAAKigJ,iBAAmBrtI,EAAAa,iBAAiB,mBACzCzT,KAAKigJ,iBAAiBvsI,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKkgJ,WAAWrsI,KAAK7T,OAEzEA,KAAKujJ,WAAar6I,SAASC,eAAe,aACnB,MAAnBnJ,KAAKujJ,WAMTvjJ,KAAKwjJ,gBAAkBt6I,SAASC,eAAe,kBACnB,MAAxBnJ,KAAKwjJ,iBAObgN,uBAAA1vJ,UAAA07E,cAAA,SAAcyV,GACVjyF,KAAKmrH,YAAcl5B,EACnBjyF,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAep4B,cAAerrH,KAAKkyF,cAAcr+E,KAAK7T,OAC1EA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAen4B,eAAgBtrH,KAAKurH,eAAe13G,KAAK7T,OAC5EA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAe9wB,YAAa3yH,KAAK4yF,YAAY/+E,KAAK7T,OACtEA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAeC,eAAgB1jJ,KAAK2jJ,cAAc9vI,KAAK7T,OAC3EA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAeG,qBAAsB5jJ,KAAK6jJ,oBAAoBhwI,KAAK7T,OACvFA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAeK,eAAgB9jJ,KAAK+jJ,eAAelwI,KAAK7T,OAC5EA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAe73B,gBAAiB5rH,KAAK6rH,gBAAgBh4G,KAAK7T,OAC9EA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAez3B,cAAehsH,KAAKykG,cAAc5wF,KAAK7T,OAC1EA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAeO,MAAOhkJ,KAAK49E,MAAM/pE,KAAK7T,OAC1DA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAex3B,cAAejsH,KAAK4jG,cAAc/vF,KAAK7T,OAC1EA,KAAKmrH,YAAYz3G,GAAG2vI,EAAAI,eAAeQ,MAAOjkJ,KAAK69E,MAAMhqE,KAAK7T,QAG9DwwJ,uBAAA1vJ,UAAAq8G,gBAAA,WACIn9G,KAAKy2E,QAAQ0mC,iBAAgBpxF,KACzBA,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,E5IoyxC7Bt+F,GAEJ,IAAIA,I4IlyxCTykI,uBAAA1vJ,UAAAizE,aAAA,WACI/zE,KAAKsxH,sBAAwBpoH,SAASC,eAAe,wBACrDnJ,KAAK2gJ,kBAAoBz3I,SAASC,eAAe,gBACjDnJ,KAAKkkJ,SAAWh7I,SAASC,eAAe,WACxCnJ,KAAKqiJ,cAAgBn5I,SAASC,eAAe,gBAE7CjG,EAAApC,UAAMizE,aAAYtzE,KAAAT,MAElBA,KAAKmrH,YAAYp3C,eAOS,MAAtB/zE,KAAK2wH,gBACL3wH,KAAK2wH,cAAcj/G,MAAMC,QAAU,QAEb,MAAtB3R,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,gBAIxD+uE,uBAAA1vJ,UAAAoxF,cAAA,WACI7jF,EAAA0B,cAAcitE,YAAYltE,EAAY8lE,MACtCvnE,EAAA0B,cAAcsuE,yBAAwB,IAG1CmyE,uBAAA1vJ,UAAAyqH,eAAA,aAUAilC,uBAAA1vJ,UAAA8xF,YAAA,WACQvkF,EAAA0B,cAAcylE,oBACdnnE,EAAA0B,cAAcqtE,mBAItBozE,uBAAA1vJ,UAAA02D,eAAA,SAAesmB,GACX,GAAIzvE,EAAA0B,cAAc2lE,eAAiBrnE,EAAA0B,cAAc4lE,aAAc,CAC3D,GAAImI,IAAWiyC,EAAA9F,YAAYC,iBACvB,MAGJ,IAAIlqH,KAAKy2E,QAAQ6mC,eAAex/B,GAAS,CAGrC,GAFA56E,EAAApC,UAAM02D,eAAc/2D,KAAAT,KAAC89E,GAEjBA,EAAOlhD,OAAO,EAAGwmH,EAAAj5B,YAAYE,WAAWt+G,UAAYq3I,EAAAj5B,YAAYE,WAAY,CAC5E,GAAI9pH,GAAamV,SAASooE,EAAOlhD,OAAOwmH,EAAAj5B,YAAYE,WAAWt+G,OAAQ+xE,EAAO/xE,QAC9E/L,MAAKmrH,YAAYoB,OAAOhsH,GAE5BP,KAAKy2E,QAAQ+mC,oBAEjB96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,mBAqCjDy2C,uBAAA1vJ,UAAAqU,MAAA,WACInV,KAAKy2E,QAAQ+mC,oBACb96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,iBACzC/5G,KAAKmrH,YAAYh2G,SAGrBq7I,uBAAA1vJ,UAAAk/I,KAAA,WACIhgJ,KAAK+/I,WAAW7qI,OAChBlV,KAAKs9E,UACLjvE,EAAA0B,cAAcmtE,WAGlBszE,uBAAA1vJ,UAAA69B,IAAA,WAC0C,MAAlCh8B,EAAAmG,YAAY6uE,aAAa1+D,OAAwD,MAAvCtW,EAAAmG,YAAY6uE,aAAawpE,aACnEv+I,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAAS26D,6BACT1gE,EAAAmG,YAAY6uE,aAAa1+D,MAAMlL,WAAa,IAAMpL,EAAAmG,YAAY6uE,aAAawpE,WAAWpzI,YAE1FnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS26D,6BACT1gE,EAAAmG,YAAY6uE,aAAa1+D,MAAMlL,WAAa,IAAMpL,EAAAmG,YAAY6uE,aAAawpE,WAAWpzI,aAI9F/N,KAAKmrH,YAAYxsF,OAGrB6xH,uBAAA1vJ,UAAAo/I,WAAA,WACIlgJ,KAAKy2E,QAAQ4mC,kBAAkB+lC,EAAAj5B,YAAYT,YAAY,GACvDhnH,EAAAyF,eAAeqvF,oBAAoB4rD,EAAAj5B,YAAYT,YAAY,IAG/D8mC,uBAAA1vJ,UAAA+qH,gBAAA,WACInpH,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,kBAG7Cy2C,uBAAA1vJ,UAAA27E,UAAA,WACIv5E,EAAApC,UAAM27E,UAASh8E,KAAAT,MACfA,KAAKmrH,YAAY1uC,YACjBz6E,EAAAqC,UAAUA,UAAUyhF,aAAcvxD,KAAMvyB,EAAAiD,cAAcC,KAAK4K,YAAY4nE,OACvE13E,KAAKosH,qBAAoB,GAErBpsH,KAAK8hJ,qBACL9hJ,KAAK8hJ,oBAAoBz4I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGzDzhF,KAAKkkJ,UACLlkJ,KAAKkkJ,SAAS76I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAG9CzhF,KAAKqiJ,eACLriJ,KAAKqiJ,cAAch5I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAG7B,MAAtBzhF,KAAK2wH,gBACL3wH,KAAK2wH,cAAcj/G,MAAMC,QAAU,SAGL,MAA9B3R,KAAKsxH,wBACLtxH,KAAKsxH,sBAAsB5/G,MAAMC,QAAU,SAGrB,MAAtB3R,KAAK2wH,eACL3wH,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGzB,MAA1BzhF,KAAK2gJ,mBACL3gJ,KAAK2gJ,kBAAkBt3I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGzB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAInE+uE,uBAAA1vJ,UAAA88E,MAAA,SAAMD,GAAA,SAAAA,OAAA,GACEtvE,EAAA0B,cAAc2lE,gBACY,MAAtB11E,KAAK2wH,eACL3wH,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAGlB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAG9B,MAA1BzhF,KAAK2gJ,mBACL3gJ,KAAK2gJ,kBAAkBt3I,UAAUC,IAAI5G,EAAAyF,eAAes5E,iBAKhE+uE,uBAAA1vJ,UAAA2jG,cAAA,WACIzkG,KAAKosH,sBAEDpsH,KAAK8hJ,qBACL9hJ,KAAK8hJ,oBAAoBz4I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGzDzhF,KAAKkkJ,UACLlkJ,KAAKkkJ,SAAS76I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAG9CzhF,KAAKqiJ,eACLriJ,KAAKqiJ,cAAch5I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAG7B,MAAtBzhF,KAAK2wH,gBACL3wH,KAAK2wH,cAAcj/G,MAAMC,QAAU,SAGL,MAA9B3R,KAAKsxH,wBACLtxH,KAAKsxH,sBAAsB5/G,MAAMC,QAAU,SAGrB,MAAtB3R,KAAK2wH,eACL3wH,KAAK2wH,cAActnH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGzB,MAA1BzhF,KAAK2gJ,mBACL3gJ,KAAK2gJ,kBAAkBt3I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAGzB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAInE+uE,uBAAA1vJ,UAAA+8E,MAAA,WACQ79E,KAAK8hJ,qBACL9hJ,KAAK8hJ,oBAAoBz4I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAGtDzhF,KAAKkkJ,UACLlkJ,KAAKkkJ,SAAS76I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAG3CzhF,KAAKqiJ,eACLriJ,KAAKqiJ,cAAch5I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAG1B,MAAtBzhF,KAAK2wH,eAA0B3wH,KAAK2wH,cAActnH,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACpFzhF,KAAK2wH,cAActnH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAGlB,MAA9BzhF,KAAKsxH,uBACLtxH,KAAKsxH,sBAAsBjoH,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAG9B,MAA1BzhF,KAAK2gJ,mBACL3gJ,KAAK2gJ,kBAAkBt3I,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAGxDzhF,KAAKmrH,YAAYttC,SAGrB2yE,uBAAA1vJ,UAAA8iG,cAAA,WAGIv1F,EAAA0B,cAAcotE,YAAYrtE,EAAY0nE,WAAW,IAGrDg5E,uBAAA1vJ,UAAAsrH,oBAAA,SAAoBnnF,GAahB,GAbgB,SAAAA,OAAA,GAChBjlC,KAAKy2E,QAAQynC,oBAAmBnyF,KAC5BA,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,EAC9Bt+F,EAACq3H,EAAAj5B,YAAYE,WAAa,IAAI,E5IqsxC7Bt+F,I4IjsxC2B,MAA5BppB,EAAAmG,YAAY6uE,cACsB,MAAlCh1E,EAAAmG,YAAY6uE,aAAa90D,OACe,MAAxClgB,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,MACjC,CACE,GAAsD,IAAlDxhJ,EAAAmG,YAAY6uE,aAAa90D,MAAMuhI,eAoB/B,YAnBK/1I,EAAA0B,cAAcylE,oBAGuB,MAAlC7yE,EAAAmG,YAAY6uE,aAAa1+D,OAAwD,MAAvCtW,EAAAmG,YAAY6uE,aAAawpE,aACnEv+I,EAAA4F,YAAYC,yBACRhG,EAAAiG,SAAS26D,6BACT1gE,EAAAmG,YAAY6uE,aAAa1+D,MAAMlL,WAC3B,IACApL,EAAAmG,YAAY6uE,aAAawpE,WAAWpzI,YAE5CnL,EAAA4F,YAAYm+D,kBACRlkE,EAAAiG,SAAS26D,6BACT1gE,EAAAmG,YAAY6uE,aAAa1+D,MAAMlL,WAC3B,IACApL,EAAAmG,YAAY6uE,aAAawpE,WAAWpzI,aAGhDM,EAAA0B,cAAcqtE,mBAhBdp9E,KAAK2+B,MAqBb,KAAK,GAAIv5B,KAAOzC,GAAAmG,YAAY6uE,aAAa90D,MAAMshI,MAAO,CAClD,GAAI5jJ,GAAaoC,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,MAAM/+I,GAAK7E,GACvDonE,EAAiBhlE,EAAAmG,YAAY6uE,aAAa90D,MAAMshI,MAAM/+I,GAAK+B,OAAO4G,UAE5D,OAANxN,GAAwB,MAAVonE,GAA6B,YAAXA,GAChC3nE,KAAKy2E,QAAQ4mC,kBAAkB+lC,EAAAj5B,YAAYE,WAAa9pH,GAAI,IAKxEqC,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS46D,4BAA6B3gE,EAAAmG,YAAY6uE,aAAa1+D,MAAMlL,YACnGnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS86D,wBAAyB7gE,EAAAmG,YAAY6uE,aAAawpE,WAAWpzI,YAEpGrL,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,gB5I0rxCxC,IAAIhuF,I4IvrxCTykI,uBAAA1vJ,UAAA6iJ,cAAA,WAEI/gJ,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS46D,4BAA6B3gE,EAAAmG,YAAY6uE,aAAa1+D,MAAMlL,YACnGnL,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS86D,wBAAyB7gE,EAAAmG,YAAY6uE,aAAawpE,WAAWpzI,aAcxGyiJ,uBAAA1vJ,UAAA+iJ,oBAAA,aAiBA2M,uBAAA1vJ,UAAAg+E,gBAAA,WACkC,MAA1B9+E,KAAK2gJ,mBAA6B3gJ,KAAK2gJ,kBAAkBt3I,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBAC3FzhF,KAAK2gJ,kBAAkBt3I,UAAUsN,OAAOjU,EAAAyF,eAAes5E,gBAI/D+uE,uBAAA1vJ,UAAAijJ,eAAA,WACI/jJ,KAAKosH,uBAGTokC,uBAAA1vJ,UAAAg8E,OAAA,WACI98E,KAAKmV,SAGTq7I,uBAAA1vJ,UAAAw8E,QAAA,WACIt9E,KAAKy2E,QAAQ+mC,oBACb96G,EAAAyF,eAAekvF,qBAAqBr3F,KAAK+5G,kBA1bjDy2C,uBAAAn1I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,c5IylyCxB8lI,yB4IxlyCoCj3C,EAAAG,cAA/Br5G,GAAAmwJ,uBAAsBA,G5IgmyC7B,SAASlwJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G6I9nyCjE5Z,EAAAzB,EAAwE,GACxEyb,EAAAzb,EAA6B,IAC7B0b,EAAA1b,EAA+B,IAC/B+B,EAAA/B,EAAgC,GAChC2b,EAAA3b,EAAmC,IACnCwzG,EAAAxzG,EAA0C,IAU1CswJ,EAAA,SAAAvtJ,GAAyC3B,EAAAkvJ,oBAAAvtJ,EAYrC,SAAAutJ,uBACIvtJ,EAAAzC,KAAAT,MAEAA,KAAKgc,SAAU,EACfhc,KAAKic,aAAc,EAEnBjc,KAAKuY,KAAUvY,KAAKkc,cAAa,IAAIta,EAAAoG,MAAMqQ,eA2iBnD,MAhiBIxX,QAAAkD,eAAW0sJ,oBAAA3vJ,UAAA,e7IymyCNkD,I6IzmyCL,WACI,MAAOhE,MAAKoc,c7I2myCXlY,YAAY,EACZC,cAAc,I6IpmyCnBssJ,oBAAA3vJ,UAAAyc,QAAA,SAAQC,GAoIJ,GAnIAxd,KAAKyc,gBAAgB,aAErBX,EAAAe,OAAOC,aAAa9c,MAEH,MAAbA,KAAK2d,OACL3d,KAAK2d,KAAOH,EAAKI,UASjBJ,EAAKU,aAAa,WAClBle,KAAK6d,MAAQS,WAAWd,EAAKe,aAAa,WAS1Cf,EAAKU,aAAa,cAClBle,KAAKoe,SAAW1I,SAAS8H,EAAKe,aAAa,cAS3Cf,EAAKU,aAAa,kBACyB,WAAvCV,EAAKe,aAAa,mBAElBve,KAAKoe,SAAWK,KAAKC,MAAsB,IAAhBD,KAAKE,UAAkB,KAWtDnB,EAAKU,aAAa,YAClBle,KAAKsR,MAAMwN,EAAIR,WAAWd,EAAKe,aAAa,YAU5Cf,EAAKU,aAAa,YAClBle,KAAKsR,MAAM0N,EAAIV,WAAWd,EAAKe,aAAa,YAS5Cf,EAAKU,aAAa,WAClBle,KAAKsR,MAAMwN,EAAIR,WAAWd,EAAKe,aAAa,UAC5Cve,KAAKsR,MAAM0N,EAAIV,WAAWd,EAAKe,aAAa,WAS5Cf,EAAKU,aAAa,OAClBle,KAAKof,SAASN,EAAIpJ,SAAS8H,EAAKe,aAAa,OAS7Cf,EAAKU,aAAa,OAClBle,KAAKof,SAASJ,EAAItJ,SAAS8H,EAAKe,aAAa,OAS7Cf,EAAKU,aAAa,YAClBle,KAAKwf,MAAMV,EAAIpJ,SAAS8H,EAAKe,aAAa,YAS1Cf,EAAKU,aAAa,YAClBle,KAAKwf,MAAMR,EAAItJ,SAAS8H,EAAKe,aAAa,YAS1Cf,EAAKU,aAAa,aAClBle,KAAK2f,QAAU/d,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAa,aAU1Df,EAAKU,aAAa,QAAS,CAE3B,IADA,GAAI6B,GAAgBvC,EAAKlG,cAAc0I,kBACxB,MAARD,GAAc,CACjB,GAAIA,EAAKnC,WAAaJ,EAAKe,aAAa,QAAS,CAC7C,GAAI0B,GAA6B,GAAIrE,GAAAsE,YACrCD,GAAate,OAAOoe,GACpB/f,KAAKmgB,KAAOF,EAEhBF,EAAOA,EAAKK,mBAGC,MAAbpgB,KAAKmgB,KAcb,GAAI3C,EAAKU,aAAa,cAAe,CACjC,GAAIoC,GAAQpe,EAAAqD,gBAAgBuJ,uBAAuB0O,EAAKe,aAAa,cAExD,OAAT+B,IACAtgB,KAAKugB,WAAa,GAAIvW,MAAKwW,OAAOF,GAC9B9C,EAAKU,aAAa,iBAClBle,KAAKugB,WAAWnB,SAASN,EAAIR,WAAWd,EAAKe,aAAa,iBAE1Df,EAAKU,aAAa,iBAClBle,KAAKugB,WAAWnB,SAASJ,EAAIV,WAAWd,EAAKe,aAAa,iBAEzDf,EAAKU,aAAa,oBACnBle,KAAK8R,SAAS9R,KAAKugB,YACnBvgB,KAAKmgB,KAAOngB,KAAKugB,aAS7BvgB,KAAK0wJ,uBAAuBlzI,GAC5Bxd,KAAK2wJ,oBAAoBnzI,GACzBxd,KAAK4wJ,uBAAuBpzI,GAC5Bxd,KAAK6wJ,oBAAoBrzI,IAgBrBizI,oBAAA3vJ,UAAA4vJ,uBAAR,SAA+BlzI,GAA/B,GAAA1E,GAAA9Y,IAGI,IACKwd,EAAKU,aAAay1F,EAAA2D,0BAA0Bp0F,mBAC5C1F,EAAKU,aAAay1F,EAAA2D,0BAA0Bn0F,kBAFjD,CAOA,GAAIM,GAAwB7hB,EAAAogB,WAAWC,YACnCzE,EAAKe,aAAao1F,EAAA2D,0BAA0Bp0F,mBAE5CQ,EAAwB9hB,EAAAogB,WAAWC,YACnCzE,EAAKe,aAAao1F,EAAA2D,0BAA0Bn0F,kBAGhD,IAAc,MAAVM,GAA4B,MAAVC,EAAtB,CAQA,GAAMnB,GAAwB/E,EAAKU,aAAay1F,EAAA2D,0BAA0B1zF,yBACpElO,SAAS8H,EAAKe,aAAao1F,EAAA2D,0BAA0B1zF,0BACrD,IACAvB,EAAoB7E,EAAKU,aAAay1F,EAAA2D,0BAA0B3zF,qBAChEnG,EAAKe,aAAao1F,EAAA2D,0BAA0B3zF,qBAC5C,KACAvE,EAAmB5B,EAAKU,aAAay1F,EAAA2D,0BAA0B/zF,yBAC/D/F,EAAKe,aAAao1F,EAAA2D,0BAA0B/zF,yBAC5C,IAEFnE,IAAYu0F,EAAA2D,0BAA0B9zF,8BAA8BzB,WACpE0B,EAASA,EAAOvB,IAAI,SAACtV,GACjB,MAAOA,GAAQkM,EAAKsG,SAASN,IAGjC4E,EAASA,EAAOxB,IAAI,SAACtV,GACjB,MAAOA,GAAQkM,EAAKsG,SAASJ,KAIrClD,EAAAe,OAAOmH,cAAchkB,MAAQyjB,SAAQC,SAAQrB,YAAWE,qBASpDkuI,oBAAA3vJ,UAAA6vJ,oBAAR,SAA4BnzI,GACxB,GAAKA,EAAKU,aAAay1F,EAAA2D,0BAA0B1xF,aAAjD,CAIA,GAAMI,GAAiCyqI,oBAAoBxqI,8BACvDzI,EAAKe,aAAao1F,EAAA2D,0BAA0B1xF,cAE1CrD,EAAwB/E,EAAKU,aAAay1F,EAAA2D,0BAA0B9wF,sBACpE9Q,SAAS8H,EAAKe,aAAao1F,EAAA2D,0BAA0B9wF,uBACrD,IACAnE,EAAoB7E,EAAKU,aAAay1F,EAAA2D,0BAA0B/wF,kBAChE/I,EAAKe,aAAao1F,EAAA2D,0BAA0B/wF,kBAC5C,IAENzK,GAAAe,OAAOkJ,WAAW/lB,MAAQgmB,cAAa3D,YAAWE,oBAS9CkuI,oBAAA3vJ,UAAA8vJ,uBAAR,SAA+BpzI,GAC3B,GAAKA,EAAKU,aAAay1F,EAAA2D,0BAA0BxyF,gBAAjD,CAIA,GAAMM,GAAyBxjB,EAAAogB,WAAWC,YACtCzE,EAAKe,aAAao1F,EAAA2D,0BAA0BxyF,gBAGhD,IAAe,MAAXM,EAAJ,CAQA,GAAM7C,GAAwB/E,EAAKU,aAAay1F,EAAA2D,0BAA0BhyF,yBACpE5P,SAAS8H,EAAKe,aAAao1F,EAAA2D,0BAA0BhyF,0BACrD,IACAjD,EAAoB7E,EAAKU,aAAay1F,EAAA2D,0BAA0BjyF,qBAChE7H,EAAKe,aAAao1F,EAAA2D,0BAA0BjyF,qBAC5C,KACF5C,EAAqB,CACzB,IAAIjF,EAAKU,aAAay1F,EAAA2D,0BAA0B/xF,sBAAuB,CACnE,GAAI5C,GAAiCnF,EAChCe,aAAao1F,EAAA2D,0BAA0B/xF,sBACvC3C,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,IAC7B6V,GAC8B,GAA1BE,EAAgB5W,OACV0S,KAAKoE,MAAMF,EAAgB,GAAKlE,KAAKE,UAAYgE,EAAgB,GAAKA,EAAgB,KACtFA,EAAgB,GAE9B7G,EAAAe,OAAOkI,cAAc/kB,MAAQolB,UAAS/C,YAAWE,gBAAeE,kBAS5DguI,oBAAA3vJ,UAAA+vJ,oBAAR,SAA4BrzI,GACxB,GAAKA,EAAKU,aAAay1F,EAAA2D,0BAA0B71F,aAAjD,CAIA,GAAMW,GAAwBxgB,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAao1F,EAAA2D,0BAA0B71F,aAEjG,IAAc,MAAVW,EAAJ,CAOA,GAAMG,GAAwB/E,EAAKU,aAAay1F,EAAA2D,0BAA0B90F,sBACpE9M,SAAS8H,EAAKe,aAAao1F,EAAA2D,0BAA0B90F,uBACrD,IACFC,EAAqB,CACzB,IAAIjF,EAAKU,aAAay1F,EAAA2D,0BAA0B50F,mBAAoB,CAChE,GAAIC,GAAiCnF,EAChCe,aAAao1F,EAAA2D,0BAA0B50F,mBACvCE,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,IAC7B6V,GAC8B,GAA1BE,EAAgB5W,OACV0S,KAAKoE,MAAMF,EAAgB,GAAKlE,KAAKE,UAAYgE,EAAgB,GAAKA,EAAgB,KACtFA,EAAgB,GAE9B,GAAMN,GAAoB7E,EAAKU,aAAay1F,EAAA2D,0BAA0Bh1F,kBAChE9E,EAAKe,aAAao1F,EAAA2D,0BAA0Bh1F,kBAC5C,IAENxG,GAAAe,OAAO6E,WAAW1hB,MAAQoiB,SAAQC,YAAWE,gBAAeE,kBAQjDguI,oBAAAxqI,8BAAf,SAA6C0B,GACzC,MAAOA,GACF1a,QAAQ,MAAO,IACf2V,MAAM,KACNV,IAAI,SAAC0F,GACF,MAAO,QAAQ1U,KAAK0U,GAAcA,EAAW1mB,MAAM,MAAO0hB,MAAM,MAAQgF,EAAYA,KAEvF1F,IAAI,SAAC0F,GACF,OAAS9I,EAAGR,WAAWsJ,EAAW,IAAK5I,EAAGV,WAAWsJ,EAAW,QAU5E6oI,oBAAA3vJ,UAAAa,OAAA,SAAO6b,GACHxd,KAAKud,QAAQC,IAGjBizI,oBAAA3vJ,UAAAqb,aAAA,WAKI,MAAO,IAOXtb,OAAAkD,eAAW0sJ,oBAAA3vJ,UAAA,U7Is7xCNkD,I6It7xCL,WACI,MAAOhE,MAAKgc,S7Iw7xCX9X,YAAY,EACZC,cAAc,I6It7xCnBtD,OAAAkD,eAAW0sJ,oBAAA3vJ,UAAA;A7Iy7xCNkD,I6Iz7xCL,WACI,MAAOhE,MAAKic,a7I27xCX/X,YAAY,EACZC,cAAc,I6Ir7xCnBtD,OAAAkD,eAAW0sJ,oBAAA3vJ,UAAA,O7Iw7xCNkD,I6Ix7xCL,WACI,MAAOhE,MAAKuY,M7I07xCXrU,YAAY,EACZC,cAAc,I6Ip7xCnBtD,OAAAkD,eAAW0sJ,oBAAA3vJ,UAAA,iB7Iu7xCNkD,I6Iv7xCL,WACI,MAAQhE,MAAauc,mB7Iy7xCpBrY,YAAY,EACZC,cAAc,I6Iv7xCnBssJ,oBAAA3vJ,UAAA0b,QAAA,SAAQzX,GACJ/E,KAAKyc,gBAAgB,WAEjB7a,EAAAoG,MAAMC,kBAAkBlD,KACxBA,EAAU0rJ,oBAAoB/zI,iBAGlC1c,KAAK2c,gBAAgB5X,GAEhBnD,EAAAoG,MAAMC,kBAAkBjI,KAAK4c,WAC9B1Z,EAAApC,UAAM0b,QAAO/b,KAAAT,KAAC+E,GAUlB/E,KAAKic,aAAc,GAObw0I,oBAAA3vJ,UAAA6b,gBAAV,SAA0B5X,GACtB+W,EAAAe,OAAOC,aAAa9c,OAGjBywJ,oBAAA3vJ,UAAAic,MAAP,WACI,KAAM,IAAIxC,OAAM,oBAMVk2I,oBAAA3vJ,UAAAkc,yBAAV,WACIhd,KAAKid,6BAMTwzI,oBAAA3vJ,UAAAmc,0BAAA,WACIjd,KAAKyc,gBAAgB,4BAErB,IAAIS,IACAN,UAAU,EAGd,IAAqB,MAAjB5c,KAAK4c,UAAoB5c,KAAK4c,SAAS7Q,OAAS,EAChD,IAAK,GAAIhM,GAAIC,KAAK4c,SAAS7Q,OAAS,EAAGhM,GAAK,EAAGA,IACnB,MAApBC,KAAK4c,SAAS7c,IACbC,KAAK4c,SAAS7c,GAAWyc,QAAQU,EAK9Cld,MAAKmd,kBAGCszI,oBAAA3vJ,UAAA2b,gBAAV,SAA0BW,KAWhBqzI,oBAAA3vJ,UAAAuc,aAAV,WACIrd,KAAKsd,iBAMTmzI,oBAAA3vJ,UAAAwc,cAAA,WACItd,KAAKyc,gBAAgB,kBACrBzc,KAAKgc,SAAU,GAkBTy0I,oBAAA3vJ,UAAA0R,IAAV,SAAcC,KAWJg+I,oBAAA3vJ,UAAA0gB,SAAV,SAAmB/O,KAtjBZg+I,oBAAA/zI,iBACHE,UAAU,GAHlB6zI,oBAAAp1I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB7I68yCxBwoI,sB6I58yCiCzmJ,KAAK8mJ,UAAUC,kBAA3C1wJ,GAAAowJ,oBAAmBA,G7Io9yC1B,SAASnwJ,EAAQD,EAASF,GAE/B,YACA,IAAIkb,GAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G8I1+yCjE5Z,EAAAzB,EAAwC,GACxC0b,EAAA1b,EAA+B,IAC/BgzG,EAAAhzG,EAA0B,IAC1BwzG,EAAAxzG,EAAwC,IAUxC6qB,EAAA,WACI,QAAAA,kBAuDJ,MAhDWA,eAAAlqB,UAAAa,OAAP,SAAc6b,EAAewzI,GACzB,GAAIxzI,EAAKU,aAAay1F,EAAAyD,wBAAwBC,eAEV,MAA5BlE,EAAAloF,UAAUmoF,gBAC2E,MAArFD,EAAAloF,UAAUmoF,eAAe51F,EAAKe,aAAao1F,EAAAyD,wBAAwBC,eACrE,CACE,GAAI45C,GAAc99C,EAAAloF,UAAUmoF,eAAe51F,EAAKe,aAAao1F,EAAAyD,wBAAwBC,cAE/D,OAAlB25C,EACAC,EAAYvzI,aAAaszI,GAEzBC,EAAYvzI,aAAaF,KAUzC3c,OAAAkD,eAAWinB,cAAAlqB,UAAA,iB9Iw9yCNkD,I8Ix9yCL,WACI,MAAQhE,MAAauc,mB9I09yCpBrY,YAAY,EACZC,cAAc,I8Il9yCT6mB,cAAAlqB,UAAA0R,IAAV,SAAcC,KAWJuY,cAAAlqB,UAAA0gB,SAAV,SAAmB/O,KAnDvBuY,cAAA3P,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAegD,gB9I0gzCxBA,iB8IzgzCK3qB,GAAA2qB,cAAaA,G9IihzCpB,SAAS1qB,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G+I1izCjE5Z,EAAAzB,EAA6C,GAC7C0b,EAAA1b,EAA+B,IAC/BktH,EAAAltH,EAAiC,IACjC44H,EAAA54H,EAA2D,KAI3D+wJ,EAAA,SAAAhuJ,GAA0C3B,EAAA2vJ,qBAAAhuJ,EAMtC,SAAAguJ,wBACIhuJ,EAAAzC,KAAAT,MAEAA,KAAK69H,WAAY,EACjB79H,KAAK+9H,WAAa,GAmM1B,MAhMImzB,sBAAApwJ,UAAA2c,aAAA,SAAaD,GACTta,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,GAEnBxd,KAAK2f,SAAU,GAGnBuxI,qBAAApwJ,UAAA4c,aAAA,SAAaF,GACTta,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,GAEfA,EAAKU,aAAa66G,EAAAzhB,0BAA0BC,aAC5Cv3G,KAAK69H,UAAYj8H,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAaw6G,EAAAzhB,0BAA0BC,aAGtF/5F,EAAKU,aAAa66G,EAAAzhB,0BAA0BE,cAC5Cx3G,KAAK+9H,WAAavgH,EAAKe,aAAaw6G,EAAAzhB,0BAA0BE,aAI9Dh6F,EAAKU,aAAa66G,EAAAzhB,0BAA0BI,QAC5C91G,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAaw6G,EAAAzhB,0BAA0BI,UAEjE91G,EAAAyI,YAAYC,cAAc4mJ,qBAAqBC,YAC/CnxJ,KAAKmV,MAAMnV,KAAK69H,WAEhB79H,KAAKoxJ,cAAcpxJ,KAAK69H,UAAWqzB,qBAAqBC,aAK5D3zI,EAAKU,aAAa66G,EAAAzhB,0BAA0BK,WAC5C/1G,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAaw6G,EAAAzhB,0BAA0BK,YAErE33G,KAAKq+H,WAIL7gH,EAAKU,aAAa66G,EAAAzhB,0BAA0BhC,OAC5C1zG,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAaw6G,EAAAzhB,0BAA0BhC,QAErEt1G,KAAKkV,OAILsI,EAAKU,aAAa66G,EAAAzhB,0BAA0BgnB,QAC5C18H,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAaw6G,EAAAzhB,0BAA0BgnB,UAEjE18H,EAAAyI,YAAYC,cAAc4mJ,qBAAqBC,YAC/CnxJ,KAAKu6D,QAELv6D,KAAKqxJ,cAAcH,qBAAqBC,aAK5C3zI,EAAKU,aAAa66G,EAAAzhB,0BAA0BinB,QAC5C38H,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAaw6G,EAAAzhB,0BAA0BinB,SAErEv+H,KAAK+oB,SAIbmoI,qBAAApwJ,UAAAqU,MAAA,SAAMquH,GAGF,GAHE,SAAAA,OAAA,GACFxjI,KAAK69H,UAAY2F,EACjBxjI,KAAK2f,SAAU,EACI,MAAf3f,KAAK2nG,OACL,IAAK,GAAIviG,KAAOpF,MAAK2nG,OACb3nG,KAAK2nG,OAAOviG,YAAgB2zH,GAAAe,iBAC5B95H,KAAK2nG,OAAOviG,GAAK+P,MAAMnV,KAAK69H,UAAW79H,KAAK+9H,aAM5DmzB,qBAAApwJ,UAAAswJ,cAAA,SAAc5tB,EAA2B8tB,GACrC,GADU,SAAA9tB,OAAA,IACL5hI,EAAAyI,YAAYC,cAAcgnJ,KAC3BtxJ,KAAK69H,UAAY2F,EACjBxjI,KAAK2f,SAAU,EAEI,MAAf3f,KAAK2nG,QACL,IAAK,GAAIviG,KAAOpF,MAAK2nG,OACbviG,EAAI+0B,QAAQm3H,OACRtxJ,KAAK2nG,OAAOviG,YAAgB2zH,GAAAe,iBAC5B95H,KAAK2nG,OAAOviG,GAAK+P,MAAMnV,KAAK69H,UAAW79H,KAAK+9H,aAQpEmzB,qBAAApwJ,UAAAu9H,SAAA,WACI,GAAmB,MAAfr+H,KAAK2nG,OACL,IAAK,GAAIviG,KAAOpF,MAAK2nG,OACb3nG,KAAK2nG,OAAOviG,YAAgB2zH,GAAAe,iBAC5B95H,KAAK2nG,OAAOviG,GAAKi5H,YAMjC6yB,qBAAApwJ,UAAAoU,KAAA,WAEI,GADAlV,KAAK2f,SAAU,EACI,MAAf3f,KAAK2nG,OACL,IAAK,GAAIviG,KAAOpF,MAAK2nG,OACb3nG,KAAK2nG,OAAOviG,YAAgB2zH,GAAAe,iBAC5B95H,KAAK2nG,OAAOviG,GAAK8P,QAMjCg8I,qBAAApwJ,UAAAy5D,MAAA,WACI,GAAmB,MAAfv6D,KAAK2nG,OACL,IAAK,GAAIviG,KAAOpF,MAAK2nG,OACb3nG,KAAK2nG,OAAOviG,YAAgB2zH,GAAAe,iBAC5B95H,KAAK2nG,OAAOviG,GAAKm1D,SAMjC22F,qBAAApwJ,UAAAuwJ,cAAA,SAAcC,GACV,IAAK1vJ,EAAAyI,YAAYC,cAAcgnJ,IACR,MAAftxJ,KAAK2nG,OACL,IAAK,GAAIviG,KAAOpF,MAAK2nG,OACbviG,EAAI+0B,QAAQm3H,OACRtxJ,KAAK2nG,OAAOviG,YAAgB2zH,GAAAe,iBAC5B95H,KAAK2nG,OAAOviG,GAAKm1D,SAQzC22F,qBAAApwJ,UAAAioB,MAAA,WAEI,GADA/oB,KAAK2f,SAAU,EACI,MAAf3f,KAAK2nG,OACL,IAAK,GAAIviG,KAAOpF,MAAK2nG,OACb3nG,KAAK2nG,OAAOviG,YAAgB2zH,GAAAe,iBAC5B95H,KAAK2nG,OAAOviG,GAAK2jB,SAgBjCmoI,qBAAApwJ,UAAAic,MAAA,WACI,GAAI3T,GAAgC,GAAI8nJ,qBAExC9nJ,GAAQsI,MAAQ1R,KAAK0R,MACrBtI,EAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQgV,SAAWpe,KAAKoe,SACxBhV,EAAQuW,QAAU3f,KAAK2f,QACvBvW,EAAQuU,KAAO3d,KAAK2d,KACpBvU,EAAQy0H,UAAY79H,KAAK69H,UACzBz0H,EAAQ20H,WAAa/9H,KAAK+9H,WAE1B30H,EAAQu+F,UACRv+F,EAAQ+T,gBACR,KAAK,GAAI/X,KAAOpF,MAAK2nG,OACjBv+F,EAAQu+F,OAAOviG,GAAOpF,KAAK2nG,OAAOviG,GAAK2X,QACvC3T,EAAQ0I,SAAS1I,EAAQu+F,OAAOviG,GAGpC,IAAuB,MAAnBpF,KAAKugB,WAAoB,CACzB,GAAIuvG,GAAc,GAAI9lH,MAAKwW,OAAqBxgB,KAAKugB,WAAY3R,QACjEkhH,GAAY1wG,SAASN,EAAI9e,KAAKugB,WAAWnB,SAASN,EAClDgxG,EAAY1wG,SAASJ,EAAIhf,KAAKugB,WAAWnB,SAASJ,EAElD5V,EAAQmX,WAAauvG,EACrB1mH,EAAQ0I,SAASg+G,GACjB1mH,EAAQ+W,KAAO2vG,EAInB,MADA1mH,GAAQiU,eACDjU,GA1MJ8nJ,qBAAAC,WAAqB,GAHhCD,qBAAA71I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB/I8szCxBipI,uB+I5szCkC7jC,EAAA0B,iBAA7B1uH,GAAA6wJ,qBAAoBA,G/IotzC3B,SAAS5wJ,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GgJvuzCjE5Z,EAAAzB,EAAwE,GAExEkoB,EAAAloB,EAA6B,IAC7B0b,EAAA1b,EAA+B,IAC/ByX,EAAAzX,EAA0C,GAC1C+B,EAAA/B,EAAgC,GAChCmoB,EAAAnoB,EAA4B,IAC5ByS,EAAAzS,EAA2E,GAGvEoxJ,EAAmB/tJ,OAAe,OAGtCguJ,EAAA,SAAAtuJ,GAAmC3B,EAAAiwJ,cAAAtuJ,EAuB/B,SAAAsuJ,iBACItuJ,EAAAzC,KAAAT,MArBIA,KAAAyxJ,eAAyB,GAuB7BzxJ,KAAK0xJ,WAAY,EACjB1xJ,KAAK49H,WAAY,EAEjB59H,KAAK2xJ,gBAAkB,EACvB3xJ,KAAK4xJ,aACL5xJ,KAAK6xJ,QAAU,GAAIN,GAEnBvxJ,KAAK8xJ,eAAiB9xJ,KAAK8xJ,eAAej+I,KAAK7T,MAC/CA,KAAK+xJ,kBAAoB/xJ,KAAK+xJ,kBAAkBl+I,KAAK7T,MACrDA,KAAKgyJ,iBAAmBhyJ,KAAKgyJ,iBAAiBn+I,KAAK7T,MACnDA,KAAKiyJ,eAAiBjyJ,KAAKiyJ,eAAep+I,KAAK7T,MAC/CA,KAAKkyJ,gBAAkBlyJ,KAAKkyJ,gBAAgBr+I,KAAK7T,MACjDA,KAAKmyJ,UAAYnyJ,KAAKmyJ,UAAUt+I,KAAK7T,MACrCA,KAAKoyJ,UAAYpyJ,KAAKoyJ,UAAUv+I,KAAK7T,MAErCA,KAAKqyJ,gBAAkBz/I,EAAAa,iBAAiB,mBACxCzT,KAAKsyJ,mBAAqB1/I,EAAAa,iBAAiB,mBAC3CzT,KAAKuyJ,eAAiB3/I,EAAAa,iBAAiB,mBA8+C/C,MA3+Cc+9I,eAAA1wJ,UAAA4X,cAAV,WACI1Y,KAAK6xJ,QAAQj3B,UAGjB/5H,OAAAkD,eAAcytJ,cAAA1wJ,UAAA,chJ2szCTkD,IgJ3szCL,WACI,MAAOhE,MAAKk+H,YhJ6szCXh6H,YAAY,EACZC,cAAc,IgJrszCnBqtJ,cAAA1wJ,UAAAa,OAAA,SAAO6b,GA+CH,GA9CAxd,KAAK4Y,OAAO2E,QAAQC,GAOhBA,EAAKU,aAAa,UAClBle,KAAKmvH,MAAQz5G,SAAS8H,EAAKe,aAAa,QAAS,KA2BjDf,EAAKU,aAAa,eAClBle,KAAK09H,WAAahoH,SAAS8H,EAAKe,aAAa,gBAU7Cf,EAAKU,aAAa,UAAYV,EAAKU,aAAa,aAC5CV,EAAKU,aAAa,UAClBle,KAAKo7H,OAAwB/yG,EAAAK,aAAaC,OAAOnL,EAAKe,aAAa,UACnEve,KAAKk+H,WAAal+H,KAAKo7H,OAAO59G,KAAKI,WAEnC5d,KAAKo7H,OAAwB/yG,EAAAK,aAAaC,OAAOnL,EAAKe,aAAa,WACnEve,KAAKk+H,WAAal+H,KAAKo7H,OAAO59G,KAAKI,UAGpB,MAAf5d,KAAKo7H,QAAgB,CAErB,IADA,GAAIr7G,GAAgB/f,KAAKo7H,OAAO59G,KAAKwC,kBACtB,MAARD,GAAc,CACjB,GAAsB,YAAlBA,EAAKnC,SAAwB,CAC7B,GAAI40I,GAA0B,GAAIC,QAAO3+I,OACzC9T,MAAK4xJ,UAAUlqI,KAAK8qI,EAGpB,KADA,GAAIE,GAAuB3yI,EAAKC,kBACV,MAAf0yI,GAAqB,CACxB,OAAQA,EAAY90I,UAChB,IAAK,OACD,GAAI80I,EAAYx0I,aAAa,QAAS,CAClC,GAAIy0I,GAAsB/wJ,EAAAogB,WAAWC,YACjCywI,EAAYn0I,aAAa,QAET,KAAhBo0I,EAAK5mJ,SACLymJ,EAAQG,KAAO,GAAIF,QAAOG,KAAKD,EAAK,GAAIA,EAAK,SAQ9C,IACHD,EAAYx0I,aAAa,cACzBw0I,EAAYx0I,aAAa,WAC3B,CACE,GAAI20I,GAA2BjxJ,EAAAogB,WAAWC,YACtCywI,EAAYn0I,aAAa,cAEzBu0I,EAAyBlxJ,EAAAogB,WAAWC,YACpCywI,EAAYn0I,aAAa,WAE7Bi0I,GAAQG,KAAO,GAAIF,QAAOG,KACtB,GAAIH,QAAOM,KAAKF,EAAU,GAAIA,EAAU,IACxC,GAAIJ,QAAOM,KAAKD,EAAQ,GAAIA,EAAQ,KAO5C,KACJ,KAAK,eACD9yJ,KAAKgzJ,mBAAmBN,EAAa1yJ,KAAK4xJ,UAAU5xJ,KAAK4xJ,UAAU7lJ,OAAS,GAC5E,MACJ,KAAK,aACD/L,KAAKizJ,iBAAiBP,EAAa1yJ,KAAK4xJ,UAAU5xJ,KAAK4xJ,UAAU7lJ,OAAS,IAOlF2mJ,EAAcA,EAAYtyI,mBAG1BL,EAAK7B,aAAa,QAClBs0I,EAAQv7I,KAAK8I,EAAKxB,aAAa,SAE/Bi0I,EAAQv7I,OAGR8I,EAAK7B,aAAa,OAClBs0I,EAAW,EAAE1zI,EAAIpJ,SAASqK,EAAKxB,aAAa,OAG5CwB,EAAK7B,aAAa,OAClBs0I,EAAW,EAAExzI,EAAItJ,SAASqK,EAAKxB,aAAa,OAGpDwB,EAAOA,EAAKK,mBAGhB,GAAsB,MAAlBpgB,KAAK4xJ,UAAmB,CACxB,IAAK,GAAI7xJ,GAAI,EAAGA,EAAIC,KAAK4xJ,UAAU7lJ,OAAQhM,IACvCC,KAAK6xJ,QAAQqB,WAAWlzJ,KAAK4xJ,UAAU7xJ,GAG3CC,MAAKmzJ,UAAY,GAAIV,QAAOhkJ,SAAS,QAASzO,KAAK6xJ,SACnD7xJ,KAAKmzJ,UAAUrB,eAAiB9xJ,KAAK8xJ,eACrC9xJ,KAAKmzJ,UAAUpB,kBAAoB/xJ,KAAK+xJ,kBACxC/xJ,KAAKmzJ,UAAUnB,iBAAmBhyJ,KAAKgyJ,iBACvChyJ,KAAKmzJ,UAAUlB,eAAiBjyJ,KAAKiyJ,eACrCjyJ,KAAK0xJ,WAAY,EACjB1xJ,KAAKgZ,gBAcdw4I,cAAA1wJ,UAAAsyJ,UAAP,SACIC,EACAC,EACAr8I,EACAs8I,EACAC,GAEIH,GACArzJ,KAAKyzJ,aAAaJ,EAAeC,EAAkBr8I,GAGnDs8I,GACAvzJ,KAAK0zJ,gBAAgBH,GAGrBC,GACAxzJ,KAAK2zJ,YAAYH,IAIjBhC,cAAA1wJ,UAAA2yJ,aAAR,SAAqBJ,EAAuBC,EAA0Br8I,GAClE,GAAIo8I,EAAe,CACf,GAAIv5D,GAA4Bu5D,EAAczwI,MAAM,KAAKV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,KAC7EA,EACAktF,EAAW/tF,OAAS,EACd+tF,EAAW,IAAMA,EAAW,GAAKr7E,KAAKoE,MAAMpE,KAAKE,UAAYm7E,EAAW,GAAKA,EAAW,MACxFA,EAAW,EAErB,IAAKlsE,MAAMhhB,IAiBJ,GAAIhL,EAAAyI,YAAY8D,aAAaklJ,KAChCrzJ,KAAKmV,MAAM8B,GACPq8I,GAAkB,CAClB,GAAIM,GAA+BN,EAAiB1wI,MAAM,KAAKV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,KACnFinJ,EACAD,EAAc7nJ,OAAS,EACjB6nJ,EAAc,IACbA,EAAc,GAAKn1I,KAAKoE,MAAMpE,KAAKE,UAAYi1I,EAAc,GAAKA,EAAc,MACjFA,EAAc,EACxB,KAAKhmI,MAAMimI,GAAW,CAClB,GAAIC,GAAYp+I,SAASuB,IAAS,CAClCjX,MAAKsyJ,mBAAmBp9I,OACxBlV,KAAKsyJ,mBAAmB5+I,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKq+H,SAASxqH,KAAK7T,OACzEA,KAAKsyJ,mBAAmBn9I,MAAM2+I,EAAYD,SA1BlD,IAHA7zJ,KAAKqyJ,gBAAgBn9I,OACrBlV,KAAKqyJ,gBAAgB3+I,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKmV,MAAMtB,KAAK7T,KAAMiX,IACzEjX,KAAKqyJ,gBAAgBl9I,MAAMvI,GACvB0mJ,EAAkB,CAClB,GAAIM,GAA+BN,EAAiB1wI,MAAM,KAAKV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,KACnFinJ,EACAD,EAAc7nJ,OAAS,EACjB6nJ,EAAc,IACbA,EAAc,GAAKn1I,KAAKoE,MAAMpE,KAAKE,UAAYi1I,EAAc,GAAKA,EAAc,MACjFA,EAAc,EACnBhmI,OAAMimI,KACP7zJ,KAAKsyJ,mBAAmBp9I,OACxBlV,KAAKsyJ,mBAAmB5+I,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKq+H,SAASxqH,KAAK7T,OACzEA,KAAKsyJ,mBAAmBn9I,MAAMvI,EAAQinJ,OAuBlDrC,cAAA1wJ,UAAA4yJ,gBAAR,SAAwBH,GACpB,GAAIA,EAAkB,CAClB,GAAIz5D,GAA4By5D,EAAiB3wI,MAAM,KAAKV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,KAChFA,EACAktF,EAAW/tF,OAAS,EACd+tF,EAAW,IAAMA,EAAW,GAAKr7E,KAAKoE,MAAMpE,KAAKE,UAAYm7E,EAAW,GAAKA,EAAW,MACxFA,EAAW,EAChBlsE,OAAMhhB,GAIAhL,EAAAyI,YAAY8D,aAAaolJ,IAChCvzJ,KAAKq+H,YAJLr+H,KAAKsyJ,mBAAmBp9I,OACxBlV,KAAKsyJ,mBAAmB5+I,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKq+H,SAASxqH,KAAK7T,OACzEA,KAAKsyJ,mBAAmBn9I,MAAMvI,MAOlC4kJ,cAAA1wJ,UAAA6yJ,YAAR,SAAoBH,GAChB,GAAIA,EAAc,CACd,GAAI15D,GAA4B05D,EAAa5wI,MAAM,KAAKV,IAAI,SAACtV,GAAU,MAAA8I,UAAS9I,KAC5EA,EACAktF,EAAW/tF,OAAS,EACd+tF,EAAW,IAAMA,EAAW,GAAKr7E,KAAKoE,MAAMpE,KAAKE,UAAYm7E,EAAW,GAAKA,EAAW,MACxFA,EAAW,EAChBlsE,OAAMhhB,GAIAhL,EAAAyI,YAAY8D,aAAaqlJ,IAChCxzJ,KAAKkV,QAJLlV,KAAKuyJ,eAAer9I,OACpBlV,KAAKuyJ,eAAe7+I,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKkV,KAAKrB,KAAK7T,OACjEA,KAAKuyJ,eAAep9I,MAAMvI,MAO/B4kJ,cAAA1wJ,UAAAygB,sBAAP,SAA6B/D,GACrBA,EAAKU,aAAa7d,EAAA0zJ,wBAAwBr8C,QAC1C13G,KAAKyzJ,aACDj2I,EAAKe,aAAale,EAAA0zJ,wBAAwBr8C,OAC1Cl6F,EAAKe,aAAale,EAAA0zJ,wBAAwB19C,UAC1C74F,EAAKe,aAAale,EAAA0zJ,wBAAwBnhB,OAI9Cp1H,EAAKU,aAAa7d,EAAA0zJ,wBAAwBp8C,WAC1C33G,KAAK0zJ,gBAAgBl2I,EAAKe,aAAale,EAAA0zJ,wBAAwBp8C,WAG/Dn6F,EAAKU,aAAa7d,EAAA0zJ,wBAAwBz+C,OAC1Ct1G,KAAK2zJ,YAAYn2I,EAAKe,aAAale,EAAA0zJ,wBAAwBz+C,QAInEk8C,cAAA1wJ,UAAAqU,MAAA,SAAM8B,GAIF,GAJE,SAAAA,MAAA,IACEjX,KAAK49H,YACL59H,KAAK49H,WAAY,GAEjB59H,KAAKg0J,eAAgB,CAOrB,GANsB,MAAlBh0J,KAAKmzJ,WACLnzJ,KAAKmzJ,UAAUj+I,OAGnBlV,KAAKi0J,eAEiB,MAAlBj0J,KAAK4xJ,WAAqB5xJ,KAAK4xJ,UAAU7lJ,OAAS,GACtC,IAARkL,EACA,IAAK,GAAIlX,GAAY,EAAGA,EAAIC,KAAK4xJ,UAAU7lJ,OAAQhM,IAC/CC,KAAK4xJ,UAAU7xJ,GAAGkX,KAAKA,EAIb,OAAlBjX,KAAKmzJ,YACLnzJ,KAAKmzJ,UAAUh+I,QACfnV,KAAK49H,WAAY,EACjB59H,KAAK0xJ,WAAY,EACjB1xJ,KAAK2Z,iBAKT63I,cAAA1wJ,UAAAu9H,SAAR,WACIr+H,KAAK0xJ,WAAY,EACjB1xJ,KAAK49H,WAAY,GAGb4zB,cAAA1wJ,UAAAgxJ,eAAR,WACI,GAAIoC,GAAWl0J,KAAK4xJ,UAAU,EAEK,UAA/BsC,EAAyB,gBAAiD,IAAjCA,EAAoB,UAAEnoJ,SAC/D/L,KAAK0xJ,WAAY,EACjB1xJ,KAAKgZ,aACLhZ,KAAKmzJ,UAAUj+I,OAEflV,KAAKi0J,gBAGLj0J,KAAK49H,YAAc59H,KAAK0xJ,WAAa1xJ,KAAK4Y,OAAOgE,SAAS7Q,QAAU,IACpE/L,KAAKgZ,aACLhZ,KAAKmzJ,UAAUj+I,SAIfs8I,cAAA1wJ,UAAAixJ,kBAAR,SAA0BrzB,GACtB,GAAI1+H,KAAK49H,aAAc,EAAO,CAC1Bc,EAAS6V,OAAS,KACK,MAAnB7V,EAAS6V,SACa,MAAlBv0I,KAAKm0J,WAAqBn0J,KAAKm0J,UAAUpoJ,OAAS,GAClDylJ,cAAc4C,KAAKp0J,KAAKyxJ,gBAAgB/pI,KAAKg3G,EAAS6V,QACtDv0I,KAAK4Y,OAAOw1B,YAAYswF,EAAS6V,UAEjCid,cAAc4C,KAAK11B,EAAS9zH,OAAOypJ,gBAAgB,IAAI3sI,KAAKg3G,EAAS6V,QACrEv0I,KAAK4Y,OAAOw1B,YAAYswF,EAAS6V,SAGzC,IAAI+f,GAAc,MACI,OAAlBt0J,KAAKm0J,WAAqBn0J,KAAKm0J,UAAUpoJ,OAAS,GACH,MAA3CylJ,cAAc4C,KAAKp0J,KAAKyxJ,kBACxBD,cAAc4C,KAAKp0J,KAAKyxJ,oBAG2B,IAAnDD,cAAc4C,KAAKp0J,KAAKyxJ,gBAAgB1lJ,QACxCuoJ,EAAiB,GAAItqJ,MAAKgzH,OAAOC,eAAej9H,KAAKm0J,WACrDG,EAAe32I,KAAO3d,KAAKyxJ,gBAE3B6C,EAAiB9C,cAAc4C,KAAKp0J,KAAKyxJ,gBAAgBzlI,QAG7DsoI,EAAejoE,MAAO,EACtBioE,EAAev4B,eAAiB/7H,KAAK2xJ,gBACrC2C,EAAev3H,SAE+C,MAA1Dy0H,cAAc4C,KAAK11B,EAAS9zH,OAAOypJ,gBAAgB,MACnD7C,cAAc4C,KAAK11B,EAAS9zH,OAAOypJ,gBAAgB,QAGe,IAAlE7C,cAAc4C,KAAK11B,EAAS9zH,OAAOypJ,gBAAgB,IAAItoJ,QACvDuoJ,EAAiB,GAAItqJ,MAAKwW,OAAOk+G,EAAS9zH,QAC1C0pJ,EAAe32I,KAAO+gH,EAAS9zH,OAAOypJ,gBAAgB,IAEtDC,EAAiB9C,cAAc4C,KAAK11B,EAAS9zH,OAAOypJ,gBAAgB,IAAIroI,SAG9D,MAAdhsB,KAAKmvH,QACLmlC,EAAe/pI,KAAOvqB,KAAKmvH,OAGR,MAAnBnvH,KAAK09H,aACL42B,EAAetqI,UAAY1B,EAAA2B,YAAYC,aAAalqB,KAAK09H,aAG7D42B,EAAe30I,SAAU,EACzB++G,EAAS6V,OAAS+f,EAClBt0J,KAAK4Y,OAAO9G,SAASwiJ,KAIrB9C,cAAA1wJ,UAAAkxJ,iBAAR,SAAyBtzB,GACL,MAAZA,GAAuC,MAAnBA,EAAS6V,QAC7Bv0I,KAAKkyJ,gBAAgBxzB,EAAS6V,OAAQ7V,IAItC8yB,cAAA1wJ,UAAAmxJ,eAAR,SAAuBvzB,GACI,MAAnBA,EAAS6V,SACT7V,EAAS6V,OAAO50H,SAAU,EACtB++G,EAAS6V,iBAAkBvqI,MAAKgzH,OAAOC,gBACvCyB,EAAS6V,OAAOr/H,OAEpBlV,KAAK4Y,OAAOw1B,YAAYswF,EAAS6V,SAGrC7V,EAAS6V,OAAS,KAClB7V,EAAS61B,MAAO,EAChB71B,EAAW,MAUP8yB,cAAA1wJ,UAAAoxJ,gBAAR,SAAwBoC,EAAqB51B,GAET,MAA5B41B,EAAe99I,WACd5U,EAAAoG,MAAMC,kBAAkBqsJ,IACxB1yJ,EAAAoG,MAAMC,kBAAkBy2H,GAYzBA,EAAS61B,MAAO,GAVhBD,EAAe30I,SAAU,EACzB20I,EAAel1I,SAASN,EAAI4/G,EAAS99H,EAAEke,EACvCw1I,EAAel1I,SAASJ,EAAI0/G,EAAS99H,EAAEoe,EACvCs1I,EAAehjJ,MAAMwN,EAAI4/G,EAASptH,MAClCgjJ,EAAehjJ,MAAM0N,EAAI0/G,EAASptH,MAClCgjJ,EAAeh4B,OAAOx9G,EAAI,GAC1Bw1I,EAAeh4B,OAAOt9G,EAAI,GAC1Bs1I,EAAez2I,MAAQ6gH,EAAS7gH,MAChCy2I,EAAel2I,SAAYsgH,EAAStgH,SAAWK,KAAKoJ,GAAM,MAWlE2pI,cAAA1wJ,UAAAoU,KAAA,WACIlV,KAAK0xJ,WAAY,EACjB1xJ,KAAK49H,WAAY,EACjB59H,KAAKgZ,YAEL,KAAK,GAAIjZ,GAAY,EAAGA,EAAIC,KAAK4xJ,UAAU7lJ,OAAQhM,IAC/CC,KAAK4xJ,UAAU7xJ,GAAGy0J,gBAGA,OAAlBx0J,KAAKmzJ,WACLnzJ,KAAKmzJ,UAAUj+I,OAGnBlV,KAAKi0J,gBAGTzC,cAAA1wJ,UAAAmzJ,aAAA,WACI,GAA4B,MAAxBj0J,KAAK4Y,OAAOgE,SAEZ,KAAuC,IAAhC5c,KAAK4Y,OAAOgE,SAAS7Q,QACO,MAA3B/L,KAAK4Y,OAAOgE,SAAS,KACC,MAAlB5c,KAAKm0J,WAAqBn0J,KAAKm0J,UAAUpoJ,OAAS,GACjD/L,KAAK4Y,OAAOgE,SAAS,GAAkC1H,OACxDs8I,cAAc4C,KAAKp0J,KAAKyxJ,gBAAgB/pI,KAAK1nB,KAAK4Y,OAAOgE,SAAS,KAElE40I,cAAc4C,KAAKp0J,KAAK4Y,OAAOgE,SAAS,GAAGe,MAAM+J,KAAK1nB,KAAK4Y,OAAOgE,SAAS,IAE/E5c,KAAK4Y,OAAOw1B,YAAYpuC,KAAK4Y,OAAOgE,SAAS,MAM7D40I,cAAA1wJ,UAAA6b,gBAAA,SAAgB5X,GAMZ,GALA/E,KAAK0xJ,WAAY,EACjB1xJ,KAAK49H,WAAY,EACjB59H,KAAKgZ,aACLhZ,KAAKm0J,UAAY,KAEK,MAAlBn0J,KAAK4xJ,WAAqB5xJ,KAAK4xJ,UAAU7lJ,OAAS,EAClD,IAAK,GAAIhM,GAAI,EAAGA,EAAIC,KAAK4xJ,UAAU7lJ,OAAQhM,IACd,MAArBC,KAAK4xJ,UAAU7xJ,KACfC,KAAK6xJ,QAAQ4C,cAAcz0J,KAAK4xJ,UAAU7xJ,IAC1CC,KAAK4xJ,UAAU7xJ,GAAGyc,UAClBxc,KAAK4xJ,UAAU7xJ,GAAK,KASV,OAAlBC,KAAKmzJ,YACLnzJ,KAAKmzJ,UAAUj+I,OACflV,KAAKmzJ,UAAY,MAGrBnzJ,KAAK6xJ,QAAQr1I,UACbxc,KAAK6xJ,QAAU,KAEf7xJ,KAAKi0J,gBAWDzC,cAAA1wJ,UAAAkyJ,mBAAR,SAA2Bx1I,EAAeg1I,GAEtC,IADA,GAAIzyI,GAAgBvC,EAAKwC,kBACV,MAARD,GAAc,CACjB,OAAQA,EAAKnC,UACT,IAAK,cACD,GAAI82I,GAAkC10J,KAAK20J,eAAe50I,EACvC,OAAf20I,GACAlC,EAAQoC,cAAcF,EAM1B,MACJ,KAAK,kBACD10J,KAAK60J,mBAAmB90I,EACxB,MACJ,KAAK,SACD,GAAIygH,GAAwBxgI,KAAK80J,UAAU/0I,EAC7B,OAAVygH,GACAgyB,EAAQoC,cAAcp0B,EAM1B,MACJ,KAAK,OACD,GAAIu0B,GAAoB/0J,KAAKg1J,QAAQj1I,EACzB,OAARg1I,GACAvC,EAAQoC,cAAcG,EAM1B,MACJ,KAAK,OACD,GAAI1zB,GAAoBrhI,KAAKi1J,QAAQl1I,EACzB,OAARshH,GACAmxB,EAAQoC,cAAcvzB,EAM1B,MACJ,KAAK,WACD,GAAIjiH,GAA4Bpf,KAAKk1J,YAAYn1I,EACjC,OAAZX,GACAozI,EAAQoC,cAAcx1I,EAM1B,MACJ,KAAK,WACD,GAAI+1I,GAA4Bn1J,KAAKo1J,YAAYr1I,EACjC,OAAZo1I,GACA3C,EAAQoC,cAAcO,GAYlCp1I,EAAOA,EAAKK,qBAaZoxI,cAAA1wJ,UAAA6zJ,eAAR,SAAuBn3I,GACnB,GAAIA,EAAKU,aAAa,SAAU,CAG5B,IAAK,GAFD27G,GAAqBr8G,EAAKe,aAAa,SAASqE,MAAM,KACtDyyI,KACKt1J,EAAY,EAAGA,EAAI85H,EAAI9tH,OAAQhM,IAAK,CACzC,GAAIi/H,GAAanF,EAAI95H,GACjB6O,EAAwB1M,EAAAqD,gBAAgBuJ,uBAAuBkwH,EACpD,OAAXpwH,GACAymJ,EAAY3tI,KAAK9Y,GAGzB,MAAmB,OAAfymJ,GAAuBA,EAAYtpJ,OAAS,EACrC,GAAI0mJ,QAAO6C,YAAYD,GAEvB,KAQf,MAAO,OAWH7D,cAAA1wJ,UAAA+zJ,mBAAR,SAA2Br3I,GACvB,GAAIA,EAAKU,aAAa,cAAgBV,EAAKU,aAAa,UAAW,CAC3DV,EAAKU,aAAa,WAClBle,KAAK2xJ,gBAAkBrzI,WAAWd,EAAKe,aAAa,WAGxDve,KAAKyxJ,eAAiBj0I,EAAKe,aAAa,aAExCve,KAAKm0J,YACL,KAAK,GAAIp0J,GAAI,EAAGA,EAAI2V,SAAS8H,EAAKe,aAAa,WAAa,EAAGxe,IAAK,CAChE,GAAIoN,GAAMpN,EAAI,GAAK,IAAMA,EAAIA,EACzB6O,EAAwB5E,KAAKywH,QAAQ86B,UAAU/3I,EAAKe,aAAa,aAAe,KAAOpR,EAC3FnN,MAAKm0J,UAAUzsI,KAAK9Y,MAaxB4iJ,cAAA1wJ,UAAAk0J,QAAR,SAAgBx3I,GACZ,GAAIA,EAAKU,aAAa,QAAS,CAC3B,GAAI27G,GAAqBj4H,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAa,QAClE,IAAmB,IAAfs7G,EAAI9tH,OACJ,MAAO,IAAI0mJ,QAAO+C,KAAK37B,EAAI,GAAIA,EAAI,GAAIA,EAAI,GACxC,IAAmB,IAAfA,EAAI9tH,OACX,MAAO,IAAI0mJ,QAAO+C,KAAK37B,EAAI,GAAIA,EAAI,GAChC,IAAmB,IAAfA,EAAI9tH,OACX,MAAO,IAAI0mJ,QAAO+C,KAAK37B,EAAI,IAWnC,MAAO,OAWH23B,cAAA1wJ,UAAAg0J,UAAR,SAAkBt3I,GACd,GAAIA,EAAKU,aAAa,UAAW,CAC7B,GAAI27G,GAAqBj4H,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAa,UAClE,IAAmB,IAAfs7G,EAAI9tH,OACJ,MAAO,IAAI0mJ,QAAOgD,OAAO57B,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAC1C,IAAmB,IAAfA,EAAI9tH,OACX,MAAO,IAAI0mJ,QAAOgD,OAAO57B,EAAI,GAAIA,EAAI,GAClC,IAAmB,IAAfA,EAAI9tH,OACX,MAAO,IAAI0mJ,QAAOgD,OAAO57B,EAAI,IAWrC,MAAO,OAWH23B,cAAA1wJ,UAAAm0J,QAAR,SAAgBz3I,GACZ,GAAIA,EAAKU,aAAa,QAAS,CAC3B,GAAI27G,GAAqBj4H,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAa,QAClE,IAAmB,IAAfs7G,EAAI9tH,OACJ,MAAO,IAAI0mJ,QAAOiD,KAAK77B,EAAI,GAAIA,EAAI,GAAIA,EAAI,GACxC,IAAmB,IAAfA,EAAI9tH,OACX,MAAO,IAAI0mJ,QAAOiD,KAAK77B,EAAI,GAAIA,EAAI,GAChC,IAAmB,IAAfA,EAAI9tH,OACX,MAAO,IAAI0mJ,QAAOiD,KAAK77B,EAAI,IAWnC,MAAO,OAaH23B,cAAA1wJ,UAAAo0J,YAAR,SAAoB13I,GAChB,GAAIm4I,GAAgBn4I,EAAKwC,iBACzB,OAAY,OAAR21I,EACO,GAAIlD,QAAOmD,SAAS51J,KAAK61J,QAAQF,IAMrC,MAWHnE,cAAA1wJ,UAAAs0J,YAAR,SAAoB53I,GAChB,GAAIs4I,GACAC,EACAxhI,CAsBJ,IApBI/W,EAAKe,aAAa,UAClBu3I,EAAOl0J,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAa,UAOhDf,EAAKe,aAAa,YAClBw3I,EAASn0J,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAa,YAOlDf,EAAKe,aAAa,UAClBgW,EAAO/W,EAAKe,aAAa,SAGjB,MAARu3I,GAA0B,MAAVC,EAAgB,CAChC,GAAIC,EAEAA,GADgB,IAAhBF,EAAK/pJ,OACM,GAAI0mJ,QAAOM,KAAK+C,EAAK,GAAIA,EAAK,IAE9BA,EAAK,EAGpB,IAAIG,EAMJ,OAJIA,GADkB,IAAlBF,EAAOhqJ,OACM,GAAI0mJ,QAAOM,KAAKgD,EAAO,GAAIA,EAAO,IAElCA,EAAO,GAEZ,MAARxhI,EACO,GAAIk+H,QAAOyD,SAASF,EAAUC,EAAY1hI,GAE1C,GAAIk+H,QAAOyD,SAASF,EAAUC,GAQ7C,MAAO,OASHzE,cAAA1wJ,UAAA+0J,QAAR,SAAgBr4I,GACZ,OAAQA,EAAKI,UACT,IAAK,WACD,GAAIu4I,GACAC,EACAC,EACAC,CAkCJ,IAhCI94I,EAAKU,aAAa,OAClBi4I,EAAYzgJ,SAAS8H,EAAKe,aAAa,OAOvCf,EAAKU,aAAa,OAClBk4I,EAAY1gJ,SAAS8H,EAAKe,aAAa,OAOvCf,EAAKU,aAAa,WAClBm4I,EAAgB3gJ,SAAS8H,EAAKe,aAAa,WAO3Cf,EAAKU,aAAa,YAClBo4I,EAAiB5gJ,SAAS8H,EAAKe,aAAa,YAO/B,MAAb43I,GAAkC,MAAbC,GAAsC,MAAjBC,GAA2C,MAAlBC,EACnE,MAAO,IAAI7D,QAAO8D,SAASJ,EAAWC,EAAWC,EAAeC,EAMpE,MACJ,KAAK,WACD,GAAIE,GACAC,EACAC,EACAC,EACAC,CAsCJ,IApCIp5I,EAAKU,aAAa,OAClBs4I,EAAY9gJ,SAAS8H,EAAKe,aAAa,OAOvCf,EAAKU,aAAa,OAClBu4I,EAAY/gJ,SAAS8H,EAAKe,aAAa,OAOvCf,EAAKU,aAAa,WAClBw4I,EAAgBhhJ,SAAS8H,EAAKe,aAAa,WAO3Cf,EAAKU,aAAa,YAClBy4I,EAAiBjhJ,SAAS8H,EAAKe,aAAa,YAO5Cf,EAAKU,aAAa,eAClB04I,EAAoBp5I,EAAKe,aAAa,cAGzB,MAAbi4I,GAAkC,MAAbC,GAAsC,MAAjBC,GAA2C,MAAlBC,EACnE,MAAyB,OAArBC,EACO,GAAInE,QAAOoE,SACdL,EACAC,EACAC,EACAC,EACAC,GAGG,GAAInE,QAAOoE,SAASL,EAAWC,EAAWC,EAAeC,EAQxE,MACJ,KAAK,aACD,GAAIG,GACAC,EACAC,CA0BJ,IAxBIx5I,EAAKU,aAAa,OAClB44I,EAAcphJ,SAAS8H,EAAKe,aAAa,OAOzCf,EAAKU,aAAa,OAClB64I,EAAcrhJ,SAAS8H,EAAKe,aAAa,OAOzCf,EAAKU,aAAa,YAClB84I,EAAmBthJ,SAAS8H,EAAKe,aAAa,YAO/B,MAAfu4I,GAAsC,MAAfC,GAA2C,MAApBC,EAC9C,MAAO,IAAIvE,QAAOwE,WAAWH,EAAaC,EAAaC,GAYnE,MAAO,OAWHxF,cAAA1wJ,UAAAmyJ,iBAAR,SAAyBz1I,EAAeg1I,GAEpC,IADA,GAAIzyI,GAAgBvC,EAAKwC,kBACV,MAARD,GAAc,CACjB,OAAQA,EAAKnC,UACT,IAAK,YACGmC,EAAK7B,aAAa,OAClBs0I,EAAQzzB,aAAa/+H,KAAKmyJ,UAAU7zI,WAAWyB,EAAKxB,aAAa,UAEjEi0I,EAAQzzB,aAAa/+H,KAAKmyJ,UAAU,GAExC,MACJ,KAAK,YACDK,EAAQzzB,aAAa/+H,KAAKoyJ,YAC1B,MACJ,KAAK,QACD,GAAIv0I,GAAsB7d,KAAKk3J,SAASn3I,EAC3B,OAATlC,GACA20I,EAAQzzB,aAAalhH,EAMzB,MACJ,KAAK,QACD,GAAIvM,GAAsBtR,KAAKm3J,SAASp3I,EAC3B,OAATzO,GACAkhJ,EAAQzzB,aAAaztH,EAMzB,MACJ,KAAK,SACD,GAAI8lJ,GAAwBp3J,KAAKq3J,UAAUt3I,EAC7B,OAAVq3I,GACA5E,EAAQzzB,aAAaq4B,EAMzB,MACJ,KAAK,QACD,GAAI3wJ,GAAsBzG,KAAKs3J,SAASv3I,EAC3B,OAATtZ,GACA+rJ,EAAQzzB,aAAat4H,EAMzB,MACJ,KAAK,YACD,GAAI8wJ,GAA8Bv3J,KAAKw3J,aAAaz3I,EACnC,OAAbw3I,GACA/E,EAAQzzB,aAAaw4B,EAMzB,MACJ,KAAK,cACD,GAAIE,GAAkCz3J,KAAK03J,eAAe33I,EACvC,OAAf03I,GACAjF,EAAQzzB,aAAa04B,EAMzB,MACJ,KAAK,UACD,GAAIE,GAA0B33J,KAAK43J,WAAW73I,EAC/B,OAAX43I,GACAnF,EAAQzzB,aAAa44B,GAYjC53I,EAAOA,EAAKK,qBAYpBoxI,cAAA1wJ,UAAAqxJ,UAAA,SAAU0F,GACN,GAAIngJ,GAAY1X,IAChB,QACI6D,WAAY,SAAU66H,KACtBo5B,eAAgB,SAAUp5B,GAClBA,EAASm5B,KAAOA,IAChBn5B,EAAoB,UAAU,OAAI,EAClCA,EAAoB,UAAU,OAAI,GAGlCA,EAASm5B,KAAOn5B,EAAS2C,OACF,MAAnB3C,EAAS6V,SACa,MAAlBv0I,KAAKm0J,WAAqBn0J,KAAKm0J,UAAUpoJ,OAAS,EAClDylJ,cAAc4C,KAAKp0J,KAAKyxJ,gBAAgB/pI,KAAKg3G,EAAS6V,QAEtDid,cAAc4C,KAAK11B,EAAS9zH,OAAOypJ,gBAAgB,IAAI3sI,KAAKg3G,EAAS6V,QAEzE78H,EAAKkB,OAAOw1B,YAAYswF,EAAS6V,SAErC7V,EAAS6V,OAAS,KAClB7V,EAAS61B,MAAO,EAChB71B,EAAW,SAa3B8yB,cAAA1wJ,UAAAsxJ,UAAA,WACI,GAAI16I,GAAY1X,IAChB,QACI6D,WAAY,SAAU66H,GAClBA,EAASptH,MAAQ,GAErBwmJ,eAAgB,SAAUp5B,GAClBA,EAASq5B,QAAU,EAAI,EACvBr5B,EAASptH,MAAgC,GAAvB,EAAIotH,EAASq5B,QACxBr5B,EAASq5B,QAAU,EAAI,IAC9Br5B,EAASptH,MAA0B,EAAlBotH,EAASq5B,QAE1Br5B,EAASptH,MAAQ,IACM,MAAnBotH,EAAS6V,SACa,MAAlBv0I,KAAKm0J,WAAqBn0J,KAAKm0J,UAAUpoJ,OAAS,EAClDylJ,cAAc4C,KAAKp0J,KAAKyxJ,gBAAgB/pI,KAAKg3G,EAAS6V,QAEtDid,cAAc4C,KAAK11B,EAAS9zH,OAAOypJ,gBAAgB,IAAI3sI,KAAKg3G,EAAS6V,QAEzE78H,EAAKkB,OAAOw1B,YAAYswF,EAAS6V,SAErC7V,EAAS6V,OAAS,KAClB7V,EAAS61B,MAAO,EAChB71B,EAAW,SAcnB8yB,cAAA1wJ,UAAAo2J,SAAR,SAAiB15I,GACb,GAAIrI,GACAwpB,EACA0iG,CAsBJ,OApBI7jH,GAAKU,aAAa,WAClB/I,EAAQmJ,WAAWd,EAAKe,aAAa,WAOrCf,EAAKU,aAAa,SAClBygB,EAAMrgB,WAAWd,EAAKe,aAAa,SAOnCf,EAAKU,aAAa,UAClBmjH,EAAO/iH,WAAWd,EAAKe,aAAa,UAG3B,MAATpJ,GAAwB,MAAPwpB,EACL,MAAR0iG,EACO,GAAIoxB,QAAOuF,MAAM7iJ,EAAOwpB,EAAK0iG,GAE7B,GAAIoxB,QAAOuF,MAAM7iJ,EAAOwpB,GAQhC,MAWH6yH,cAAA1wJ,UAAAq2J,SAAR,SAAiB35I,GACb,GAAIrI,GACAwpB,EACA0iG,CAkBJ,IAhBI7jH,EAAKU,aAAa,WAClB/I,EAAQvT,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAa,WAOjDf,EAAKU,aAAa,SAClBygB,EAAM/8B,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAa,SAG/Cf,EAAKU,aAAa,UAClBmjH,EAAO/iH,WAAWd,EAAKe,aAAa,UAG3B,MAATpJ,EAAe,CACf,GAAI8iJ,EAEAA,GADiB,IAAjB9iJ,EAAMpJ,OACM,GAAI0mJ,QAAOM,KAAK59I,EAAM,GAAIA,EAAM,IAEhCA,EAAM,EAGtB,IAAI+iJ,EASJ,OARW,OAAPv5H,IAEIu5H,EADe,IAAfv5H,EAAI5yB,OACM,GAAI0mJ,QAAOM,KAAKp0H,EAAI,GAAIA,EAAI,IAE5BA,EAAI,IAIL,MAAbs5H,GAAgC,MAAXC,GAA2B,MAAR72B,EACjC,GAAIoxB,QAAO0F,MAAMF,EAAWC,EAAS72B,GACxB,MAAb42B,GAAgC,MAAXC,EACrB,GAAIzF,QAAO0F,MAAMF,EAAWC,GAE5B,GAAIzF,QAAO0F,MAAMF,GAQhC,MAAO,OAWHzG,cAAA1wJ,UAAAu2J,UAAR,SAAkB75I,GACd,GAAIrI,GACAwpB,EACAjtB,CAEA8L,GAAKU,aAAa,WAClB/I,EAAQqI,EACHe,aAAa,SACbqE,MAAM,KACNV,IAAI,SAACtV,GAAU,MAACghB,OAAMtP,WAAW1R,IAAUA,EAAQ0R,WAAW1R,MAOnE4Q,EAAKU,aAAa,SAClBygB,EAAMnhB,EACDe,aAAa,OACbqE,MAAM,KACNV,IAAI,SAACtV,GAAU,MAACghB,OAAMtP,WAAW1R,IAAUA,EAAQ0R,WAAW1R,MAOnE4Q,EAAKU,aAAa,WAClBxM,EAAQ8L,EAAKe,aAAa,SAO9B,IAAI05I,GAAiB,GAAIxF,QAAOM,KAAK59I,EAAM,GAAIA,EAAMpJ,OAAS,EAAIoJ,EAAM,GAAKA,EAAM,IAE/E+iJ,EAAe,IAKnB,OAJIv5H,IAAOA,EAAI5yB,OAAS,IACpBmsJ,EAAU,GAAIzF,QAAOM,KAAKp0H,EAAI,GAAIA,EAAI5yB,OAAS,EAAI4yB,EAAI,GAAKA,EAAI,KAG7D,GAAI8zH,QAAO2F,OAAOH,EAAWC,EAASxmJ,IAWzC8/I,cAAA1wJ,UAAA42J,eAAR,SAAuBl6I,GACnB,GAAI66I,GACAC,EACAjqI,CA0BJ,OAxBI7Q,GAAKU,aAAa,YAClBm6I,EAAS/5I,WAAWd,EAAKe,aAAa,YAOtCf,EAAKU,aAAa,YAClBo6I,EAASh6I,WAAWd,EAAKe,aAAa,YAOtCf,EAAKU,aAAa,WAClBmQ,EAAQ/P,WAAWd,EAAKe,aAAa,WAO3B,MAAV85I,GAA4B,MAAVC,GAA2B,MAATjqI,EAC7B,GAAIokI,QAAO8F,YAAYF,EAAQC,EAAQjqI,GAO3C,MAWHmjI,cAAA1wJ,UAAA82J,WAAR,SAAmBp6I,GACf,GAAIm6I,EAUJ,OARIn6I,GAAKU,aAAa,aAClBy5I,EAAUr5I,WAAWd,EAAKe,aAAa,aAO5B,MAAXo5I,EACO,GAAIlF,QAAO+F,QAAQb,GAOvB,MAWHnG,cAAA1wJ,UAAAw2J,SAAR,SAAiB95I,GACb,GAAIzd,GACA85H,EACA4+B,EACAhyJ,KACAiyJ,IAEJ,IAAIl7I,EAAKU,aAAa,SAElB,IADA27G,EAAMr8G,EAAKe,aAAa,SAASqE,MAAM,KAClC7iB,EAAI,EAAGA,EAAI85H,EAAI9tH,OAAQhM,IACxB0G,EAAMihB,KAAK9lB,EAAAyI,YAAYsuJ,SAAS9+B,EAAI95H,IAQ5C,IAAIyd,EAAKU,aAAa,YAElB,IADAu6I,EAASj7I,EAAKe,aAAa,YAAYqE,MAAM,KACxC7iB,EAAI,EAAGA,EAAI04J,EAAO1sJ,OAAQhM,IAC3B24J,EAAShxI,KAAK9lB,EAAAyI,YAAYsuJ,SAASF,EAAO14J,IAIlD,OAAI0G,GAAMsF,OAAS,EACX2sJ,EAAS3sJ,OAAS,EACX,GAAI0mJ,QAAOhoC,MAAMhkH,EAAOiyJ,GAExB,GAAIjG,QAAOhoC,MAAMhkH,GAQzB,MAaH+qJ,cAAA1wJ,UAAA02J,aAAR,SAAqBh6I,GACjB,GAAIm4I,GACAphI,CAcJ,OAZ8B,OAA1B/W,EAAKwC,oBACL21I,EAAO31J,KAAK61J,QAAQr4I,EAAKwC,oBAOzBxC,EAAKU,aAAa,UAClBqW,EAAO/W,EAAKe,aAAa,SAGjB,MAARo3I,EACY,MAARphI,EACO,GAAIk+H,QAAOmG,UAAUjD,EAAMphI,GAE3B,GAAIk+H,QAAOmG,UAAUjD,GAQ7B,MASDnE,cAAA1wJ,UAAA0R,IAAV,SAAcC,KAOd++I,cAAA1wJ,UAAAic,MAAA,WACI,GAAI3T,GAAyB,GAAIooJ,cAEjCpoJ,GAAQwP,OAAOwG,SAASN,EAAI9e,KAAK4Y,OAAOwG,SAASN,EACjD1V,EAAQwP,OAAOwG,SAASJ,EAAIhf,KAAK4Y,OAAOwG,SAASJ,EACjD5V,EAAQwP,OAAO4G,MAAMV,EAAI9e,KAAK4Y,OAAO4G,MAAMV,EAC3C1V,EAAQwP,OAAO4G,MAAMR,EAAIhf,KAAK4Y,OAAO4G,MAAMR,EAC3C5V,EAAQwP,OAAOtH,MAAMwN,EAAI9e,KAAK4Y,OAAOtH,MAAMwN,EAC3C1V,EAAQwP,OAAOtH,MAAM0N,EAAIhf,KAAK4Y,OAAOtH,MAAM0N,EAC3C5V,EAAQwP,OAAO+G,QAAU3f,KAAK4Y,OAAO+G,OACrC,IAAInC,GAAgBtU,SAAS6iC,cAAc,WAK3C,OAJAvuB,GAAKrR,aAAa,SAAUnM,KAAKk+H,YAEjC90H,EAAQzH,OAAO6b,GACfpU,EAAQwP,OAAO0E,gBACRlU,GAthDJooJ,cAAA4C,QAFX5C,cAAAn2I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBhJw81CxBupI,gBgJv81C2B55I,EAAAmD,0BAAtB1a,GAAAmxJ,cAAaA,EA2hDbnxJ,EAAA0zJ,yBACTnhB,KAAM,OACNl7B,MAAO,QACPpC,KAAM,OACNqC,SAAU,WACVtB,SAAU,ahJs7yCR,SAAS/1G,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GiJ/+1CjE5Z,EAAAzB,EAA4C,GAC5C0b,EAAA1b,EAA+B,IAC/B8a,EAAA9a,EAA4B,IAC5B04J,EAAA14J,EAA0B,KAG1B24J,EAAA,SAAA51J,GAAsC3B,EAAAu3J,iBAAA51J,EAAtC,SAAA41J,oBAAsC51J,EAAA7B,MAAArB,KAAAmD,WAgBtC,MAfI21J,kBAAAh4J,UAAA2c,aAAA,SAAaD,KAIbs7I,iBAAAh4J,UAAA4c,aAAA,SAAaF,GACT,GAAIA,EAAKU,aAAa7d,EAAA04J,2BAA2BC,SAAU,CACvD,GAAMC,GAAUr3J,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAA04J,2BAA2BC,SACpFH,GAAAK,UAAUC,QAAQF,KAI1BH,iBAAAh4J,UAAAic,MAAA,WACI,GAAM3T,GAA4B,GAAI0vJ,iBACtC,OAAO1vJ,IAff0vJ,iBAAAz9I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBjJmg2CxB6wI,mBiJlg2C8B79I,EAAAG,YAAzB/a,GAAAy4J,iBAAgBA,EAkBhBz4J,EAAA04J,4BACTC,QAAS,YjJ0/1CP,SAAS14J,EAAQD,EAASF,GAE/B,YkJrh2CD,IAAAyC,GAAAzC,EAA4B,IAE5B+4J,EAAA,mBAAAA,cAsBA,MAXkBA,WAAAC,QAAd,SAAsBF,GAAA,SAAAA,MAAA,GACbr2J,EAAA4F,YAAY++D,kBAIQ,MAArBp0D,UAAUgmJ,SAIdhmJ,UAAUgmJ,QAAQF,IAE1BC,YAtBa74J,GAAA64J,UAASA,GlJyi2ChB,SAAS54J,EAAQD,GAEtB,cAKD,IAEM,SAASC,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GmJhk2CjE5Z,EAAAzB,EAA6C,GAC7Ck6H,EAAAl6H,EAAsB,IACtB0b,EAAA1b,EAA+B,IAC/BmoB,EAAAnoB,EAA4B,IAC5BwzG,EAAAxzG,EAAyC,IAUzCi5J,EAAA,SAAAl2J,GAAoC3B,EAAA63J,eAAAl2J,EAqBhC,SAAAk2J,kBACIl2J,EAAAzC,KAAAT,MAGAA,KAAKm8H,UAAY,GACjBn8H,KAAKy7H,OAAS,KACdz7H,KAAKq7H,WAAa,EAClBr7H,KAAKo8H,MAAQ,EACbp8H,KAAKqsF,MAAO,EACZrsF,KAAKkV,MAAO,EA+DpB,MAtDIkkJ,gBAAAt4J,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAQbxd,KAAKwd,KAAOA,EAERA,EAAKU,aAAay1F,EAAAqB,yBAAyBC,aAC3Cj1G,KAAKm8H,UAAY3+G,EAAKe,aAAao1F,EAAAqB,yBAAyBC,YAG5Dz3F,EAAKU,aAAay1F,EAAAqB,yBAAyBE,UAC3Cl1G,KAAKy7H,OAASj+G,EAAKe,aAAao1F,EAAAqB,yBAAyBE,QAAQtyF,MAAM,MAGvEpF,EAAKU,aAAay1F,EAAAqB,yBAAyBG,eAC3Cn1G,KAAKq7H,WAAa3lH,SAAS8H,EAAKe,aAAao1F,EAAAqB,yBAAyBG,eAGtE33F,EAAKU,aAAay1F,EAAAqB,yBAAyBI,aAC3Cp1G,KAAKs7H,SAAW5lH,SAAS8H,EAAKe,aAAao1F,EAAAqB,yBAAyBI,aAGpE53F,EAAKU,aAAay1F,EAAAqB,yBAAyBK,QAC3Cr1G,KAAKqsF,KAAOzqF,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAao1F,EAAAqB,yBAAyBK,QAGhF73F,EAAKU,aAAay1F,EAAAqB,yBAAyBM,QAC3Ct1G,KAAKkV,KAAOtT,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAao1F,EAAAqB,yBAAyBM,QAGhF93F,EAAKU,aAAay1F,EAAAqB,yBAAyB3Y,SAC3Cr8F,KAAKo8H,MAAQ99G,WAAWd,EAAKe,aAAao1F,EAAAqB,yBAAyB3Y,SAGnE7+E,EAAKU,aAAay1F,EAAAqB,yBAAyB/2F,SAC3Cje,KAAK6d,MAAQS,WAAWd,EAAKe,aAAao1F,EAAAqB,yBAAyB/2F,SAGnET,EAAKU,aAAay1F,EAAAqB,yBAAyBD,QAC3C/0G,KAAKuqB,KAAO7U,SAAS8H,EAAKe,aAAao1F,EAAAqB,yBAAyBD,MAAO,KAGvEv3F,EAAKU,aAAay1F,EAAAqB,yBAAyBjrF,cAC3C/pB,KAAKgqB,UAAY1B,EAAA2B,YAAYC,aAAaxU,SAAS8H,EAAKe,aAAao1F,EAAAqB,yBAAyBjrF,eAE9FvM,EAAKU,aAAay1F,EAAAqB,yBAAyBH,WAC3C70G,KAAKq3B,QAAUz1B,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAao1F,EAAAqB,yBAAyBH,YA3F/FukD,eAAA/9I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe6C,QnJ4m2CxBuuI,iBmJ3m2C4B/+B,EAAAxvG,MAAvBxqB,GAAA+4J,eAAcA,GnJmn2CrB,SAAS94J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GoJ7o2CjE5Z,EAAAzB,EAAgC,GAChCk6H,EAAAl6H,EAAsB,IACtB0b,EAAA1b,EAA+B,IAe/Bk5J,EAAA,SAAAn2J,GAAoC3B,EAAA83J,eAAAn2J,EAGhC,SAAAm2J,kBACIn2J,EAAAzC,KAAAT,MAeR,MANIq5J,gBAAAv4J,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAGbxd,KAAKwd,KAAOA,GAlBpB67I,eAAAh+I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe6C,QpJ6o2CxBwuI,iBoJ5o2C4Bh/B,EAAAxvG,MAAvBxqB,GAAAg5J,eAAcA,GpJop2CrB,SAAS/4J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GqJjr2CjE5Z,EAAAzB,EAAgC,GAChCk6H,EAAAl6H,EAAsB,IACtB0b,EAAA1b,EAA+B,IAG/Bm5J,EAAA,SAAAp2J,GAAiC3B,EAAA+3J,YAAAp2J,EAG7B,SAAAo2J,eACIp2J,EAAAzC,KAAAT,MAQR,MALIs5J,aAAAx4J,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKwd,KAAOA,GAXpB87I,YAAAj+I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe6C,QrJ6r2CxByuI,cqJ5r2CyBj/B,EAAAxvG,MAApBxqB,GAAAi5J,YAAWA,GrJos2ClB,SAASh5J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW;AAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GsJrt2CjE5Z,EAAAzB,EAA6C,GAC7Ck6H,EAAAl6H,EAAsB,IACtB0b,EAAA1b,EAA+B,IAW/Bo5J,EAAA,SAAAr2J,GAAgC3B,EAAAg4J,WAAAr2J,EAM5B,SAAAq2J,cACIr2J,EAAAzC,KAAAT,MAwBR,MAfIu5J,YAAAz4J,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAQbxd,KAAKwd,KAAOA,EAERA,EAAKU,aAAa,eAClBle,KAAKw5J,UAAY9jJ,SAAS8H,EAAKe,aAAa,gBA7BxDg7I,WAAAl+I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe6C,QtJ4t2CxB0uI,asJ3t2CwBl/B,EAAAxvG,MAAnBxqB,GAAAk5J,WAAUA,GtJmu2CjB,SAASj5J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GuJ5v2CjE5Z,EAAAzB,EAAgC,GAChCk6H,EAAAl6H,EAAsB,IACtBktH,EAAAltH,EAAiC,IACjC0b,EAAA1b,EAA+B,IAgC/Bs5J,EAAA,SAAAv2J,GAAmC3B,EAAAk4J,cAAAv2J,EAS/B,SAAAu2J,iBACIv2J,EAAAzC,KAAAT,MAEAA,KAAKy7H,UACLz7H,KAAK2yI,gBAqEb,MA5DI8mB,eAAA34J,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,EAGb,KADA,GAAIuC,GAAgBvC,EAAKwC,kBACV,MAARD,GAAc,CACjB,OAAQA,EAAKnC,UACT,IAAK,WACD5d,KAAKk4C,UAAY,GAAIm1E,GAAA0B,iBACrB/uH,KAAKk4C,UAAUv2C,OAAOoe,EACtB,MACJ,KAAK,WAED,IADA,GAAIw6G,GAAoBx6G,EAAKC,kBACV,MAAZu6G,GACCA,EAASr8G,aAAa,UAC8B,OAAhDle,KAAKy7H,OAAOlB,EAASh8G,aAAa,YAClCve,KAAKy7H,OAAOlB,EAASh8G,aAAa,UAAYg8G,GAY5B,UAAtBA,EAAS38G,WACT5d,KAAK69E,MAAQ08C,GAEjBA,EAAWA,EAASn6G,kBAExB,MACJ,KAAK,gBAED,IADA,GAAIm6G,GAAoBx6G,EAAKC,kBACV,MAAZu6G,GACCA,EAASr8G,aAAa,UACoC,OAAtDle,KAAK2yI,aAAapY,EAASh8G,aAAa,YACxCve,KAAK2yI,aAAapY,EAASh8G,aAAa,UAAYg8G,GAYlC,UAAtBA,EAAS38G,WACT5d,KAAKiyI,YAAc1X,GAEvBA,EAAWA,EAASn6G,mBAIhCL,EAAOA,EAAKK,qBAhFxBq5I,cAAAp+I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe6C,QvJky2CxB4uI,gBuJjy2C2Bp/B,EAAAxvG,MAAtBxqB,GAAAo5J,cAAaA,GvJyy2CpB,SAASn5J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MwJj12CpFsxG,GADA5yG,EAAuB,GACvBA,EAAyB,KAOzBu5J,EAAA,SAAAx2J,GAAiC3B,EAAAm4J,YAAAx2J,EAAjC,SAAAw2J,eAAiCx2J,EAAA7B,MAAArB,KAAAmD,WAkCjC,MAzBWu2J,aAAAC,YAAP,SAAmBp5J,GACf,MAAmB,OAAfP,KAAK45J,OACE55J,KAAK45J,OAAOr5J,GAShB,MASJm5J,YAAAlnJ,IAAP,SAAWC,KA5BJinJ,YAAAE,UAiCXF,aAlCiC3mD,EAAAG,SAApB7yG,GAAAq5J,YAAWA,GxJ822ClB,SAASp5J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GyJl42CjE5Z,EAAAzB,EAAgC,GAChC0b,EAAA1b,EAA+B,IAC/Byb,EAAAzb,EAA6B,IAG7B05J,EAAA,SAAA32J,GAAoC3B,EAAAs4J,eAAA32J,EAIhC,SAAA22J,kBACI32J,EAAAzC,KAAAT,MAmFR,MAhFW65J,gBAAA/4J,UAAA4c,aAAP,SAAoBF,GAChB,GAAIsL,IAAkB,CA2BtB,OAzBItL,GAAKU,aAAa7d,EAAAy5J,yBAAyB3vI,cAC3CnqB,KAAKof,SAASN,EAAIpJ,SAAS8H,EAAKe,aAAale,EAAAy5J,yBAAyB3vI,cAGtE3M,EAAKU,aAAa7d,EAAAy5J,yBAAyB1vI,cAC3CpqB,KAAKof,SAASJ,EAAItJ,SAAS8H,EAAKe,aAAale,EAAAy5J,yBAAyB1vI,cAGtE5M,EAAKU,aAAa7d,EAAAy5J,yBAAyBC,MAC3C/5J,KAAKuoB,GAAK7S,SAAS8H,EAAKe,aAAale,EAAAy5J,yBAAyBC,KAC9DjxI,GAAS,GAETtL,EAAKU,aAAa7d,EAAAy5J,yBAAyBE,MAC3Ch6J,KAAKwoB,GAAK9S,SAAS8H,EAAKe,aAAale,EAAAy5J,yBAAyBE,KAC9DlxI,GAAS,GAETtL,EAAKU,aAAa7d,EAAAy5J,yBAAyBG,MAC3Cj6J,KAAKk6J,IAAMxkJ,SAAS8H,EAAKe,aAAale,EAAAy5J,yBAAyBG,KAC/DnxI,GAAS,GAETtL,EAAKU,aAAa7d,EAAAy5J,yBAAyBK,MAC3Cn6J,KAAKo6J,IAAM1kJ,SAAS8H,EAAKe,aAAale,EAAAy5J,yBAAyBK,KAC/DrxI,GAAS,KAGR5lB,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,MAChBsL,IACA9oB,KAAK8oB,UACE,IAQZ+wI,eAAA/4J,UAAAgoB,OAAP,WACI9oB,KAAK+oB,QACL/oB,KAAKgpB,UAAUhpB,KAAKyoB,OAAQzoB,KAAKipB,YACjCjpB,KAAKkpB,UAAUlpB,KAAKmpB,WAAYnpB,KAAKopB,WAAYppB,KAAKqpB,YACtDrpB,KAAKq6J,YAAYr6J,KAAKuoB,GAAIvoB,KAAKwoB,GAAIxoB,KAAKk6J,IAAKl6J,KAAKo6J,KAClDp6J,KAAKypB,WAGTowI,eAAA/4J,UAAAic,MAAA,WACI,GAAI3T,GAA0B,GAAIywJ,eA8BlC,OA7BAzwJ,GAAQ+T,iBAER/T,EAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQgV,SAAWpe,KAAKoe,SACxBhV,EAAQuW,QAAU3f,KAAK2f,QACvBvW,EAAQyU,MAAQ7d,KAAK6d,MACrBzU,EAAQmhB,KAAOvqB,KAAKuqB,KACpBnhB,EAAQ4gB,UAAYhqB,KAAKgqB,UACzB5gB,EAAQuU,KAAO3d,KAAK2d,KACpBvU,EAAQgT,aAAepc,KAAKoc,aAE5BhT,EAAQ+f,WAAanpB,KAAKmpB,WAC1B/f,EAAQggB,WAAappB,KAAKopB,WAC1BhgB,EAAQigB,WAAarpB,KAAKqpB,WAC1BjgB,EAAQ6f,WAAajpB,KAAKipB,WAC1B7f,EAAQqf,OAASzoB,KAAKyoB,OAEtBrf,EAAQmf,GAAKvoB,KAAKuoB,GAClBnf,EAAQof,GAAKxoB,KAAKwoB,GAClBpf,EAAQ8wJ,IAAMl6J,KAAKk6J,IACnB9wJ,EAAQgxJ,IAAMp6J,KAAKo6J,IAEnBhxJ,EAAQ0f,SAED1f,GAvFfywJ,eAAAx+I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBzJg92CxB4xI,iByJ/82C4Bj+I,EAAAsE,aAAvB7f,GAAAw5J,eAAcA,EA0Fdx5J,EAAAy5J,0BAITC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJE,GAAI,KAEJhwI,WAAY,YACZC,WAAY,czJ232CV,SAAS9pB,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G0Jh/2CjE5Z,EAAAzB,EAAgC,GAChC0b,EAAA1b,EAA+B,IAC/B8a,EAAA9a,EAA4B,IAC5Bm9H,EAAAn9H,EAA6B,KAC7B24H,EAAA34H,EAAiC,KACjCmoB,EAAAnoB,EAA4B,IAS5Bm6J,EAAA,SAAAp3J,GAAuC3B,EAAA+4J,kBAAAp3J,EASnC,SAAAo3J,qBACIp3J,EAAAzC,KAAAT,MAJJA,KAAAmvH,MAAgB,SAChBnvH,KAAAgqB,UAAoB,EA4PxB,MAtPcswI,mBAAAx5J,UAAA6b,gBAAV,SAA0B5X,GAClB/E,KAAKu6J,cACLv6J,KAAKouC,YAAYpuC,KAAKu6J,aACtBv6J,KAAKu6J,YAAY/9I,UACjBxc,KAAKu6J,YAAc,MAEnBv6J,KAAKw6J,eACLx6J,KAAKouC,YAAYpuC,KAAKw6J,cACtBx6J,KAAKw6J,aAAah+I,UAClBxc,KAAKw6J,aAAe,OAI5B35J,OAAAkD,eAAIu2J,kBAAAx5J,UAAA,Q1Jo+2CCkD,I0Jp+2CL,WACI,MAAOhE,MAAKmvH,O1Js+2CX9yG,I0Jn+2CL,SAAS6yG,GACLlvH,KAAKmvH,MAAQD,EACTlvH,KAAKw6J,eACLx6J,KAAKw6J,aAAajwI,KAAOvqB,KAAKmvH,OAE9BnvH,KAAKu6J,cACLv6J,KAAKu6J,YAAYhwI,KAAOvqB,KAAKmvH,Q1Js+2ChCjrH,YAAY,EACZC,cAAc,I0J792CZm2J,kBAAAx5J,UAAA2c,aAAP,SAAoBD,GAChBta,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,GACnBxd,KAAK0d,aAAaF,IAGf88I,kBAAAx5J,UAAA4c,aAAP,SAAoBF,GAChBta,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,GAEfA,EAAKU,aAAau8I,EAA4B1wI,cAC9C/pB,KAAKgqB,UAAY1B,EAAA2B,YAAYC,aACzBxU,SAAS8H,EAAKe,aAAak8I,EAA4B1wI,cAI/D,IAAI2wI,GAAoB,KAEpBC,EAAqB36J,KAAK46J,WAAWp9I,EAAM,gBAC/C,IAAiB,MAAbm9I,EAYA,GAXIA,EAAUz8I,aAAa,WACvBw8I,EAAYC,EAAUp8I,aAAa,WAEnCo8I,EAAUz8I,aAAa,UAAYy8I,EAAUz8I,aAAa,WACtDle,KAAKw6J,eACLx6J,KAAKouC,YAAYpuC,KAAKw6J,cACtBx6J,KAAKw6J,aAAah+I,UAClBxc,KAAKw6J,aAAe,MAG5BG,EAAUxuJ,aAAa,YAAa,KAChCnM,KAAKw6J,aACLx6J,KAAKw6J,aAAa98I,aAAai9I,OAE/B,QAAQA,EAAUp8I,aAAa,UAC3B,IAAK,eACDve,KAAKw6J,aAAe,GAAIl9B,GAAA4B,aACxBl/H,KAAKw6J,aAAa74J,OAAOg5J,GACzB36J,KAAK8R,SAAS9R,KAAKw6J,aACnB,MACJ,KAAK,mBACDx6J,KAAKw6J,aAAe,GAAI1hC,GAAAkB,iBACxBh6H,KAAKw6J,aAAa74J,OAAOg5J,GACzB36J,KAAK8R,SAAS9R,KAAKw6J,cAMnC,GAAIK,GAAoB76J,KAAK46J,WAAWp9I,EAAM,eAC9C,IAAgB,MAAZq9I,EAAkB,CAClB,GAAIA,EAAS38I,aAAa,SAEtB,OAAQ28I,EAASt8I,aAAa,UAC1B,IAAK,IACL,IAAK,GACL,IAAK,UACGm8I,GACAG,EAAS1uJ,aAAa,QAASuuJ,EAAY,SAY3D,IAPIG,EAAS38I,aAAa,UAAY28I,EAAS38I,aAAa,WACpDle,KAAKu6J,cACLv6J,KAAKouC,YAAYpuC,KAAKu6J,aACtBv6J,KAAKu6J,YAAY/9I,UACjBxc,KAAKu6J,YAAc,MAGvBv6J,KAAKu6J,YACLv6J,KAAKu6J,YAAY78I,aAAam9I,OAE9B,QAAQA,EAASt8I,aAAa,UAC1B,IAAK,eACDve,KAAKu6J,YAAc,GAAIj9B,GAAA4B,aACvBl/H,KAAKu6J,YAAY54J,OAAOk5J,GACxB76J,KAAK86J,WAAW96J,KAAKu6J,YAAa,EAClC,MACJ,KAAK,mBACDv6J,KAAKu6J,YAAc,GAAIzhC,GAAAkB,iBACvBh6H,KAAKu6J,YAAY54J,OAAOk5J,GACxB76J,KAAK86J,WAAW96J,KAAKu6J,YAAa,IASlD,GAHI/8I,EAAKU,aAAau8I,EAA4B1lD,QAC9C/0G,KAAKuqB,KAAO7U,SAAS8H,EAAKe,aAAak8I,EAA4B1lD,MAAO,MAG1Ev3F,EAAKU,aAAau8I,EAA4BnlD,OAC9C93F,EAAKU,aAAau8I,EAA4B9lD,OAC9Cn3F,EAAKU,aAAau8I,EAA4B5lD,YAE1C70G,KAAKw6J,uBAAwB1hC,GAAAkB,kBAAoBh6H,KAAKu6J,sBAAuBzhC,GAAAkB,kBAAkB,CAC/F,GAAI+gC,GAAoB7xJ,SAAS6iC,cAAc,aAC3CvuB,GAAKU,aAAau8I,EAA4BnlD,OAC9CylD,EAAS5uJ,aACLsuJ,EAA4BnlD,KAC5B93F,EAAKe,aAAak8I,EAA4BnlD,OAGlD93F,EAAKU,aAAau8I,EAA4B9lD,OAC9ComD,EAAS5uJ,aACLsuJ,EAA4B9lD,KAC5Bn3F,EAAKe,aAAak8I,EAA4B9lD,OAGlDn3F,EAAKU,aAAau8I,EAA4B5lD,UAC9CkmD,EAAS5uJ,aACLsuJ,EAA4B5lD,QAC5Br3F,EAAKe,aAAak8I,EAA4B5lD,UAGlD70G,KAAKw6J,uBAAwB1hC,GAAAkB,kBAC7Bh6H,KAAKw6J,aAAa98I,aAAaq9I,GAE/B/6J,KAAKu6J,sBAAuBzhC,GAAAkB,kBAC5Bh6H,KAAKu6J,YAAY78I,aAAaq9I,GAK1C,OAAQ/6J,KAAKgqB,WACT,IAAK,GACGhqB,KAAKw6J,eACLx6J,KAAKw6J,aAAaxwI,UAAY1B,EAAA2B,YAAYC,aAAa,IAEvDlqB,KAAKu6J,cACLv6J,KAAKu6J,YAAYvwI,UAAY1B,EAAA2B,YAAYC,aAAalqB,KAAKgqB,WAE/D,MACJ,SACQhqB,KAAKw6J,eACLx6J,KAAKw6J,aAAaxwI,UAAY1B,EAAA2B,YAAYC,aAAalqB,KAAKgqB,YAE5DhqB,KAAKu6J,cACLv6J,KAAKu6J,YAAYvwI,UAAY1B,EAAA2B,YAAYC,aAAalqB,KAAKgqB,cAMnEswI,kBAAAx5J,UAAA85J,WAAR,SAAmBp9I,EAAew9I,GAAA,SAAAA,MAAA,eAC9B,IAAID,GAAoB,KACpBE,EAA0BR,EAA4BO,EAC1D,IAAKC,EAAL,CAMIz9I,EAAKU,aAAau8I,EAA4BO,MAC9B,MAAZD,IACAA,EAAW7xJ,SAAS6iC,cAAckvH,EAAkB,SAExDF,EAAS5uJ,aAAa,QAAS,gBAC/B4uJ,EAAS5uJ,aAAa,QAASqR,EAAKe,aAAak8I,EAA4BO,MAE7Ex9I,EAAKU,aAAau8I,EAA4BO,EAAY,aAC1C,MAAZD,IACAA,EAAW7xJ,SAAS6iC,cAAckvH,EAAkB,SAExDF,EAAS5uJ,aAAa,QAAS,oBAC/B4uJ,EAAS5uJ,aAAa,QAASqR,EAAKe,aAAak8I,EAA4BO,EAAY,YAE7F,KAAK,GAAI51J,KAAOq1J,GACZ,GAA2B,SAAvBr1J,EAAIkG,UAAU,EAAG,GAAe,CAChC,GAAI4vJ,GAAgBT,EAA4Br1J,EAC5CoY,GAAKU,aAAa+8I,EAAkBC,KACpB,MAAZH,IACAA,EAAW7xJ,SAAS6iC,cAAckvH,EAAkB,SAExDF,EAAS5uJ,aAAa+uJ,EAAe19I,EAAKe,aAAa08I,EAAkBC,KAIrF,MAAOH,KAQXT,kBAAAx5J,UAAAic,MAAA,WACI,GAAI3T,GAA6B,GAAIkxJ,kBAyBrC,OAvBAlxJ,GAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQyV,KAAKC,EAAI9e,KAAK6e,KAAKC,EAC3B1V,EAAQyV,KAAKG,EAAIhf,KAAK6e,KAAKG,EAC3B5V,EAAQuW,QAAU3f,KAAK2f,QACvBvW,EAAQuU,KAAO3d,KAAK2d,KAEpBvU,EAAQ+T,iBAEJnd,KAAKu6J,cACLnxJ,EAAQmxJ,YAAcv6J,KAAKu6J,YAAYx9I,QACvC3T,EAAQ0I,SAAS1I,EAAQmxJ,cAEzBv6J,KAAKw6J,eACLpxJ,EAAQoxJ,aAAex6J,KAAKw6J,aAAaz9I,QACzC3T,EAAQ0I,SAAS1I,EAAQoxJ,eAG7BpxJ,EAAQiU,eACDjU,GAlQfkxJ,kBAAAj/I,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB1Jws3CxBqyI,oB0Jvs3C+Br/I,EAAAG,YAA1B/a,GAAAi6J,kBAAiBA,CAqQ9B,IAAMG,IACFtyI,MAAO,QAEPgzI,aAAc,cACdC,mBAAoB,mBACpBC,cAAe,eACfC,oBAAqB,oBAErBC,WAAY,QACZC,aAAc,SACdC,aAAc,SACdC,gBAAiB,YACjBC,gBAAiB,YACjBC,cAAe,WACfC,WAAY,QACZC,aAAc,SACdC,aAAc,SACdC,YAAa,QACbC,YAAa,QACb9jD,OAAQ,IACRC,OAAQ,IAERruF,WAAY,YAEZ4qF,KAAM,OACNE,QAAS,UACTS,KAAM,OAENP,KAAM,S1Ju82CJ,SAASz0G,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G2Jlw3CjE5Z,EAAAzB,EAAgC,GAChC0b,EAAA1b,EAA+B,IAC/B2b,EAAA3b,EAAuB,IACvBqsI,EAAArsI,EAAwC,KACxC0yI,EAAA1yI,EAAiC,KAIjC+7J,EAAA,SAAAh5J,GAA8C3B,EAAA26J,yBAAAh5J,EAA9C,SAAAg5J,4BAA8Ch5J,EAAA7B,MAAArB,KAAAmD,WA4I9C,MAjIW+4J,0BAAAp7J,UAAA2c,aAAP,SAAoBD,GAChBta,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,GAEG,MAAlBxd,KAAKm8J,WACY,MAAbn8J,KAAKqzI,OACLrzI,KAAKm8J,UAAY,GAAItpB,GAAAY,iBACrBzzI,KAAKm8J,UAAUx8I,SAAU,EACzB3f,KAAKm8J,UAAU9oB,KAAOrzI,KAAKqzI,KAAO,QAClCrzI,KAAKm8J,UAAU58F,KAAOv/D,KAAKu/D,KAC3Bv/D,KAAKm8J,UAAUhpB,WAAa,GAAInpI,MAAKgzH,OAAOwW,WAAWxzI,KAAKu/D,MAAQ8zE,KAAMrzI,KAAKqzI,KAAO,UACtFrzI,KAAKm8J,UAAUrqJ,SAAS9R,KAAKm8J,UAAUhpB,YAEvCnzI,KAAK8R,SAAS9R,KAAKm8J,aAKxBD,yBAAAp7J,UAAA4c,aAAP,SAAoBF,GAChBta,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,GAEfA,EAAKU,aAAa,SAClBle,KAAKo8J,iBAQNF,yBAAAp7J,UAAAsyI,QAAP,WACIlwI,EAAApC,UAAMsyI,QAAO3yI,KAAAT,MAEbA,KAAKm8J,UAAU/8I,SAASN,EAAI9e,KAAKmzI,WAAW/zH,SAASN,EACrD9e,KAAKm8J,UAAU/8I,SAASJ,EAAIhf,KAAKmzI,WAAW/zH,SAASJ,GAO/Ck9I,yBAAAp7J,UAAAoyI,UAAV,WACIhwI,EAAApC,UAAMoyI,UAASzyI,KAAAT,MAEfA,KAAKm8J,UAAUhpB,WAAW5zE,KAAOv/D,KAAKmzI,WAAW5zE,MAO9C28F,yBAAAp7J,UAAAu7J,UAAP,cAAAvjJ,GAAA9Y,IACIA,MAAKm8J,UAAUx8I,SAAU,EAEzB7D,EAAAe,OAAOC,aAAa9c,KAAKm8J,UAAW,OACpCrgJ,EAAAe,OAAO6E,WAAW1hB,KAAKm8J,WACnB/5I,QAAS,EAAG,GACZG,cAAe,EACfE,WAAY,GACZgM,iBAAkB,WACd3S,EAAAe,OAAOC,aAAahE,EAAKqjJ,UAAW,OACpCrgJ,EAAAe,OAAO6E,WAAW5I,EAAKqjJ,WACnB/5I,QAAS,EAAG,EAAG,GACfG,cAAe,GACfkM,iBAAkB,WACd3V,EAAKqjJ,UAAUx8I,SAAU,SAOtCu8I,yBAAAp7J,UAAAs7J,cAAP,cAAAtjJ,GAAA9Y,IACIA,MAAKm8J,UAAUx8I,SAAU,EAEzB7D,EAAAe,OAAOC,aAAa9c,KAAKm8J,UAAW,OACpCrgJ,EAAAe,OAAO6E,WAAW1hB,KAAKm8J,WACnB/5I,QAAS,EAAG,GACZG,cAAe,EACfkM,iBAAkB,WACd3S,EAAAe,OAAOC,aAAahE,EAAKqjJ,UAAW,OACpCrgJ,EAAAe,OAAO6E,WAAW5I,EAAKqjJ,WACnB/5I,QAAS,EAAG,EAAG,GACfG,cAAe,GACfkM,iBAAkB,WACd3V,EAAKqjJ,UAAUx8I,SAAU,SAWtCu8I,yBAAAp7J,UAAAic,MAAP,WACI,GAAI3T,GAAoC,GAAI8yJ,yBA+B5C,OA9BA9yJ,GAAQuW,QAAU3f,KAAK2f,QACvBvW,EAAQyU,MAAQ7d,KAAK6d,MACrBzU,EAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQgV,SAAWpe,KAAKoe,SAExBhV,EAAQiqI,KAAOrzI,KAAKqzI,KACpBjqI,EAAQm2D,KAAOv/D,KAAKu/D,KACpBn2D,EAAQkqI,UAAYtzI,KAAKszI,UACzBlqI,EAAQmqI,aAAevzI,KAAKuzI,aAE5BnqI,EAAQ+sB,KAAOn2B,KAAKm2B,KACpB/sB,EAAQmlB,GAAKvuB,KAAKuuB,GAClBnlB,EAAQyP,SAAW7Y,KAAK6Y,SACxBzP,EAAQyZ,MAAQ7iB,KAAK6iB,MAErBzZ,EAAQ+pI,WAAa,GAAInpI,MAAKgzH,OAAOwW,WAAWxzI,KAAKu/D,MAAQ8zE,KAAMrzI,KAAKqzI,OACxEjqI,EAAQ0I,SAAS1I,EAAQ+pI,YAEzB/pI,EAAQ+yJ,UAAYn8J,KAAKm8J,UAAUp/I,QACnC3T,EAAQ+yJ,UAAUx8I,SAAU,EAC5BvW,EAAQ0I,SAAS1I,EAAQ+yJ,WAEzB/yJ,EAAQgqI,UACRhqI,EAAQiU,eAEDjU,GA3If8yJ,yBAAA7gJ,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB3Jy23CxBi0I,2B2Jx23CsC1vB,EAAAgE,wBAAjCnwI,GAAA67J,yBAAwBA,G3Jg33C/B,SAAS57J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G4Jp43CjE23G,EAAAhzH,EAAwB,KACxByB,EAAAzB,EAAgC,GAChC0b,EAAA1b,EAA+B,IAI/ByC,GADAzC,EAA2B,GAC3BA,EAA4B,KAC5BsC,EAAAtC,EAAyB,IACzB0gF,EAAA1gF,EAAyB,IAGzBs4F,EAAAt4F,EAA8B,IAC9Bw0I,EAAAx0I,EAAqB,KACrBm8J,EAAAn8J,EAA6B,KAG7BkO,EAAAlO,EAA8B,IAC9B2C,EAAA3C,EAA+B,IAG/Bo8J,EAAA,SAAAr5J,GAAqC3B,EAAAg7J,gBAAAr5J,EAArC,SAAAq5J,mBAAqCr5J,EAAA7B,MAAArB,KAAAmD,WAKzBnD,KAAAw8J,aAAuB,IAEvBx8J,KAAAy8J,YAAsB,EA6MlC,MA3MI57J,QAAAkD,eAAIw4J,gBAAAz7J,UAAA,a5J633CCkD,I4J733CL,WACI,MAAOhE,MAAKy8J,Y5J+33CXv4J,YAAY,EACZC,cAAc,I4J733CnBo4J,gBAAAz7J,UAAA+C,WAAA,SAAWoiG,EAAkByvB,GACzB,GAAIgnC,GAAqBjkE,EAAAO,cAAcvB,eAA8C,6BACjFilE,KACA18J,KAAK28J,iBAAmBD,EAAUx+I,aAAa,WAAaw+I,EAAUn+I,aAAa,WAAa,KAChGve,KAAK48J,gBAAkBF,EAAUx+I,aAAa,UAAYw+I,EAAUn+I,aAAa,UAAY,MAGjGrb,EAAApC,UAAM+C,WAAUpD,KAAAT,KAACimG,EAASyvB,IAG9B6mC,gBAAAz7J,UAAAghG,SAAA,SAAS1tF,EAAY+f,EAAwBovE,EAA6BizC,GAA1E,GAAA19H,GAAA9Y,IAuCI,IAvCiB,SAAAm0B,OAAA,GAAwB,SAAAovE,OAAA,GAA6B,SAAAizC,OAAA,GACtEx2I,KAAKy8J,WAAatoI,EAEdovE,GACAvjG,KAAKg1I,oBAAqB,EACE,MAAxBh1I,KAAKy2I,iBACLl9H,aAAavZ,KAAKy2I,iBAElBz2I,KAAKu2I,uCACLv2I,KAAKy2I,gBAAkB3hI,WACnB,WAAM,MAAAgE,GAAKgpF,SAAS,MAAM,GAAO,GAAO,IACxC9hG,KAAK02I,iCAGT12I,KAAKk1I,mBAAoB,GAEtBsB,GACqB,MAAxBx2I,KAAKy2I,iBACLl9H,aAAavZ,KAAKy2I,iBAEtBz2I,KAAKk1I,mBAAoB,IAEzBl1I,KAAKo1I,WAAWlgI,OAChBlV,KAAKi1I,qBAAsB,GAG3B9gH,IAC4B,MAAxBn0B,KAAKy2I,iBACLl9H,aAAavZ,KAAKy2I,iBAEtBz2I,KAAKk1I,mBAAoB,EACzBl1I,KAAKo1I,WAAWlgI,OAChBlV,KAAKi1I,qBAAsB,GAO3Bj1I,KAAKg1I,oBAAsBh1I,KAAKi1I,qBAAuBj1I,KAAKk1I,kBAAmB,CAE1E7mI,EAAA0B,cAAc0lE,mBACb3yE,EAAAuC,eAAe4jE,OAAyC,eAAhCnmE,EAAAuC,eAAe0iE,eAEzCnlE,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS45D,aAAc,KACrD1/D,EAAA4F,YAAYm+D,kBAAkBlkE,EAAAiG,SAAS65D,kBAAmB,KAG9D,IAAIo0E,EAcJ,IAZuC,MAAnC32I,KAAK60I,gBAAyB,SAC9B70I,KAAK60I,gBAAyB,QAAEvmH,QAAQ,SAAC6nH,GACrC,GAAIS,GAAwBT,EAAiBU,aACzC1iH,MAAOA,EACP2iH,eAAgBh+H,EAAKi8H,sBAErBoB,GAAiBY,iBACjBJ,EAAMC,IAEX52I,MAGY,MAAfA,KAAK80I,OACL,IAAK,GAAI/0I,GAAY,EAAGA,EAAIC,KAAKu1I,WAAYx1I,IACnB,MAAlBC,KAAK80I,OAAO/0I,IAC6B,IAArCC,KAAK+0I,qBAAqBhpI,SAC1B/L,KAAK80I,OAAO/0I,GAAGkpG,QAAQjpG,KAAK+0I,qBAAqBh1I,IAE9B,mBAAR42I,GACP32I,KAAK80I,OAAO/0I,GAAG+hG,SAAS3tE,EAAOwiH,EAAI52I,GAAGi3I,WAEtCh3I,KAAK80I,OAAO/0I,GAAG+hG,SAAS3tE,MAqB5CooI,gBAAAz7J,UAAA+7J,QAAR,SAAgBrvB,GACZ,MAAqBxtI,MAAK80I,OAAOtH,IAGrC+uB,gBAAAz7J,UAAA80H,cAAA,SAAc4X,GACV,GAAIsvB,GAAc98J,KAAK68J,QAAQrvB,EAS/B,IAPA3sD,EAAAl2D,SAASoS,KAAK,sBAAwBywG,GAEtCxtI,KAAKm1I,sBACLn1I,KAAK62H,kBAAoB2W,EACzBsvB,EAAYn9I,SAAU,EACtB3f,KAAKiX,KAAKk8G,EAAAe,QAAQyB,YAAa31H,KAAK+8J,eAEhC/8J,KAAKm1I,sBAAwBn1I,KAAKu1I,YAA6B,MAAfv1I,KAAK02H,OAAgB,CACrE71C,EAAAl2D,SAASzV,KAAK,mBAAoB,IAClC2rE,EAAAl2D,SAASzV,KAAK,wBAAyB,IACX,MAAxBlV,KAAKy2I,iBACLl9H,aAAavZ,KAAKy2I,iBAEtBz2I,KAAKo1I,WAAWlgI,OAChBlV,KAAKq1I,gBAAgB11H,SAAU,CAe/B3f,MAAKiX,KAAKk8G,EAAAe,QAAQhD,kBAIhBqrC,gBAAAz7J,UAAAk1I,YAAV,SAAsBtgB,GAClB,IAAK,GAAI31H,GAAY,EAAGA,EAAIC,KAAKu1I,WAAYx1I,IACzCC,KAAK80I,OAAOptH,KAAK,GAAI40I,GAAAU,aAGzB,KAAK,GAAIj9J,GAAY,EAAGA,EAAIC,KAAKu1I,WAAYx1I,IAAK,CAC9C,GAAM0iG,GAAOziG,KAAK80I,OAAO/0I,EAEzB,IAA+B,MAA3BC,KAAK+1I,mBAEL,IAAK,GADD3e,GAAyBp3H,KAAK+1I,mBAAmBnzH,MAAM,KAClDygB,EAAY,EAAGA,EAAI+zF,EAAQrrH,OAAQs3B,IACxCo/D,EAAKkqC,UAAUl0C,EAAAO,cAAcvB,eAAe2/B,EAAQ/zF,IAG5Do/D,GAAK9iF,SAAU,EAEf8iF,EAAK5+F,WACD9D,EAAI,EAAIC,KAAK80I,OAAO/0I,EAAI,GAAK,KAC7BA,EAAIC,KAAKu1I,WAAa,EAAIv1I,KAAK80I,OAAO/0I,EAAI,GAAK,KAC/CA,EACAC,KAAKi0H,SACLyB,EAAM31H,GACNC,KAAKw1I,OAAOz1I,GACZC,KAAKy1I,OAAO11I,GACZC,KAAK01I,oBACL,EACA,EACA11I,KAAKk5H,aACLl5H,KAAKm5H,cACLn5H,KAAK61I,YAAc91I,EACnBC,KAAK81I,WAAa/1I,GAEtB0iG,EAAK/uF,GAAGihI,EAAAuB,KAAKvgB,YAAa31H,KAAK41H,cAAc/hH,KAAK7T,OAClDyiG,EAAK/uF,GAAGihI,EAAAuB,KAAKyC,aAAc34I,KAAKi9J,eAAeppJ,KAAK7T,OACpDA,KAAKq1I,gBAAgBvjI,SAAS2wF,GAElCziG,KAAKq1I,gBAAgB11H,SAAU,GAG5B48I,gBAAAz7J,UAAAm8J,eAAP,SAAsBzvB,GAAtB,GAAA10H,GAAA9Y,IAC2C,OAAnCA,KAAK60I,gBAAyB,SAC9B70I,KAAK60I,gBAAyB,QAAEvmH,QAAQ,SAAC6nH,GACrC,GAAI+mB,GAAiB/mB,EAAiBsF,eAAejO,EACjD10H,GAAKg8H,OAAOtH,EAAY,IACxB10H,EAAK+jJ,QAAQrvB,EAAY,GAAG2vB,WAAWD,EAAOA,EAAQpkJ,EAAK0jJ,aAAe,MAKlFx8J,KAAKm1I,oBAAsB,IAAMn1I,KAAKu1I,YAAcv1I,KAAKy8J,aAClB,MAAnCz8J,KAAK60I,gBAAyB,SAC9B70I,KAAK60I,gBAAyB,QAAEvmH,QAAQ,SAAC6nH,GACrCA,EAAiBqE,cAAchN,MAhNnD+uB,gBAAAlhJ,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB5Juj4CxBs0I,kB4Jtj4C6BppC,EAAAe,QAAxB7zH,GAAAk8J,gBAAeA,G5J8j4CtB,SAASj8J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G6J9l4CjE5Z,EAAAzB,EAAgC,GAChC0b,EAAA1b,EAA+B,IAC/Bw0I,EAAAx0I,EAAqB,KACrBkqI,EAAAlqI,EAAuB,KACvBi9J,EAAAj9J,EAA+B,KAI/B68J,EAAA,SAAA95J,GAAkC3B,EAAAy7J,aAAA95J,EAAlC,SAAA85J,gBAAkC95J,EAAA7B,MAAArB,KAAAmD,WACtBnD,KAAAq9J,gBAA0B,KAkMtC,MAhMWL,cAAAl8J,UAAAs1H,YAAP,WAUI,IATAp2H,KAAKo4I,kBAAmB,EACxBp4I,KAAK0jG,YAAa,EAClB1jG,KAAKq4I,gBAAkB,EACvBr4I,KAAKs4I,WAAY,EACjBt4I,KAAKu4I,kBAELv4I,KAAK8e,EAAI9e,KAAK83I,UACd93I,KAAKgf,EAAIhf,KAAK+3I,UAEP/3I,KAAKkkG,eAAen4F,OAAS,GAChC/L,KAAKmrI,aAAanrI,KAAKkkG,eAAepiD,MAG1C,KAAK,GAAI/hD,GAAI,EAAGA,EAAIC,KAAKi4I,kBAAoBj4I,KAAK+sI,YAAc/sI,KAAKg4I,eAAgBj4I,IAAK,CACtF,GAAIulG,GAAQ,OACRkzC,EAAU,MAEVz4I,GAAIC,KAAKi4I,mBACT3yC,EACItlG,KAAK63I,OACA73I,KAAKotB,KAAKiX,MAAQrkC,KAAKi4I,kBAAoBj4I,KAAK+sI,YAAchtI,EAAI,EAAIC,KAAK63I,MAAM9rI,QAC9E/L,KAAK63I,MAAM9rI,QAEvBysI,EAAaz4I,IAAMC,KAAKi4I,kBAAoB,EAAI5N,EAAAE,OAAOM,aAAeR,EAAAE,OAAOO,UACtE/qI,EAAIC,KAAKi4I,kBAAoBj4I,KAAK+sI,aACzCznC,EAAWtlG,KAAKotB,KAAK64E,QAAQjmG,KAAKi4I,kBAAoBj4I,KAAK+sI,YAAchtI,EAAI,GAC7Ey4I,EAAanO,EAAAE,OAAOM,eAEpBvlC,EACItlG,KAAK63I,OACA73I,KAAKotB,KAAKiX,MAAQrkC,KAAKi4I,kBAAoBj4I,KAAK+sI,YAAchtI,EAAI,EAAIC,KAAK63I,MAAM9rI,QAC9E/L,KAAK63I,MAAM9rI,QAEvBysI,EAAaz4I,IAAMC,KAAKi4I,kBAAoBj4I,KAAK+sI,YAAc1C,EAAAE,OAAOM,aAAeR,EAAAE,OAAOO,UAGhF,IAAZxlC,GAAkBkzC,GAAcnO,EAAAE,OAAOM,eACvC2N,EAAanO,EAAAE,OAAOa,WAGxBprI,KAAKkkG,eAAexgE,QAAQ1jC,KAAKkrI,UAAU5lC,EAAW,EAAGkzC,IAEzDx4I,KAAK86J,WAAW96J,KAAKkkG,eAAe,GAAI,GAG5C,IAAK,GAAInkG,GAAI,EAAGA,EAAIC,KAAKkkG,eAAen4F,OAAQhM,IAAK,CACjD,GAAM0lG,GAASzlG,KAAKkkG,eAAenkG,EACnC0lG,GAAO3mF,GAAK2mF,EAAO4lC,QACnB5lC,EAAOzmF,EAAIhf,KAAK8rI,cAAgB/rI,EAAIC,KAAKg4I,gBAAkBvyC,EAAO6lC,UAIhE0xB,aAAAl8J,UAAAilG,SAAV,WACI,IAAK,GAAIhmG,GAAI,EAAGA,EAAIC,KAAKkkG,eAAen4F,OAAQhM,IAExCC,KAAKkkG,eAAenkG,GAAG05H,mBAAqB4Q,EAAAE,OAAOO,UACnD9qI,KAAKkkG,eAAenkG,GAAG05H,mBAAqB2jC,EAAAE,eAAeC,iBAK3Dv9J,KAAKkkG,eAAenkG,GAAG05H,kBAAoB4Q,EAAAE,OAAOM,cAClD7qI,KAAKkkG,eAAenkG,GAAGg3H,SAASsT,EAAAE,OAAOM,aAI/C3nI,GAAApC,UAAMilG,SAAQtlG,KAAAT,OAGRg9J,aAAAl8J,UAAAg4I,WAAV,WACI94I,KAAKmrI,aAAanrI,KAAKkkG,eAAepiD,OAElC9hD,KAAKo4I,mBAAqBp4I,KAAK0jG,aACL,OAAtB1jG,KAAK23I,aACL33I,KAAK0jG,YAAa,EACX1jG,KAAK23I,aAAaoB,mBACzB/4I,KAAK0jG,YAAa,IAI1B1jG,KAAKklG,YAAcllG,KAAKklG,WAAa,EAAIllG,KAAK63I,MAAM9rI,QAAU/L,KAAK63I,MAAM9rI,MAEzE,IAAIu5F,GAAWtlG,KAAK63I,MAAM73I,KAAKklG,YAC3BszC,EAAanO,EAAAE,OAAOO,QAEpB9qI,MAAK0jG,aACD1jG,KAAKq4I,gBAAkBr4I,KAAKi4I,mBAC5B3yC,EACItlG,KAAK63I,OACA73I,KAAKotB,KAAKiX,MACPrkC,KAAKi4I,kBACLj4I,KAAK+sI,YACL/sI,KAAKq4I,gBACL,EACAr4I,KAAK63I,MAAM9rI,QACX/L,KAAK63I,MAAM9rI,QAEvBysI,EACIx4I,KAAKq4I,kBAAoBr4I,KAAKi4I,kBAAoB,EAAI5N,EAAAE,OAAOM,aAAeR,EAAAE,OAAOO,UAChF9qI,KAAKq4I,gBAAkBr4I,KAAKi4I,kBAAoBj4I,KAAK+sI,aAC5DznC,EAAWtlG,KAAKotB,KAAK64E,QAAQjmG,KAAKi4I,kBAAoBj4I,KAAK+sI,YAAc/sI,KAAKq4I,gBAAkB,GAChGG,EAAanO,EAAAE,OAAOM,eAEpBvlC,EACItlG,KAAK63I,OACA73I,KAAKotB,KAAKiX,MACPrkC,KAAKi4I,kBACLj4I,KAAK+sI,YACL/sI,KAAKq4I,gBACL,EACAr4I,KAAK63I,MAAM9rI,QACX/L,KAAK63I,MAAM9rI,QAEvBysI,EACIx4I,KAAKq4I,kBAAoBr4I,KAAKi4I,kBAAoBj4I,KAAK+sI,YACjD1C,EAAAE,OAAOM,aACPR,EAAAE,OAAOO,UAGrB9qI,KAAKq4I,mBAGLr4I,KAAKs4I,WAAaE,GAAcnO,EAAAE,OAAOO,WACvC0N,EAAa4kB,EAAAE,eAAeC,iBAGhCv9J,KAAKkkG,eAAexgE,QAAQ1jC,KAAKkrI,UAAU5lC,EAAW,EAAGkzC,IAEzDx4I,KAAK86J,WAAW96J,KAAKkkG,eAAe,GAAI,EAExC,KAAK,GAAInkG,GAAI,EAAGA,EAAIC,KAAKkkG,eAAen4F,OAAQhM,IAAK,CACjD,GAAM0lG,GAASzlG,KAAKkkG,eAAenkG,EACnC0lG,GAAO3mF,GAAK2mF,EAAO4lC,QACnB5lC,EAAOzmF,EAAIhf,KAAK8rI,cAAgB/rI,EAAIC,KAAKg4I,gBAAkBvyC,EAAO6lC,QAIlEtrI,KAAK0jG,YACL1jG,KAAKq4I,kBAAoBr4I,KAAKi4I,kBAAoBj4I,KAAK+sI,YAAc/sI,KAAKg4I,eAE1Eh4I,KAAKqmG,eAELrmG,KAAK+lG,YAINi3D,aAAAl8J,UAAAq8J,WAAP,SAAkB7/F,EAAkBjvC,GAC5BA,GACIruB,KAAKq9J,iBACL9jJ,aAAavZ,KAAKq9J,iBAEtBr9J,KAAKq9J,gBAAkBvoJ,WACnB,SAAUwoD,GACNt9D,KAAKs4I,UAAYh7E,GACnBzpD,KAAK7T,KAAMs9D,GACbjvC,KAGAruB,KAAKq9J,kBACL9jJ,aAAavZ,KAAKq9J,iBAClBr9J,KAAKq9J,gBAAkB,MAE3Br9J,KAAKs4I,UAAYh7E,IAIlB0/F,aAAAl8J,UAAAuiG,UAAP,SAAiBh1E,GAAjB,GAAAvV,GAAA9Y,IACIA,MAAKo4I,kBAAmB,EACxBp4I,KAAK0jG,YAAa,EAClB1jG,KAAKq4I,gBAAkB,EACvBr4I,KAAKs4I,WAAY,EACjBt4I,KAAKu4I,kBACLv4I,KAAKy4I,UAAYz4I,KAAKo8H,MACtBp8H,KAAKklG,YAAcllG,KAAKotB,KAAKiX,MAAQrkC,KAAKg4I,eAAiBh4I,KAAK63I,MAAM9rI,QAAU/L,KAAK63I,MAAM9rI,OAEvFsiB,EAAQ,EACRvZ,WAAW,WACPgE,EAAK2tF,eACNp4E,GAEHruB,KAAKymG,eAINu2D,aAAAl8J,UAAA08J,QAAP,WACI,MAAOx9J,MAAKotB,KAAK64E,QAAQ9rE,QAAQ,UAG9B6iI,aAAAl8J,UAAA28J,cAAP,WACI,MAAOz9J,MAAKs4I,WAlMpB0kB,aAAA3hJ,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB7Jqw4CxB+0I,e6Jpw4C0BroB,EAAAuB,KAArB71I,GAAA28J,aAAYA,G7J4w4CnB,SAAS18J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G8Jhy4CjE5Z,EAAAzB,EAAgC,GAChC0b,EAAA1b,EAA+B,IAC/BkqI,EAAAlqI,EAAuB,KAIvBm9J,EAAA,SAAAp6J,GAAoC3B,EAAA+7J,eAAAp6J,EAApC,SAAAo6J,kBAAoCp6J,EAAA7B,MAAArB,KAAAmD,WAqCpC,MAjCIm6J,gBAAAx8J,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,IAGjB8/I,eAAAx8J,UAAAic,MAAA,WACI,GAAI3T,GAA0B,GAAIk0J,eAkBlC,OAhBAl0J,GAAQw/D,SAAW5oE,KAAK4oE,SAAS7rD,QACjC3T,EAAQ0I,SAAS1I,EAAQw/D,UAEzBx/D,EAAQsI,MAAQ1R,KAAK0R,MACrBtI,EAAQiiI,QAAUrrI,KAAKqrI,QACvBjiI,EAAQkiI,QAAUtrI,KAAKsrI,QACvBliI,EAAQyiI,YAAc7rI,KAAK6rI,YAC3BziI,EAAQ0iI,aAAe9rI,KAAK8rI,aAC5B1iI,EAAQuW,QAAU3f,KAAK2f,QACvBvW,UAAepJ,aACfoJ,EAAQsI,MAAQ1R,KAAK0R,MACrBtI,EAAQm4C,OAASvhD,KAAKuhD,OACtBn4C,EAAQmrB,KAAOv0B,KAAKu0B,KACpBnrB,EAAQmiI,YAAcvrI,KAAKurI,YAE3BniI,EAAQiU,eACDjU,GAGXk0J,eAAAx8J,UAAA48J,SAAA,SAASpuD,GACL,MAAItvG,MAAK4oE,SAAS++B,OAAO5mG,eAAeuuG,GAC7BtvG,KAAK4oE,SAAS++B,OAAO2H,GAGzB,MAlCJguD,eAAAC,gBAA0B,eAC1BD,eAAAK,UAAoB,QAH/BL,eAAAjiJ,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB9Jo04CxBq1I,iB8Jn04C4BjzB,EAAAE,OAAvBlqI,GAAAi9J,eAAcA,G9J204CrB,SAASh9J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G+J714CjE5Z,EAAAzB,EAA4C,GAC5C0b,EAAA1b,EAA+B,IAC/Byb,EAAAzb,EAA6B,IAE7By9J,EAAAz9J,EAAsC,KACtC09J,EAAA19J,EAAsC,KACtC29J,EAAA39J,EAAgD,KAChD49J,EAAA59J,EAA6C,KAC7C69J,EAAA79J,EAAqC,KACrC89J,EAAA99J,EAAyC,KACzC2b,EAAA3b,EAAuB,IACvB4b,EAAA5b,EAA2B,IAS3B+9J,EAAA,SAAAh7J,GAAiC3B,EAAA28J,YAAAh7J,EAS7B,SAAAg7J,eACIh7J,EAAAzC,KAAAT,MA4WR,MAzWck+J,aAAAp9J,UAAA6b,gBAAV,SAA0B5X,GACtB+W,EAAAe,OAAOC,aAAa9c,MACpBA,KAAKm+J,MAAQ,KACbn+J,KAAKo+J,gBAAkB,KACvBp+J,KAAKq+J,eAAiB,KACtBr+J,KAAKs+J,aAAe,MAGjBJ,YAAAp9J,UAAA4c,aAAP,SAAoBF,GAChB,GAAIsL,IAAkB,CAiBtB,OAfItL,GAAKU,aAAa7d,EAAAk+J,sBAAsBp0I,cACxCnqB,KAAKof,SAASN,EAAIpJ,SAAS8H,EAAKe,aAAale,EAAAk+J,sBAAsBp0I,cAGnE3M,EAAKU,aAAa7d,EAAAk+J,sBAAsBn0I,cACxCpqB,KAAKof,SAASJ,EAAItJ,SAAS8H,EAAKe,aAAale,EAAAk+J,sBAAsBn0I,cAGnE5M,EAAKU,aAAa7d,EAAAk+J,sBAAsBC,QACxCx+J,KAAKm+J,MAAQn+J,KAAKy+J,UAAUjhJ,EAAKe,aAAale,EAAAk+J,sBAAsBC,OACpE11I,GAAS,GAGb9oB,KAAK0+J,aAAalhJ,KAEbta,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,MAChBsL,IACA9oB,KAAK8oB,UACE,IAQXo1I,YAAAp9J,UAAA29J,UAAR,SAAkBE,GACdA,EAAQA,EAAM1xJ,QAAQ,OAAQ,KAAKA,QAAQ,YAAa,GAQxD,KAAK,GAJD2xJ,GACAC,EAJAC,EAA2BH,EAAM/7I,MAAM,KACvCm8I,KAIAC,GAA2B,EAEtB36H,EAAQ,EAAGA,EAAQy6H,EAAU/yJ,OAAQ,KAAM,CAChD,GAAIm9I,GAAMlpJ,KAAKi/J,UAAUH,EAAWz6H,EAAOu6H,EAAUC,EAAYG,EACjE,KAAK9V,IAAQA,EAAI9/I,QAAS,CACtBpJ,KAAKwhB,SACD,wBAA0Bm9I,EAAQ,eAAiBG,EAAU59J,MAAMmjC,GAAOnK,KAAK,KAAO,IAE1F,OAEJ0kI,EAAW1V,EAAI9/I,QACf41J,EAAkB9V,EAAInwG,SAClBmwG,EAAI9/I,kBAAmBw0J,GAAAsB,uBAAgD,KAAvBhW,EAAI9/I,QAAQkhG,UAC5Du0D,EAAa3V,EAAI9/I,SAErB21J,EAASr3I,KAAKk3I,GACdv6H,EAAQ6kH,EAAI7kH,MAGhB,MAAO06H,IAGHb,YAAAp9J,UAAAm+J,UAAR,SACI33G,EACAjjB,EACA86H,EACAN,EACAG,GAEA,GAJA,SAAAG,MAAA,MACA,SAAAN,MAAA,MACA,SAAAG,OAAA,GAEI13G,EAAMv7C,QAAUs4B,EAChB,MAAO,KAEX,IAEIy9F,GAFAx3B,EAAkB,iBAAiBp3F,KAAKo0C,EAAMjjB,GAAO,IAAMijB,EAAMjjB,GAAO,GAAK,KAC7E+6H,EAAgC,MAAX90D,CAEzB,IAAKA,EAeDw3B,EAAWx3B,GAAWA,EAAQ7/F,kBAb9B,IADA45B,IACK86H,EAEE,CACH,OAAQA,EAAU70D,SACd,IAAK,IACDA,EAAU,GACV,MACJ,SACIA,EAAU60D,EAAU70D,QAE5Bw3B,GAAYk9B,MATZ10D,GAAU,GAclB,IAAIhpG,IAAkB,GACjB89J,GAAa93G,EAAMjjB,GAAOt4B,OAAS,EAEpCzK,GAAS,EAET+iC,GAGJ,IAAI6kH,IACA9/I,QAAS,KACTi7B,MAAO,KACP0U,UAAW+oF,EAGf,QAAQx3B,GACJ,IAAK,IACL,IAAK,IACD,GAAIhjD,EAAMv7C,OAASs4B,EACf,MAAO,KAEX,IAAI9B,GAAKviC,KAAKq/J,UAAU/9J,EAASgmD,EAAMjjB,GAAOzH,OAAO,GAAK0qB,EAAMjjB,GAChE6kH,GAAI9/I,QAAU,GAAIw0J,GAAAsB,uBACbp9B,GAAyB,MAAbq9B,EAAoBA,EAAUrgJ,EAAI,GAAKyjB,EAAGzjB,GACtDgjH,GAAyB,MAAbq9B,EAAoBA,EAAUngJ,EAAI,GAAKujB,EAAGvjB,GAE3DkqI,EAAI7kH,MAAQA,EAAQ,CACpB,MACJ,KAAK,IACL,IAAK,IACD,GAAIijB,EAAMv7C,OAASs4B,EACf,MAAO,KAEX,IAAIi7H,GAAKt/J,KAAKq/J,UAAU/9J,EAASgmD,EAAMjjB,GAAOzH,OAAO,GAAK0qB,EAAMjjB,GAChE6kH,GAAI9/I,QAAU,GAAIy0J,GAAA0B,uBACbz9B,GAAyB,MAAbq9B,EAAoBA,EAAUrgJ,EAAI,GAAKwgJ,EAAGxgJ,GACtDgjH,GAAyB,MAAbq9B,EAAoBA,EAAUngJ,EAAI,GAAKsgJ,EAAGtgJ,GAE3DkqI,EAAI7kH,MAAQA,EAAQ,CACpB,MAEJ,KAAK,IACL,IAAK,IACD,GAAIijB,EAAMv7C,OAAS,EAAIs4B,EACnB,MAAO,KAEX,IAAIjD,GAAKphC,KAAKq/J,UAAU/9J,EAASgmD,EAAMjjB,GAAOzH,OAAO,GAAK0qB,EAAMjjB,IAC5DhD,EAAKrhC,KAAKq/J,UAAU/3G,EAAMjjB,EAAQ,GACtC6kH,GAAI9/I,QAAU,GAAI00J,GAAA0B,iCACb19B,GAAyB,MAAbq9B,EAAoBA,EAAUrgJ,EAAI,GAAKsiB,EAAGtiB,GACtDgjH,GAAyB,MAAbq9B,EAAoBA,EAAUngJ,EAAI,GAAKoiB,EAAGpiB,GACtD8iH,GAAyB,MAAbq9B,EAAoBA,EAAUrgJ,EAAI,GAAKuiB,EAAGviB,GACtDgjH,GAAyB,MAAbq9B,EAAoBA,EAAUngJ,EAAI,GAAKqiB,EAAGriB,GAE3DkqI,EAAI7kH,MAAQA,EAAQ,CACpB,MAEJ,KAAK,IACL,IAAK,IACD,GAAIijB,EAAMv7C,OAAS,EAAIs4B,EACnB,MAAO,KAEX,IAAIo7H,GAAKz/J,KAAKq/J,UAAU/9J,EAASgmD,EAAMjjB,GAAOzH,OAAO,GAAK0qB,EAAMjjB,IAC5Dq7H,EAAK1/J,KAAKq/J,UAAU/3G,EAAMjjB,EAAQ,IAClCs7H,EAAK3/J,KAAKq/J,UAAU/3G,EAAMjjB,EAAQ,GACtC6kH,GAAI9/I,QAAU,GAAI20J,GAAA6B,8BACb99B,GAAyB,MAAbq9B,EAAoBA,EAAUrgJ,EAAI,GAAK2gJ,EAAG3gJ,GACtDgjH,GAAyB,MAAbq9B,EAAoBA,EAAUngJ,EAAI,GAAKygJ,EAAGzgJ,GACtD8iH,GAAyB,MAAbq9B,EAAoBA,EAAUrgJ,EAAI,GAAK4gJ,EAAG5gJ,GACtDgjH,GAAyB,MAAbq9B,EAAoBA,EAAUngJ,EAAI,GAAK0gJ,EAAG1gJ,GACtD8iH,GAAyB,MAAbq9B,EAAoBA,EAAUrgJ,EAAI,GAAK6gJ,EAAG7gJ,GACtDgjH,GAAyB,MAAbq9B,EAAoBA,EAAUngJ,EAAI,GAAK2gJ,EAAG3gJ,GAE3DkqI,EAAI7kH,MAAQA,EAAQ,CACpB,MAEJ,KAAK,IACL,IAAK,IACD,GAAIijB,EAAMv7C,OAAS,EAAIs4B,EACnB,MAAO,KAEX,IAAImnE,GAAKxrG,KAAKq/J,UAAU/9J,EAASgmD,EAAMjjB,GAAOzH,OAAO,GAAK0qB,EAAMjjB,IAC5DonE,EAAKzrG,KAAKq/J,UAAU/3G,EAAMjjB,EAAQ,IAClCw7H,EAAKvhJ,WAAWgpC,EAAMjjB,EAAQ,GAClC6kH,GAAI9/I,QAAU,GAAI40J,GAAA8B,sBACbh+B,GAAyB,MAAbq9B,EAAoBA,EAAUrgJ,EAAI,GAAK0sF,EAAG1sF,GACtDgjH,GAAyB,MAAbq9B,EAAoBA,EAAUngJ,EAAI,GAAKwsF,EAAGxsF,GACtD8iH,GAAyB,MAAbq9B,EAAoBA,EAAUrgJ,EAAI,GAAK2sF,EAAG3sF,GACtDgjH,GAAyB,MAAbq9B,EAAoBA,EAAUngJ,EAAI,GAAKysF,EAAGzsF,EACvD6gJ,GAEJ3W,EAAI7kH,MAAQA,EAAQ,CACpB,MAEJ,KAAK,IACL,IAAK,IACGw6H,IACA3V,EAAI9/I,QAAU,GAAI60J,GAAA8B,yBAAyBlB,EAAW//I,EAAG+/I,EAAW7/I,GACpEkqI,EAAI7kH,MAAQA,EAAQ,GAKhC,MAAO6kH,IAGHgV,YAAAp9J,UAAAu+J,UAAR,SAAkBW,GACd,GAAInmC,GAAMmmC,EAAKp9I,MAAM,KAAKV,IAAI,SAACtV,GAAU,MAAA0R,YAAW1R,IACpD,OAAO,IAAI5C,MAAK24H,MAAM9I,EAAI9tH,OAAS,EAAI8tH,EAAI,GAAK,KAAMA,EAAI9tH,OAAS,EAAI8tH,EAAI,GAAK,OAG5EqkC,YAAAp9J,UAAA49J,aAAR,SAAqBlhJ,GAArB,GAAA1E,GAAA9Y,IACI,IAAKwd,EAAKU,aAAa7d,EAAAk+J,sBAAsB0B,YAA7C,CAIAnkJ,EAAAe,OAAOC,aAAa9c,KAAM,aAE1BA,KAAKkgK,oBAAsB,IAE3B,IAEIC,GAFAn6I,IAIJhmB,MAAKo+J,gBAAkB5gJ,EAClBe,aAAale,EAAAk+J,sBAAsB0B,YACnCr9I,MAAM,KACNV,IAAI,SAACtV,EAAOy3B,GACT,GAAI6kH,EAES,IAAT7kH,GACA7mB,EAAKe,aAAale,EAAAk+J,sBAAsB0B,aACpC5/J,EAAAk+J,sBAAsB6B,0BAA0Bj+I,QAEpD+mI,KACApwI,EAAKqlJ,MAAM7vI,QAAQ,SAAC9Q,GAChB0rI,EAAIxhI,KAAKlK,EAAKT,YAGlBmsI,EAAMpwI,EAAK2lJ,UAAU7xJ,GAEpBuzJ,IACDA,KAEJ,IAAIE,IAAqB,CAkBzB,OAjBAnX,GAAI56H,QAAQ,SAAC1hB,EAAOy3B,GACZ87H,EAAS97H,IAAU87H,EAAS97H,GAAOi8H,QAAQ1zJ,GAC3Cs8I,EAAI7kH,GAAS,MAEb87H,EAAS97H,GAASz3B,EAClByzJ,GAAY,KAGfA,GAIGr6I,EAAYja,SACZia,EAAYA,EAAYja,OAAS,GAAKia,EAAYja,OAAS,GAE/Dia,EAAY0B,KAAK1B,EAAYja,UAN7Bm9I,EAAM,KACNljI,EAAY0B,KAAK1B,EAAYja,OAASia,EAAYA,EAAYja,OAAS,GAAK,IAOzEm9I,GAGf,IAAMjiI,GAAgB,aAChB5E,EAA2BzgB,EAAAogB,WAAW+E,YACxCvJ,EAAKe,aAAale,EAAAk+J,sBAAsBgC,kBAAoB,UAE1Dh+I,GACFxG,EAAA+B,WAAWuB,mBAAmB7B,EAAMnd,EAAAk+J,sBAAsBiC,oBAAqB,MAE/E/9I,GACA1G,EAAA+B,WAAWuB,mBAAmB7B,EAAMnd,EAAAk+J,sBAAsBkC,iBAAkB,IAE1E39I,EAAqB/G,EAAA+B,WAAW8B,uBAAuBpC,EAAMnd,EAAAk+J,sBAAsBmC,gBAAiB,MACpG19I,EAA0BxF,EAAKU,aAAa7d,EAAAk+J,sBAAsBoC,sBAClE/+J,EAAAogB,WAAWC,YAAYzE,EAAKe,aAAale,EAAAk+J,sBAAsBoC,uBAC/D,IAEN7kJ,GAAAe,OAAO0K,YAAYvnB,MAAQinB,QAAOjB,cAAa3D,YAAWE,gBAAeE,aAAYK,YAAWE,eAGpGniB,OAAAkD,eAAIm6J,YAAAp9J,UAAA,c/Jyx4CCkD,I+Jzx4CL,WACI,MAAOhE,MAAK4gK,iB/J2x4CXvkJ,I+Jxx4CL,SAAezP,GAAf,GAAAkM,GAAA9Y,IACIA,MAAK4gK,gBAAkBh0J,CACvB,IAAIy3B,GAAQ5lB,KAAKC,MAAM1e,KAAK4gK,iBACxB/tI,EAAQ7yB,KAAK4gK,gBAAkBv8H,CAC/BA,IAASrkC,KAAKo+J,gBAAgBryJ,OAAS,IACvCs4B,EAAQrkC,KAAKo+J,gBAAgBryJ,OAAS,EACtC8mB,EAAQ,GAERwR,GAASrkC,KAAKkgK,sBACdlgK,KAAKkgK,oBAAsB77H,EACvBrkC,KAAKo+J,gBAAgB/5H,KACrBrkC,KAAKq+J,eAAiBr+J,KAAKo+J,gBAAgB/5H,IAE3CrkC,KAAKo+J,gBAAgB/5H,EAAQ,KAC7BrkC,KAAKs+J,aAAet+J,KAAKo+J,gBAAgB/5H,EAAQ,GAAKrkC,KAAKo+J,gBAAgB/5H,EAAQ,GAAK,MAGhG,IAAIvb,IAAkB,CACjB9oB,MAAKq+J,gBAAmBr+J,KAAKs+J,eAGlCt+J,KAAKm+J,MAAM7vI,QAAQ,SAAC9Q,EAAMzd,GACQ,MAA1B+Y,EAAKulJ,eAAet+J,IAAsC,MAAxB+Y,EAAKwlJ,aAAav+J,KACpD+oB,GAAS,EACTtL,EAAKqjJ,kBAAkB/nJ,EAAKulJ,eAAet+J,GAAI+Y,EAAKwlJ,aAAav+J,GAAI8yB,MAGzE/J,GACA9oB,KAAK8oB,W/J4x4CR5kB,YAAY,EACZC,cAAc,I+Jzx4CZ+5J,YAAAp9J,UAAAgoB,OAAP,cAAAhQ,GAAA9Y,IACIA,MAAK+oB,QACL/oB,KAAKgpB,UAAUhpB,KAAKyoB,OAAQzoB,KAAKipB,YACjCjpB,KAAKkpB,UAAUlpB,KAAKmpB,WAAYnpB,KAAKopB,WAAYppB,KAAKqpB,YAElDrpB,KAAKm+J,OACLn+J,KAAKm+J,MAAM7vI,QAAQ,SAAC9Q,GAChBA,EAAKvL,KAAK6G,KAIlB9Y,KAAKypB,WAGTy0I,YAAAp9J,UAAAic,MAAA,WACI,GAAI3T,GAAuB,GAAI80J,YA8B/B,OA7BA90J,GAAQ+T,iBAER/T,EAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQgV,SAAWpe,KAAKoe,SACxBhV,EAAQuW,QAAU3f,KAAK2f,QACvBvW,EAAQyU,MAAQ7d,KAAK6d,MACrBzU,EAAQmhB,KAAOvqB,KAAKuqB,KACpBnhB,EAAQ4gB,UAAYhqB,KAAKgqB,UACzB5gB,EAAQuU,KAAO3d,KAAK2d,KACpBvU,EAAQgT,aAAepc,KAAKoc,aAE5BhT,EAAQ+f,WAAanpB,KAAKmpB,WAC1B/f,EAAQggB,WAAappB,KAAKopB,WAC1BhgB,EAAQigB,WAAarpB,KAAKqpB,WAC1BjgB,EAAQ6f,WAAajpB,KAAKipB,WAC1B7f,EAAQqf,OAASzoB,KAAKyoB,OACtBrf,EAAQ+0J,SAERn+J,KAAKm+J,MAAM7vI,QAAQ,SAAC9Q;AAChBpU,EAAQ+0J,MAAMz2I,KAAKlK,EAAKT,WAG5B3T,EAAQ0f,SAED1f,GArXf80J,YAAA7iJ,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB/J6o5CxBi2I,c+J5o5CyBtiJ,EAAAsE,aAApB7f,GAAA69J,YAAWA,EAwXX79J,EAAAk+J,uBAITC,KAAM,OAENyB,WAAY,YACZM,gBAAiB,gBACjBC,oBAAqB,oBACrBC,iBAAkB,iBAClBK,oBAAqB,gBACrBV,2BACIl4I,SAAU,WACV/F,OAAQ,UAEZu+I,gBAAiB,gBAIjBC,qBAAsB,oBAEtBx2I,WAAY,YACZC,WAAY,c/Jsx4CV,SAAS9pB,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MgK9r5CpFs/J,EAAA5gK,EAAgC,KAKhC++J,EAAA,SAAAh8J,GAA2C3B,EAAA29J,sBAAAh8J,EACvC,SAAAg8J,uBAAYpgJ,EAAWE,GACnB9b,EAAAzC,KAAAT,KAAM8e,EAAGE,GACThf,KAAKsqG,QAAU,IAmBvB,MAhBW40D,uBAAAp+J,UAAAmR,KAAP,SAAY+uJ,GACRA,EAASC,OAAOjhK,KAAK8e,EAAG9e,KAAKgf,IAG1BkgJ,sBAAAp+J,UAAAic,MAAP,WACI,MAAO,IAAImiJ,uBAAsBl/J,KAAK8e,EAAG9e,KAAKgf,IAG3CkgJ,sBAAAp+J,UAAA+/J,kBAAP,SAAyB1qI,EAAuB5H,EAAqBsE,GACjE7yB,KAAK8e,EAAIqX,EAAKrX,GAAKyP,EAAGzP,EAAIqX,EAAKrX,GAAK+T,EACpC7yB,KAAKgf,EAAImX,EAAKnX,GAAKuP,EAAGvP,EAAImX,EAAKnX,GAAK6T,GAGjCqsI,sBAAAp+J,UAAAw/J,QAAP,SAAe/xI,GACX,MAAOvuB,MAAK8e,IAAMyP,EAAGzP,GAAK9e,KAAKgf,IAAMuP,EAAGvP,GAEhDkgJ,uBAtB2C6B,EAAAG,gBAA9B7gK,GAAA6+J,sBAAqBA,GhKst5C5B,SAAS5+J,EAAQD,GAEtB,YiKzt5CD,IAAA6gK,GAAA,WAKI,QAAAA,iBAAYpiJ,EAAWE,GACnBhf,KAAK8e,EAAIA,EACT9e,KAAKgf,EAAIA,EAkBjB,MAfWkiJ,iBAAApgK,UAAAmR,KAAP,SAAY+uJ,GACR,KAAM,gCAGHE,gBAAApgK,UAAAic,MAAP,WACI,KAAM,iCAGHmkJ,gBAAApgK,UAAA+/J,kBAAP,SAAyB1qI,EAAuB5H,EAAqBsE,GACjE,KAAM,4CAGHquI,gBAAApgK,UAAAw/J,QAAP,SAAe/xI,GACX,KAAM,mCAEd2yI,kBAzBa7gK,GAAA6gK,gBAAeA,GjKkv5CtB,SAAS5gK,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MkK5v5CpFm8J,EAAAz9J,EAAsC,KAKtCo/J,EAAA,SAAAr8J,GAA2C3B,EAAAg+J,sBAAAr8J,EACvC,SAAAq8J,uBAAYzgJ,EAAWE,GACnB9b,EAAAzC,KAAAT,KAAM8e,EAAGE,GACThf,KAAKsqG,QAAU,IAmBvB,MAhBWi1D,uBAAAz+J,UAAAmR,KAAP,SAAY+uJ,GACRA,EAASG,OAAOnhK,KAAK8e,EAAG9e,KAAKgf,IAG1BugJ,sBAAAz+J,UAAAic,MAAP,WACI,MAAO,IAAIwiJ,uBAAsBv/J,KAAK8e,EAAG9e,KAAKgf,IAG3CugJ,sBAAAz+J,UAAA+/J,kBAAP,SAAyB1qI,EAA6B5H,EAA2BsE,GAC7E7yB,KAAK8e,EAAIqX,EAAKrX,GAAKyP,EAAGzP,EAAIqX,EAAKrX,GAAK+T,EACpC7yB,KAAKgf,EAAImX,EAAKnX,GAAKuP,EAAGvP,EAAImX,EAAKnX,GAAK6T,GAGjC0sI,sBAAAz+J,UAAAw/J,QAAP,SAAe/xI,GACX,MAAOvuB,MAAK8e,IAAMyP,EAAGzP,GAAK9e,KAAKgf,IAAMuP,EAAGvP,GAEhDugJ,uBAtB2C3B,EAAAsB,sBAA9B7+J,GAAAk/J,sBAAqBA,GlKox5C5B,SAASj/J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MmK/x5CpFm8J,EAAAz9J,EAAsC,KAKtCq/J,EAAA,SAAAt8J,GAAqD3B,EAAAi+J,gCAAAt8J,EAIjD,SAAAs8J,iCAAY4B,EAAaC,EAAaviJ,EAAWE,GAC7C9b,EAAAzC,KAAAT,KAAM8e,EAAGE,GACThf,KAAKohK,IAAMA,EACXphK,KAAKqhK,IAAMA,EACXrhK,KAAKsqG,QAAU,IAyBvB,MAtBWk1D,iCAAA1+J,UAAAmR,KAAP,SAAY+uJ,GACRA,EAASM,iBAAiBthK,KAAKohK,IAAKphK,KAAKqhK,IAAKrhK,KAAK8e,EAAG9e,KAAKgf,IAGxDwgJ,gCAAA1+J,UAAAic,MAAP,WACI,MAAO,IAAIyiJ,iCAAgCx/J,KAAKohK,IAAKphK,KAAKqhK,IAAKrhK,KAAK8e,EAAG9e,KAAKgf,IAGzEwgJ,gCAAA1+J,UAAA+/J,kBAAP,SACI1qI,EACA5H,EACAsE,GAEA7yB,KAAK8e,EAAIqX,EAAKrX,GAAKyP,EAAGzP,EAAIqX,EAAKrX,GAAK+T,EACpC7yB,KAAKgf,EAAImX,EAAKnX,GAAKuP,EAAGvP,EAAImX,EAAKnX,GAAK6T,EACpC7yB,KAAKohK,IAAMjrI,EAAKirI,KAAO7yI,EAAG6yI,IAAMjrI,EAAKirI,KAAOvuI,EAC5C7yB,KAAKqhK,IAAMlrI,EAAKkrI,KAAO9yI,EAAG8yI,IAAMlrI,EAAKkrI,KAAOxuI,GAGzC2sI,gCAAA1+J,UAAAw/J,QAAP,SAAe/xI,GACX,MAAOvuB,MAAK8e,IAAMyP,EAAGzP,GAAK9e,KAAKgf,IAAMuP,EAAGvP,GAAKhf,KAAKohK,MAAQ7yI,EAAG6yI,KAAOphK,KAAKqhK,MAAQ9yI,EAAG8yI,KAE5F7B,iCAjCqD5B,EAAAsB,sBAAxC7+J,GAAAm/J,gCAA+BA,GnK2z5CtC,SAASl/J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MoKt05CpFq8J,EAAA39J,EAAgD,KAKhDy/J,EAAA,SAAA18J,GAAkD3B,EAAAq+J,6BAAA18J,EAI9C,SAAA08J,8BAAYwB,EAAaC,EAAaE,EAAaC,EAAa1iJ,EAAWE,GACvE9b,EAAAzC,KAAAT,KAAMohK,EAAKC,EAAKviJ,EAAGE,GACnBhf,KAAKuhK,IAAMA,EACXvhK,KAAKwhK,IAAMA,EACXxhK,KAAKsqG,QAAU,IAkCvB,MA/BWs1D,8BAAA9+J,UAAAmR,KAAP,SAAY+uJ,GACRA,EAASS,cAAczhK,KAAKohK,IAAKphK,KAAKqhK,IAAKrhK,KAAKuhK,IAAKvhK,KAAKwhK,IAAKxhK,KAAK8e,EAAG9e,KAAKgf,IAGzE4gJ,6BAAA9+J,UAAAic,MAAP,WACI,MAAO,IAAI6iJ,8BAA6B5/J,KAAKohK,IAAKphK,KAAKqhK,IAAKrhK,KAAKuhK,IAAKvhK,KAAKwhK,IAAKxhK,KAAK8e,EAAG9e,KAAKgf,IAG1F4gJ,6BAAA9+J,UAAA+/J,kBAAP,SACI1qI,EACA5H,EACAsE,GAEA7yB,KAAK8e,EAAIqX,EAAKrX,GAAKyP,EAAGzP,EAAIqX,EAAKrX,GAAK+T,EACpC7yB,KAAKgf,EAAImX,EAAKnX,GAAKuP,EAAGvP,EAAImX,EAAKnX,GAAK6T,EACpC7yB,KAAKohK,IAAMjrI,EAAKirI,KAAO7yI,EAAG6yI,IAAMjrI,EAAKirI,KAAOvuI,EAC5C7yB,KAAKqhK,IAAMlrI,EAAKkrI,KAAO9yI,EAAG8yI,IAAMlrI,EAAKkrI,KAAOxuI,EAC5C7yB,KAAKuhK,IAAMprI,EAAKorI,KAAOhzI,EAAGgzI,IAAMprI,EAAKorI,KAAO1uI,EAC5C7yB,KAAKwhK,IAAMrrI,EAAKqrI,KAAOjzI,EAAGizI,IAAMrrI,EAAKqrI,KAAO3uI,GAGzC+sI,6BAAA9+J,UAAAw/J,QAAP,SAAe/xI,GACX,MACIvuB,MAAK8e,IAAMyP,EAAGzP,GACd9e,KAAKgf,IAAMuP,EAAGvP,GACdhf,KAAKohK,MAAQ7yI,EAAG6yI,KAChBphK,KAAKqhK,MAAQ9yI,EAAG8yI,KAChBrhK,KAAKuhK,MAAQhzI,EAAGgzI,KAChBvhK,KAAKwhK,MAAQjzI,EAAGizI,KAG5B5B,8BA1CkD9B,EAAA0B,gCAArCn/J,GAAAu/J,6BAA4BA,GpKy25CnC,SAASt/J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MqKp35CpFm8J,EAAAz9J,EAAsC,KAKtC2/J,EAAA,SAAA58J,GAA0C3B,EAAAu+J,qBAAA58J,EAKtC,SAAA48J,sBAAY34H,EAAYC,EAAYtoB,EAAWE,EAAWxD,GACtDtY,EAAAzC,KAAAT,KAAM8e,EAAGE,GACThf,KAAKmnC,GAAKA,EACVnnC,KAAKonC,GAAKA,EACVpnC,KAAKwb,EAAIA,EACTxb,KAAKsqG,QAAU,IAsBvB,MAnBWw1D,sBAAAh/J,UAAAmR,KAAP,SAAY+uJ,GACRA,EAASU,MAAM1hK,KAAKmnC,GAAInnC,KAAKonC,GAAIpnC,KAAK8e,EAAG9e,KAAKgf,EAAGhf,KAAKwb,IAGnDskJ,qBAAAh/J,UAAAic,MAAP,WACI,MAAO,IAAI+iJ,sBAAqB9/J,KAAKmnC,GAAInnC,KAAKonC,GAAIpnC,KAAK8e,EAAG9e,KAAKgf,EAAGhf,KAAKwb,IAGpEskJ,qBAAAh/J,UAAA+/J,kBAAP,SAAyB1qI,EAA4B5H,EAA0BsE,GAC3E7yB,KAAK8e,EAAIqX,EAAKrX,GAAKyP,EAAGzP,EAAIqX,EAAKrX,GAAK+T,EACpC7yB,KAAKgf,EAAImX,EAAKnX,GAAKuP,EAAGvP,EAAImX,EAAKnX,GAAK6T,EACpC7yB,KAAKmnC,GAAKhR,EAAKgR,IAAM5Y,EAAG4Y,GAAKhR,EAAKgR,IAAMtU,EACxC7yB,KAAKonC,GAAKjR,EAAKiR,IAAM7Y,EAAG6Y,GAAKjR,EAAKiR,IAAMvU,EACxC7yB,KAAKwb,EAAI2a,EAAK3a,GAAK+S,EAAG/S,EAAI2a,EAAK3a,GAAKqX,GAGjCitI,qBAAAh/J,UAAAw/J,QAAP,SAAe/xI,GACX,MAAOvuB,MAAK8e,IAAMyP,EAAGzP,GAAK9e,KAAKgf,IAAMuP,EAAGvP,GAAKhf,KAAKmnC,KAAO5Y,EAAG4Y,IAAMnnC,KAAKwb,IAAM+S,EAAG/S,GAExFskJ,sBAhC0ClC,EAAAsB,sBAA7B7+J,GAAAy/J,qBAAoBA,GrKk55C3B,SAASx/J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MsK755CpFm8J,EAAAz9J,EAAsC,KAKtC4/J,EAAA,SAAA78J,GAA8C3B,EAAAw+J,yBAAA78J,EAC1C,SAAA68J,0BAAYjhJ,EAAWE,GACnB9b,EAAAzC,KAAAT,KAAM8e,EAAGE,GACThf,KAAKsqG,QAAU,IAoBvB,MAjBWy1D,0BAAAj/J,UAAAmR,KAAP,SAAY+uJ,GACRA,EAASG,OAAOnhK,KAAK8e,EAAG9e,KAAKgf,GAC7BgiJ,EAASC,OAAOjhK,KAAK8e,EAAG9e,KAAKgf,IAG1B+gJ,yBAAAj/J,UAAAic,MAAP,WACI,MAAO,IAAIgjJ,0BAAyB//J,KAAK8e,EAAG9e,KAAKgf,IAG9C+gJ,yBAAAj/J,UAAA+/J,kBAAP,SAAyB1qI,EAAgC5H,EAA8BsE,GACnF7yB,KAAK8e,EAAIqX,EAAKrX,GAAKyP,EAAGzP,EAAIqX,EAAKrX,GAAK+T,EACpC7yB,KAAKgf,EAAImX,EAAKnX,GAAKuP,EAAGvP,EAAImX,EAAKnX,GAAK6T,GAGjCktI,yBAAAj/J,UAAAw/J,QAAP,SAAe/xI,GACX,MAAOvuB,MAAK8e,IAAMyP,EAAGzP,GAAK9e,KAAKgf,IAAMuP,EAAGvP,GAEhD+gJ,0BAvB8CnC,EAAAsB,sBAAjC7+J,GAAA0/J,yBAAwBA,GtKs75C/B,SAASz/J,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GuKv85CjEK,EAAA1b,EAA+B,IAC/ByS,EAAAzS,EAA2E,GAC3EyB,EAAAzB,EAA6C,GAC7C+B,EAAA/B,EAAgC,GAChCm9H,EAAAn9H,EAAqD,KACrD8a,EAAA9a,EAA4B,IAC5B4b,EAAA5b,EAA2B,IAE3BkoB,EAAAloB,EAA6B,IAC7BmoB,EAAAnoB,EAA4B,IAa5BwhK,EAAA,SAAAz+J,GAAsC3B,EAAAogK,iBAAAz+J,EAuClC,SAAAy+J,oBACIz+J,EAAAzC,KAAAT,MAhCIA,KAAA4hK,WACA5hK,KAAA6hK,mBAEA7hK,KAAA8hK,cAyBA9hK,KAAA+hK,eAAyB,EACzB/hK,KAAAgiK,SAAmB,EAIvBhiK,KAAKiiK,aAAe,QACpBjiK,KAAKymI,OAAS,EACdzmI,KAAKkiK,iBAAmB,GACxBliK,KAAKmiK,iBAAmB,GACxBniK,KAAKoiK,WAAa,EAClBpiK,KAAKqiK,YAAc,IACnBriK,KAAKsiK,OAAS,KACdtiK,KAAKuiK,aAAe,KACpBviK,KAAK29H,UAAW,EAChB39H,KAAK09H,WAAa,EAClB19H,KAAKwiK,QAAS,EACdxiK,KAAKyiK,cAAgB,EACrBziK,KAAK0iK,kBAAoB,EACzB1iK,KAAK2iK,cAAgB,EACrB3iK,KAAKyzB,aACLzzB,KAAK4iK,aAAe,EACpB5iK,KAAKsxI,OAAQ,EACbtxI,KAAK6iK,cAAgB,WACrB7iK,KAAK8iK,YAAc,SAEnB9iK,KAAK+iK,cAAgBnwJ,EAAAa,iBAAiB,cACtCzT,KAAK+iK,cAAcrvJ,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAK09E,QAAQ7pE,KAAK7T,OACnEA,KAAKgjK,gBAAkBpwJ,EAAAa,iBAAiB,kBACxCzT,KAAKgjK,gBAAgBtvJ,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKkV,KAAKrB,KAAK7T,OA4xB1E,MArxBW2hK,kBAAA7gK,UAAA2c,aAAP,SAAoBD,GAChB,IAAKxd,KAAK29H,SAAU,CAyChB,GAxCiB,MAAb39H,KAAK2d,OACL3d,KAAK2d,KAAOH,EAAKI,UAiBrB1a,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,GAEfA,EAAKU,aAAa7d,EAAA4iK,2BAA2BC,sBAC7CljK,KAAKkiK,iBAAmBxsJ,SAAS8H,EAAKe,aAAale,EAAA4iK,2BAA2BC,sBAG9E1lJ,EAAKU,aAAa7d,EAAA4iK,2BAA2BE,sBAC7CnjK,KAAKmiK,iBAAmBzsJ,SAAS8H,EAAKe,aAAale,EAAA4iK,2BAA2BE,sBAG9E3lJ,EAAKU,aAAa7d,EAAA4iK,2BAA2BG,eAC7CpjK,KAAK8iK,YAActlJ,EAAKe,aAAale,EAAA4iK,2BAA2BG,cAGhE5lJ,EAAKU,aAAa7d,EAAA4iK,2BAA2BI,iBAC7CrjK,KAAK6iK,cAAgBrlJ,EAAKe,aAAale,EAAA4iK,2BAA2BI,gBAGlE7lJ,EAAKU,aAAa7d,EAAA4iK,2BAA2B5tD,QAC7Cr1G,KAAKsxI,MAA8D,QAAtD9zH,EAAKe,aAAale,EAAA4iK,2BAA2B5tD,QAG1D73F,EAAKU,aAAa7d,EAAA4iK,2BAA2Bp6I,QAAyB,MAAf7oB,KAAKo7H,UACzC,MAAfp7H,KAAKo7H,SACLp7H,KAAKo7H,OACD/yG,EAAAK,aAAaC,OAAOnL,EAAKe,aAAale,EAAA4iK,2BAA2Bp6I,SAItD,MAAf7oB,KAAKo7H,QAAgB,CAWrB,GAA0B,MAAtBp7H,KAAKo7H,OAAOK,OAAgB,CAC5Bz7H,KAAK4xI,eAEL,KAAK,GAAIxsI,KAAOpF,MAAKo7H,OAAOK,OACxBz7H,KAAK4xI,aAAalqH,KAAKhS,SAAStQ,GAIpCpF,MAAKyzB,UAAYzzB,KAAK4xI,aAAa5xI,KAAK4xI,aAAa7lI,OAAS,GAQlE,GAA6B,MAAzB/L,KAAKo7H,OAAO0c,UAAmB,CAC/B93I,KAAKsjK,4BAA8BtjK,KAAKo7H,OAAO0c,SAE/C,KAAK,GAAIh5H,KAAK9e,MAAKsjK,4BAA6B,CAC5C,GAAIC,GAAwBvjK,KAAKsjK,4BAA4BxkJ,GAAG8D,MAAM,KAAKV,IAAI5D,WAE3EilJ,GAAOx3J,QAAU/L,KAAKkiK,iBAAmBliK,KAAKmiK,kBAa1D,GAA6B,MAAzBniK,KAAKo7H,OAAO2c,UAAmB,CAC/B/3I,KAAKwjK,4BAA8BxjK,KAAKo7H,OAAO2c,SAE/C,KAAK,GAAI/4H,KAAKhf,MAAKwjK,4BAA6B,CAC5C,GAAIC,GAAwBzjK,KAAKwjK,4BAA4BxkJ,GAAG4D,MAAM,KAAKV,IAAI5D,WAE3EmlJ,GAAO13J,QAAU/L,KAAKkiK,iBAAmBliK,KAAKmiK,kBAa1D,GAAyB,WAArBniK,KAAK8iK,aACD9iK,KAAK4xI,aAAa7lI,OAAS,GAAK/L,KAAK4xI,aAAa7lI,QAAU/L,KAAKyzB,UAIjE,IAAK,GAHDiwI,GAAoC,EACpCC,EAAgC,EAE3B5jK,EAAY,EAAGA,EAAIC,KAAKyzB,UAAW1zB,IACxC,GACIA,EAAIC,KAAK4xI,aAAa8xB,IACtB3jK,EAAIC,KAAK4xI,aAAa+xB,KACrB5jK,GAAKC,KAAK4xI,aAAa7xI,IAA8B,MAAxBC,KAAK4xI,aAAa7xI,KAChD4jK,GAAyB3jK,KAAK4xI,aAAa7lI,OAAS,EACtD,CAmBE,IAAK,GAlBD63J,GAAoB5jK,KAAK4xI,aAAa8xB,GACtCG,EAAoB7jK,KAAK4xI,aAAa+xB,GACtCG,EAAqBD,EAAYD,EAEjCG,EAAkC/jK,KAAKsjK,4BAA4BM,GAClEhhJ,MAAM,KACNV,IAAI5D,YACL0lJ,EAAkChkK,KAAKsjK,4BAA4BO,GAClEjhJ,MAAM,KACNV,IAAI5D,YAEL2lJ,EAAkCjkK,KAAKwjK,4BAA4BI,GAClEhhJ,MAAM,KACNV,IAAI5D,YACL4lJ,EAAkClkK,KAAKwjK,4BAA4BK,GAClEjhJ,MAAM,KACNV,IAAI5D,YAEA6lJ,EAAmBpkK,EAAGokK,EAAWN,EAAWM,IAAY,CAC7D,GAAIC,GAAgC,GAChCC,EAAgC,EAEpC,IAAkD,MAA9CrkK,KAAKsjK,4BAA4Ba,GAAmB,CACpD,IAAK,GAAIrlJ,GAAY,EAAGA,EAAIilJ,EAAiBh4J,OAAQ+S,IAAK,CACtD,GAAIwlJ,IACCN,EAAiBllJ,GAAKilJ,EAAiBjlJ,IAAMglJ,CAClDM,IAAyB3lJ,KAAKoE,MAC1BkhJ,EAAiBjlJ,GAAKwlJ,GAAaH,EAAW,EAAIpkK,IAGlD+e,EAAIilJ,EAAiBh4J,OAAS,IAC9Bq4J,GAAyB,KAKjCpkK,KAAKsjK,4BAA4Ba,GAAYC,EAGjD,GAAkD,MAA9CpkK,KAAKwjK,4BAA4BW,GAAmB,CACpD,IAAK,GAAInlJ,GAAY,EAAGA,EAAIilJ,EAAiBl4J,OAAQiT,IAAK,CACtD,GAAIslJ,IACCJ,EAAiBllJ,GAAKilJ,EAAiBjlJ,IAAM8kJ,CAClDO,IAAyB5lJ,KAAKoE,MAC1BohJ,EAAiBjlJ,GAAKslJ,GAAaH,EAAW,EAAIpkK,IAGlDif,EAAIilJ,EAAiBl4J,OAAS,IAC9Bs4J,GAAyB,KAKjCrkK,KAAKwjK,4BAA4BW,GAAYE,GAIrDX,EAA4BC,EAC5BA,IACA5jK,EAAI8jK,GAqBxBrmJ,EAAKU,aAAao/G,EAAAvnB,uBAAuBhsF,cACzC/pB,KAAK09H,WAAa19H,KAAKskI,qBACnBvoH,EAAA+B,WAAW8D,sBAAsBpE,EAAM8/G,EAAAvnB,uBAAuBhsF,WAAY/pB,KAAK09H,cAInFlgH,EAAKU,aAAao/G,EAAAvnB,uBAAuBI,QAA4B,MAAlBn2G,KAAKukK,YACxDvkK,KAAKukK,UAAY,GAAIjnC,GAAA4B,aACjBh9H,EAAAqD,gBAAgBuJ,uBAAuB0O,EAAKe,aAAa++G,EAAAvnB,uBAAuBI,SAEpFn2G,KAAKukK,UAAUv6I,UAAY1B,EAAA2B,YAAYC,aAAalqB,KAAK09H,aAGzDlgH,EAAKU,aAAa7d,EAAA4iK,2BAA2BuB,aAC7CxkK,KAAKoiK,WAAa1sJ,SAAS8H,EAAKe,aAAale,EAAA4iK,2BAA2BuB,aAGxEhnJ,EAAKU,aAAa7d,EAAA4iK,2BAA2BwB,cAC7CzkK,KAAKqiK,YAAc/jJ,WAAWd,EAAKe,aAAale,EAAA4iK,2BAA2BwB,cAG3EjnJ,EAAKU,aAAa7d,EAAA4iK,2BAA2B5mE,SAC7Cr8F,KAAKsiK,OAAShkJ,WAAWd,EAAKe,aAAale,EAAA4iK,2BAA2B5mE,SAGtE7+E,EAAKU,aAAa7d,EAAA4iK,2BAA2ByB,kBAC7C1kK,KAAKiiK,aAAezkJ,EAAKe,aAAale,EAAA4iK,2BAA2ByB,iBAGjElnJ,EAAKU,aAAa7d,EAAA4iK,2BAA2B0B,iBAC7C3kK,KAAKuiK,aAAe/kJ,EAAKe,aAAale,EAAA4iK,2BAA2B0B,gBAGjEnnJ,EAAKU,aAAa7d,EAAA4iK,2BAA2B2B,iBAC7C5kK,KAAKyiK,cAAgB/sJ,SAAS8H,EAAKe,aAAale,EAAA4iK,2BAA2B2B,iBAG3EpnJ,EAAKU,aAAa7d,EAAA4iK,2BAA2B4B,qBAC7C7kK,KAAK0iK,kBAAoBhtJ,SAAS8H,EAAKe,aAAale,EAAA4iK,2BAA2B4B,qBAG/ErnJ,EAAKU,aAAa7d,EAAA4iK,2BAA2B6B,kBAC7C9kK,KAAK+hK,eAAiBrsJ,SAAS8H,EAAKe,aAAale,EAAA4iK,2BAA2B6B,kBAGhF9kK,KAAK+kK,aACL/kK,KAAK09E,UACD19E,KAAKglK,QAELhlK,KAAKilK,oBAAsBjlK,KAAKglK,MAAME,SAAShkK,MAAM,IAEzDlB,KAAK29H,UAAW,IAIjBgkC,iBAAA7gK,UAAA4c,aAAP,SAAoBF,GAiBhB,GANAta,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,GAEfA,EAAKU,aAAa7d,EAAA4iK,2BAA2B5tD,QAC7Cr1G,KAAKsxI,MAA+D,SAAvD9zH,EAAKe,aAAale,EAAA4iK,2BAA2B5tD,OAG1D73F,EAAKU,aAAa7d,EAAA4iK,2BAA2BvrD,OAAQ,CACrD,GAAIrpF,GAAQ,CACZ,IAAI7Q,EAAKe,aAAale,EAAA4iK,2BAA2BvrD,OAAO90F,MAAM,KAAK7W,OAAS,EAAG,CAC3E,GAAIoqB,GAAOzgB,SAAS8H,EAAKe,aAAale,EAAA4iK,2BAA2BvrD,OAAO90F,MAAM,KAAK,IAC/E2L,EAAK7Y,SAAS8H,EAAKe,aAAale,EAAA4iK,2BAA2BvrD,OAAO90F,MAAM,KAAK,GACjFyL,GAAQ8H,EAAO1X,KAAKoE,MAAMpE,KAAKE,UAAY4P,EAAK4H,QAEhD9H,GAAQ3Y,SAAS8H,EAAKe,aAAale,EAAA4iK,2BAA2BvrD,QAC1D9pF,MAAMS,KACNA,EAAQ,EAGhBruB,MAAKmV,MAAMkZ,GACXruB,KAAKymI,OAAS,EACdzmI,KAAK2iK,cAAgB,EAGrBnlJ,EAAKU,aAAa7d,EAAA4iK,2BAA2B3tD,OAE7Ct1G,KAAKgjK,gBAAgB7tJ,MAAMO,SAAS8H,EAAKe,aAAale,EAAA4iK,2BAA2B3tD,QAGjF93F,EAAKU,aAAa7d,EAAA4iK,2BAA2B2B,iBAC7C5kK,KAAKyiK,cAAgB/sJ,SAAS8H,EAAKe,aAAale,EAAA4iK,2BAA2B2B,iBAG3EpnJ,EAAKU,aAAa7d,EAAA4iK,2BAA2B4B,qBAC7C7kK,KAAK0iK,kBAAoBhtJ,SAAS8H,EAAKe,aAAale,EAAA4iK,2BAA2B4B,sBAQ/ElD,iBAAA7gK,UAAAikK,WAAR,WACI,GAA0B,SAAtB/kK,KAAKiiK,aAAyB,CAI9B,IAAK,GAFDkD,GAAanlK,KAAKukK,UAAU31J,QAAQlI,MAE/B3G,EAAI,EAAGA,EAAIC,KAAKkiK,iBAAkBniK,IACvCC,KAAK4hK,QAAQl6I,KAAK,GAAI1d,MAAK24H,MAAM5iI,GAAKolK,GAAcnlK,KAAKkiK,iBAAmB,IAAK,IACjFliK,KAAK6hK,gBAAgBn6I,KAAK,GAAI1d,MAAK24H,MAAM5iI,GAAKolK,GAAcnlK,KAAKkiK,iBAAmB,IAAK,GAGzFliK,MAAK4hK,SAAW5hK,KAAK4hK,QAAQ71J,OAAS,IACtC/L,KAAKglK,MAAQ,GAAIh7J,MAAKo7J,KAAKC,KAAKrlK,KAAKukK,UAAU31J,QAAS5O,KAAK4hK,SACzD5hK,KAAKglK,QACLhlK,KAAKglK,MAAMt+J,MAAQ1G,KAAKukK,UAAU31J,QAAQlI,MAC1C1G,KAAKglK,MAAMr+J,OAAS3G,KAAKukK,UAAU31J,QAAQjI,OAC3C3G,KAAKglK,MAAMh7I,UAAY1B,EAAA2B,YAAYC,aAAalqB,KAAK09H,YACrD19H,KAAKglK,MAAMM,cAAgBtlK,KAAK+hK,eAChC/hK,KAAK8R,SAAS9R,KAAKglK,aAIL,UAAtBhlK,KAAKiiK,cACiB,gBAAtBjiK,KAAKiiK,cACiB,YAAtBjiK,KAAKiiK,eAGLjiK,KAAKglK,MAAQ,GAAIh7J,MAAKo7J,KAAKG,MAAMvlK,KAAKukK,UAAU31J,QAAS5O,KAAKkiK,iBAAkBliK,KAAKmiK,kBACrFniK,KAAKglK,MAAMQ,SAAWx7J,KAAKy7J,WAAWC,UAElC1lK,KAAKglK,QACLhlK,KAAKglK,MAAMt+J,MAAQ1G,KAAKukK,UAAU31J,QAAQlI,MAC1C1G,KAAKglK,MAAMr+J,OAAS3G,KAAKukK,UAAU31J,QAAQjI,OAC3C3G,KAAKglK,MAAMh7I,UAAY1B,EAAA2B,YAAYC,aAAalqB,KAAK09H,YACrD19H,KAAKglK,MAAMM,cAAgBtlK,KAAK+hK,eAChC/hK,KAAK8R,SAAS9R,KAAKglK,OAEnBhlK,KAAK2lK,kBAAoB3lK,KAAKglK,MAAME,SAAShkK,MAAM,IAK3D,IAAIlB,KAAKwiK,UAAW,IAChBxiK,KAAK4lK,UAAY,GAAI57J,MAAKwgB,SACtBxqB,KAAK4lK,WACL5lK,KAAK8R,SAAS9R,KAAK4lK,WAGK,MAAxB5lK,KAAK6lK,iBAAmD,aAAxB7lK,KAAK6lK,kBACrC7lK,KAAK8hK,cACD9hK,KAAK8hK,aACL,IAAK,GAAI/hK,GAAY,EAAGA,EAAIC,KAAKkiK,iBAAmBliK,KAAKmiK,iBAAkBpiK,IAAK,CAC5E,GAAIw/D,GAAO,GAAIv1D,MAAKqzH,KAAKt9H,EAAI,EAAI,GACjCw/D,GAAK7tD,MAAM0rH,KAAOp9H,KAAK6lK,gBACvB7lK,KAAK8hK,WAAWp6I,KAAK63C,GACrBv/D,KAAK8R,SAAS9R,KAAK8hK,WAAW/hK,MAS1C4hK,iBAAA7gK,UAAA48E,QAAR,WACI,GAAImkB,IAAqB,CAQzB,IANA7hG,KAAKymI,QAAUzmI,KAAKsiK,OAEhBtiK,KAAKymI,QAAU,EAAIhoH,KAAKoJ,KACxB7nB,KAAKymI,OAASzmI,KAAKymI,QAAU,EAAIhoH,KAAKoJ,KAGhB,SAAtB7nB,KAAKiiK,aAAyB,CAE9B,GAAIjiK,KAAKglK,OAAShlK,KAAK29H,YAAa,GAAQ39H,KAAK4hK,SAAW5hK,KAAK4hK,QAAQ71J,OAAS,EAAG,CACjF,GAAIw3J,GAAM,OACNE,EAAM,MAaV,IAVIzjK,KAAK4iK,cAAgB,GACkC,MAAvD5iK,KAAKsjK,4BAA4BtjK,KAAK4iK,eACiB,aAAvD5iK,KAAKsjK,4BAA4BtjK,KAAK4iK,eACiB,MAAvD5iK,KAAKwjK,4BAA4BxjK,KAAK4iK,eACiB,aAAvD5iK,KAAKwjK,4BAA4BxjK,KAAK4iK,gBAEtCW,EAASvjK,KAAKsjK,4BAA4BtjK,KAAK4iK,cAAchgJ,MAAM,KAAKV,IAAI5D,YAC5EmlJ,EAASzjK,KAAKwjK,4BAA4BxjK,KAAK4iK,cAAchgJ,MAAM,KAAKV,IAAI5D,aAIlE,MAAVilJ,GACAA,EAAOx3J,OAAS,GAChBw3J,EAAOx3J,QAAU/L,KAAKkiK,iBAAmBliK,KAAKmiK,kBACpC,MAAVsB,GACAA,EAAO13J,OAAS,GAChB03J,EAAO13J,QAAU/L,KAAKkiK,iBAAmBliK,KAAKmiK,iBAE9C,IAAK,GAAIpiK,GAAI,EAAGA,EAAIC,KAAK4hK,QAAQ71J,OAAQhM,IAEV,aAAvBC,KAAK6iK,eACiB,MAAtB7iK,KAAK6iK,eACiB,aAAtB7iK,KAAK6iK,eAGL7iK,KAAK4hK,QAAQ7hK,GAAG+e,EAAI9e,KAAK6hK,gBAAgB9hK,GAAG+e,EAAIykJ,EAAOxjK,GAEvDC,KAAK4hK,QAAQ7hK,GAAGif,EAAIhf,KAAK6hK,gBAAgB9hK,GAAGif,EAAIykJ,EAAO1jK,IACzB,aAAvBC,KAAK6iK,gBAEZ7iK,KAAK4hK,QAAQ7hK,GAAG+e,EAAIykJ,EAAOxjK,GAE3BC,KAAK4hK,QAAQ7hK,GAAGif,EAAIykJ,EAAO1jK,IAMvCC,KAAKwiK,UAAW,GAChBxiK,KAAK8lK,uBAEN,IAA0B,UAAtB9lK,KAAKiiK,aAA0B,CAEtC,GAAIjiK,KAAKglK,OAAShlK,KAAKglK,MAAME,SACzB,IAAK,GAAInlK,GAAI,EAAGA,EAAIC,KAAKglK,MAAME,SAASn5J,OAAQhM,IAEjB,MAAtBC,KAAKuiK,cAAwBxiK,EAAI,GAAK,IACf,MAAtBC,KAAKuiK,cAA8C,OAAtBviK,KAAKuiK,eAA0BxiK,EAAI,GAAK,GACjD,OAAtBC,KAAKuiK,aAELviK,KAAKglK,MAAME,SAASnlK,GAChBC,KAAK2lK,kBAAkB5lK,GAAKC,KAAKoiK,WAAa3jJ,KAAKq8B,IAAI96C,KAAKymI,OAAS1mI,EAAIC,KAAKqiK,aACrD,OAAtBriK,KAAKuiK,cAAyBxiK,EAAI,GAAK,IAC9CC,KAAKglK,MAAME,SAASnlK,GAChBC,KAAK2lK,kBAAkB5lK,GAAKC,KAAKoiK,WAAa3jJ,KAAKq8B,IAAI96C,KAAKymI,OAAS1mI,EAAIC,KAAKqiK,aAM1FriK,MAAKwiK,UAAW,GAChBxiK,KAAK+lK,wBAEN,IAA0B,gBAAtB/lK,KAAKiiK,aAAgC,CAE5C,GACIjiK,KAAKglK,OACLhlK,KAAKglK,MAAME,UACXllK,KAAK29H,YAAa,GACkB,MAApC39H,KAAKsjK,6BAC+B,MAApCtjK,KAAKwjK,4BACP,CACE,GAAID,GAAM,OACNE,EAAM,MAaV,IAVIzjK,KAAK4iK,cAAgB,GACkC,MAAvD5iK,KAAKsjK,4BAA4BtjK,KAAK4iK,eACiB,aAAvD5iK,KAAKsjK,4BAA4BtjK,KAAK4iK,eACiB,MAAvD5iK,KAAKwjK,4BAA4BxjK,KAAK4iK,eACiB,aAAvD5iK,KAAKwjK,4BAA4BxjK,KAAK4iK,gBAEtCW,EAASvjK,KAAKsjK,4BAA4BtjK,KAAK4iK,cAAchgJ,MAAM,KAAKV,IAAI5D,YAC5EmlJ,EAASzjK,KAAKwjK,4BAA4BxjK,KAAK4iK,cAAchgJ,MAAM,KAAKV,IAAI5D,aAIlE,MAAVilJ,GACAA,EAAOx3J,OAAS,GAChBw3J,EAAOx3J,QAAU/L,KAAKkiK,iBAAmBliK,KAAKmiK,kBACpC,MAAVsB,GACAA,EAAO13J,OAAS,GAChB03J,EAAO13J,QAAU/L,KAAKkiK,iBAAmBliK,KAAKmiK,iBAE9C,IAAK,GAAIpiK,GAAI,EAAGA,EAAIC,KAAKglK,MAAME,SAASn5J,OAAQhM,IAEjB,aAAvBC,KAAK6iK,eACiB,MAAtB7iK,KAAK6iK,eACiB,aAAtB7iK,KAAK6iK,cAED9iK,EAAI,GAAK,EAETC,KAAKglK,MAAME,SAASnlK,GAAKC,KAAK2lK,kBAAkB5lK,GAAKwjK,EAAOxjK,EAAI,GAGhEC,KAAKglK,MAAME,SAASnlK,GAAKC,KAAK2lK,kBAAkB5lK,GAAK0jK,GAAQ1jK,EAAI,GAAK,EAAI,GAEjD,OAAtBC,KAAKuiK,cAAyBxiK,EAAI,GAAK,IAC1CA,EAAI,GAAK,EAETC,KAAKglK,MAAME,SAASnlK,GAAKwjK,EAAOxjK,EAAI,GAGpCC,KAAKglK,MAAME,SAASnlK,GAAK0jK,GAAQ1jK,EAAI,GAAK,EAAI,IAO9DC,KAAKwiK,UAAW,GAChBxiK,KAAK+lK,wBAEN,IAA0B,YAAtB/lK,KAAKiiK,aAA4B,CAExC,GACIjiK,KAAKyiK,cAAgB,GACrBziK,KAAKkiK,iBAAmB,GACxBliK,KAAKmiK,iBAAmB,GACxBniK,KAAKglK,MAAME,SAASn5J,QAAU/L,KAAKilK,oBAAoBl5J,OACzD,CACE,IAAK,GAAIhM,GAAI,EAAGA,EAAIC,KAAKglK,MAAME,SAASn5J,OAAQhM,IAAK,CACjD,GAAIimK,GAAoBtwJ,UAAU3V,GAA6B,EAAxBC,KAAKkiK,mBAAuBn0J,YAAYk4J,UAC3EC,EAAoBxwJ,UAAW3V,EAAI,EAAKC,KAAKkiK,kBAAkBn0J,YAAYk4J,SAE3ElmK,GAAI,GAAK,IAELimK,EAAY,GAAK,EACjBhmK,KAAKglK,MAAME,SAASnlK,GAChBC,KAAKilK,oBAAoBllK,GACzBC,KAAK0iK,mBACAsD,EAAY,IACZhmK,KAAKkiK,kBAAoBgE,EAAY,IACtCznJ,KAAKq8B,IAAI96C,KAAK2iK,eAEtB3iK,KAAKglK,MAAME,SAASnlK,GAChBC,KAAKilK,oBAAoBllK,GACzBC,KAAK0iK,mBACAsD,EAAY,IACZhmK,KAAKkiK,kBAAoBgE,EAAY,IACtCznJ,KAAKq8B,IAAI96C,KAAK2iK,gBAKlC3iK,KAAK2iK,eAAiBlkJ,KAAKoJ,GAAK7nB,KAAKyiK,cAGjCziK,KAAK2iK,cAAgBlkJ,KAAKoJ,KAE1B7nB,KAAKyiK,cAAgB,EACrBziK,KAAK2iK,cAAgB,EACrB9gE,GAAY,GAIhB7hG,KAAKwiK,UAAW,GAChBxiK,KAAK+lK,oBAQT/lK,KAAK29H,YAAa,IACd39H,KAAKyzB,WAAa,GAClBzzB,KAAK4iK,eAGJ5iK,KAAKyzB,WAAa,GAAKzzB,KAAK4iK,aAAe5iK,KAAKyzB,WAA2B,GAAbouE,EAC/D7hG,KAAKkV,OAGLlV,KAAK+iK,cAAc5tJ,MAAM,KAS7BwsJ,iBAAA7gK,UAAAglK,iBAAR,WACI,GAAI9lK,KAAK4lK,WACe,MAAhB5lK,KAAK4hK,SAAmB5hK,KAAK4hK,QAAQ71J,OAAS,EAAG,CACjD/L,KAAK4lK,UAAU78I,QAEf/oB,KAAK4lK,UAAU18I,UAAU,EAAG,UAC5BlpB,KAAK4lK,UAAU3E,OAAOjhK,KAAK4hK,QAAQ,GAAG9iJ,EAAG9e,KAAK4hK,QAAQ,GAAG5iJ,EAEzD,KAAK,GAAIjf,GAAI,EAAGA,EAAIC,KAAK4hK,QAAQ71J,OAAQhM,IACrCC,KAAK4lK,UAAUzE,OAAOnhK,KAAK4hK,QAAQ7hK,GAAG+e,EAAG9e,KAAK4hK,QAAQ7hK,GAAGif,EAG7D,KAAK,GAAIjf,GAAI,EAAGA,EAAIC,KAAK4hK,QAAQ71J,OAAQhM,IACrCC,KAAK4lK,UAAU58I,UAAU,UACzBhpB,KAAK4lK,UAAUO,WAAWnmK,KAAK4hK,QAAQ7hK,GAAG+e,EAAG9e,KAAK4hK,QAAQ7hK,GAAGif,EAAG,IAChEhf,KAAK4lK,UAAUn8I,UAGa,MAAxBzpB,KAAK6lK,iBACmB,aAAxB7lK,KAAK6lK,iBACc,MAAnB7lK,KAAK8hK,YAEqB,MAAtB9hK,KAAK8hK,WAAW/hK,KAChBC,KAAK8hK,WAAW/hK,GAAG+e,EAAI9e,KAAK4hK,QAAQ7hK,GAAG+e,EACvC9e,KAAK8hK,WAAW/hK,GAAGif,EAAIhf,KAAK4hK,QAAQ7hK,GAAGif,KAQvD2iJ,iBAAA7gK,UAAAilK,kBAAR,WACI,GAAI/lK,KAAK4lK,WACD5lK,KAAKglK,OAAShlK,KAAKglK,MAAME,SAASn5J,OAAS,EAAG,CAC9C/L,KAAK4lK,UAAU78I,QAEf/oB,KAAK4lK,UAAU3E,OAAOjhK,KAAKglK,MAAME,SAAS,GAAIllK,KAAKglK,MAAME,SAAS,GAElE,KAAK,GAAInlK,GAAI,EAAGA,EAAIC,KAAKglK,MAAME,SAASn5J,OAAQhM,IAC5CC,KAAK4lK,UAAU58I,UAAU,UACzBhpB,KAAK4lK,UAAUO,WAAWnmK,KAAKglK,MAAME,SAASnlK,GAAIC,KAAKglK,MAAME,WAAWnlK,GAAI,GAC5EC,KAAK4lK,UAAUn8I,UAGa,MAAxBzpB,KAAK6lK,iBACmB,aAAxB7lK,KAAK6lK,iBACc,MAAnB7lK,KAAK8hK,YAE+B,MAAhC9hK,KAAK8hK,YAAY/hK,EAAI,GAAK,KAC1BC,KAAK8hK,YAAY/hK,EAAI,GAAK,GAAG+e,EAAI9e,KAAKglK,MAAME,SAASnlK,EAAI,GACzDC,KAAK8hK,YAAY/hK,EAAI,GAAK,GAAGif,EAAIhf,KAAKglK,MAAME,SAASnlK,MAYtE4hK,iBAAA7gK,UAAAqU,MAAP,SAAa+iI,GAAA,SAAAA,MAAA,GACLl4I,KAAKgiK,UAIL9pB,EAAa,IACbA,EAAa,IAGjBl4I,KAAK+iK,cAAc7tJ,OACnBlV,KAAK+iK,cAAc5tJ,MAAM+iI,GACzBl4I,KAAKgiK,SAAU,IAGZL,iBAAA7gK,UAAAoU,KAAP,WACIlV,KAAK+iK,cAAc7tJ,OACnBlV,KAAKgiK,SAAU,EACfhiK,KAAK4iK,aAAe,EAEhB5iK,KAAKsxI,OACLtxI,KAAKmV,SAeNwsJ,iBAAA7gK,UAAAwjI,qBAAP,SAA4B50E,GAExB,OADAA,EAAOA,EAAK3hD,YAER,IAAK,IACL,IAAK,SACD,MAAO/D,MAAKgyH,YAAYC,MAC5B,KAAK,IACL,IAAK,MACD,MAAOjyH,MAAKgyH,YAAYqJ,GAC5B,KAAK,IACL,IAAK,WACD,MAAOr7H,MAAKgyH,YAAYnmB,QAC5B,KAAK,IACL,IAAK,SACD,MAAO7rG,MAAKgyH,YAAYsJ,MAC5B,KAAK,IACL,IAAK,UACD,MAAOt7H,MAAKgyH,YAAYuJ,OAC5B,KAAK,IACL,IAAK,SACD,MAAOv7H,MAAKgyH,YAAYwJ,MAC5B,KAAK,IACL,IAAK,UACD,MAAOx7H,MAAKgyH,YAAYyJ,OAC5B,KAAK,IACL,IAAK,cACD,MAAOz7H,MAAKgyH,YAAY0J,WAC5B,KAAK,IACL,IAAK,aACD,MAAO17H,MAAKgyH,YAAY2J,UAC5B,KAAK,IACL,IAAK,aACD,MAAO37H,MAAKgyH,YAAY4J,UAC5B,KAAK,KACL,IAAK,aACD,MAAO57H,MAAKgyH,YAAY6J,UAC5B,KAAK,KACL,IAAK,aACD,MAAO77H,MAAKgyH,YAAY8J,UAC5B,KAAK,KACL,IAAK,YACD,MAAO97H,MAAKgyH,YAAY+J,SAC5B,KAAK,KACL,IAAK,MACD,MAAO/7H,MAAKgyH,YAAYgK,GAC5B,KAAK,KACL,IAAK,aACD,MAAOh8H,MAAKgyH,YAAYiK,UAC5B,KAAK,KACL,IAAK,QACD,MAAOj8H,MAAKgyH,YAAYnyG,KAC5B,KAAK,KACL,IAAK,aACD,MAAO7f,MAAKgyH,YAAYkK,UAC5B,SAII,MAAOl8H,MAAKgyH,YAAYC,SAapC0lC,iBAAA7gK,UAAAic,MAAA,WACI,GAAI3T,GAA4B,GAAIu4J,iBACpCv4J,GAAQ84J,iBAAmBliK,KAAKkiK,iBAChC94J,EAAQ+4J,iBAAmBniK,KAAKmiK,iBAChC/4J,EAAQg5J,WAAapiK,KAAKoiK,WAC1Bh5J,EAAQi5J,YAAcriK,KAAKqiK,YAC3Bj5J,EAAQk5J,OAAStiK,KAAKsiK,OACtBl5J,EAAQm5J,aAAeviK,KAAKuiK,aAC5Bn5J,EAAQm7J,UAAYvkK,KAAKukK,UAAUxnJ,QACnC3T,EAAQs0H,WAAa19H,KAAK09H,WAC1Bt0H,EAAQ64J,aAAejiK,KAAKiiK,aAC5B74J,EAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQuW,QAAU3f,KAAK2f,QACvBvW,EAAQo5J,OAASxiK,KAAKwiK,OACtBp5J,EAAQy8J,gBAAkB7lK,KAAK6lK,gBAC/Bz8J,EAAQ24J,eAAiB/hK,KAAK+hK,eAC9B34J,EAAQgyH,OAASp7H,KAAKo7H,OACtBhyH,EAAQkoI,MAAQtxI,KAAKsxI,KAQrB,IAAI9zH,GAAgBtU,SAAS6iC,cAAc/rC,KAAK2d,KAGhD,OAFAvU,GAAQzH,OAAO6b,GACfpU,EAAQkU,gBACDlU,GA31Bfu4J,iBAAAtmJ,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBvK6i7CxB05I,mBuK5i7C8B1mJ,EAAAG,YAAzB/a,GAAAshK,iBAAgBA,EA81BhBthK,EAAA4iK,4BAMT6B,eAAgB,gBAIhB38I,MAAO,QAMPi+I,iBAAkB,iBAYlB1B,eAAgB,gBAShBxB,mBAAoB,kBASpBC,mBAAoB,kBAQpBqB,UAAW,YAQXC,WAAY,aAQZpoE,MAAO,QASPsoE,cAAe,cAQfjtD,MAAO,QAOPpC,KAAM,OAOND,KAAM,OASNuvD,cAAe,eAQfC,kBAAmB,mBAQnBxrD,MAAO,QAOPxwF,MAAO,QAUPu6I,YAAa,aAYbC,cAAe,iBvKgl5Cb,SAAS/iK,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GwK3m7CjE5Z,EAAAzB,EAAgC,GAChC0b,EAAA1b,EAA+B,IAC/Bk6H,EAAAl6H,EAAsB,IAqCtBkmK,EAAA,SAAAnjK,GAAoC3B,EAAA8kK,eAAAnjK,EAQhC,SAAAmjK,kBACInjK,EAAAzC,KAAAT,MAEAA,KAAKy7H,UACLz7H,KAAK83I,aACL93I,KAAK+3I,aAuDb,MA9CIsuB,gBAAAvlK,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,EAGb,KADA,GAAIuC,GAAgBvC,EAAKwC,kBACV,MAARD,GAAc,CACjB,OAAQA,EAAKnC,UAKT,IAAK,YAED,IADA,GAAI28G,GAAoBx6G,EAAKC,kBACV,MAAZu6G,GAAkB,CACrB,GAAIA,EAASr8G,aAAa,UAC8B,OAAhDle,KAAKy7H,OAAOlB,EAASh8G,aAAa,UAAoB,CACtDve,KAAKy7H,OAAOlB,EAASh8G,aAAa,UAAYg8G,CAG9C,KADA,GAAI+rC,GAAqB/rC,EAASv6G,kBACd,MAAbsmJ,GACCA,EAAUpoJ,aAAa,kBACvBle,KAAK83I,UAAUvd,EAASh8G,aAAa,UACjC+nJ,EAAU/nJ,aAAa,kBACpB+nJ,EAAUpoJ,aAAa,oBAC9Ble,KAAK+3I,UAAUxd,EAASh8G,aAAa,UACjC+nJ,EAAU/nJ,aAAa,mBAE/B+nJ,EAAYA,EAAUlmJ,mBAalCm6G,EAAWA,EAASn6G,oBAIhCL,EAAOA,EAAKK,qBAlExBimJ,eAAAhrJ,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe6C,QxK4n7CxBw7I,iBwK3n7C4BhsC,EAAAxvG,MAAvBxqB,GAAAgmK,eAAcA,GxKmo7CrB,SAAS/lK,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GyKtr7CjE5Z,EAAAzB,EAAgC,GAChC0b,EAAA1b,EAA+B,IAC/Byb,EAAAzb,EAA6B,IAG7BomK,EAAA,SAAArjK,GAAoC3B,EAAAglK,eAAArjK,EAGhC,SAAAqjK,kBACIrjK,EAAAzC,KAAAT,MAyER,MAtEWumK,gBAAAzlK,UAAA4c,aAAP,SAAoBF,GAApB,GAAA1E,GAAA9Y,KACQ8oB,GAAkB,CAEtB,IAAItL,EAAKU,aAAa7d,EAAAmmK,yBAAyBC,QAAS,CACpD,GAAIlgC,GAA4B/oH,EAAKe,aAAale,EAAAmmK,yBAAyBC,QAAQ7jJ,MAAM,IACzF5iB,MAAK4hK,UACL,IAAI8E,EACJngC,GAAWj4G,QAAQ,SAAC1hB,EAAey3B,GAC3BA,EAAQ,EACRqiI,EAAU1nJ,EAAItJ,SAAS9I,IAEvB85J,EAAY,GAAI18J,MAAK24H,MAAMjtH,SAAS9I,GAAQ,GAC5CkM,EAAK8oJ,QAAQl6I,KAAKg/I,MAI1B59I,GAAS,EAGb,QAAK5lB,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,MAChBsL,IACA9oB,KAAK8oB,UACE,IAQZy9I,eAAAzlK,UAAAgoB,OAAP,WACI9oB,KAAK+oB,QACL/oB,KAAKgpB,UAAUhpB,KAAKyoB,OAAQzoB,KAAKipB,YACjCjpB,KAAKkpB,UAAUlpB,KAAKmpB,WAAYnpB,KAAKopB,WAAYppB,KAAKqpB,YACtDrpB,KAAK2mK,YAAY3mK,KAAK4hK,SACtB5hK,KAAKypB,WAGT88I,eAAAzlK,UAAAic,MAAA,WACI,GAAI3T,GAA0B,GAAIm9J,eA6BlC,OA5BAn9J,GAAQ+T,iBAER/T,EAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQgV,SAAWpe,KAAKoe,SACxBhV,EAAQuW,QAAU3f,KAAK2f,QACvBvW,EAAQyU,MAAQ7d,KAAK6d,MACrBzU,EAAQmhB,KAAOvqB,KAAKuqB,KACpBnhB,EAAQ4gB,UAAYhqB,KAAKgqB,UACzB5gB,EAAQuU,KAAO3d,KAAK2d,KACpBvU,EAAQgT,aAAepc,KAAKoc,aAE5BhT,EAAQ+f,WAAanpB,KAAKmpB,WAC1B/f,EAAQggB,WAAappB,KAAKopB,WAC1BhgB,EAAQigB,WAAarpB,KAAKqpB,WAC1BjgB,EAAQ6f,WAAajpB,KAAKipB,WAC1B7f,EAAQqf,OAASzoB,KAAKyoB,OACtBrf,EAAQw4J,WACR5hK,KAAK4hK,QAAQtzI,QAAQ,SAAC88E,GAClBhiG,EAAQw4J,QAAQl6I,KAAK,GAAI1d,MAAK24H,MAAMv3B,EAAMtsF,EAAGssF,EAAMpsF,MAGvD5V,EAAQ0f,SAED1f,GA5Efm9J,eAAAlrJ,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gBzK8v7CxBs+I,iByK7v7C4B3qJ,EAAAsE,aAAvB7f,GAAAkmK,eAAcA,EA+EdlmK,EAAAmmK,0BAITC,OAAQ,WzKqr7CN,SAASnmK,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G0Kzx7CjE5Z,EAAAzB,EAA6C,GAC7C0b,EAAA1b,EAA+B,IAC/BwtB,EAAAxtB,EAA6B,IAC7B8a,EAAA9a,EAA4B,IAC5B+B,EAAA/B,EAAgC,GAEhCkoB,EAAAloB,EAA6B,IAC7B2b,EAAA3b,EAAuB,IACvBmoB,EAAAnoB,EAA4B,IAC5ByS,EAAAzS,EAA2E,GAG3EymK,EAAA,SAAA1jK,GAAiC3B,EAAAqlK,YAAA1jK,EA2B7B,SAAA0jK,eACI1jK,EAAAzC,KAAAT,MArBIA,KAAA6hK,mBAeA7hK,KAAA+hK,eAAyB,EAQ7B/hK,KAAK6mK,MAAQ,KACb7mK,KAAK8mK,aAAe,IACpB9mK,KAAK+mK,iBACL/mK,KAAKgnK,eACLhnK,KAAKinK,qBACLjnK,KAAK09H,WAAa,EAClB19H,KAAKknK,gBAAkB,KACvBlnK,KAAKmnK,oBAAqB,EAC1BnnK,KAAKonK,OAAS,EACdpnK,KAAKmvH,MAAQ,KACbnvH,KAAKqnK,WAAa,EAClBrnK,KAAKw8H,WAAY,EACjBx8H,KAAKsnK,YAAa,EAClBtnK,KAAKwiK,QAAS,EACdxiK,KAAK29H,UAAW,EAChB39H,KAAKunK,0BAA4B,EACjCvnK,KAAKwnK,sBAAwB,EAC7BxnK,KAAKynK,2BAA6B,EAClCznK,KAAK0nK,YAAc,EAEnB1nK,KAAK2nK,iBAAmB/0J,EAAAa,iBAAiB,mBACzCzT,KAAK2nK,iBAAiBj0J,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKmV,MAAMtB,KAAK7T,OACpEA,KAAKgjK,gBAAkBpwJ,EAAAa,iBAAiB,kBACxCzT,KAAKgjK,gBAAgBtvJ,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKkV,KAAKrB,KAAK7T,OAiiB1E,MA9hBW4mK,aAAA9lK,UAAA2c,aAAP,SAAoBD,GAChB,IAAKxd,KAAK29H,SAAU,CAqDhB,GA1CAz6H,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,GAEfA,EAAKU,aAAa0pJ,EAAsBC,gBACxC7nK,KAAK8mK,aAAepxJ,SAAS8H,EAAKe,aAAaqpJ,EAAsBC,gBAGrErqJ,EAAKU,aAAa0pJ,EAAsBE,8BACxC9nK,KAAKunK,0BAA4BjpJ,WAC7Bd,EAAKe,aAAaqpJ,EAAsBE,8BAI5CtqJ,EAAKU,aAAa0pJ,EAAsBG,0BACxC/nK,KAAKwnK,sBAAwBlpJ,WACzBd,EAAKe,aAAaqpJ,EAAsBG,0BAI5CvqJ,EAAKU,aAAa0pJ,EAAsBI,+BACxChoK,KAAKynK,2BAA6BnpJ,WAC9Bd,EAAKe,aAAaqpJ,EAAsBI,+BAI5CxqJ,EAAKU,aAAa0pJ,EAAsB79I,cACxC/pB,KAAK09H,WAAap1G,EAAA2B,YAAYC,aAC1BxU,SAAS8H,EAAKe,aAAaqpJ,EAAsB79I,eAIrDvM,EAAKU,aAAa0pJ,EAAsBK,aACxCjoK,KAAKqnK,WAAa/oJ,WAAWd,EAAKe,aAAaqpJ,EAAsBK,aAGrEzqJ,EAAKU,aAAa0pJ,EAAsB7yD,QACc,MAAlDv3F,EAAKe,aAAaqpJ,EAAsB7yD,MACxC/0G,KAAKmvH,MAAQ,KAEbnvH,KAAKmvH,MAAQz5G,SAAS8H,EAAKe,aAAaqpJ,EAAsB7yD,MAAO,KAIzEv3F,EAAKU,aAAa0pJ,EAAsBnB,QAAS,CACjD,GAAIyB,GAAaloK,KAAKmlI,aAAa3nH,EAAKe,aAAaqpJ,EAAsBnB,SACvE0B,EAAax6I,EAAAiX,aAAazB,cAAc+kI,EAE5CloK,MAAK+mK,cAAgB/mK,KAAKooK,oBAAoBD,EAAYnoK,KAAK8mK,cAGnE,GAAItpJ,EAAKU,aAAa0pJ,EAAsBzxD,OAAQ,CAChD,GAAIkyD,GAAc7qJ,EAAKe,aAAaqpJ,EAAsBzxD,MAY1D,IAXoC,IAAhCkyD,EAAYluI,QAAQ,UACpBn6B,KAAKknK,gBAAkC7+I,EAAAK,aAAaC,OAAO0/I,GAC/B,MAAxBroK,KAAKknK,iBACLmB,EAAcroK,KAAKknK,gBAAgB/qC,UAAY,OAC/Cn8H,KAAKmnK,oBAAqB,GAE1BnnK,KAAKmnK,oBAAqB,GAIlCnnK,KAAKsoK,SAAWpmK,EAAAqD,gBAAgBuJ,uBAAuBu5J,GAClC,MAAjBroK,KAAKsoK,SAAkB,CACvB,GAAiC,GAA7BtoK,KAAK+mK,cAAch7J,OACnB,IAAK,GAAIhM,GAAY,EAAGA,EAAIC,KAAK8mK,aAAc/mK,IAC3CC,KAAK+mK,cAAcr/I,KACf,GAAI1d,MAAK24H,MAAMlkH,KAAKoE,MAAM7iB,KAAKsoK,SAAS5hK,OAAS1G,KAAK8mK,aAAe,IAAM/mK,EAAG,GAK1F,KAAK,GAAIA,GAAY,EAAGA,EAAIC,KAAK+mK,cAAch7J,OAAQhM,IACnDC,KAAK6hK,gBAAgBn6I,KAAK,GAAI1d,MAAK24H,MAAM3iI,KAAK+mK,cAAchnK,GAAG+e,EAAG9e,KAAK+mK,cAAchnK,GAAGif,GAG5Fhf,MAAK6mK,MAAQ,GAAI78J,MAAKo7J,KAAKC,KAAKrlK,KAAKsoK,SAAUtoK,KAAK+mK,eACpD/mK,KAAK6mK,MAAM78I,UAAY1B,EAAA2B,YAAYC,aAAalqB,KAAK09H,YACrD19H,KAAK6mK,MAAMvB,cAAgBtlK,KAAK+hK,eAEd,MAAd/hK,KAAKmvH,QACLnvH,KAAK6mK,MAAMt8I,KAAOvqB,KAAKmvH,OAG3BnvH,KAAK8R,SAAS9R,KAAK6mK,OAEf7mK,KAAKwiK,UAAW,IAChBxiK,KAAK4lK,UAAY,GAAI57J,MAAKwgB,SACtBxqB,KAAK4lK,WACL5lK,KAAK8R,SAAS9R,KAAK4lK,aAM/BpoJ,EAAKU,aAAa0pJ,EAAsB9C,kBACxC9kK,KAAK+hK,eAAiBrsJ,SAAS8H,EAAKe,aAAaqpJ,EAAsB9C,kBAG3E9kK,KAAK29H,UAAW,IAQjBipC,YAAA9lK,UAAAynK,UAAP,SAAiBniH,GACbpmD,KAAKinK,kBAAoBjnK,KAAKinK,kBAAkB3lK,OAAO8kD,IAMpDwgH,YAAA9lK,UAAA0nK,UAAP,WACI,MAAOxoK,MAAKgnK,aAOTJ,YAAA9lK,UAAA4c,aAAP,SAAoBF,GAChB,GAAIxd,KAAK29H,SAAU,CAaf,GAFAz6H,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,GAEfA,EAAKU,aAAa0pJ,EAAsBnB,QAAS,CACjD,GAAIgC,GAAmCzoK,KAAKmlI,aACxC3nH,EAAKe,aAAaqpJ,EAAsBnB,QAE5CzmK,MAAKgnK,eAGDxpJ,EAAKU,aAAa0pJ,EAAsBc,iBACxC9mK,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAaqpJ,EAAsBc,iBAEjE1oK,KAAKgnK,YAAcyB,EAAcnnK,OAAOtB,KAAKinK,mBAAmB5vI,UAEhEr3B,KAAKgnK,YAAchnK,KAAKinK,kBAAkB3lK,OAAOmnK,GAErDzoK,KAAKinK,qBACLjnK,KAAK2oK,aAAa3oK,KAAKgnK,aAmB3B,GAhBIxpJ,EAAKU,aAAa0pJ,EAAsBgB,iBACxC5oK,KAAKgnK,YAAchnK,KAAKmlI,aAAa3nH,EAAKe,aAAaqpJ,EAAsBnB,SAAS,GACtFzmK,KAAK2oK,aAAa3oK,KAAKgnK,cAGvBxpJ,EAAKU,aAAa0pJ,EAAsB7yD,OACtB,MAAd/0G,KAAK6mK,QACiD,MAAlDrpJ,EAAKe,aAAaqpJ,EAAsB7yD,MACxC/0G,KAAKmvH,MAAQ,KAEbnvH,KAAKmvH,MAAQz5G,SAAS8H,EAAKe,aAAaqpJ,EAAsB7yD,MAAO,IAEzE/0G,KAAK6mK,MAAMt8I,KAAOvqB,KAAKmvH,OAI3B3xG,EAAKU,aAAa0pJ,EAAsBzxD,OAAQ,CAChD,GAAIkyD,GAAc7qJ,EAAKe,aAAaqpJ,EAAsBzxD,MACtB,KAAhCkyD,EAAYluI,QAAQ,UACpBn6B,KAAKknK,gBAAkC7+I,EAAAK,aAAaC,OAAO0/I,GAC/B,MAAxBroK,KAAKknK,iBACLmB,EAAcroK,KAAKknK,gBAAgB/qC,UAAY,OAC/Cn8H,KAAKmnK,oBAAqB,GAE1BnnK,KAAKmnK,oBAAqB,GAIlCnnK,KAAKsoK,SAAWpmK,EAAAqD,gBAAgBuJ,uBAAuBu5J,GAClC,MAAjBroK,KAAKsoK,UACa,MAAdtoK,KAAK6mK,QACL7mK,KAAK6mK,MAAMj4J,QAAU5O,KAAKsoK,UAMlC9qJ,EAAKU,aAAa0pJ,EAAsBrrC,WACxC36H,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAaqpJ,EAAsBrrC,aAEjEv8H,KAAKw8H,UAAY56H,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAaqpJ,EAAsBrrC,YAGlF/+G,EAAKU,aAAa0pJ,EAAsBlwD,QAExC13G,KAAK2nK,iBAAiBxyJ,MAAMO,SAAS8H,EAAKe,aAAaqpJ,EAAsBlwD;AAG7El6F,EAAKU,aAAa0pJ,EAAsBtyD,OAExCt1G,KAAKgjK,gBAAgB7tJ,MAAMO,SAAS8H,EAAKe,aAAaqpJ,EAAsBtyD,UAQhFsxD,YAAA9lK,UAAAqU,MAAR,WACgC,MAAxBnV,KAAKknK,iBAA2BlnK,KAAKmnK,sBAAuB,EACvDnnK,KAAKw8H,WAAcx8H,KAAKsnK,aACzBxrJ,EAAAe,OAAOC,aAAa9c,KAAM,UAE1B8b,EAAAe,OAAO0K,YAAYvnB,MACfinB,MAAO,SACPjB,aAAc,EAAGhmB,KAAKknK,gBAAgB5rC,UACtC/4G,eAAgB,GAAKviB,KAAKknK,gBAAgB9qC,OAC1C/5G,WAAY,UACZS,UAAW9iB,KAAKknK,gBAAgB76E,KAChC39D,aAAc,WACdD,iBAAkBzuB,KAAK2O,cACvBkgB,cAAe7uB,KACf4uB,gBAAiB,YAGrB5uB,KAAKsnK,YAAa,GAGlBtnK,KAAKmnK,sBAAuB,IACvBnnK,KAAKw8H,WAAcx8H,KAAKsnK,aACzBxrJ,EAAAe,OAAOC,aAAa9c,KAAM,UAE1B8b,EAAAe,OAAO0K,YAAYvnB,MACfinB,MAAO,SACPjB,aAAc,EAAG,IACjBzD,eAAgB,IAChBF,WAAY,UACZS,WAAW,EACX4L,aAAc,WACdD,iBAAkBzuB,KAAK2O,cACvBkgB,cAAe7uB,KACf4uB,gBAAiB,YAGrB5uB,KAAKsnK,YAAa,KAS1BV,YAAA9lK,UAAAoU,KAAR,WAEI4G,EAAAe,OAAOC,aAAa9c,KAAM,UAC1BA,KAAKsnK,YAAa,GAQdV,YAAA9lK,UAAA6N,cAAR,SAAsB+I,GAClB,GAA4B,MAAxB1X,KAAKknK,iBACkC,MAAnClnK,KAAKknK,gBAAgB7rC,YAAuD,MAAjCr7H,KAAKknK,gBAAgB5rC,UAC5D78G,KAAK4gB,IAAIr/B,KAAKknK,gBAAgB7rC,WAAar7H,KAAKknK,gBAAgB5rC,UAAY,EAAG,CAC/E,GAAIutC,GAAuBpqJ,KAAKoE,MAAM7iB,KAAKonK,SAEvCyB,EAAenxJ,EAAKikD,eAAiC,GAAhBktG,KACrC7oK,KAAK6mK,MAAMj4J,QAAU1M,EAAAqD,gBAAgBuJ,uBACjC9O,KAAKknK,gBAAgB/qC,UAAYn8H,KAAKohE,SAASynG,EAAc,KAGrEnxJ,EAAKikD,cAAgBktG,EAKjC7oK,KAAK8oK,oBAED9oK,KAAKwiK,UAAW,GAChBxiK,KAAK8lK,oBASLc,YAAA9lK,UAAAsgE,SAAR,SAAiB7T,EAAa/mD,GAE1B,IADA,GAAIiM,GAAI86C,EAAM,GACP96C,EAAE1G,OAASvF,GAAMiM,EAAI,IAAMA,CAClC,OAAOA,IAGHm0J,YAAA9lK,UAAAgoK,kBAAR,WACI,GAAkB,MAAd9oK,KAAK6mK,OAAsC,MAArB7mK,KAAK8mK,cAAgD,MAAxB9mK,KAAK6hK,iBACpD7hK,KAAKwnK,sBAAwB,EAAG,CAChCxnK,KAAK0nK,aAAe1nK,KAAKwnK,sBAErBxnK,KAAK0nK,aAAe,EAAIjpJ,KAAKoJ,KAC7B7nB,KAAK0nK,YAAc1nK,KAAK0nK,aAAe,EAAIjpJ,KAAKoJ,IAGpD,KAAK,GAAI9nB,GAAY,EAAGA,EAAIC,KAAK8mK,aAAc/mK,IAC3CC,KAAK6mK,MAAMzgH,OAAOrmD,GAAGif,EACjBhf,KAAK6hK,gBAAgB9hK,GAAGif,EACxBhf,KAAKunK,0BACD9oJ,KAAKq8B,IAAI96C,KAAK0nK,YAAc3nK,EAAIC,KAAKynK,8BAWrDb,YAAA9lK,UAAAioK,iBAAR,SAAyB3iH,GACrB,GAAkB,MAAdpmD,KAAK6mK,MACL,IAAK,GAAI9mK,GAAY,EAAGA,EAAIC,KAAK8mK,aAAc/mK,IAC3CC,KAAK6mK,MAAMzgH,OAAOrmD,GAAG+e,EAAIsnC,EAAOrmD,GAAG+e,EACnC9e,KAAK6mK,MAAMzgH,OAAOrmD,GAAGif,EAAIonC,EAAOrmD,GAAGif,GASxC4nJ,YAAA9lK,UAAA6nK,aAAP,SAAoBviH,GAChB,GAAI+hH,GAAax6I,EAAAiX,aAAazB,cAAcijB,EAAQpmD,KAAKqnK,WACzDrnK,MAAK+mK,cAAgB/mK,KAAKooK,oBAAoBD,EAAYnoK,KAAK8mK,cAE/D9mK,KAAK+oK,iBAAiB/oK,KAAK+mK,gBASvBH,YAAA9lK,UAAAqkI,aAAR,SAAqB/+E,EAAgBggF,GAAA,SAAAA,OAAA,EAKjC,KAAK,GAJDl/H,MACAo/H,EAAQ,aACRl5G,EAAOg5B,EAAOl5C,MAAMo5H,GAEfvmI,EAAY,EAAGA,EAAIqtB,EAAKrhB,OAAQhM,IAAK,CAC1C,GAAIwmI,GAAan5G,EAAKrtB,GAAGuL,UAAU,EAAG8hB,EAAKrtB,GAAGgM,OAAS,GAAG6W,MAAM,IAEhE,IAAyB,GAArB2jH,EAAWx6H,OAAa,CACxB,GAAI+S,GAAI9e,KAAKmmI,YAAYI,EAAW,GAAI,IAAKH,GACzCpnH,EAAIhf,KAAKmmI,YAAYI,EAAW,GAAI,IAAKH,EAE7Cl/H,GAAOwgB,KAAK,GAAI1d,MAAK24H,MAAM7jH,EAAGE,KAItC,MAAO9X,IAUH0/J,YAAA9lK,UAAAqlI,YAAR,SAAoBv5H,EAAerM,EAAY6lI,GAAA,SAAAA,OAAA,EAC3C,IAAIl/H,EAWJ,OATIA,GADS,KAAT0F,EACS5M,KAAKO,GAEV6lI,EACSpmI,KAAKO,IAAOmV,SAAS9I,GAAS5M,KAAKqmI,oBAAoB9lI,IAEvDmV,SAAS9I,IAatBg6J,YAAA9lK,UAAAsnK,oBAAR,SAA4Bh7I,EAAWrhB,GACnC,GAAIi9J,GAAgBj9J,EAASqhB,EAAKtO,EAAE/S,OAChCk9J,KACAC,IAEJ,IAAI97I,EAAKtO,EAAE/S,OAAS,EAAG,CACnBi9J,EAAgBvqJ,KAAKoE,MAAMmmJ,EAE3B,KAAK,GADDG,GAAM,EACDppK,EAAY,EAAGA,EAAIqtB,EAAKtO,EAAE/S,OAAS,EAAGhM,IAC3CkpK,EAAgBvhJ,KAAKshJ,GACrBG,GAAOH,CAEXC,GAAgBvhJ,KAAK3b,EAASo9J,OAE9BF,IAAmBD,EAIvB,KAAK,GADD/0I,GAAO,EACFl0B,EAAY,EAAGA,EAAIqtB,EAAKtO,EAAE/S,OAAQhM,IACvC,IAAK,GAAIsjC,GAAY,EAAGA,EAAI4lI,EAAgBlpK,GAAIsjC,IAExCpP,EADAl0B,EAAI,EAAIqtB,EAAKtO,EAAE/S,OACRs3B,EAAI4lI,EAAgBlpK,GAEpBsjC,GAAK4lI,EAAgBlpK,GAAK,GAErCmpK,EAAiBxhJ,KAAK1nB,KAAKovB,OAAO6E,EAAM7G,EAAKtO,EAAE/e,GAAIqtB,EAAKpO,EAAEjf,IAIlE,OAAOmpK,IAUHtC,YAAA9lK,UAAAsuB,OAAR,SAAe6G,EAAWmzI,EAAoBC,GAC1C,GAAIC,GAAK,EAAIF,EAAMnoI,GACfsoI,EAAK,GAAKH,EAAMzoK,EAAIyoK,EAAMhoK,GAAKkoK,EAC/BE,EAAKJ,EAAMroI,GAAKuoI,EAAKC,EAErBE,EAAK,EAAIJ,EAAMpoI,GACfyoI,EAAK,GAAKL,EAAM1oK,EAAI0oK,EAAMjoK,GAAKqoK,EAC/BE,EAAKN,EAAMtoI,GAAK0oI,EAAKC,EAErB5qJ,EAAI0qJ,EAAK/qJ,KAAK+V,IAAIyB,EAAG,GAAKszI,EAAK9qJ,KAAK+V,IAAIyB,EAAG,GAAKqzI,EAAKrzI,EAAImzI,EAAMtpK,EAC/Dkf,EAAI2qJ,EAAKlrJ,KAAK+V,IAAIyB,EAAG,GAAKyzI,EAAKjrJ,KAAK+V,IAAIyB,EAAG,GAAKwzI,EAAKxzI,EAAIozI,EAAMvpK,CAEnE,OAAO,IAAIkK,MAAK24H,MAAM7jH,EAAGE,IAOrB4nJ,YAAA9lK,UAAAglK,iBAAR,WACI,GAAI9lK,KAAK4lK,WACa,MAAd5lK,KAAK6mK,OAAiB7mK,KAAK6mK,MAAMzgH,OAAOr6C,OAAS,EAAG,CACpD/L,KAAK4lK,UAAU78I,QAEf/oB,KAAK4lK,UAAU18I,UAAU,EAAG,UAC5BlpB,KAAK4lK,UAAU3E,OAAOjhK,KAAK6mK,MAAMzgH,OAAO,GAAGtnC,EAAG9e,KAAK6mK,MAAMzgH,OAAO,GAAGpnC,EAEnE,KAAK,GAAIjf,GAAI,EAAGA,EAAIC,KAAK6mK,MAAMzgH,OAAOr6C,OAAQhM,IAC1CC,KAAK4lK,UAAUzE,OAAOnhK,KAAK6mK,MAAMzgH,OAAOrmD,GAAG+e,EAAG9e,KAAK6mK,MAAMzgH,OAAOrmD,GAAGif,EAGvE,KAAK,GAAIjf,GAAI,EAAGA,EAAIC,KAAK6mK,MAAMzgH,OAAOr6C,OAAQhM,IAC1CC,KAAK4lK,UAAU58I,UAAU,UACzBhpB,KAAK4lK,UAAUO,WAAWnmK,KAAK6mK,MAAMzgH,OAAOrmD,GAAG+e,EAAG9e,KAAK6mK,MAAMzgH,OAAOrmD,GAAGif,EAAG,GAC1Ehf,KAAK4lK,UAAUn8I,YAU/Bm9I,YAAA9lK,UAAAic,MAAA,WACI,GAAI3T,GAAuB,GAAIw9J,YAE/Bx9J,GAAQuW,QAAU3f,KAAK2f,QACvBvW,EAAQyU,MAAQ7d,KAAK6d,MACrBzU,EAAQgW,SAASN,EAAI9e,KAAKof,SAASN,EACnC1V,EAAQgW,SAASJ,EAAIhf,KAAKof,SAASJ,EACnC5V,EAAQoW,MAAMV,EAAI9e,KAAKwf,MAAMV,EAC7B1V,EAAQoW,MAAMR,EAAIhf,KAAKwf,MAAMR,EAC7B5V,EAAQkI,MAAMwN,EAAI9e,KAAKsR,MAAMwN,EAC7B1V,EAAQkI,MAAM0N,EAAIhf,KAAKsR,MAAM0N,EAC7B5V,EAAQgV,SAAWpe,KAAKoe,SACxBhV,EAAQo5J,OAASxiK,KAAKwiK,OACtBp5J,EAAQ24J,eAAiB/hK,KAAK+hK,eAC9B34J,EAAQ09J,aAAe9mK,KAAK8mK,aAC5B19J,EAAQk/J,SAAWtoK,KAAKsoK,SACxBl/J,EAAQs0H,WAAa19H,KAAK09H,WAC1Bt0H,EAAQ89J,gBAAkBlnK,KAAKknK,gBAC/B99J,EAAQg+J,OAASpnK,KAAKonK,OACtBh+J,EAAQ+lH,MAAQnvH,KAAKmvH,MACrB/lH,EAAQm+J,0BAA4BvnK,KAAKunK,0BACzCn+J,EAAQo+J,sBAAwBxnK,KAAKwnK,sBACrCp+J,EAAQq+J,2BAA6BznK,KAAKynK,2BAC1Cr+J,EAAQu0H,UAAW,EACnBv0H,EAAQozH,UAAYx8H,KAAKw8H,UACzBpzH,EAAQk+J,WAAatnK,KAAKsnK,WAE1Bl+J,EAAQ29J,gBACR,KAAK,GAAIhnK,GAAI,EAAGA,EAAIC,KAAK+mK,cAAch7J,OAAQhM,IAC3CqJ,EAAQ29J,cAAcr/I,KAAK,GAAI1d,MAAK24H,MAAM3iI,KAAK+mK,cAAchnK,GAAG+e,EAAG9e,KAAK+mK,cAAchnK,GAAGif,GAG7F5V,GAAQy4J,kBACR,KAAK,GAAI9hK,GAAI,EAAGA,EAAIC,KAAK6hK,gBAAgB91J,OAAQhM,IAC7CqJ,EAAQy4J,gBAAgBn6I,KAAK,GAAI1d,MAAK24H,MAAM3iI,KAAK6hK,gBAAgB9hK,GAAG+e,EAAG9e,KAAK6hK,gBAAgB9hK,GAAGif,GAanG,OAVwB,OAApB5V,EAAQk/J,WACRl/J,EAAQy9J,MAAQ,GAAI78J,MAAKo7J,KAAKC,KAAKj8J,EAAQk/J,SAAUl/J,EAAQ29J,gBAG5C,MAAjB39J,EAAQy9J,QACRz9J,EAAQy9J,MAAM78I,UAAY5gB,EAAQs0H,WAClCt0H,EAAQ0I,SAAS1I,EAAQy9J,QAG7Bz9J,EAAQiU,eACDjU,GArlBfw9J,YAAAvrJ,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB1Ksr8CxB2+I,c0Krr8CyB3rJ,EAAAG,YAApB/a,GAAAumK,YAAWA,CAkmBxB,IAAMgB,IAMF9C,eAAgB,gBAIhB38I,MAAO,QAMP4B,WAAY,YAKZk+I,UAAW,YAKXrzD,mBAAoB,mBAKpBg1D,KAAM,OAMNhB,cAAe,eAMfzyD,MAAO,QAMPswD,OAAQ,SAMRoB,aAAc,cAIda,eAAgB,gBAMhBZ,2BAA4B,2BAM5BC,uBAAwB,uBAMxBC,4BAA6B,4BAM7BtwD,MAAO,QAMP6kB,SAAU,WAMVjnB,KAAM,OAMNP,KAAM,S1K0g7CJ,SAASz0G,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G2Kzu8CjE5Z,EAAAzB,EAA6C,GAC7C0b,EAAA1b,EAA+B,IAC/B8a,EAAA9a,EAA4B,IAC5ByS,EAAAzS,EAA2E,GAC3E0gF,EAAA1gF,EAAyB,IAGzB0pK,EAAA,SAAA3mK,GAAkC3B,EAAAsoK,aAAA3mK,EAe9B,SAAA2mK,gBACI3mK,EAAAzC,KAAAT,MAfIA,KAAA8pK,UAAoB,KAEpB9pK,KAAAsxI,OAAiB,EACjBtxI,KAAA+pK,QAAkB,EAElB/pK,KAAAkY,UAAoB,EACpBlY,KAAAgqK,gBAA0B,EAC1BhqK,KAAAiqK,gBAA0B,EAE1BjqK,KAAAkqK,YAAsB,EACtBlqK,KAAAmqK,aAAuB,EAM3BnqK,KAAKoZ,OAASxG,EAAAa,iBAAiB,mBAyKvC,MAtKWo2J,cAAA/oK,UAAA2c,aAAP,SAAoBD,GAChBta,EAAApC,UAAM2c,aAAYhd,KAAAT,KAACwd,IAMhBqsJ,aAAA/oK,UAAA4c,aAAP,SAAoBF,GAChB,IAAKA,EAED,WADAxd,MAAKwhB,SAAS,wCAalB,IAAIhE,EAAKU,aAAa7d,EAAA+pK,uBAAuB/0D,MAAO,CAGhD,GAAIzoG,GAAgB4Q,EAAKe,aAAale,EAAA+pK,uBAAuB/0D,MACzDg9B,EAAmB38H,SAAS9I,EAChC5M,MAAKsxI,OAAQ,EACC,SAAV1kI,EACA5M,KAAKqqK,aAAa,GACVz8I,MAAMykH,IACdryI,KAAKqqK,aAAah4B,GAgB1B,GAZI70H,EAAKU,aAAa7d,EAAA+pK,uBAAuB9rC,SACzCt+H,KAAK+pK,OAASnoK,EAAAyI,YAAY8D,aAAaqP,EAAKe,aAAale,EAAA+pK,uBAAuB9rC,SAGhF9gH,EAAKU,aAAa7d,EAAA+pK,uBAAuBE,WACzCtqK,KAAKkqK,YAAcx0J,SAAS8H,EAAKe,aAAale,EAAA+pK,uBAAuBE,WAGrE9sJ,EAAKU,aAAa7d,EAAA+pK,uBAAuBG,YACzCvqK,KAAKmqK,aAAez0J,SAAS8H,EAAKe,aAAale,EAAA+pK,uBAAuBG,YAGtE/sJ,EAAKU,aAAa7d,EAAA+pK,uBAAuBI,MAAO,CAChD,GAAIC,GAAkBjtJ,EAAKe,aAAale,EAAA+pK,uBAAuBI,KAC3DxqK,MAAK8pK,WAAaW,IAClBzqK,KAAKkV,OACLlV,KAAK8pK,UAAYtsJ,EAAKe,aAAale,EAAA+pK,uBAAuBI,OAIlE,GAAIhtJ,EAAKU,aAAa7d,EAAA+pK,uBAAuB90D,MAAO,CAChD,GAAI1oG,GAAgB4Q,EAAKe,aAAale,EAAA+pK,uBAAuB90D,MACzD+8B,EAAmB38H,SAAS9I,EAClB,UAAVA,EACA5M,KAAK0qK,aAAa,GACV98I,MAAMykH,IACdryI,KAAK0qK,aAAar4B,GAI1B,GAAI70H,EAAKU,aAAa7d,EAAA+pK,uBAAuBz1D,MAAO,CAChD,GAAI/nG,GAAgB4Q,EAAKe,aAAale,EAAA+pK,uBAAuBz1D,MACzD09B,EAAmB38H,SAAS9I,EAClB,UAAVA,EACA5M,KAAKqqK,aAAa,GACVz8I,MAAMykH,IACdryI,KAAKqqK,aAAah4B,KAKpBw3B,aAAA/oK,UAAA6b,gBAAV,SAA0B5X,KAEnB8kK,aAAA/oK,UAAAic,MAAP,WACI,GAAI3T,GAAU,GAAIygK,aAWlB,OAVAzgK,GAAQ0gK,UAAY9pK,KAAK8pK,UACzB1gK,EAAQ8gK,YAAclqK,KAAKkqK,YAC3B9gK,EAAQ+gK,aAAenqK,KAAKmqK,aAC5B/gK,EAAQkoI,MAAQtxI,KAAKsxI,MACrBloI,EAAQ2gK,OAAS/pK,KAAK+pK,OACtB3gK,EAAQ8O,SAAWlY,KAAKkY,SACxB9O,EAAQ4gK,eAAiBhqK,KAAKgqK,eAC9B5gK,EAAQ6gK,eAAiBjqK,KAAKiqK,eAE9B7gK,EAAQiU,eACDjU,GAGHygK,aAAA/oK,UAAAupK,aAAR,SAAqBh8I,GAAA,SAAAA,MAAA,GACjBruB,KAAKoZ,OAAOlE,OACZlV,KAAKoZ,OAAOg5F,qBACR/jF,EAAQ,GACRruB,KAAKgqK,gBAAiB,EACtBhqK,KAAKoZ,OAAOy5F,KAAKjgG,EAAAe,iBAAiBC,SAAU5T,KAAK+8B,KAAKlpB,KAAK7T,OAC3DA,KAAKoZ,OAAOjE,MAAMkZ,IAElBruB,KAAK+8B,QAIL8sI,aAAA/oK,UAAA4pK,aAAR,SAAqBr8I,GAAA,SAAAA,MAAA,GACjBruB,KAAKoZ,OAAOlE,OACZlV,KAAKoZ,OAAOg5F,qBACR/jF,EAAQ,GACRruB,KAAKiqK,gBAAiB,EACtBjqK,KAAKoZ,OAAOy5F,KAAKjgG,EAAAe,iBAAiBC,SAAU5T,KAAKkV,KAAKrB,KAAK7T,OAC3DA,KAAKoZ,OAAOjE,MAAMkZ,IAElBruB,KAAKkV,QAIL20J,aAAA/oK,UAAAi8B,KAAR,WACI,GAAsB,MAAlB/8B,KAAK8pK,UAAT,CAGA,GAAI9pK,KAAKkY,SAAU,CACf,IAAIlY,KAAK+pK,OAGL,MAFA/pK,MAAKkV,OAKblV,KAAKoZ,OAAOlE,OACZlV,KAAKoZ,OAAOg5F,qBACZpyG,KAAKkY,UAAW,EAChBlY,KAAKgqK,gBAAiB,EAClBhqK,KAAKsxI,MACLzwD,EAAAl2D,SAAS0hE,KAAKrsF,KAAK8pK,UAAW9pK,KAAKkqK,YAAalqK,KAAK+pK,QAErDlpF,EAAAl2D,SAASoS,KAAK/8B,KAAK8pK,UAAW9pK,KAAKkqK,YAAalqK,KAAK+pK,UAIrDF,aAAA/oK,UAAAoU,KAAR,WAC0B,MAAlBlV,KAAK8pK,WAGL9pK,KAAKkY,WACLlY,KAAKoZ,OAAOlE,OACZlV,KAAKoZ,OAAOg5F,qBACZvxB,EAAAl2D,SAASzV,KAAKlV,KAAK8pK,UAAW9pK,KAAKmqK,cAC/BnqK,KAAKmqK,cACLnqK,KAAKoZ,OAAOy5F,KAAKjgG,EAAAe,iBAAiBC,SAAU5T,KAAKu6D,MAAM1mD,KAAK7T,OAC5DA,KAAKoZ,OAAOjE,MAAMnV,KAAKmqK,eAEvBnqK,KAAKu6D,UAKTsvG,aAAA/oK,UAAAy5D,MAAR,WACIv6D,KAAKoZ,OAAOlE,OACZlV,KAAKoZ,OAAOg5F,qBACZpyG,KAAKkY,UAAW,EAChBlY,KAAKgqK,gBAAiB,EACtBhqK,KAAKiqK,gBAAiB,EAClBjqK,KAAK8pK,WAAajpF,EAAAl2D,SAASlR,UAAUzZ,KAAK8pK,YAC1CjpF,EAAAl2D,SAASzV,KAAKlV,KAAK8pK,YAxL/BD,aAAAxuJ,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB3Kk58CxB4hJ,e2Kj58C0B5uJ,EAAAG,YAArB/a,GAAAwpK,aAAYA,EA4LZxpK,EAAA+pK,wBACTjiJ,MAAO,QAEPqiJ,KAAM,OACNn1D,KAAM,OACNipB,MAAO,QACPgsC,QAAS,SACTC,SAAU,UACV51D,KAAM,OACNW,KAAM,S3K8t8CJ,SAASh1G,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G4Kt78CjEP,EAAA9a,EAA4B,IAC5ByB,EAAAzB,EAAgC,GAChC0b,EAAA1b,EAA+B,IAC/B+B,EAAA/B,EAAgC,GAChCm9H,EAAAn9H,EAAuC,KACvCmoB,EAAAnoB,EAA4B,KAG5B,SAAA+C,GAAiC3B,EAAAopK,mBAAAznK,EAK7B,SAAAynK,sBACIznK,EAAAzC,KAAAT,MAHIA,KAAAmvH,MAAgB,SAmE5B,MA7DItuH,QAAAkD,eAAI4mK,mBAAA7pK,UAAA,Q5Ko78CCkD,I4Kp78CL,WACI,MAAOhE,MAAKmvH,O5Ks78CX9yG,I4Kn78CL,SAASuuJ,GACL5qK,KAAKmvH,MAAQy7C,EACT5qK,KAAKsgB,QACLtgB,KAAKsgB,MAAMiK,KAAOvqB,KAAKmvH,Q5Ks78C1BjrH,YAAY,EACZC,cAAc,I4Kn78CZwmK,mBAAA7pK,UAAA4c,aAAP,SAAoBF,GAGhB,GAFAta,EAAApC,UAAM4c,aAAYjd,KAAAT,KAACwd,GAEfA,EAAKU,aAAa7d,EAAAwqK,6BAA6B10D,OAC/C,GAAKn2G,KAAKsgB,MAKNtgB,KAAKsgB,MAAM1R,QAAU1M,EAAAqD,gBAAgBuJ,uBACjC0O,EAAKe,aAAa++G,EAAAvnB,uBAAuBI,YANhC,CACb,GAAIvnG,GAAU1M,EAAAqD,gBAAgBuJ,uBAAuB0O,EAAKe,aAAa++G,EAAAvnB,uBAAuBI,OAC9Fn2G,MAAKsgB,MAAQ,GAAItW,MAAKgzH,OAAO8tC,aAAal8J,GAC1C5O,KAAK8R,SAAS9R,KAAKsgB,OAQvB9C,EAAKU,aAAa7d,EAAAwqK,6BAA6B91D,QAC/C/0G,KAAKuqB,KAAO7U,SAAS8H,EAAKe,aAAale,EAAAwqK,6BAA6B91D,QAGnE/0G,KAAKsgB,QAIN9C,EAAKU,aAAa7d,EAAAwqK,6BAA6B9gJ,cAC/C/pB,KAAKsgB,MAAM0J,UAAY1B,EAAA2B,YAAYC,aAC/BxU,SAAS8H,EAAKe,aAAale,EAAAwqK,6BAA6B9gJ,eAI5DvM,EAAKU,aAAa7d,EAAAwqK,6BAA6BE,mBAC/C/qK,KAAKsgB,MAAMlB,SAASN,EAAIpJ,SAAS8H,EAAKe,aAAale,EAAAwqK,6BAA6BE,mBAEhFvtJ,EAAKU,aAAa7d,EAAAwqK,6BAA6BG,mBAC/ChrK,KAAKsgB,MAAMlB,SAASJ,EAAItJ,SAAS8H,EAAKe,aAAale,EAAAwqK,6BAA6BG,mBAGhFxtJ,EAAKU,aAAa7d,EAAAwqK,6BAA6BI,gBAC/CjrK,KAAKsgB,MAAMhP,MAAMwN,EAAIpJ,SAAS8H,EAAKe,aAAale,EAAAwqK,6BAA6BI,gBAE7EztJ,EAAKU,aAAa7d,EAAAwqK,6BAA6BK,gBAC/ClrK,KAAKsgB,MAAMhP,MAAM0N,EAAItJ,SAAS8H,EAAKe,aAAale,EAAAwqK,6BAA6BK,gBAG7E1tJ,EAAKU,aAAa7d,EAAAwqK,6BAA6BvgJ,UAC/CtqB,KAAKsgB,MAAM3Z,OAAS+O,SAAS8H,EAAKe,aAAale,EAAAwqK,6BAA6BvgJ,UAE5E9M,EAAKU,aAAa7d,EAAAwqK,6BAA6BxgJ,SAC/CrqB,KAAKsgB,MAAM5Z,MAAQgP,SAAS8H,EAAKe,aAAale,EAAAwqK,6BAA6BxgJ,WApEvFsgJ,mBAAAtvJ,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB5Ko/8CxB0iJ,sB4Kn/8CyB1vJ,EAAAG,YAwEpB/a,GAAAwqK,8BACT9gJ,WAAY,YACZO,OAAQ,SACR6rF,MAAO,QACP40D,gBAAiB,gBACjBC,gBAAiB,gBACjBC,aAAc,aACdC,aAAc,aACdn2D,KAAM,OACN1qF,MAAO,U5Ko78CL,SAAS/pB,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G6Kzh9CjE03G,EAAA/yH,EAAmD,KACnDyB,EAAAzB,EAA6C,GAC7C0b,EAAA1b,EAA+B,IAC/BmzH,EAAAnzH,EAA8B,IAC9BkqI,EAAAlqI,EAAuB,KAEvBg3H,EAAAh3H,EAAwB,IAGxB6B,EAAA7B,EAA8B,GAC9BqsI,EAAArsI,EAAwC,KACxC0gF,EAAA1gF,EAAyB,IACzB2b,EAAA3b,EAAuB,IACvB2kE,EAAA3kE,EAA2B,IAC3BqC,EAAArC,EAA2B,GAG3BozH,EAAApzH,EAAiF,KAEjFyS,EAAAzS,EAA2E,GAE3E64I,EAAA74I,EAAyB,KACzBs4F,EAAAt4F,EAA4E,IAC5EkO,EAAAlO,EAA8B,IAI9BgrK,EAAA,SAAAjoK,GAAyC3B,EAAA4pK,oBAAAjoK,EAAzC,SAAAioK,uBAAyCjoK,EAAA7B,MAAArB,KAAAmD,WAE7BnD,KAAAorK,MAAgB,EAIdprK,KAAA60I,mBAEF70I,KAAAqrK,iBAA2B,GAC3BrrK,KAAAsrK,oBAA8B,GAC9BtrK,KAAAurK,mBAA6B,GAE7BvrK,KAAAwrK,mBAA6BnrK,EAAAorK,8BAA8BC,yBAAyBC,SAEpF3rK,KAAA4rK,0BAAoC,EACpC5rK,KAAA6rK,gCAA0C,EAC1C7rK,KAAA8rK,kBAA4B,GAC5B9rK,KAAA+rK,cAAwB,UACxB/rK,KAAAgsK,mBAAoC,EAAG,EAAG,EAAG,GAE7ChsK,KAAAisK,wBACAjsK,KAAAksK,mBAGAlsK,KAAA0iF,eAEA1iF,KAAAmsK,oBAA8B,QAE9BnsK,KAAAosK,gBAA0B,EAK1BpsK,KAAAqsK,kBAGArsK,KAAAssK,cAAwB,IACxBtsK,KAAAusK,gBAA0B,KAG1BvsK,KAAAwsK,SAAmB,IAEnBxsK,KAAAysK,cAAwB,GAExBzsK,KAAA61I,YAAsB,EAEtB71I,KAAA0sK,aAAuB,EA2iCnC,MAxhCIvB,qBAAArqK,UAAA+C,WAAA,SACIoiG,EACAinC,EACAC,EACAC,EACAn0G,GALJ,GAAAngB,GAAA9Y,IAOIA,MAAK6zH,UAAYqZ,EAEjBhqI,EAAApC,UAAM+C,WAAUpD,KAAAT,KAACimG,EAASinC,EAAUC,EAAuBC,IAEtDptI,KAAK4M,OAAS5M,KAAKmsK,qBAAuBnsK,KAAK2nG,OAAO3nG,KAAKmsK,uBAC5DnsK,KAAK4M,MAAQ5M,KAAK2nG,OAAO3nG,KAAKmsK,qBAC9BnsK,KAAK0wI,oBAAoB5+H,SAAS9R,KAAK4M,QAGvCqsB,GACAj5B,KAAKisK,qBAAqB39I,QAAQ,SAACq+I,GAC3B1zI,EAAO0uE,OAAOglE,IAAgB1zI,EAAO0uE,OAAOglE,YAAwBr5C,GAAAmB,eACpE37G,EAAKozJ,gBAAgBxkJ,KAAKuR,EAAO0uE,OAAOglE,OAS9CxB,oBAAArqK,UAAA8gG,iBAAV,WACI1+F,EAAApC,UAAM8gG,iBAAgBnhG,KAAAT,KAEtB,KAAsB,GAAA2M,GAAA,EAAAof,EAAA/rB,KAAK2wI,WAALhkI,EAAAof,EAAAhgB,OAAAY,IAAgB,CAAjC,GAAIwvH,GAASpwG,EAAApf,EACdwvH,GAAUzoH,GAAG,YAAa1T,KAAK4sK,UAAU/4J,KAAK7T,SAQ/CmrK,oBAAArqK,UAAA4zH,mBAAP,SAA0BtrH,GACtBpJ,KAAK60I,gBAAgBh0I,OAAO0qB,KAAKniB,GAAS,IAAMA,EAAQvI,OAAO0qB,KAAKniB,GAAS,KAGjF+hK,oBAAArqK,UAAA6rI,UAAA,SAAUnvH,GAeN,GAdAta,EAAApC,UAAM6rI,UAASlsI,KAAAT,KAACwd,GAEZA,EAAKU,aAAa7d,EAAAorK,8BAA8BoB,qBAChD7sK,KAAKqrK,iBAAmB31J,SAAS8H,EAAKe,aAAale,EAAAorK,8BAA8BoB,qBAGjFrvJ,EAAKU,aAAa7d,EAAAorK,8BAA8BoB,qBAChD7sK,KAAKsrK,oBAAsB51J,SAAS8H,EAAKe,aAAale,EAAAorK,8BAA8BqB,yBAGpFtvJ,EAAKU,aAAa7d,EAAAorK,8BAA8BsB,uBAChD/sK,KAAKurK,mBAAqB71J,SAAS8H,EAAKe,aAAale,EAAAorK,8BAA8BsB,uBAGnFvvJ,EAAKU,aAAa7d,EAAAorK,8BAA8BuB,oBAAqB,CACrE,GAAIC,GAASzvJ,EAAKe,aAAale,EAAAorK,8BAA8BuB,oBAAoBviK,aACjF,KAAK,GAAI0C,KAAO9M,GAAAorK,8BAA8BC,yBACtCrrK,EAAAorK,8BAA8BC,yBAAyBv+J,IAAQ8/J,IAC/DjtK,KAAKwrK,mBAAqBnrK,EAAAorK,8BAA8BC,yBAAyBv+J,IAsB7F,GAhBIqQ,EAAKU,aAAa7d,EAAAorK,8BAA8ByB,+BAChDltK,KAAK4rK,0BAA4BttJ,WAC7Bd,EAAKe,aAAale,EAAAorK,8BAA8ByB,+BAGpD1vJ,EAAKU,aAAa7d,EAAAorK,8BAA8B0B,qCAChDntK,KAAK6rK,gCAAkCvtJ,WACnCd,EAAKe,aAAale,EAAAorK,8BAA8B0B,qCAGpD3vJ,EAAKU,aAAa7d,EAAAorK,8BAA8B2B,sBAChDptK,KAAK8rK,kBAAoBp2J,SAAS8H,EAAKe,aAAale,EAAAorK,8BAA8B2B,sBAElF5vJ,EAAKU,aAAa7d,EAAAorK,8BAA8B4B,kBAChDrtK,KAAK+rK,cAAgBvuJ,EAAKe,aAAale,EAAAorK,8BAA8B4B,iBAErE7vJ,EAAKU,aAAa7d,EAAAorK,8BAA8B6B,qBAAsB,CACtE,GAAIC,GAA0B/vJ,EACzBe,aAAale,EAAAorK,8BAA8B6B,qBAC3C1qJ,MAAM,KACNV,IAAI,SAACtV,GAAU,MAAA0R,YAAW1R,IAC3B2gK,IAA+B,GAAnBA,EAASxhK,OACrB/L,KAAKgsK,kBAAoBuB,EAEzBvtK,KAAKwhB,SACD,sBACInhB,EAAAorK,8BAA8B6B,oBAC9B,gBACA9vJ,EAAKe,aAAale,EAAAorK,8BAA8B6B,qBAChD,+GAMZ9vJ,EAAKU,aAAa7d,EAAAorK,8BAA8B+B,mBAChDxtK,KAAKmsK,oBAAsB3uJ,EAAKe,aAAale,EAAAorK,8BAA8B+B,kBAGR,QAAnEhwJ,EAAKe,aAAale,EAAAorK,8BAA8BgC,kBAChDztK,KAAKorK,MAAO,GAGZ5tJ,EAAKU,aAAa7d,EAAAorK,8BAA8BnvB,mBAChDt8I,KAAKisK,qBAAuBzuJ,EAAKe,aAAale,EAAAorK,8BAA8BnvB,iBAAiB15H,MAAM,MAGnGpF,EAAKU,aAAau6E,EAAAuD,4BAA4BC,YAC9Cj8F,KAAKwsK,SAAW92J,SAAS8H,EAAKe,aAAak6E,EAAAuD,4BAA4BC,YAGvEz+E,EAAKU,aAAau6E,EAAAuD,4BAA4BE,kBAC9Cl8F,KAAKysK,cAAgB/2J,SAAS8H,EAAKe,aAAak6E,EAAAuD,4BAA4BE,kBAG5E1+E,EAAKU,aAAau6E,EAAA8D,+BAA+BG,eACjD18F,KAAK61I,YAAcngI,SAAS8H,EAAKe,aAAak6E,EAAA8D,+BAA+BG,gBAI9EyuE,oBAAArqK,UAAA81H,KAAP,WACI52H,KAAK2f,SAAU,EACf3f,KAAKotI,iBAAiBztH,SAAU,EAChC3f,KAAKmtI,sBAAsBxtH,SAAU,EACrC3f,KAAK0wI,oBAAoB/wH,SAAU,GAGhCwrJ,oBAAArqK,UAAAgzD,KAAP,WACI9zD,KAAK2f,SAAU,EACf3f,KAAKotI,iBAAiBztH,SAAU,EAChC3f,KAAKmtI,sBAAsBxtH,SAAU,EACrC3f,KAAK0wI,oBAAoB/wH,SAAU,GAOhCwrJ,oBAAArqK,UAAA80H,cAAP,SAAqB2X,EAA4CC,EAAmBr5G,GAAA,SAAAA,OAAA,GAGhFn0B,KAAK0tK,SAAWv5I,EAChBn0B,KAAKytI,aAAeF,CAEpB,KAAK,GAAIxtI,GAAI,EAAGA,EAAIwtI,EAAUC,GAAWvnC,QAAQl6F,OAAQhM,IACrDC,KAAK0tI,oBAAoBF,EAAWztI,EAGxC,KAAK,GAAIA,GAAI,EAAGA,EAAIwtI,EAAUC,GAAWvnC,QAAQl6F,OAAQhM,IACrDC,KAAK2tI,iBAAiBH,EAAWztI,EAGrC,IAAuC,MAAnCC,KAAK60I,gBAAyB,QAAW,CACzC,GAAI84B,EAQJ,IAPuC,MAAnC3tK,KAAK60I,gBAAyB,SAC9B70I,KAAK60I,gBAAyB,QAAEvmH,QAAQ,SAAU6nH,GAC9C,GAAI6D,GAA2B7D,EAAiBoF,oBAAoB/N,EACpEmgC,GAAM3zB,GACPh6I,MAGFm0B,GAgDD,IAAK,GAAIp0B,GAAI,EAAGA,GAAKytI,EAAWztI,IAC5B,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAKkkG,eAAenkG,GAAGgM,OAAQs3B,IAC/C,GAAiC,MAA7BrjC,KAAKkkG,eAAenkG,GAAGsjC,GACvB,GAAmB,mBAARsqI,GACP,OAAQA,EAAI5tK,GAAGsjC,GAAGy6C,QACd,IAAKy1C,GAAA+lB,qBAAqBG,OAClBz5I,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAO4B,aACtCnsI,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAO4B,WAE9C,MACJ,KAAK5Y,GAAA+lB,qBAAqBrd,OAClBj8H,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAOvS,aACtCh4H,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAOvS,WAE9C,MACJ,KAAKzE,GAAA+lB,qBAAqBK,aAClB35I,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAO8B,kBACtCrsI,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAO8B,gBAE9C,MACJ,KAAK9Y,GAAA+lB,qBAAqBI,aAClB15I,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAO6B,kBACtCpsI,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAO6B,gBAE9C,MACJ,KAAK7Y,GAAA+lB,qBAAqBE,MAClBx5I,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAO9R,YACtCz4H,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAO9R,eAKlD14H,IAAKytI,GAAaxtI,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAO4B,YACxDnsI,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAO4B,YACnCnsI,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAOvS,aAC7Ch4H,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAOvS,gBAlF9D,KAAK,GAAIj4H,GAAI,EAAGA,GAAKytI,EAAWztI,IAC5B,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAKkkG,eAAenkG,GAAGgM,OAAQs3B,IAC/C,GAAiC,MAA7BrjC,KAAKkkG,eAAenkG,GAAGsjC,GACvB,GAAmB,mBAARsqI,GACP,OAAQA,EAAI5tK,GAAGsjC,GAAGy6C,QACd,IAAKy1C,GAAA+lB,qBAAqBrd,OAClBj8H,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAOvS,aACtCh4H,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAOvS,WAE9C,MACJ,KAAKzE,GAAA+lB,qBAAqBG,OAClBz5I,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAO4B,aACtCnsI,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAO4B,WAE9C,MACJ,KAAK5Y,GAAA+lB,qBAAqBK,aAClB35I,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAO8B,kBACtCrsI,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAO8B,gBAE9C,MACJ,KAAK9Y,GAAA+lB,qBAAqBI,aAClB15I,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAO6B,kBACtCpsI,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAO6B,gBAE9C,MACJ,KAAK7Y,GAAA+lB,qBAAqBE,MAClBx5I,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAO9R,YACtCz4H,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAO9R,UAE9C,MACJ,KAAKlF,GAAA+lB,qBAAqBF,MAClBp5I,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAO+B,aACtCtsI,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAO+B,gBAKlDvsI,IAAKytI,GAAaxtI,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAO4B,YACxDnsI,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAO4B,YACnCnsI,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAGgnG,EAAAE,OAAOvS,aAC7Ch4H,KAAKkkG,eAAenkG,GAAGsjC,GAAG0zF,SAASsT,EAAAE,OAAOvS,cAwD1EmzC,oBAAArqK,UAAA+/D,SAAA,SAAS21D,EAAsCrmD,GAC3CnwE,KAAKm+D,cAEL,IAAIyvG,GAAM1qK,EAAApC,UAAM+/D,SAAQpgE,KAAAT,KAACw2H,EAAMrmD,EA6C/B,OA3CY,OAARqmD,GAAgC,IAAhBA,EAAKzqH,QACrB/L,KAAK6tK,qBAGL19F,EAAM,EACFnwE,KAAK8tI,uBAAyB,EAE9B9tI,KAAK8tK,4BACA9tK,KAAKorK,KAAOD,oBAAoB4C,oBAAsB5C,oBAAoB6C,kBACvE7C,oBAAoB8C,YACpBjuK,KAAK8tI,wBACR9tI,KAAKorK,KAAOD,oBAAoB4C,oBAAsB5C,oBAAoB6C,kBACvE7C,oBAAoB8C,YACxB9C,oBAAoB8C,YAAcjuK,KAAK8tI,uBACvCq9B,oBAAoB8C,aAClBjuK,KAAKorK,KAAiDD,oBAAoB6C,iBAA9D7C,oBAAoB4C,qBAC9B5C,oBAAoB8C,YACpBjuK,KAAK8tI,wBACP9tI,KAAKorK,KAAiDD,oBAAoB6C,iBAA9D7C,oBAAoB4C,qBAC9B5C,oBAAoB8C,cAI5BjuK,KAAK8tK,4BACA9tK,KAAKorK,KAAOD,oBAAoB4C,oBAAsB5C,oBAAoB6C,kBACvE7C,oBAAoBpzC,QACxBozC,oBAAoBpzC,SAClB/3H,KAAKorK,KAAiDD,oBAAoB6C,iBAA9D7C,oBAAoB4C,qBAC9B5C,oBAAoBpzC,UAMhC/3H,KAAK8tK,4BACA9tK,KAAKorK,KAAOD,oBAAoB4C,oBAAsB5C,oBAAoB6C,kBACvE7C,oBAAoB+C,UACxB/C,oBAAoB+C,WAClBluK,KAAKorK,KAAiDD,oBAAoB6C,iBAA9D7C,oBAAoB4C,qBAC9B5C,oBAAoB+C,YAIzBN,GAGDzC,oBAAArqK,UAAAktI,cAAV,WACwC,IAAhChuI,KAAK8tI,wBAAgE,IAAhC9tI,KAAK8tI,wBAC1C9tI,KAAKmuK,mBAAqB,EAE1BnuK,KAAKiuI,WAAWk9B,oBAAoBiD,kBAAmB,MAEnD//J,EAAA0B,cAAc0lE,mBACdpnE,EAAA0B,cAAcsvE,iBAElBn8E,EAAApC,UAAMktI,cAAavtI,KAAAT,QAIjBmrK,oBAAArqK,UAAA8tI,kBAAV,cAAA91H,GAAA9Y,IACIkD,GAAApC,UAAM8tI,kBAAiBnuI,KAAAT,MACnBA,KAAK4tI,aACL5tI,KAAK4tI,YAAYt/G,QAAQ,SAAC6hD,GAClBA,EAAI6/D,UAAYhuI,EAAAiD,cAAcC,KAAK+qI,WAAWE,SAC9Cr3H,EAAKm1H,WAAWk9B,oBAAoBkD,iBAAkBv1J,EAAKuyJ,qBAMjEF,oBAAArqK,UAAAwtK,gBAAV,SAA0BroE,GACtB,IADJ,GAAAntF,GAAA9Y,KACWA,KAAKotI,iBAAiBxwH,SAAS,IAClC5c,KAAKmtI,sBAAsBr7H,SAAS9R,KAAKotI,iBAAiBxwH,SAAS,GAEvEqpF,GAAQ33E,QAAQ,SAACm3E,GACb3sF,EAAKs0H,iBAAiBt7H,SAAS2zF,MAI7B0lE,oBAAArqK,UAAAytK,kBAAV,WACI,GAAMp+F,GAAMnwE,KAAK4tI,YAAY5tI,KAAKmuK,mBAElCnuK,MAAKquI,oBAAoBlX,EAAAG,QAAQmB,WACjCz4H,KAAKouI,mBAAmB/D,EAAAE,OAAO9R,WAAW,EAE1C,KAAK,GAAI14H,GAAI,EAAGA,EAAIC,KAAK4tI,YAAY7hI,OAAQhM,IACzCC,KAAKuuI,mBAAmBxuI,EAAGo3H,EAAAG,QAAQU,YACnCh4H,KAAKsuI,mBAAmBvuI,EAAGsqI,EAAAE,OAAOvS,YAAY,EAGlD,IAAIh4H,KAAKwrK,qBAAuBnrK,EAAAorK,8BAA8BC,yBAAyB8C,SAAU,CAC7FxuK,KAAKuuI,mBAAmBvuI,KAAKmuK,mBAAoBh3C,EAAAG,QAAQS,QACzD,IAAM9xB,GAAUjmG,KAAKsuI,mBAAmBtuI,KAAKmuK,mBAAoB9jC,EAAAE,OAAOxS,SAAS,EACjF/3H,MAAKsuK,gBAAgBroE,OAClB,CACH,IAAK,GAAIlmG,GAAI,EAAGA,EAAIC,KAAK4tI,YAAY7hI,OAAQhM,IACzCC,KAAKsuI,mBAAmBvuI,EAAGsqI,EAAAE,OAAOxS,SAAS,GAC3C/3H,KAAKuuI,mBAAmBxuI,EAAGo3H,EAAAG,QAAQS,QAEvC/3H,MAAKmuK,mBAAqBnuK,KAAK4tI,YAAY7hI,OAAS,EAGpDokE,EAAIlyC,OAAS,GACbj+B,KAAKyuK,iBAGTzuK,KAAKmuK,qBAELnuK,KAAKiuI,WACDjuI,KAAKmuK,mBAAqBnuK,KAAK4tI,YAAY7hI,OACrCo/J,oBAAoBiD,kBACpBjD,oBAAoBuD,UAC1B1uK,KAAKqrK,mBAIHF,oBAAArqK,UAAA6tK,iBAAV,WACI3uK,KAAKmuK,mBAAqB,KAC1BnuK,KAAKsvI,YAAc,KAEnBtvI,KAAKiX,KAAKi8G,EAAAkB,YAAY4B,mBAEtBh2H,KAAK0uI,aAAe,EAcf1uI,KAAK0sK,aACN1sK,KAAK2uI,aAIHw8B,oBAAArqK,UAAA8tK,UAAV,WACI5uK,KAAKiX,KAAKi8G,EAAAkB,YAAY0B,sBAEtB91H,KAAK6uK,iBAEL,IAAIC,GAAmB9uK,KAAKsrK,mBAGxBtrK,MAAK4tI,aACL5tI,KAAK4tI,YAAYt/G,QAAQ,SAAC6hD,GAClBA,EAAI6/D,UAAYhuI,EAAAiD,cAAcC,KAAK+qI,WAAWE,UAC9C2+B,EAAW,KAKvB9uK,KAAKiuI,WAAWk9B,oBAAoBkD,iBAAkBS,IAGhD3D,oBAAArqK,UAAA2tI,gBAAV,WAKIvrI,EAAApC,UAAM2tI,gBAAehuI,KAAAT,OAIfmrK,oBAAArqK,UAAA6tI,UAAV,WACI,KAAI3uI,KAAK6yF,YAAc,GAAvB,CAIA7yF,KAAK0sK,aAAc,CACnB,IAAIqC,IAAqB,CACzB,IACI/uK,KAAK4tI,YAAY5tI,KAAK0uI,cAAcsB,UAAYhuI,EAAAiD,cAAcC,KAAK+qI,WAAWE,SAC9EnwI,KAAK4tI,YAAY5tI,KAAK0uI,cAAcn6G,OAASvyB,EAAAiD,cAAcC,KAAK46I,QAAQgB,UAExE9gJ,KAAKouI,mBAAmB/D,EAAAE,OAAOvS,YAAY,GAC3C+2C,GAAY,MACT,CACHluF,EAAAl2D,SAASoS,KAAK,wBAMd/8B,KAAKouI,mBAAmB/D,EAAAE,OAAO9R,WAAW,GAC1Cz4H,KAAKquI,oBAAoBlX,EAAAG,QAAQmB,UAEjC,KAAK,GAAI14H,GAAI,EAAGA,EAAIC,KAAK4tI,YAAY7hI,OAAQhM,IACzCC,KAAKsuI,mBAAmBvuI,EAAGsqI,EAAAE,OAAOvS,YAAY,GAC9Ch4H,KAAKuuI,mBAAmBxuI,EAAGo3H,EAAAG,QAAQU,WAGvC,IAAI/xB,GAAUjmG,KAAKsuI,mBAAmBtuI,KAAK0uI,aAAcrE,EAAAE,OAAO5R,WAAW,EAC3E34H,MAAKuuI,mBAAmBvuI,KAAK0uI,aAAcvX,EAAAG,QAAQqB,WAEnD34H,KAAKsuK,gBAAgBroE,GAErBjmG,KAAK0uI,cAAgB1uI,KAAK0uI,aAAe,GAAK1uI,KAAK4tI,YAAY7hI,OAG/DgjK,GACA/uK,KAAK6hG,YACL7hG,KAAKiuI,WAAW/a,EAAAkB,YAAY2a,UAAW,IAEnC/uI,KAAK4tI,YAAY7hI,OAAS,IAC1B/L,KAAK6hG,YACL7hG,KAAKiuI,WAAW/a,EAAAkB,YAAY2a,UAAW/uI,KAAKurK,uBAK9CJ,oBAAArqK,UAAAkuI,kBAAV,WACI,MAAO,KAGDm8B,oBAAArqK,UAAAiwI,sBAAV,WACI7tI,EAAApC,UAAMiwI,sBAAqBtwI,KAAAT,OAIrBmrK,oBAAArqK,UAAA8vI,oBAAV,WACI1tI,EAAApC,UAAM8vI,oBAAmBnwI,KAAAT,OAEnBmrK,oBAAArqK,UAAA8rK,UAAV,WACQv+J,EAAA0B,cAAc0lE,mBACVz1E,KAAK8tI,uBAAyB,GAC9Bz/H,EAAA0B,cAAcuvE,wBAK1B6rF,oBAAArqK,UAAAy5D,MAAA,SAAM00E,EAA0B98C,GAAhC,GAAAr5E,GAAA9Y,IAAgC,UAAAmyF,OAAA,GACvB88C,GACDjvI,KAAKgvK,oBAGLhvK,KAAKusK,kBACLhzJ,aAAavZ,KAAKusK,iBAClBvsK,KAAKusK,gBAAkB,MAG3BvsK,KAAK0sK,aAAc,EACnB1sK,KAAK4sK,WAGL,IAAIqC,GAAajvK,KAAKkvK,uBAClBC,EAAU,GAAI/iI,QAAO++H,oBAAoBiE,gBAAkB,IAC3DD,GAAQj8J,KAAK+7J,GACbjvK,KAAK8tK,2BACDmB,EAAWhiK,QAAQkiK,EAAS,IAAMhE,oBAAoBkE,gBACtDlE,oBAAoBmE,YAGxBtvK,KAAK8tK,2BACDmB,EAAa9D,oBAAoBkE,gBACjClE,oBAAoBmE,WAI5B,IAAIC,IAAc,CAElB,QAAQvvK,KAAKsvI,aACT,IAAK67B,qBAAoBiD,kBACrBpuK,KAAK6uK,iBAAgB,GACrBU,GAAc,CACd,MACJ,KAAKpE,qBAAoBuD,UACrB1uK,KAAK6uK,iBAAgB,GACrBU,GAAc,EACdvvK,KAAKmuK,mBAAqB,KAC1BnuK,KAAKsvI,YAAc,KACnBtvI,KAAK0uI,aAAe,CACpB,MACJ,KAAKy8B,qBAAoBkD,iBACrBruK,KAAKmuK,mBAAqB,KAC1BnuK,KAAKsvI,YAAc,KACnBtvI,KAAK0uI,aAAe,EAkB5B,GAd+B,MAA3B1uI,KAAKmuK,qBACLnuK,KAAKmuK,mBAAqB,KAErBoB,GACDvvK,KAAK6uK,iBAAgB,IAIzB5/B,GACAjvI,KAAK6tK,qBAKL17E,EACA,IAAK,GAALp7B,GAAA,SAAAy2E,GACI,IAAK,GAALgiC,GAAA,SAAAC,GACI,GAAMhqE,GAASruC,EAAK8sC,eAAespC,GAAWiiC,EAEhC,OAAVhqE,GAAkBuzC,EAAAgC,SAASY,cAAczhH,QAAQsrE,EAAOllG,GAAK,QAChB,MAAzC62D,EAAKy9E,gBAA+B,gBAGpCz9E,EAAK8sC,eAAespC,GAAWiiC,GAAY,KAC3Cr4G,EAAKy9E,gBAA+B,cAAE/iI,SAAS2zF,GAG3CA,EAAOg0B,mBAAqB4Q,EAAAE,OAAOvS,YACnCvyB,EAAOg0B,mBAAqB4Q,EAAAE,OAAOwB,UAEnCtmC,EAAOsxB,SAASsT,EAAAE,OAAOvS,YAG3BvyB,EAAOsxB,SAASsT,EAAAE,OAAOM,cAEvB/uH,EAAAe,OAAOmH,cAAcyhF,GACjBhjF,WAAY20C,EAAKy+E,YAAcrI,EAC/B/pH,QAASgiF,EAAO3mF,EAAG2mF,EAAO3mF,EAAG2mF,EAAO3mF,GACpC4E,QAAS+hF,EAAOzmF,EAAGymF,EAAOzmF,EAAIo4C,EAAKo1G,SAAU/mE,EAAOzmF,GACpDuD,cAAoC,EAArB60C,EAAKq1G,cACpBh+I,iBAAkB,WACd3V,EAAKs0H,iBAAiBt7H,SAAS2zF,GAC/BA,EAAOsxB,SAASsT,EAAAE,OAAOa,WACvBtyH,EAAKorF,eAAespC,GAAWiiC,GAAYhqE,OA3BtDgqE,EAAW,EAAGA,EAAWr4G,EAAK8sC,eAAespC,GAAWzhI,OAAQ0jK,I7Ki58CpED,EAAQC,IAGZr4G,EAASp3D,K6Kr58CLwtI,EAAY,EAAGA,EAAYxtI,KAAKkkG,eAAen4F,OAAQyhI,I7Ku58C3Dz2E,EAAQy2E,E6K/28CjB,OAHA3sD,GAAAl2D,SAASzV,KAAK,iBAGPhS,EAAApC,UAAMy5D,MAAK95D,KAAAT,KAACivI,IAGhBk8B,oBAAArqK,UAAA4uK,YAAP,SAAmBh5C,GACf,OAAO,GAGDy0C,oBAAArqK,UAAA0uI,KAAV,WACIxvI,KAAK8tK,4BACA9tK,KAAKorK,KAAOD,oBAAoB4C,oBAAsB5C,oBAAoB6C,kBACvE7C,oBAAoBp/B,SACxBo/B,oBAAoB+C,WAClBluK,KAAKorK,KAAiDD,oBAAoB6C,iBAA9D7C,oBAAoB4C,qBAC9B5C,oBAAoBp/B,WAE5B7oI,EAAApC,UAAM0uI,KAAI/uI,KAAAT,OAOPmrK,oBAAArqK,UAAAy1H,aAAP,SAAoBC,EAAsCrmD,GACtDnwE,KAAKm+D,eAELj7D,EAAApC,UAAMy1H,aAAY91H,KAAAT,KAACw2H,EAAMrmD,GAEzBnwE,KAAK6tK,qBAED19F,EAAM,GACFnwE,KAAK8tI,uBAAyB,EAE9B9tI,KAAK8tK,4BACA9tK,KAAKorK,KAAOD,oBAAoB4C,oBAAsB5C,oBAAoB6C,kBACvE7C,oBAAoB8C,YACpBjuK,KAAK8tI,wBACR9tI,KAAKorK,KAAOD,oBAAoB4C,oBAAsB5C,oBAAoB6C,kBACvE7C,oBAAoB8C,YACxB9C,oBAAoB8C,YAAcjuK,KAAK8tI,uBACvCq9B,oBAAoB8C,aAClBjuK,KAAKorK,KAAiDD,oBAAoB6C,iBAA9D7C,oBAAoB4C,qBAC9B5C,oBAAoB8C,YACpBjuK,KAAK8tI,wBACP9tI,KAAKorK,KAAiDD,oBAAoB6C,iBAA9D7C,oBAAoB4C,qBAC9B5C,oBAAoB8C,cAI5BjuK,KAAK8tK,4BACA9tK,KAAKorK,KAAOD,oBAAoB4C,oBAAsB5C,oBAAoB6C,kBACvE7C,oBAAoBpzC,QACxBozC,oBAAoBpzC,SAClB/3H,KAAKorK,KAAiDD,oBAAoB6C,iBAA9D7C,oBAAoB4C,qBAC9B5C,oBAAoBpzC,UAGhCl3C,EAAAl2D,SAASzV,KAAK,eAAgB,KAG9BlV,KAAK8tK,4BACA9tK,KAAKorK,KAAOD,oBAAoB4C,oBAAsB5C,oBAAoB6C,kBACvE7C,oBAAoB+C,UACxB/C,oBAAoB+C,WAClBluK,KAAKorK,KAAiDD,oBAAoB6C,iBAA9D7C,oBAAoB4C,qBAC9B5C,oBAAoB+C,aAgB5B/C,oBAAArqK,UAAAgtK,0BAAR,SAAkCr7J,EAAkBinH,EAA4BrrG,GAA5B,SAAAqrG,OAAA,GAC3CjnH,EAAE1G,QAGF/L,KAAK2f,UAGV3f,KAAK2vK,oBAAsBl9J,EAAE,GAC7BzS,KAAKksK,gBAAgB59I,QAAQ,SAACllB,GAC1B,IAAK,GAAIrJ,GAAI,EAAGA,EAAI0S,EAAE1G,OAAQhM,IAC1B,GAAIqJ,EAAQmwH,QAAQ9mH,EAAE1S,IAAK,CACvBqJ,EAAQ2tH,SAAStkH,EAAE1S,GAAI25H,EAAWrrG,EAClC,YAaR88I,oBAAArqK,UAAA89I,qBAAR,SAA6BnsI,EAAWinH,EAA4BrrG,GAA5B,SAAAqrG,OAAA,GAC/B15H,KAAK2f,UAGV3f,KAAK2vK,oBAAsBl9J,EAC3BzS,KAAKksK,gBAAgB59I,QAAQ,SAACllB,GACtBA,EAAQmwH,QAAQ9mH,IAChBrJ,EAAQ2tH,SAAStkH,EAAGinH,EAAWrrG,OAQnC88I,oBAAArqK,UAAAouK,qBAAR,WACI,MAAOlvK,MAAK2vK,qBAONxE,oBAAArqK,UAAAyuI,gBAAV,WAGI,OAFAvvI,KAAKi5H,MAAM/jH,OAEHlV,KAAKsvI,aACT,IAAK67B,qBAAoBiD,kBACrBpuK,KAAKuuK,mBACL,MACJ,KAAKpD,qBAAoBkD,iBACrBruK,KAAK2uK,kBACL,MACJ,KAAKxD,qBAAoBuD,UACrB1uK,KAAK4uK,WACL,MACJ,SACI1rK,EAAApC,UAAMyuI,gBAAe9uI,KAAAT,QASvBmrK,oBAAArqK,UAAAq9D,aAAV,WACSn+D,KAAK2wI,YAAe3wI,KAAK2wI,WAAW3wI,KAAKgxI,uBAG9Cl1H,EAAAe,OAAOC,aAAa9c,KAAK2wI,WAAW3wI,KAAKgxI,qBAAsB,OAC/DhxI,KAAK2wI,WAAW3wI,KAAKgxI,qBAAqBrxH,SAAU,IAG9CwrJ,oBAAArqK,UAAA2tK,eAAV,WACI,GAAKzuK,KAAK2wI,YAAe3wI,KAAK2wI,WAAW3wI,KAAKgxI,qBAA9C,CAUA,IAAK,GAFD4+B,GAAa,IACbC,EAAW,IACN9vK,EAAI,EAAGA,GAAKC,KAAKmuK,mBAAoBpuK,IAAK,CAC/C,GAAMowE,GAAMnwE,KAAK4tI,YAAY7tI;AAEzBowE,EAAI57C,OAASvyB,EAAAiD,cAAcC,KAAK46I,QAAQkB,OAMxC6uB,EAAWjuK,EAAAyL,YAAY/D,IAAIumK,EAAU7vK,KAAK4tI,YAAY7tI,GAAGk+B,SA6BjE,GAvBIz7B,EAAA+B,WAAWC,kBAAkB+I,UAAmC,MAAvBu3D,EAAAqD,WAAWgB,UACpDqjE,EAAAgE,wBAAwBC,OAAQ,EAChCzwI,KAAK2wI,WAAW3wI,KAAKgxI,qBAAqBj0G,KACtCrnB,SAAS9T,EAAAyL,YAAY+7D,OAAOymG,EAAU/qG,EAAAqD,WAAWgB,UAAUp7D,YAC3D2H,SAAS9T,EAAAyL,YAAY+7D,OAAOwmG,EAAY9qG,EAAAqD,WAAWgB,UAAUp7D,eAGjEy+H,EAAAgE,wBAAwBC,OAAQ,EAChCzwI,KAAK2wI,WAAW3wI,KAAKgxI,qBAAqBj0G,KAAKze,WAAWuxJ,GAAWvxJ,WAAWsxJ,KAUpF5vK,KAAK2wI,WAAW3wI,KAAKgxI,qBAAqBrxH,SAAU,EAGpD7D,EAAAe,OAAOC,aAAa9c,KAAK2wI,WAAW3wI,KAAKgxI,qBAAsB,OAEnB,GAAxChxI,KAAK6rK,gCAGL,MAFA7rK,MAAK2wI,WAAW3wI,KAAKgxI,qBAAqB1/H,MAAMwN,EAAI9e,KAAK4rK,+BACzD5rK,KAAK2wI,WAAW3wI,KAAKgxI,qBAAqB1/H,MAAM0N,EAAIhf,KAAK4rK,0BAI7D,IAAIkE,GACA9vK,KAAK4rK,0BACJ5rK,KAAK6rK,gCAAkC7rK,KAAKmuK,mBAAsBnuK,KAAK4tI,YAAY7hI,OACpFgkK,EACA/vK,KAAK4rK,0BACJ5rK,KAAK6rK,iCAAmC7rK,KAAKmuK,mBAAqB,GAAMnuK,KAAK4tI,YAAY7hI,MAE9F+P,GAAAe,OAAOkJ,WAAW/lB,KAAK2wI,WAAW3wI,KAAKgxI,sBACnChrH,aACI,GAAIhc,MAAK24H,MAAMmtC,EAAWA,GAC1B,GAAI9lK,MAAK24H,MAAMmtC,EAAWA,GAC1B,GAAI9lK,MAAK24H,MAAMotC,EAASA,GACxB,GAAI/lK,MAAK24H,MAAMotC,EAASA,IAE5B/sJ,SAAUhjB,KAAKgsK,kBACfzpJ,cAAeviB,KAAK8rK,kBACpBzpJ,UAAWriB,KAAK+rK,gBAGpB/rK,KAAKosK,gBAAiB,IAGnBjB,oBAAArqK,UAAA2hJ,cAAP,SAAqB71I,GACjB5M,KAAK0iF,YAAc91E,GAGbu+J,oBAAArqK,UAAA+tK,gBAAV,SAA0Bt0G,GACtB,GADsB,SAAAA,OAAA,GACjBv6D,KAAK2wI,YAAe3wI,KAAK2wI,WAAW3wI,KAAKgxI,sBAAyBhxI,KAAKosK,eAA5E,CAGAtwJ,EAAAe,OAAOC,aAAa9c,KAAK2wI,WAAW3wI,KAAKgxI,qBAAsB,MAE/D,IAAI1/H,GACAtR,KAAK4rK,0BACJ5rK,KAAK6rK,iCAAmCtxG,EAAQv6D,KAAK4tI,YAAY7hI,OAAS/L,KAAKmuK,oBAC5EnuK,KAAK4tI,YAAY7hI,MACzB/L,MAAK2wI,WAAW3wI,KAAKgxI,qBAAqB1/H,MAAMwN,EAAIxN,EACpDtR,KAAK2wI,WAAW3wI,KAAKgxI,qBAAqB1/H,MAAM0N,EAAI1N,EACpDtR,KAAK2wI,WAAW3wI,KAAKgxI,qBAAqBtpC,SAAW1nG,KAAK6yF,WAC1D7yF,KAAK2wI,WAAW3wI,KAAKgxI,qBAAqBC,YAE1CjxI,KAAKosK,gBAAiB,IAQlBjB,oBAAArqK,UAAAkvK,eAAR,WAEIhwK,KAAK4wI,sBACL5wI,KAAKiX,KAAKi8G,EAAAkB,YAAY4B,oBAGnBm1C,oBAAArqK,UAAAmvK,0BAAP,WACI,MAAOjwK,MAAK8tI,wBAORq9B,oBAAArqK,UAAA+sK,mBAAR,WACI,IAAK,GAAI9tK,GAAI,EAAGA,EAAIC,KAAKkkG,eAAen4F,OAAQhM,IAE5C,IAAK,GADDmwK,GAAMlwK,KAAKkkG,eAAenkG,GACrBsjC,EAAI,EAAGA,EAAI6sI,EAAInkK,OAAQs3B,IAAK,CACjC,GAAIoiE,GAASyqE,EAAI7sI,GACbzmB,EAAW6oF,EAAO6zB,mBAEtB62C,EAAA,SAAA/qK,GACI,GAAmC,IAA/BA,EAAIgrK,YAAY,OAAQ,GAAU,CAClC,GAAIC,GAAOzzJ,EAASxX,EACpB,IAAa,OAATirK,EAAe,CACf,GAAIp3C,GAAQrmH,EAAAa,iBAAiB,SAAW1T,EAAIsjC,EAAI,IAAMj+B,EACtDkrK,GAAKjE,eAAe3kJ,KAAKuxG,EAEzB,IAAIs3C,GAAO9xJ,KAAKC,MAAsB,IAAhBD,KAAKE,WAAmB5e,EAAI,IAAMsjC,EAAI,KAAO,CAEnE41F,GAAM9jH,MAAMo7J,GACZt3C,EAAMvlH,GAAGd,EAAAe,iBAAiBC,SAAU,WAChCy8J,EAAKtzI,Y7Kux8ChBuzI,EAAStwK,I6Kly8Cd,KAAK,GAAIoF,KAAOwX,G7Koy8CXuzJ,EAAQ/qK,K6Kvw8Cf+lK,oBAAArqK,UAAA6sI,iBAAV,SAA2BH,EAAmBiC,GAC1CvsI,EAAApC,UAAM6sI,iBAAgBltI,KAAAT,KAACwtI,EAAWiC,GAClCzvI,KAAKwwK,wBASCrF,oBAAArqK,UAAAwtI,mBAAV,SAA6BwB,EAAkB7X,EAAkB8X,GAC7D,GAAM5/D,GAAMnwE,KAAK4tI,YAAYkC,GACvB7pC,EAAU/iG,EAAApC,UAAMwtI,mBAAkB7tI,KAAAT,KAAC8vI,EAAU7X,EAAU8X,EAW7D,OAVIA,IAAY9pC,EAAQl6F,OAAS,GAAKokE,EAAIlyC,OAAS,IAC/Cj+B,KAAK4M,MAAMwS,SAASN,EAAImnF,EAAQ,GAAG7mF,SAASN,EAAImnF,EAAQ,GAAGolC,QAAUrrI,KAAK6rI,YAAc,EACxF7rI,KAAK4M,MAAMwS,SAASJ,EAAIinF,EAAQ,GAAG7mF,SAASJ,EAAIinF,EAAQ,GAAGqlC,QAAUtrI,KAAK8rI,aAAe,EACzF9rI,KAAK4M,MAAM0E,MAAMwN,EAAI9e,KAAK4M,MAAM0E,MAAM0N,EAAI,EAC1Chf,KAAK4M,MAAM+S,SAAU,EACrB3f,KAAK4M,MAAMmwB,KAAKozC,EAAIlyC,SAGxBj+B,KAAKwwK,uBAEEvqE,GAMDklE,oBAAArqK,UAAA0vK,qBAAV,WACIxwK,KAAKotI,iBAAiBxwH,SAAS2jB,KAAK,SAACzgC,EAAQsB,GACzC,MAAItB,GAAEiB,eAAe,WAAaK,EAAEL,eAAe,WAC/CjB,EAAEyhD,OAASzhD,EAAEyhD,QAAU,EACvBngD,EAAEmgD,OAASngD,EAAEmgD,QAAU,EAEhBzhD,EAAEyhD,OAASngD,EAAEmgD,QAEjB,KAIL4pH,oBAAArqK,UAAAstI,mBAAV,SAA6BnW,EAAkB4X,GAC3C,IAAK,GAAI9vI,GAAI,EAAGA,EAAIC,KAAKkkG,eAAen4F,OAAQhM,IAC5C,IAAK,GAAIsjC,GAAI,EAAGA,EAAIrjC,KAAKkkG,eAAenkG,GAAGgM,OAAQs3B,IAAK,CACpD,GAAMoiE,GAASzlG,KAAKkkG,eAAenkG,GAAGsjC,EAEvB,QAAXoiE,GAAmBzlG,KAAK2vI,oBAAoB5vI,EAAGsjC,EAAG40F,KAClDxyB,EAAOsxB,SAASkB,GAEZ4X,EACA7vI,KAAKmtI,sBAAsBr7H,SAAS2zF,GAEpCzlG,KAAKotI,iBAAiBt7H,SAAS2zF,IAM/CzlG,KAAKwwK,wBAGCrF,oBAAArqK,UAAA6uI,oBAAV,SAA8BnC,EAAmBiC,EAAqBxX,GAClE,OACIA,GAAYoS,EAAAE,OAAOvS,YACnBh4H,KAAKkkG,eAAespC,GAAWiC,GAAahW,kBAAoB4Q,EAAAE,OAAOwB,WAIpE7oI,EAAApC,UAAM6uI,oBAAmBlvI,KAAAT,KAACwtI,EAAWiC,EAAaxX,IAG7DkzC,oBAAArqK,UAAAs1H,YAAA,SAAYmX,GACRvtI,KAAKytI,aAAeF,CAEpB,KAAK,GAAIxtI,GAAI,EAAGA,EAAIwtI,EAAUxhI,OAAQhM,IAClC,IAAK,GAAIsjC,GAAI,EAAGA,EAAIkqG,EAAUxtI,GAAGkmG,QAAQl6F,OAAQs3B,IAC7CrjC,KAAK0tI,oBAAoB3tI,EAAGsjC,EAIpC,KAAK,GAAItjC,GAAI,EAAGA,EAAIwtI,EAAUxhI,OAAQhM,IAClC,IAAK,GAAIsjC,GAAI,EAAGA,EAAIkqG,EAAUxtI,GAAGkmG,QAAQl6F,OAAQs3B,IAC7CrjC,KAAK2tI,iBAAiB5tI,EAAGsjC,IAK7B8nI,oBAAArqK,UAAAkuK,kBAAR,WACI,IAAK,GAAIjvK,GAAI,EAAGA,EAAIC,KAAKkkG,eAAen4F,OAAQhM,IAE5C,IAAK,GADDmwK,GAAMlwK,KAAKkkG,eAAenkG,GACrBsjC,EAAI,EAAGA,EAAI6sI,EAAInkK,OAAQs3B,IAAK,CACjC,GAAIoiE,GAASyqE,EAAI7sI,GACbzmB,EAAW6oF,EAAO6zB,kBAEtB,KAAK,GAAIl0H,KAAOwX,GACZ,GAAmC,IAA/BxX,EAAIgrK,YAAY,OAAQ,GAAU,CAClC,GAAIK,GAAO7zJ,EAASxX,EACP,QAATqrK,GACAA,EAAKv7J,QAOzB,IAAK,GAAInV,GAAI,EAAG2wK,EAAM1wK,KAAKqsK,eAAetgK,OAAQhM,EAAI2wK,EAAK3wK,IAAK,CAC5D,GAAIk5H,GAAQj5H,KAAKqsK,eAAevqH,KAChCm3E,GAAM/jH,SAIJi2J,oBAAArqK,UAAAowI,aAAV,WACI,MAAO,MAGDi6B,oBAAArqK,UAAAqwI,2BAAV,WACI,MAAO,IAGJg6B,oBAAArqK,UAAAkxH,UAAP,SAAiB7hD,GACb,MAAOA,GAAMrL,EAAAqD,WAAWK,KAAOxoE,KAAKgtI,YAAY,IAviC1Bm+B,oBAAAnzC,WAAa,SACbmzC,oBAAApzC,QAAU,MACVozC,oBAAA+C,UAAY,QACZ/C,oBAAA8C,YAAc,UACd9C,oBAAAmE,UAAY,QACZnE,oBAAAp/B,SAAW,OAEXo/B,oBAAA6C,iBAAmB,GACnB7C,oBAAA4C,oBAAsB,MAEtB5C,oBAAAiE,gBAAkB,SAClBjE,oBAAAkE,gBAAkB,SAElBlE,oBAAAiD,kBAAoB,oBACpBjD,oBAAAkD,iBAAmB,mBACnBlD,oBAAAuD,UAAY,YAhE1CvD,oBAAA9vJ,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB7Kw1+CxBkjJ,sB6Kv1+CiCj4C,EAAAkB,YAA5B/zH,GAAA8qK,oBAAmBA,EA2lCnB9qK,EAAAorK,+BAOTnvB,gBAAiB,iBAEjBq0B,iBAAkB,kBAClB9D,kBAAmB,kBACnBC,sBAAuB,qBACvBC,oBAAqB,oBACrBC,mBAAoB,oBACpBtB,0BACI8C,SAAU,WACV7C,SAAU,YAGd6B,gBAAiB,iBAEjBC,eAAgB,mBAqBhBP,4BAA6B,2BAM7BC,kCAAmC,iCAMnCC,mBAAoB,mBAMpBC,eAAgB,eAOhBC,oBAAqB,qB7Kot8CnB,SAAShtK,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G8Kz5+CjE5Z,EAAAzB,EAAgC,GAChCyS,EAAAzS,EAA2E,GAC3E0b,EAAA1b,EAA+B,IAC/BmzH,EAAAnzH,EAA8B,IAG9BywK,EAAA,SAAA1tK,GAA0B3B,EAAAqvK,KAAA1tK,EAKtB,SAAA0tK,QACI1tK,EAAAzC,KAAAT,MAEAA,KAAK6wK,aAAej+J,EAAAa,iBAAiB,gBACrCzT,KAAKs+B,SAAU,EAoBvB,MAjBIsyI,MAAA9vK,UAAAgwK,gBAAA,SAAgBziJ,EAAe0iJ,GAC3B/wK,KAAK+wK,YAAcA,EAEnB/wK,KAAK6wK,aAAa37J,OAClBlV,KAAK6wK,aAAaz+D,mBAAmBx/F,EAAAe,iBAAiBC,UACtD5T,KAAK6wK,aAAan9J,GAAGd,EAAAe,iBAAiBC,SAAU5T,KAAKgxK,cAAcn9J,KAAK7T,OACxEA,KAAK6wK,aAAa17J,MAAMkZ,IAGpBuiJ,KAAA9vK,UAAAkwK,cAAR,WAC4B,MAApBhxK,KAAK+wK,aAA2C,IAApB/wK,KAAK+wK,cACjC/wK,KAAK6wK,aAAa37J,OAClBlV,KAAK6wK,aAAaz+D,mBAAmBx/F,EAAAe,iBAAiBC,UACtD5T,KAAK+2H,SAAS/2H,KAAK+wK,aACnB/wK,KAAK+wK,YAAc,KA3B/BH,KAAAv1J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAeC,gB9Kk7+CxB2oJ,O8Kj7+CkBt9C,EAAAmB,cAAbp0H,GAAAuwK,KAAIA,G9Ky7+CX,SAAStwK,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G+K38+CjE5Z,EAAAzB,EAAoD,GACpD0b,EAAA1b,EAA+B,IAC/Bw5G,EAAAx5G,EAAqC,IACrC2kE,EAAA3kE,EAA2B,IAC3BqC,EAAArC,EAA2B,GAC3BuC,EAAAvC,EAA+B,IAC/B6xF,EAAA7xF,EAA4B,IAG5B8wK,EAAA,SAAA/tK,GAAqD3B,EAAA0vK,gCAAA/tK,EAQjD,SAAA+tK,mCACI/tK,EAAAzC,KAAAT,MAEA8kE,EAAAqD,WAAWqS,mBAAqBx6E,KAgKxC,MA7JIixK,iCAAAnwK,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKkxK,OAAyBhoK,SAAS6iC,cAAc,OACrD/rC,KAAKkxK,OAAO7nK,UAAUC,IAAI,WAC1BtJ,KAAKkxK,OAAO7nK,UAAUC,IAAI,YAEL,MAAjBtJ,KAAKmP,UACLnP,KAAKmP,SAASgC,YAAYnR,KAAKkxK,QAGnClxK,KAAKmxK,OAAQ,EACbnxK,KAAKoxK,iBAGTH,gCAAAnwK,UAAAy5E,UAAA,WACI,GACI/3E,EAAA+B,WAAWC,kBAAkB+I,UACT,MAApBu3D,EAAAqD,WAAWkR,OACY,MAAvBvU,EAAAqD,WAAWgB,UACI,MAAfnpE,KAAKkxK,OACP,CACElxK,KAAK8tJ,WACL9tJ,KAAKkxK,OAAO3nK,UAAY,EACxB,IAAIxJ,GAAY,CAChB,KAAK,GAAIqF,KAAO0/D,GAAAqD,WAAWkR,MACvB,GAAIvU,EAAAqD,WAAWgB,WAAa7qD,WAAWlZ,GACnC,IAAK,GAAIi+B,GAAY,EAAGA,EAAIyhC,EAAAqD,WAAWkR,MAAMj0E,GAAK2G,OAAQs3B,IAAK,CAC3DyhC,EAAAqD,WAAWkR,MAAMj0E,GAAKm7B,KAAKukC,EAAAqD,WAAWgT,YACtCrW,EAAAqD,WAAWkR,MAAMj0E,GAAKiyB,SAEtB,IAAIg6I,GAA4CnoK,SAAS6iC,cAAc,MACvEslI,GAAUhoK,UAAUC,IAAI,aACxB+nK,EAAUpwF,QAAUjhF,KAAKsxK,aAAaz9J,KAAK7T,MAC3CqxK,EAAUllK,aAAa,YAAa24D,EAAAqD,WAAWkR,MAAMj0E,GAAKi+B,GAAGt1B,YACjC,MAAxB+2D,EAAAqD,WAAW4R,WAAqBjV,EAAAqD,WAAW4R,WAAajV,EAAAqD,WAAWkR,MAAMj0E,GAAKi+B,IAC9EguI,EAAUhoK,UAAUC,IAAI,UAE5B,IAAIioK,GAAiDroK,SAAS6iC,cAAc,MAC5EwlI,GAAeloK,UAAUC,IAAI,cAC7BioK,EAAehwE,UAAYz8B,EAAAqD,WAAWkR,MAAMj0E,GAAKi+B,GAAGt1B,WAEpDsjK,EAAUlgK,YAAYogK,GACtBvxK,KAAK8tJ,QAAQpmI,KAAK2pJ,GAClBrxK,KAAKkxK,OAAO//J,YAAYkgK,GACxBtxK,IAKZC,KAAKwpB,QAAU,GAAKzpB,EAAI,GAAK,OAI7BkxK,gCAAAnwK,UAAAwwK,aAAR,SAAqBzxK,GACjB,IAAIG,KAAKmxK,QAITnxK,KAAK8U,aAEI,MAALjV,GACmB,MAAnBA,EAAE2xK,eACF3xK,EAAE2xK,cAActzJ,aAAa,cACL,MAAxB4mD,EAAAqD,WAAW4R,WACb,CACE,GAAID,GAAoBx7D,WAAWze,EAAE2xK,cAAcjzJ,aAAa,aAChE,IAAIu7D,IAAchV,EAAAqD,WAAW4R,UACzB/5E,KAAKs9E,cAEL,IAAoB,MAAhBt9E,KAAK8tJ,QAAiB,CACtB,IAAK,GAAI/tJ,GAAY,EAAGA,EAAIC,KAAK8tJ,QAAQ/hJ,OAAQhM,IACzCC,KAAK8tJ,QAAQ/tJ,GAAGme,aAAa,eACzBI,WAAWte,KAAK8tJ,QAAQ/tJ,GAAGwe,aAAa,gBAAkBu7D,EAC1D95E,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAUC,IAAI,WAE9BtJ,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAUsN,OAAO,WAI7CjU,GAAAyF,eAAeqvD,eAAew6B,EAAAS,YAAYiB,2BAA6B5Z,GACvE95E,KAAKs9E,aAMrB2zF,gCAAAnwK,UAAAmsJ,YAAA,WACI,GAAoB,MAAhBjtJ,KAAK8tJ,QACL,IAAK,GAAI/tJ,GAAY,EAAGA,EAAIC,KAAK8tJ,QAAQ/hJ,OAAQhM,IACzCC,KAAK8tJ,QAAQ/tJ,GAAGme,aAAa,eACzBI,WAAWte,KAAK8tJ,QAAQ/tJ,GAAGwe,aAAa,gBAAkBumD,EAAAqD,WAAW4R,UACrE/5E,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAUC,IAAI,WAE9BtJ,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAUsN,OAAO,aAOrDs6J,gCAAAnwK,UAAA4rF,OAAA,WACwB,MAAhB1sF,KAAK8tJ,SAAmB9tJ,KAAK8tJ,QAAQ/hJ,QAAU,GAI9B,MAAjB/L,KAAKmP,WACDnP,KAAKmP,SAAS9F,UAAU0N,SAAS,cACjC/W,KAAKmxK,OAAQ,EACbnxK,KAAK8U,aACe,MAAhB9U,KAAKwpB,UACLxpB,KAAKmP,SAASuC,MAAM/K,OAAS3G,KAAKwpB,SAEtCxpB,KAAKmP,SAAS9F,UAAUsN,OAAO,eAE/B3W,KAAKmxK,OAAQ,EACbnxK,KAAKyxK,eACLzxK,KAAKmP,SAAS6sC,gBAAgB,SAC9Bh8C,KAAKmP,SAAS9F,UAAUC,IAAI,gBAKxC2nK,gCAAAnwK,UAAAw8E,QAAA,WACyB,MAAjBt9E,KAAKmP,WACAnP,KAAKmP,SAAS9F,UAAU0N,SAAS,eAClC/W,KAAKmxK,OAAQ,EACbnxK,KAAKyxK,eACLzxK,KAAKmP,SAAS6sC,gBAAgB,SAC9Bh8C,KAAKmP,SAAS9F,UAAUC,IAAI,gBAK9B2nK,gCAAAnwK,UAAAswK,cAAV,WACIpxK,KAAK0xK,QAAU,MAGTT,gCAAAnwK,UAAAgU,WAAV,cAAAgE,GAAA9Y,IACIA,MAAKyxK,cAEL,IAAM54J,GAAWrW,EAAA+B,WAAWC,kBAAkBmtK,uBAE1C94J,GAAW,IACX7Y,KAAK0xK,QAAU58J,WAAW,WACtBgE,EAAKwkE,WACK,IAAXzkE,KAIDo4J,gCAAAnwK,UAAA2wK,aAAV,WACS7vK,EAAAoG,MAAMC,kBAAkBjI,KAAK0xK,WAC9Bn4J,aAAavZ,KAAK0xK,SAElB1xK,KAAK0xK,QAAU,OAzK3BT,gCAAA51J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,c/K+l/CxBumJ,kC+K9l/C6Ct3D,EAAAiB,qBAAxCv6G,GAAA4wK,gCAA+BA,G/Ksm/CtC,SAAS3wK,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GgL3n/CjE5Z,EAAAzB,EAAoD,GACpD0b,EAAA1b,EAA+B,IAC/Bw5G,EAAAx5G,EAAqC,IACrC2kE,EAAA3kE,EAA2B,IAC3BqC,EAAArC,EAA2B,GAC3BuC,EAAAvC,EAA+B,IAC/B6xF,EAAA7xF,EAA4B,IAC5BiC,EAAAjC,EAA0B,IAG1ByxK,EAAA,SAAA1uK,GAAsD3B,EAAAqwK,iCAAA1uK,EAQlD,SAAA0uK,oCACI1uK,EAAAzC,KAAAT,MAEA8kE,EAAAqD,WAAWsS,aAAez6E,KAmJlC,MAhJI4xK,kCAAA9wK,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKkxK,OAAyBhoK,SAAS6iC,cAAc,OACrD/rC,KAAKkxK,OAAO7nK,UAAUC,IAAI,WAC1BtJ,KAAKkxK,OAAO7nK,UAAUC,IAAI,YAEL,MAAjBtJ,KAAKmP,UACLnP,KAAKmP,SAASgC,YAAYnR,KAAKkxK,QAGnClxK,KAAKmxK,OAAQ,EACbnxK,KAAKoxK,iBAGTQ,iCAAA9wK,UAAAy5E,UAAA,WACI,IAAK/3E,EAAA+B,WAAWC,kBAAkB+I,UAAoC,MAAxBu3D,EAAAqD,WAAWuG,WAAoC,MAAf1uE,KAAKkxK,OAAgB,CAC/FlxK,KAAK8tJ,WACL9tJ,KAAKkxK,OAAO3nK,UAAY,EAExB,KAAK,GADD0P,GAAgB,EACXlZ,EAAY+kE,EAAAqD,WAAWuG,UAAU3iE,OAAS,EAAGhM,GAAK,EAAGA,IAAK,CAC/D,GAAIsxK,GAA4CnoK,SAAS6iC,cAAc,MACvEslI,GAAUhoK,UAAUC,IAAI,aACxB+nK,EAAUpwF,QAAUjhF,KAAKsxK,aAAaz9J,KAAK7T,MAC3CqxK,EAAUllK,aAAa,MAAO24D,EAAAqD,WAAWuG,UAAU3uE,GAAGgO,YAChC,MAAlB+2D,EAAAqD,WAAWK,KAAe1D,EAAAqD,WAAWK,KAAO1D,EAAAqD,WAAWuG,UAAU3uE,IACjEsxK,EAAUhoK,UAAUC,IAAI,UAE5B,IAAIioK,GAAiDroK,SAAS6iC,cAAc,MAC5EwlI,GAAeloK,UAAUC,IAAI,cAE7BioK,EAAehwE,UAAYn/F,EAAAqH,UAAUs1D,WACjC38D,EAAAqH,UAAUu1D,YACV8F,EAAAqD,WAAWuG,UAAU3uE,GAAGgO,YAG5BsjK,EAAUlgK,YAAYogK,GACtBvxK,KAAK8tJ,QAAQpmI,KAAK2pJ,GAClBrxK,KAAKkxK,OAAO//J,YAAYkgK,GACxBp4J,IAGJjZ,KAAKwpB,QAAU,GAAKvQ,EAAQ,GAAK,OAIjC24J,iCAAA9wK,UAAAwwK,aAAR,SAAqBzxK,GACjB,IAAIG,KAAKmxK,QAITnxK,KAAK8U,aACI,MAALjV,GAAgC,MAAnBA,EAAE2xK,eAAyB3xK,EAAE2xK,cAActzJ,aAAa,QAA4B,MAAlB4mD,EAAAqD,WAAWK,KAAa,CACvG,GAAIkB,GAAcprD,WAAWze,EAAE2xK,cAAcjzJ,aAAa,OAC1D,IAAImrD,IAAQ5E,EAAAqD,WAAWK,IACnBxoE,KAAKs9E,cAEL,IAAoB,MAAhBt9E,KAAK8tJ,QAAiB,CACtB,IAAK,GAAI/tJ,GAAY,EAAGA,EAAIC,KAAK8tJ,QAAQ/hJ,OAAQhM,IACzCC,KAAK8tJ,QAAQ/tJ,GAAGme,aAAa,SACzBI,WAAWte,KAAK8tJ,QAAQ/tJ,GAAGwe,aAAa,UAAYmrD,EACpD1pE,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAUC,IAAI,WAE9BtJ,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAUsN,OAAO,WAI7CjU,GAAAyF,eAAeqvD,eAAew6B,EAAAS,YAAYmB,qBAAuBlqB,GACjE1pE,KAAKs9E,aAMrBs0F,iCAAA9wK,UAAAmsJ,YAAA,WACI,GAAoB,MAAhBjtJ,KAAK8tJ,QACL,IAAK,GAAI/tJ,GAAY,EAAGA,EAAIC,KAAK8tJ,QAAQ/hJ,OAAQhM,IACzCC,KAAK8tJ,QAAQ/tJ,GAAGme,aAAa,SACzBI,WAAWte,KAAK8tJ,QAAQ/tJ,GAAGwe,aAAa,UAAYumD,EAAAqD,WAAWK,IAC/DxoE,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAUC,IAAI,WAE9BtJ,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAUsN,OAAO,aAOrDi7J,iCAAA9wK,UAAA4rF,OAAA,WACwB,MAAhB1sF,KAAK8tJ,SAAmB9tJ,KAAK8tJ,QAAQ/hJ,QAAU,GAI9B,MAAjB/L,KAAKmP,WACDnP,KAAKmP,SAAS9F,UAAU0N,SAAS,cACjC/W,KAAKmxK,OAAQ,EACbnxK,KAAK8U,aACe,MAAhB9U,KAAKwpB,UACLxpB,KAAKmP,SAASuC,MAAM/K,OAAS3G,KAAKwpB,SAEtCxpB,KAAKmP,SAAS9F,UAAUsN,OAAO,eAE/B3W,KAAKmxK,OAAQ,EACbnxK,KAAKyxK,eACLzxK,KAAKmP,SAAS6sC,gBAAgB,SAC9Bh8C,KAAKmP,SAAS9F,UAAUC,IAAI,gBAKxCsoK,iCAAA9wK,UAAAw8E,QAAA,WACyB,MAAjBt9E,KAAKmP,WACAnP,KAAKmP,SAAS9F,UAAU0N,SAAS,eAClC/W,KAAKmxK,OAAQ,EACbnxK,KAAKyxK,eACLzxK,KAAKmP,SAAS6sC,gBAAgB,SAC9Bh8C,KAAKmP,SAAS9F,UAAUC,IAAI,gBAK9BsoK,iCAAA9wK,UAAAswK,cAAV,WACIpxK,KAAK0xK,QAAU,MAGTE,iCAAA9wK,UAAAgU,WAAV,cAAAgE,GAAA9Y,IACIA,MAAKyxK,cAEL,IAAM54J,GAAWrW,EAAA+B,WAAWC,kBAAkBmtK,uBAE1C94J,GAAW,IACX7Y,KAAK0xK,QAAU58J,WAAW,WACtBgE,EAAKwkE,WACK,IAAXzkE,KAID+4J,iCAAA9wK,UAAA2wK,aAAV,WACS7vK,EAAAoG,MAAMC,kBAAkBjI,KAAK0xK,WAC9Bn4J,aAAavZ,KAAK0xK,SAElB1xK,KAAK0xK,QAAU,OA5J3BE,iCAAAv2J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,chLmw/CxBknJ,mCgLlw/C8Cj4D,EAAAiB,qBAAzCv6G,GAAAuxK,iCAAgCA,GhL0w/CvC,SAAStxK,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GiLhy/CjE5Z,EAAAzB,EAAoD,GACpD0b,EAAA1b,EAA+B,IAC/Bw5G,EAAAx5G,EAAqC,IACrC2kE,EAAA3kE,EAA2B,IAC3BqC,EAAArC,EAA2B,GAC3BuC,EAAAvC,EAA+B,IAC/B6xF,EAAA7xF,EAA4B,IAG5B0xK,EAAA,SAAA3uK,GAA+C3B,EAAAswK,0BAAA3uK,EAQ3C,SAAA2uK,6BACI3uK,EAAAzC,KAAAT,MAEA8kE,EAAAqD,WAAWmS,eAAiBt6E,KA+IpC,MA5II6xK,2BAAA/wK,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKkxK,OAAyBhoK,SAAS6iC,cAAc,OACrD/rC,KAAKkxK,OAAO7nK,UAAUC,IAAI,WAC1BtJ,KAAKkxK,OAAO7nK,UAAUC,IAAI,YAEL,MAAjBtJ,KAAKmP,UACLnP,KAAKmP,SAASgC,YAAYnR,KAAKkxK,QAGnClxK,KAAKmxK,OAAQ,EACbnxK,KAAKoxK,iBAGTS,0BAAA/wK,UAAAy5E,UAAA,WACI,GACoB,MAAhBv6E,KAAK8tJ,SACLtrJ,EAAA+B,WAAWC,kBAAkB+I,UACT,MAApBu3D,EAAAqD,WAAWkR,OACI,MAAfr5E,KAAKkxK,OACP,CACElxK,KAAK8tJ,UACL,IAAI/tJ,GAAY,EACZ27E,IACJ,KAAK,GAAIt2E,KAAO0/D,GAAAqD,WAAWkR,MACvBqC,EAAUh0D,KAAKtiB,EAKnB,KAHAs2E,EAAUn7C,KAAKukC,EAAAqD,WAAWgT,YAC1BO,EAAUrkD,UAELt3B,EAAI,EAAGA,EAAI27E,EAAU3vE,OAAQhM,IAAK,CACnC,GAAIsxK,GAA4CnoK,SAAS6iC,cAAc,MACvEslI,GAAUhoK,UAAUC,IAAI,aACxB+nK,EAAUpwF,QAAUjhF,KAAKsxK,aAAaz9J,KAAK7T,MAC3CqxK,EAAUllK,aAAa,WAAYuvE,EAAU37E,IAClB,MAAvB+kE,EAAAqD,WAAWgB,UAAoBrE,EAAAqD,WAAWgB,UAAY7qD,WAAWo9D,EAAU37E,KAC3EsxK,EAAUhoK,UAAUC,IAAI,UAE5B,IAAIioK,GAAiDroK,SAAS6iC,cAAc,MAC5EwlI,GAAeloK,UAAUC,IAAI,cAC7BioK,EAAehwE,UAAY7lB,EAAU37E,GAErCsxK,EAAUlgK,YAAYogK,GACtBvxK,KAAK8tJ,QAAQpmI,KAAK2pJ,GAClBrxK,KAAKkxK,OAAO//J,YAAYkgK,GAG5BrxK,KAAKwpB,QAAU,GAAKzpB,EAAI,GAAK,OAI7B8xK,0BAAA/wK,UAAAwwK,aAAR,SAAqBzxK,GACjB,IAAIG,KAAKmxK,QAITnxK,KAAK8U,aAEI,MAALjV,GACmB,MAAnBA,EAAE2xK,eACF3xK,EAAE2xK,cAActzJ,aAAa,aACN,MAAvB4mD,EAAAqD,WAAWgB,UACb,CACE,GAAI0Q,GAAmBv7D,WAAWze,EAAE2xK,cAAcjzJ,aAAa,YAC/D,IAAIs7D,IAAa/U,EAAAqD,WAAWgB,SACxBnpE,KAAKs9E,cAEL,IAAoB,MAAhBt9E,KAAK8tJ,QAAiB,CACtB,IAAK,GAAI/tJ,GAAY,EAAGA,EAAIC,KAAK8tJ,QAAQ/hJ,OAAQhM,IACzCC,KAAK8tJ,QAAQ/tJ,GAAGme,aAAa,cACzBI,WAAWte,KAAK8tJ,QAAQ/tJ,GAAGwe,aAAa,eAAiBs7D,EACzD75E,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAUC,IAAI,WAE9BtJ,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAUsN,OAAO,WAI7CjU,GAAAyF,eAAeqvD,eAAew6B,EAAAS,YAAYe,uBAAyB3Z,GACnE75E,KAAKs9E,aAMrBu0F,0BAAA/wK,UAAA4rF,OAAA,WACwB,MAAhB1sF,KAAK8tJ,SAAmB9tJ,KAAK8tJ,QAAQ/hJ,QAAU,GAG9B,MAAjB/L,KAAKmP,WACDnP,KAAKmP,SAAS9F,UAAU0N,SAAS,cACjC/W,KAAKmxK,OAAQ,EACbnxK,KAAK8U,aACe,MAAhB9U,KAAKwpB,UACLxpB,KAAKmP,SAASuC,MAAM/K,OAAS3G,KAAKwpB,SAEtCxpB,KAAKmP,SAAS9F,UAAUsN,OAAO,eAE/B3W,KAAKmxK,OAAQ,EACbnxK,KAAKyxK,eACLzxK,KAAKmP,SAAS6sC,gBAAgB,SAC9Bh8C,KAAKmP,SAAS9F,UAAUC,IAAI,gBAKxCuoK,0BAAA/wK,UAAAw8E,QAAA,WACyB,MAAjBt9E,KAAKmP,WACAnP,KAAKmP,SAAS9F,UAAU0N,SAAS,eAClC/W,KAAKmxK,OAAQ,EACbnxK,KAAKyxK,eACLzxK,KAAKmP,SAAS6sC,gBAAgB,SAC9Bh8C,KAAKmP,SAAS9F,UAAUC,IAAI,gBAK9BuoK,0BAAA/wK,UAAAswK,cAAV,WACIpxK,KAAK0xK,QAAU,MAGTG,0BAAA/wK,UAAAgU,WAAV,cAAAgE,GAAA9Y,IACIA,MAAKyxK,cAEL,IAAM54J,GAAWrW,EAAA+B,WAAWC,kBAAkBmtK,uBAE1C94J,GAAW,IACX7Y,KAAK0xK,QAAU58J,WAAW,WACtBgE,EAAKwkE,WACK,IAAXzkE,KAIDg5J,0BAAA/wK,UAAA2wK,aAAV,WACS7vK,EAAAoG,MAAMC,kBAAkBjI,KAAK0xK,WAC9Bn4J,aAAavZ,KAAK0xK,SAElB1xK,KAAK0xK,QAAU,OAxJ3BG,0BAAAx2J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,cjLo6/CxBmnJ,4BiLn6/CuCl4D,EAAAiB,qBAAlCv6G,GAAAwxK,0BAAyBA,GjL26/ChC,SAASvxK,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GkLh8/CjE5Z,EAAAzB,EAA6C,GAC7C0b,EAAA1b,EAA+B,IAC/B2xK,EAAA3xK,EAAkC,KAClC0gF,EAAA1gF,EAAyB,IACzBqC,EAAArC,EAA2B,GAC3BuC,EAAAvC,EAA+B,IAG/B4xK,EAAA,SAAA7uK,GAA2C3B,EAAAwwK,sBAAA7uK,EAGvC,SAAA6uK,yBACI7uK,EAAAzC,KAAAT,MAHIA,KAAAgyK,WAAqB,GA+FjC,MAzFID,uBAAAjxK,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEb9a,EAAAyF,eAAe2zE,YAAYp0D,KAAK1nB,MAE5Bwd,EAAKU,aAAa,eAClBle,KAAKgyK,WAAax0J,EAAKe,aAAa,cAGnB,MAAjBve,KAAKmP,WACA3M,EAAA+B,WAAWC,kBAAkByJ,oBAC9BjO,KAAKmP,SAAS9F,UAAUC,IAAI,WAEhCtJ,KAAKmP,SAAS8xE,QAAUjhF,KAAK0sF,OAAO74E,KAAK7T,MAErCwC,EAAA+B,WAAWsD,QAAQmG,kBAAwC,gBAApBhO,KAAKgyK,YAC5ChyK,KAAK0sF,WAKVqlF,sBAAAjxK,UAAAi7E,OAAP,SAAcJ,GACV,GADU,SAAAA,OAAA,GAEW,MAAjB37E,KAAKmP,UACc,IAAnBnP,KAAKgyK,aACgB,aAApBhyK,KAAKgyK,YAA8Br2F,GAA8B,gBAApB37E,KAAKgyK,YACrD,CACE,GAAIppG,GAAsC1/D,SAASyxD,uBAAuB36D,KAAKgyK,YAC3ErgK,EAAkB,OAElB3R,MAAKmP,SAAS9F,UAAU0N,SAAS,UACjC/W,KAAKmP,SAAS9F,UAAUsN,OAAO,QAC1B3W,KAAKmP,SAAS9F,UAAU0N,SAAS,QAClC/W,KAAKmP,SAAS9F,UAAUC,IAAI,OAIpC,KAAK,GAAIvJ,GAAY,EAAGA,EAAI6oE,EAAS78D,OAAQhM,IAAK,CAC9C,GAAIqJ,GAAoCw/D,EAAS7oE,EAClC,OAAXqJ,IACAA,EAAQsI,MAAMC,QAAUA,GAIR,gBAApB3R,KAAKgyK,aACW,UAAZrgK,EACAnP,EAAA+B,WAAWsD,QAAQ+F,gBAAe,GAElCpL,EAAA+B,WAAWsD,QAAQ+F,gBAAe,MAM1CmkK,sBAAAjxK,UAAA4rF,OAAR,WACI,GAAqB,MAAjB1sF,KAAKmP,UAAuC,IAAnBnP,KAAKgyK,WAAkB,CAChDnxF,EAAAl2D,SAASoS,KAAK,YACd,IAAI6rC,GAAsC1/D,SAASyxD,uBAAuB36D,KAAKgyK,YAC3ErgK,EAAkB,MAElB3R,MAAKmP,SAAS9F,UAAU0N,SAAS,QACjC/W,KAAKmP,SAAS9F,UAAUsN,OAAO,OAC1B3W,KAAKmP,SAAS9F,UAAU0N,SAAS,SAClC/W,KAAKmP,SAAS9F,UAAUC,IAAI,UAGhCtJ,KAAKmP,SAAS9F,UAAUsN,OAAO,QAC1B3W,KAAKmP,SAAS9F,UAAU0N,SAAS,SAClC/W,KAAKmP,SAAS9F,UAAUC,IAAI,OAC5BqI,EAAU,SAIlB,KAAK,GAAI5R,GAAY,EAAGA,EAAI6oE,EAAS78D,OAAQhM,IAAK,CAC9C,GAAIqJ,GAAoCw/D,EAAS7oE,EAClC,OAAXqJ,IACAA,EAAQsI,MAAMC,QAAUA,GAIR,gBAApB3R,KAAKgyK,aACW,UAAZrgK,EACAnP,EAAA+B,WAAWsD,QAAQ+F,gBAAe,GAElCpL,EAAA+B,WAAWsD,QAAQ+F,gBAAe,MA5FtDmkK,sBAAA12J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,clLwhgDxBqnJ,wBkLvhgDmCD,EAAAG,kBAA9B5xK,GAAA0xK,sBAAqBA,GlL+hgD5B,SAASzxK,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GmLnjgDjE5Z,EAAAzB,EAAgC,GAChCw5G,EAAAx5G,EAAqC,IACrCuC,EAAAvC,EAA+B,IAC/B0b,EAAA1b,EAA+B,IAC/B4C,EAAA5C,EAAwB,GACxBqC,EAAArC,EAA2B,GAC3ByC,EAAAzC,EAA4B,IAY5B8xK,EAAA,SAAA/uK,GAAuC3B,EAAA0wK,kBAAA/uK,EAYnC,SAAA+uK,qBACI/uK,EAAAzC,KAAAT,MA0MR,MAjMIiyK,mBAAAnxK,UAAAa,OAAA,SAAO6b,GASH,GARAta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAQTA,EAAKU,aAAa,YAAa,CAC/Ble,KAAKkyK,SAAW10J,EAAKe,aAAa,YAAYqE,MAAM,KAC/CpF,EAAKU,aAAa,QAGnBle,KAAKmP,SAASssG,QAAc,KAAIj+F,EAAKe,aAAa,QAFlDve,KAAKmyK,kBAAkB30J,EAAKe,aAAa,YAI7C,KAAK,GAAIxe,GAAY,EAAGA,EAAIC,KAAKkyK,SAASnmK,OAAQhM,IAC9C2C,EAAAyF,eAAe4rF,wBAAwB/zF,KAAKkyK,SAASnyK,GAAIC,MAU7Dwd,EAAKU,aAAa,YAClBle,KAAK89E,OAAStgE,EAAKe,aAAa,UAChCve,KAAKmyK,kBAAkB30J,EAAKe,aAAa,WAEzC7b,EAAAyF,eAAe2rF,sBAAsBt2E,EAAKe,aAAa,UAAWve,OASlEwd,EAAKU,aAAa,UAClBle,KAAKmP,SAASssG,QAAc,KAAIj+F,EAAKe,aAAa,SAGnC,MAAfve,KAAK89E,QAAmC,MAAjB99E,KAAKkyK,WAC5BlyK,KAAKmP,SAASyC,iBAAiBqgK,kBAAkBG,MAAOpyK,KAAKssG,QAAQz4F,KAAK7T,OACvD,MAAfA,KAAK89E,QACL99E,KAAKmP,SAAS9F,UAAUC,IAAI5G,EAAAyF,eAAes5E,eAI/CzhF,KAAKmP,SAASyC,iBAAiBqgK,kBAAkBx1D,WAAYz8G,KAAKqyK,aAAax+J,KAAK7T,OACpFA,KAAKmP,SAASyC,iBAAiBqgK,kBAAkBv1D,SAAU18G,KAAKsyK,WAAWz+J,KAAK7T,OAEhFA,KAAKmP,SAASyC,iBAAiB,eAAgB7O,EAAAsF,QAAQ+O,oBACvDpX,KAAKmP,SAASyC,iBAAiB,gBAAiB7O,EAAAsF,QAAQ+O,oBACxDpX,KAAKmP,SAASyC,iBAAiB,aAAc7O,EAAAsF,QAAQ+O,oBACrDpX,KAAKmP,SAASyC,iBAAiB,YAAa7O,EAAAsF,QAAQ+O,oBACH,WAA7C5U,EAAA+B,WAAW2B,eAAemO,gBAC1BrU,KAAKmP,SAASyC,iBAAiBqgK,kBAAkBM,UAAWvyK,KAAKwyK,YAAY3+J,KAAK7T,SAK9FiyK,kBAAAnxK,UAAAqxK,kBAAA,SAAkBr0F,GACd99E,KAAKmP,SAASssG,QAAc,KAAIz7G,KAAKyyK,yBAAyB30F,IAElEm0F,kBAAAnxK,UAAA2xK,yBAAA,SAAyB30F,GACrB,GAAI40F,GACA50F,EAAO3jD,QAAQ,gBAAoBn6B,KAAKmP,SAAS9F,UAAU0N,SAAS,YAExE,QADA+mE,EAAS40F,EAA4B50F,EAAM,YAAcA,GAErD,IAAK,uBACD,MAAI99E,MAAKmP,SAAS9F,UAAU0N,SAAS,iBAAyB,yBACvD,qBACX,KAAK,wCACD,MAAO,sBACX,KAAK,eACD,MAAI/W,MAAKmP,SAAS9F,UAAU0N,SAAS,iBAAyB,iBAE1D/W,KAAKmP,SAAS9F,UAAU0N,SAAS,cACjC/W,KAAKmP,SAAS9F,UAAU0N,SAAS,mBAE1B,cACJ,eACX,KAAK,mBACD,MAAO,iBACX,KAAK,QACD,MAAO,oBACX,KAAK,QACD,MAAO,WACX,KAAK,OACD,MAAO,MACX,KAAK,WACD,MAAI/W,MAAKmP,SAAS9F,UAAU0N,SAAS,YAAoB,aAClD,WACX,KAAK,eACD,MAAI/W,MAAKmP,SAAS9F,UAAU0N,SAAS,YAAoB,iBAClD,eACX,KAAK,cACD,MAAO,UACX,KAAK,UACD,MAAO,MACX,KAAK,cACD,MAAO,UACX,SACI,MAAO+mE,KAInBm0F,kBAAAnxK,UAAA6xK,eAAA,WACuB,MAAf3yK,KAAK89E,QAAmC,MAAjB99E,KAAKkyK,WAC5BlyK,KAAKmP,SAASyC,iBAAiBqgK,kBAAkBG,MAAOpyK,KAAKssG,QAAQz4F,KAAK7T,OACvD,MAAfA,KAAK89E,QACL99E,KAAKmP,SAAS9F,UAAUC,IAAI5G,EAAAyF,eAAes5E,iBAWvDwwF,kBAAAnxK,UAAAwrG,QAAA,SAAQzsG,GAKJ,GAAqB,MAAjBG,KAAKmP,WAAqBnP,KAAKmP,SAAS9F,UAAU0N,SAASrU,EAAAyF,eAAes5E,eAAgB,CAC1F,GAAI5hF,IAAMA,EAAE+yK,WAAapwK,EAAA+B,WAAWC,kBAAkBquK,wBAED,WAA7CrwK,EAAA+B,WAAW2B,eAAemO,eAE1B,WADArU,MAAKwS,IAAI,qBAAqBxS,KAAK89E,OAAM,SAAS99E,KAAK89E,OAW/D,IAPIj+E,GAAKA,EAAE+yK,WACPhwK,EAAA4F,YAAY+mE,qBAAqBvvE,KAAK89E,QAEvB,MAAf99E,KAAK89E,QACLp7E,EAAAyF,eAAeqvD,eAAex3D,KAAK89E,QAGlB,MAAjB99E,KAAKkyK,SACL,IAAK,GAAInyK,GAAY,EAAGA,EAAIC,KAAKkyK,SAASnmK,OAAQhM,IAC9C2C,EAAAyF,eAAewsF,iBAAiB30F,KAAKkyK,SAASnyK,MAM9DkyK,kBAAAnxK,UAAAuxK,aAAA,WACI94J,aAAavZ,KAAK8yK,gBAClB9yK,KAAK+yK,WAAY,EAEI,MAAjB/yK,KAAKmP,UAAqBnP,KAAKmP,SAAS9F,UAAU0N,SAAS,YAC3D/W,KAAKmP,SAAS9F,UAAUC,IAAI,YAIpC2oK,kBAAAnxK,UAAAwxK,WAAA,cAAAx5J,GAAA9Y,IACIA,MAAK8yK,eAAiBh+J,WAAW,WAC7BgE,EAAKi6J,WAAY,GAClB,KAGPd,kBAAAnxK,UAAA0xK,YAAA,WACyB,MAAjBxyK,KAAKmP,UAAoBnP,KAAKmP,SAAS9F,UAAU0N,SAAS,aAAe/W,KAAK+yK,WAC9E/yK,KAAKmP,SAAS9F,UAAUsN,OAAO,YAUvCs7J,kBAAAnxK,UAAAy2F,YAAA,SAAY3qF,GACa,MAAjB5M,KAAKmP,WACDvC,EACA5M,KAAKmP,SAAS9F,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAE9CzhF,KAAKmP,SAAS9F,UAAUC,IAAI5G,EAAAyF,eAAes5E,iBA9MhDwwF,kBAAAG,MAAgB,QAChBH,kBAAAx1D,WAAqB,aACrBw1D,kBAAAv1D,SAAmB,WACnBu1D,kBAAAM,UAAoB,YAL/BN,kBAAA52J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,cnL2sgDxBunJ,oBmL1sgD+Bt4D,EAAAiB,qBAA1Bv6G,GAAA4xK,kBAAiBA,GnLktgDxB,SAAS3xK,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GoLhvgDjE5Z,EAAAzB,EAA6C,GAC7C0b,EAAA1b,EAA+B,IAC/Bw5G,EAAAx5G,EAAqC,IAErCqC,EAAArC,EAA2B,GAC3BuC,EAAAvC,EAA+B,IAE/B0gF,EAAA1gF,EAAyB,IAGzB6yK,EAAA,SAAA9vK,GAAiD3B,EAAAyxK,4BAAA9vK,EAI7C,SAAA8vK,+BACI9vK,EAAAzC,KAAAT,MAJIA,KAAAizK,UACAjzK,KAAA8tJ,WAuGZ,MAjGIklB,6BAAAlyK,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKu6E,aAGTy4F,4BAAAlyK,UAAAy5E,UAAA,WACI,GAAI24F,GAA2B1wK,EAAA+B,WAAWsD,QAAQsrK,qBAClD,IAAqB,MAAjBnzK,KAAKmP,UAAiC,MAAb+jK,EACzB,IAAK,GAAInzK,GAAY,EAAGA,EAAImzK,EAAUnnK,OAAQhM,IAAK,CAC/C,GAAIqzK,GAAuClqK,SAAS6iC,cAAc,MAClEqnI,GAAK/pK,UAAUC,IAAI,QACnB8pK,EAAK/pK,UAAUC,IAAI4pK,EAAUnzK,IAC7BqzK,EAAK1hK,MAAMC,QAAU,OACrByhK,EAAKjnK,aAAa,MAAO+mK,EAAUnzK,IACnCqzK,EAAKnyF,QAAUjhF,KAAKsxK,aAAaz9J,KAAK7T,KACtC,IAAI4M,GAAwC1D,SAAS6iC,cAAc,MACnEn/B,GAAMvD,UAAUC,IAAI,SACpBsD,EAAM8E,MAAMC,QAAU,OACtB/E,EAAMT,aAAa,MAAO+mK,EAAUnzK,IAEpC6M,EAAMq0E,QAAUjhF,KAAKsxK,aAAaz9J,KAAK7T,MAGQ,MAA3CwC,EAAA+B,WAAWsD,QAAQwrK,sBACnBH,EAAUnzK,IAAMyC,EAAA+B,WAAWsD,QAAQwrK,uBAEnCD,EAAK1hK,MAAMC,QAAU,QACrB/E,EAAM8E,MAAMC,QAAU,SAG1B3R,KAAKizK,OAAOC,EAAUnzK,IAAMqzK,EAC5BpzK,KAAK8tJ,QAAQolB,EAAUnzK,IAAM6M,EAC7B5M,KAAKmP,SAASgC,YAAYiiK,GAC1BpzK,KAAKmP,SAASgC,YAAYvE,KAK9BomK,4BAAAlyK,UAAAwwK,aAAR,SAAqBzxK,GACjB,GAAS,MAALA,GAAgC,MAAnBA,EAAE2xK,eAAyB3xK,EAAE2xK,cAActzJ,aAAa,OAAQ,CAC7E2iE,EAAAl2D,SAASoS,KAAK,YACKl9B,GAAE2xK,cAAcjzJ,aAAa,MAEhD,IAAmB,MAAfve,KAAKizK,OACL,IAAK,GAAI7tK,KAAOpF,MAAKizK,OACjBjzK,KAAKizK,OAAO7tK,GAAKsM,MAAMC,QAAU,MAIzC,IAAoB,MAAhB3R,KAAK8tJ,QACL,IAAK,GAAI1oJ,KAAOpF,MAAK8tJ,QACjB9tJ,KAAK8tJ,QAAQ1oJ,GAAKsM,MAAMC,QAAU,MAG1CjP,GAAAyF,eAAewsF,iBAAiB,IAChC30F,KAAKszK,mBAIbN,4BAAAlyK,UAAAwyK,eAAA,WACI,GAAIC,GAAiB/wK,EAAA+B,WAAWsD,QAAQwrK,qBACpCH,EAA2B1wK,EAAA+B,WAAWsD,QAAQsrK,sBAC9CpzJ,EAAe,EAEnB,IAAc,MAAVwzJ,GAA+B,MAAbL,EAAmB,CAErC,IAAK,GADD7uI,GAAgB,EACXtkC,EAAY,EAAGA,EAAImzK,EAAUnnK,OAAQhM,IACtCmzK,EAAUnzK,KAAOwzK,IACjBlvI,EAAQtkC,EAKZggB,GADwB,MAAxBmzJ,EAAU7uI,EAAQ,GACX6uI,EAAU7uI,EAAQ,GAElB6uI,EAAU,GAIA,MAArBlzK,KAAKizK,OAAOlzJ,KACZ/f,KAAKizK,OAAOlzJ,GAAMrO,MAAMC,QAAU,SAEZ,MAAtB3R,KAAK8tJ,QAAQ/tI,KACb/f,KAAK8tJ,QAAQ/tI,GAAMrO,MAAMC,QAAU,SAEvCnP,EAAA+B,WAAWsD,QAAQ2rK,YAAYzzJ,IAGnCizJ,4BAAAlyK,UAAAw8E,QAAA,WACyB,MAAjBt9E,KAAKmP,WACAnP,KAAKmP,SAAS9F,UAAU0N,SAAS,eAClC/W,KAAKmP,SAAS6sC,gBAAgB,SAC9Bh8C,KAAKmP,SAAS9F,UAAUC,IAAI,gBAtG5C0pK,4BAAA33J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,cpL20gDxBsoJ,8BoL10gDyCr5D,EAAAiB,qBAApCv6G,GAAA2yK,4BAA2BA,GpLk1gDlC,SAAS1yK,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GqLx2gDjE5Z,EAAAzB,EAAoD,GACpD0b,EAAA1b,EAA+B,IAC/Bw5G,EAAAx5G,EAAqC,IAErCuC,EAAAvC,EAA+B,IAC/BqC,EAAArC,EAA2B,GAC3ByC,EAAAzC,EAA4B,IAC5B0gF,EAAA1gF,EAAyB,IAGzBszK,EAAA,SAAAvwK,GAA+C3B,EAAAkyK,0BAAAvwK,EAgB3C,SAAAuwK,6BACIvwK,EAAAzC,KAAAT,MAfIA,KAAA0zK,SAA0B,GAAI,GAAI,GAAI,IACtC1zK,KAAA2zK,gBAAiC,OAAQ,OAAQ,OAAQ,QACzD3zK,KAAAqqC,OAAiB,EAerB3nC,EAAAyF,eAAeusF,eAAiB10F,KA0NxC,MAvNIyzK,2BAAA3yK,UAAAa,OAAA,SAAO6b,GASH,GARAta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAK4zK,aAA+B1qK,SAASC,eAAe,eAE5DnJ,KAAKkxK,OAAyBhoK,SAAS6iC,cAAc,OACrD/rC,KAAKkxK,OAAO7nK,UAAUC,IAAI,WAC1BtJ,KAAKkxK,OAAO7nK,UAAUC,IAAI,cAEtB9G,EAAA+B,WAAWsD,QAAQirE,yBAA0B,CAC7C9yE,KAAK6zK,iBAAmC3qK,SAAS6iC,cAAc,OAC/D/rC,KAAK6zK,iBAAiBxqK,UAAUC,IAAI,YACpC,IAAIwqK,GAAuD5qK,SAAS6iC,cAAc,MAClF+nI,GAAqBzqK,UAAUC,IAAI,cACnCwqK,EAAqBzqK,UAAUC,IAAI,WAC/B9G,EAAA+B,WAAWsD,QAAQkrE,qBACnB+gG,EAAqBzqK,UAAUC,IAAI,QAEnCwqK,EAAqBzqK,UAAUC,IAAI,QACnC1G,EAAA4F,YAAY2pE,2BAA4B,EACxC0O,EAAAl2D,SAAS6hE,eAAe,oBAE5BsnF,EAAqB7yF,QAAUjhF,KAAK+zK,kBAAkBlgK,KAAK7T;AAC3DA,KAAK6zK,iBAAiB1iK,YAAY2iK,GAGjB,MAAjB9zK,KAAKmP,WACLnP,KAAKmP,SAASgC,YAAYnR,KAAKkxK,QACF,MAAzBlxK,KAAK6zK,kBACL7zK,KAAKkxK,OAAO//J,YAAYnR,KAAK6zK,kBAE7BrxK,EAAA+B,WAAWsD,QAAQirE,0BACnB9yE,KAAKkxK,OAAO55J,cAAcjO,UAAUC,IAAI,SAIhDtJ,KAAKu6E,YAELv6E,KAAKmxK,OAAQ,EACbnxK,KAAKoxK,iBAGTqC,0BAAA3yK,UAAAy5E,UAAA,WACI,GAAoB,MAAhBv6E,KAAK8tJ,SAAkC,MAAf9tJ,KAAKkxK,OAAgB,CAC7ClxK,KAAK8tJ,UAEL,KAAK,GAAI/tJ,GAAY,EAAGA,EAAIC,KAAK0zK,QAAQ3nK,OAAQhM,IAAK,CAClD,GAAIsxK,GAA4CnoK,SAAS6iC,cAAc,MACvEslI,GAAUhoK,UAAUC,IAAI,aACxB+nK,EAAUpwF,QAAUjhF,KAAKsxK,aAAaz9J,KAAK7T,MAC3CqxK,EAAUllK,aAAa,QAASpM,EAAEgO,WAClC,IAAIwjK,GAAiDroK,SAAS6iC,cAAc,MAC5EwlI,GAAeloK,UAAUC,IAAI,cAC7BioK,EAAehwE,UAAYvhG,KAAK0zK,QAAQ3zK,GACxCsxK,EAAUlgK,YAAYogK,GAEb,GAALxxK,GAAWyC,EAAA+B,WAAWsD,QAAQmsK,sBAC9B3C,EAAU3/J,MAAMC,QAAU,QAG9B3R,KAAK8tJ,QAAQpmI,KAAK2pJ,GAClBrxK,KAAKkxK,OAAO//J,YAAYkgK,GAEvB7uK,EAAA+B,WAAWsD,QAAQmsK,oBAOhBxxK,EAAA+B,WAAWsD,QAAQirE,yBACnB9yE,KAAKwpB,QAAU,IAA4B,GAAtBxpB,KAAK0zK,QAAQ3nK,OAAc,IAAM,KAEtD/L,KAAKwpB,QAAgC,GAAtBxpB,KAAK0zK,QAAQ3nK,OAAc,GAAK,KAT/CvJ,EAAA+B,WAAWsD,QAAQirE,yBACnB9yE,KAAKwpB,QAAU,IAAkC,IAA3BxpB,KAAK0zK,QAAQ3nK,OAAS,GAAU,IAAM,KAE5D/L,KAAKwpB,QAAsC,IAA3BxpB,KAAK0zK,QAAQ3nK,OAAS,GAAU,GAAK,OAY7D0nK,0BAAA3yK,UAAAwwK,aAAR,SAAqBzxK,GACjB,IAAIG,KAAKmxK,MAAT,CAKA,GADAnxK,KAAK8U,aACI,MAALjV,GAAgC,MAAnBA,EAAE2xK,eAAyB3xK,EAAE2xK,cAActzJ,aAAa,SAAU,CAC/E2iE,EAAAl2D,SAASoS,KAAK,YACd,IAAIy9B,GAAgBl8C,WAAWze,EAAE2xK,cAAcjzJ,aAAa,SAC5D,IAAIi8C,IAAUx6D,KAAKqqC,YACZ,CAEH,GADArqC,KAAKqqC,OAASmwB,EACM,MAAhBx6D,KAAK8tJ,QACL,IAAK,GAAI/tJ,GAAY,EAAGA,EAAIC,KAAK8tJ,QAAQ/hJ,OAAQhM,IACzCC,KAAK8tJ,QAAQ/tJ,GAAGme,aAAa,WACzBI,WAAWte,KAAK8tJ,QAAQ/tJ,GAAGwe,aAAa,YAAci8C,EACtDx6D,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAUC,IAAI,WAE9BtJ,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAUsN,OAAO,WAKjDnU,GAAA+B,WAAWsD,QAAQmtF,UAAUx6B,IAGrCx6D,KAAKi0K,sBAGDR,0BAAA3yK,UAAAizK,kBAAR,SAA0Bl0K,GAClBG,KAAKmxK,QAITnxK,KAAK8U,aACI,MAALjV,GAAgC,MAAnBA,EAAE2xK,gBACf3wF,EAAAl2D,SAASoS,KAAK,aACVl9B,EAAE2xK,cAAcnoK,UAAU0N,SAAS,QACnClX,EAAE2xK,cAAcnoK,UAAUsN,OAAO,OAC5B9W,EAAE2xK,cAAcnoK,UAAU0N,SAAS,SACpClX,EAAE2xK,cAAcnoK,UAAUC,IAAI,QAElC1G,EAAA4F,YAAY2pE,2BAA4B,EACxC3vE,EAAA+B,WAAWsD,QAAQqsK,oBAAmB,GACtCrzF,EAAAl2D,SAAS6hE,eAAe,qBAExB3sF,EAAE2xK,cAAcnoK,UAAUsN,OAAO,QAC5B9W,EAAE2xK,cAAcnoK,UAAU0N,SAAS,QACpClX,EAAE2xK,cAAcnoK,UAAUC,IAAI,OAElC1G,EAAA4F,YAAY2pE,2BAA4B,EACxC3vE,EAAA+B,WAAWsD,QAAQqsK,oBAAmB,GACtCrzF,EAAAl2D,SAAS6hE,eAAe,mBAAmB,OAKvDinF,0BAAA3yK,UAAA8zF,SAAA,SAASp6B,GAEL,GADAx6D,KAAKqqC,OAASmwB,EACM,MAAhBx6D,KAAK8tJ,QACL,IAAK,GAAI/tJ,GAAY,EAAGA,EAAIC,KAAK8tJ,QAAQ/hJ,OAAQhM,IACzCA,IAAMy6D,EACDx6D,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAU0N,SAAS,YACpC/W,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAUC,IAAI,WAGlCtJ,KAAK8tJ,QAAQ/tJ,GAAGsJ,UAAUsN,OAAO,UAI7C3W,MAAKi0K,qBAGTR,0BAAA3yK,UAAAmzK,kBAAA,WACI,GAAyB,MAArBj0K,KAAK4zK,cACmC,MAApC5zK,KAAK2zK,eAAe3zK,KAAKqqC,QAAiB,CAC1C,IAAK,GAAItqC,GAAY,EAAGA,EAAIC,KAAK2zK,eAAe5nK,OAAQhM,IACpDC,KAAK4zK,aAAavqK,UAAUsN,OAAO3W,KAAK2zK,eAAe5zK,GAE3DC,MAAK4zK,aAAavqK,UAAUC,IAAItJ,KAAK2zK,eAAe3zK,KAAKqqC,WAKrEopI,0BAAA3yK,UAAA4rF,OAAA,WACyB,MAAjB1sF,KAAKmP,WACDnP,KAAKmP,SAAS9F,UAAU0N,SAAS,cACjC/W,KAAKmxK,OAAQ,EACbnxK,KAAK8U,aACe,MAAhB9U,KAAKwpB,UACLxpB,KAAKmP,SAASuC,MAAM/K,OAAS3G,KAAKwpB,SAEtCxpB,KAAKmP,SAAS9F,UAAUsN,OAAO,eAE/B3W,KAAKmxK,OAAQ,EACbnxK,KAAKyxK,eACLzxK,KAAKmP,SAAS6sC,gBAAgB,SAC9Bh8C,KAAKmP,SAAS9F,UAAUC,IAAI,gBAKxCmqK,0BAAA3yK,UAAAw8E,QAAA,WACyB,MAAjBt9E,KAAKmP,WACAnP,KAAKmP,SAAS9F,UAAU0N,SAAS,eAClC/W,KAAKmxK,OAAQ,EACbnxK,KAAKyxK,eACLzxK,KAAKmP,SAAS6sC,gBAAgB,SAC9Bh8C,KAAKmP,SAAS9F,UAAUC,IAAI,gBAK9BmqK,0BAAA3yK,UAAAswK,cAAV,WACIpxK,KAAK0xK,QAAU,MAGT+B,0BAAA3yK,UAAAgU,WAAV,cAAAgE,GAAA9Y,IACIA,MAAKyxK,cAEL,IAAM54J,GAAWrW,EAAA+B,WAAWC,kBAAkBmtK,uBAE1C94J,GAAW,IACX7Y,KAAK0xK,QAAU58J,WAAW,WACtBgE,EAAKwkE,WACK,IAAXzkE,KAID46J,0BAAA3yK,UAAA2wK,aAAV,WACS7vK,EAAAoG,MAAMC,kBAAkBjI,KAAK0xK,WAC9Bn4J,aAAavZ,KAAK0xK,SAElB1xK,KAAK0xK,QAAU,OA3O3B+B,0BAAAp4J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,crL4jhDxB+oJ,4BqL3jhDuC95D,EAAAiB,qBAAlCv6G,GAAAozK,0BAAyBA,GrLmkhDhC,SAASnzK,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GsLzlhDjE5Z,EAAAzB,EAAgC,GAChC0b,EAAA1b,EAA+B,IAC/B2xK,EAAA3xK,EAAkC,KAClCqC,EAAArC,EAA2B,GAC3BuC,EAAAvC,EAA+B,IAC/Bg0K,EAAAh0K,EAA8C,KAG9Ci0K,EAAA,SAAAlxK,GAA+C3B,EAAA6yK,0BAAAlxK,EAG3C,SAAAkxK,6BACIlxK,EAAAzC,KAAAT,MAoFR,MAjFIo0K,2BAAAtzK,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEqC,UAA9Chb,EAAA+B,WAAWC,kBAAkBwqE,aAC7BhvE,KAAKq0K,kBACgD,WAA9C7xK,EAAA+B,WAAWC,kBAAkBwqE,aACpChvE,KAAKs0K,mBACgD,aAA9C9xK,EAAA+B,WAAWC,kBAAkBwqE,aACpChvE,KAAKu0K,qBAELv0K,KAAKq0K,kBAGY,MAAjBr0K,KAAKmP,UACLnP,KAAKmP,SAASmI,cAAc82B,YAAYpuC,KAAKmP,WAI7CilK,0BAAAtzK,UAAAuzK,gBAAR,WACIr0K,KAAKw0K,gBAAgB,wBACrBx0K,KAAKw0K,gBAAgB,2BAGjBJ,0BAAAtzK,UAAAwzK,iBAAR,WACIt0K,KAAKw0K,gBAAgB,uBACrBx0K,KAAKw0K,gBAAgB,0BAErBx0K,KAAKy0K,wBACL,IAAI9/G,GAAsBzrD,SAASC,eAAe,yBAClD,IAAc,MAAVwrD,GAEmD,MAA/CnyD,EAAA+B,WAAWC,kBAAkBkwK,gBAC7BlyK,EAAA+B,WAAWC,kBAAkBkwK,eAAe3oK,OAAS,EACvD,CACEvJ,EAAA+B,WAAWC,kBAAkBkwK,eAAer9I,SAC5C,KAAK,GAAIt3B,GAAY,EAAGA,EAAIyC,EAAA+B,WAAWC,kBAAkBkwK,eAAe3oK,OAAQhM,IAAK,CACjF,GAAIgkF,GAAwC,GAAIowF,GAAAQ,8BAC5Cp1G,EAAuCr2D,SAAS6iC,cAAc,MAClEg4C,GAAOjG,OAAS,WAChBiG,EAAO4uF,iBACPpzG,EAAKl2D,UAAUC,IAAI,eACf9G,EAAA+B,WAAWC,kBAAkBkwK,eAAe30K,QAC5Cw/D,EAAKgiC,UAAY,IACjBxd,EAAOve,cAAgB,MAEvBjG,EAAKgiC,UAAY/+F,EAAA+B,WAAWC,kBAAkBkwK,eAAe30K,GAAK,GAClEgkF,EAAOve,cAAgBhjE,EAAA+B,WAAWC,kBAAkBkwK,eAAe30K,GAAK,IAE5EgkF,EAAO50E,SAASssG,QAAc,KAAI,qBAAoB17G,EAAI,GAEnC,MAAnBgkF,EAAO50E,WACP40E,EAAO50E,SAAS9F,UAAUC,IAAI,gBAC9By6E,EAAO50E,SAASgC,YAAYouD,GAC5B78D,EAAAyF,eAAe2rF,sBAAsB,WAAY/P,GACnC,MAAVpvB,GACAA,EAAOxjD,YAAY4yE,EAAO50E,cAY1CilK,0BAAAtzK,UAAAyzK,mBAAR,WACIv0K,KAAKw0K,gBAAgB,uBACrBx0K,KAAKw0K,gBAAgB,yBAGjBJ,0BAAAtzK,UAAA0zK,gBAAR,SAAwBplG,GAEpB,IAAK,GADDxG,GAAsC1/D,SAASyxD,uBAAuByU,GACjErvE,EAAY,EAAGA,EAAI6oE,EAAS78D,OAAQhM,IAAK,CAC9C,GAAIqJ,GAAoCw/D,EAAS7oE,EAClC,OAAXqJ,GACAA,EAAQuN,WArFxBy9J,0BAAA/4J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,ctLwqhDxB0pJ,4BsLvqhDuCtC,EAAAG,kBAAlC5xK,GAAA+zK,0BAAyBA,GtL+qhDhC,SAAS9zK,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GuLnshDjE5Z,EAAAzB,EAAgC,GAChC0b,EAAA1b,EAA+B,IAC/B2xK,EAAA3xK,EAAkC,KAElC0gF,EAAA1gF,EAAyB,IACzByC,EAAAzC,EAA4B,IAG5Bw0K,EAAA,SAAAzxK,GAAmD3B,EAAAozK,8BAAAzxK,EAG/C,SAAAyxK,iCACIzxK,EAAAzC,KAAAT,MAHJA,KAAAwlE,cAAwB,IA2B5B,MAfImvG,+BAAA7zK,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAETA,EAAKU,aAAa,oBAClBle,KAAKwlE,cAAgBhoD,EAAKe,aAAa,oBAI/Co2J,8BAAA7zK,UAAAwrG,QAAA,WAC8B,MAAtBtsG,KAAKwlE,gBACL5iE,EAAA4F,YAAYi9D,cAAgBzlE,KAAKwlE,eAErCqb,EAAAl2D,SAASoS,KAAK,aACd75B,EAAApC,UAAMwrG,QAAO7rG,KAAAT,OA3BrB20K,8BAAAt5J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,cvLwthDxBiqJ,gCuLvthD2C7C,EAAAG,kBAAtC5xK,GAAAs0K,8BAA6BA,GvL+thDpC,SAASr0K,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GwLnvhDjE5Z,EAAAzB,EAA6C,GAC7C0b,EAAA1b,EAA+B,IAC/Bw5G,EAAAx5G,EAAqC,IACrCuC,EAAAvC,EAA+B,IAC/BqC,EAAArC,EAA2B,GAC3B2kE,EAAA3kE,EAA2B,IAC3BsC,EAAAtC,EAAyB,IACzByC,EAAAzC,EAA4B,IAC5B0gF,EAAA1gF,EAAyB,IAGzBy0K,EAAA,SAAA1xK,GAAwD3B,EAAAqzK,mCAAA1xK,EAcpD,SAAA0xK,sCACI1xK,EAAAzC,KAAAT,MAdIA,KAAA60K,yBACA70K,KAAA80K,4BACA90K,KAAA+0K,2BAOA/0K,KAAAymI,OAAiB,IACjBzmI,KAAAg1K,MAAgB,IAChBh1K,KAAAi1K,KAAe,IAmX3B,MA9WIL,oCAAA9zK,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAEbxd,KAAKk1K,eACLl1K,KAAKm1K,mBACLn1K,KAAKo1K,kBAELp1K,KAAKq1K,kBAAoBnsK,SAASC,eAAe,gCACjDnJ,KAAKs1K,iBAAmBpsK,SAASC,eAAe,+BAChDnJ,KAAKu1K,QAAUrsK,SAASC,eAAe,wBACvCnJ,KAAKu1K,QAAQt0F,QAAUjhF,KAAKw1K,YAAY3hK,KAAK7T,MAE7CA,KAAKu6D,SAGDq6G,mCAAA9zK,UAAAo0K,aAAR,WACI,GAAoE,MAAhExyK,EAAAyF,eAAegtF,sBAA4C,qBAAW,CACtE,GAAI/rF,GAAgC1G,EAAAyF,eAAegtF,sBAA4C,oBAC/F,IAAe,MAAX/rF,GAAuC,MAApBA,EAAQ+F,UAEwB,MAA/C3M,EAAA+B,WAAWC,kBAAkBkwK,gBAC7BlyK,EAAA+B,WAAWC,kBAAkBkwK,eAAe3oK,OAAS,EAErD,IAAK,GAAIhM,GAAY,EAAGA,EAAIyC,EAAA+B,WAAWC,kBAAkBkwK,eAAe3oK,OAAQhM,IAAK,CACjF,GAAI4yD,GAAuCzpD,SAAS6iC,cAAc,OAC9D0pI,EAA4CvsK,SAAS6iC,cAAc,OACvE4mB,GAAKtpD,UAAUC,IAAI,eACnBmsK,EAAUpsK,UAAUC,IAAI,gBACpB9G,EAAA+B,WAAWC,kBAAkBkwK,eAAe30K,QAC5C01K,EAAUl0E,UAAY,IACtB5uC,EAAKxmD,aAAa,MAAO,OAEzBspK,EAAUl0E,UAAY/+F,EAAA+B,WAAWC,kBAAkBkwK,eAAe30K,GAAK,GACvE4yD,EAAKxmD,aAAa,MAAO3J,EAAA+B,WAAWC,kBAAkBkwK,eAAe30K,GAAK,KAE9E4yD,EAAK8oD,QAAc,KAAI,iBAAgB17G,EAAI,GAC3C4yD,EAAKxhD,YAAYskK,GACjB9iH,EAAKsuB,QAAUjhF,KAAK01K,aAAa7hK,KAAK7T,MACtCoJ,EAAQ+F,SAASgC,YAAYwhD,GAC7B3yD,KAAK60K,sBAAsBntJ,KAAKirC,MAO5CiiH,mCAAA9zK,UAAAq0K,iBAAR,WACI,GAAuE,MAAnEzyK,EAAAyF,eAAegtF,sBAA+C,wBAAW,CACzE,GAAI/rF,GAAgC1G,EAAAyF,eAAegtF,sBAA+C,uBAClG,IAAe,MAAX/rF,GAAuC,MAApBA,EAAQ+F,UAE2B,MAAlD3M,EAAA+B,WAAWC,kBAAkBmhE,mBAC7BnjE,EAAA+B,WAAWC,kBAAkBmhE,kBAAkB55D,OAAS,EAExD,IAAK,GAAIhM,GAAY,EAAGA,EAAIyC,EAAA+B,WAAWC,kBAAkBmhE,kBAAkB55D,OAAQhM,IAAK,CACpF,GAAI4yD,GAAuCzpD,SAAS6iC,cAAc,OAC9D0pI,EAA4CvsK,SAAS6iC,cAAc,OACvE4mB,GAAKtpD,UAAUC,IAAI,eACnBmsK,EAAUpsK,UAAUC,IAAI,gBACpB9G,EAAA+B,WAAWC,kBAAkBmhE,kBAAkB5lE,QAC/C01K,EAAUl0E,UAAY,IACtB5uC,EAAKxmD,aAAa,MAAO,OAEzBspK,EAAUl0E,UAAY,IAAM/+F,EAAA+B,WAAWC,kBAAkBmhE,kBAAkB5lE,GAC3E4yD,EAAKxmD,aAAa,MAAO3J,EAAA+B,WAAWC,kBAAkBmhE,kBAAkB5lE,GAAK,KAEjF4yD,EAAK8oD,QAAc,KAAI,sBAAqB17G,EAAI,GAChD4yD,EAAKxhD,YAAYskK,GACjB9iH,EAAKsuB,QAAUjhF,KAAK21K,YAAY9hK,KAAK7T,MACrCoJ,EAAQ+F,SAASgC,YAAYwhD,GAC7B3yD,KAAK80K,yBAAyBptJ,KAAKirC,MAO/CiiH,mCAAA9zK,UAAAs0K,gBAAR,WACI,GAAsE,MAAlE1yK,EAAAyF,eAAegtF,sBAA8C,uBAAW,CACxE,GAAI/rF,GAAgC1G,EAAAyF,eAAegtF,sBAA8C,sBACjG,IAAe,MAAX/rF,GAAuC,MAApBA,EAAQ+F,UAEgC,MAAvD3M,EAAA+B,WAAWC,kBAAkBoxK,wBAC7BpzK,EAAA+B,WAAWC,kBAAkBoxK,uBAAuB7pK,OAAS,EAE7D,IAAK,GAAIhM,GAAY,EAAGA,EAAIyC,EAAA+B,WAAWC,kBAAkBoxK,uBAAuB7pK,OAAQhM,IAAK,CACzF,GAAI4yD,GAAuCzpD,SAAS6iC,cAAc,OAC9D0pI,EAA4CvsK,SAAS6iC,cAAc,OACvE4mB,GAAKtpD,UAAUC,IAAI,eACnBmsK,EAAUpsK,UAAUC,IAAI,gBACpB9G,EAAA+B,WAAWC,kBAAkBoxK,uBAAuB71K,QACpD01K,EAAUl0E,UAAY,IACtB5uC,EAAKxmD,aAAa,MAAO,OAEzBspK,EAAUl0E,UAAY,IAAM/+F,EAAA+B,WAAWC,kBAAkBoxK,uBAAuB71K,GAChF4yD,EAAKxmD,aAAa,MAAO3J,EAAA+B,WAAWC,kBAAkBoxK,uBAAuB71K,GAAK,KAEtF4yD,EAAK8oD,QAAc,KAAI,qBAAoB17G,EAAI,GAC/C4yD,EAAKxhD,YAAYskK,GACjB9iH,EAAKsuB,QAAUjhF,KAAK61K,WAAWhiK,KAAK7T,MACpCoJ,EAAQ+F,SAASgC,YAAYwhD,GAC7B3yD,KAAK+0K,wBAAwBrtJ,KAAKirC,MAOtDiiH,mCAAA9zK,UAAAy5D,MAAA,WACIv6D,KAAK81K,cACL91K,KAAK+1K,kBACL/1K,KAAKg2K,iBACLh2K,KAAKi2K,eACyB,MAA1Bj2K,KAAKq1K,oBACLr1K,KAAKq1K,kBAAkB9zE,UAAY,IAEV,MAAzBvhG,KAAKs1K,mBACLt1K,KAAKs1K,iBAAiB/zE,UAAY,IAElB,MAAhBvhG,KAAKu1K,SAAoBv1K,KAAKu1K,QAAQlsK,UAAU0N,SAAS,cACzD/W,KAAKu1K,QAAQlsK,UAAUC,IAAI,aAE/BtJ,KAAKymI,OAAS,IACdzmI,KAAKg1K,MAAQ,IACbh1K,KAAKi1K,KAAO,IAEZryK,EAAA4F,YAAYi9D,cAAgB,IAC5B7iE,EAAA4F,YAAYm9D,kBAAoB,IAChC/iE,EAAA4F,YAAYq9D,iBAAmB,KAG3B+uG,mCAAA9zK,UAAAg1K,YAAR,WACI,GAAkC,MAA9B91K,KAAK60K,uBAAiC70K,KAAK60K,sBAAsB9oK,OAAS,EAC1E,IAAK,GAAIhM,GAAY,EAAGA,EAAIC,KAAK60K,sBAAsB9oK,OAAQhM,IACvDC,KAAK60K,sBAAsB90K,GAAGsJ,UAAU0N,SAAS,YACjD/W,KAAK60K,sBAAsB90K,GAAGsJ,UAAUsN,OAAO,WAE9C3W,KAAK60K,sBAAsB90K,GAAGsJ,UAAU0N,SAAS,cAClD/W,KAAK60K,sBAAsB90K,GAAGsJ,UAAUC,IAAI,cAMpDsrK,mCAAA9zK,UAAAi1K,gBAAR,WACI,GAAqC,MAAjC/1K,KAAK80K,0BAAoC90K,KAAK80K,yBAAyB/oK,OAAS,EAChF,IAAK,GAAIhM,GAAY,EAAGA,EAAIC,KAAK80K,yBAAyB/oK,OAAQhM,IAC1DC,KAAK80K,yBAAyB/0K,GAAGsJ,UAAU0N,SAAS,YACpD/W,KAAK80K,yBAAyB/0K,GAAGsJ,UAAUsN,OAAO,WAEjD3W,KAAK80K,yBAAyB/0K,GAAGsJ,UAAU0N,SAAS,cACrD/W,KAAK80K,yBAAyB/0K,GAAGsJ,UAAUC,IAAI,cAMvDsrK,mCAAA9zK,UAAAk1K,eAAR,WACI,GAAoC,MAAhCh2K,KAAK+0K,yBAAmC/0K,KAAK+0K,wBAAwBhpK,OAAS,EAC9E,IAAK,GAAIhM,GAAY,EAAGA,EAAIC,KAAK+0K,wBAAwBhpK,OAAQhM,IACzDC,KAAK+0K,wBAAwBh1K,GAAGsJ,UAAU0N,SAAS,YACnD/W,KAAK+0K,wBAAwBh1K,GAAGsJ,UAAUsN,OAAO,WAEhD3W,KAAK+0K,wBAAwBh1K,GAAGsJ,UAAU0N,SAAS,cACpD/W,KAAK+0K,wBAAwBh1K,GAAGsJ,UAAUC,IAAI,cAMtDsrK,mCAAA9zK,UAAAm1K,aAAR,WACI,GAAkC,MAA9Bj2K,KAAK60K,uBAAiC70K,KAAK60K,sBAAsB9oK,OAAS,EAC1E,IAAK,GAAIhM,GAAY,EAAGA,EAAIC,KAAK60K,sBAAsB9oK,OAAQhM,IACvDC,KAAK60K,sBAAsB90K,GAAGsJ,UAAU0N,SAAS,cACjD/W,KAAK60K,sBAAsB90K,GAAGsJ,UAAUsN,OAAO,cAMvDi+J,mCAAA9zK,UAAAo1K,iBAAR,WACI,GAAqC,MAAjCl2K,KAAK80K,0BAAoC90K,KAAK80K,yBAAyB/oK,OAAS,EAChF,IAAK,GAAIhM,GAAY,EAAGA,EAAIC,KAAK80K,yBAAyB/oK,OAAQhM,IAC1DC,KAAK80K,yBAAyB/0K,GAAGsJ,UAAU0N,SAAS,cACpD/W,KAAK80K,yBAAyB/0K,GAAGsJ,UAAUsN,OAAO,cAM1Di+J,mCAAA9zK,UAAAq1K,gBAAR,SAAwBC,GAAA,SAAAA,OAAA,EACpB,IACIC,GADAC,GAA0B,CAG9B,IAAoC,MAAhCt2K,KAAK+0K,yBAAmC/0K,KAAK+0K,wBAAwBhpK,OAAS,EAC9E,IAAK,GAAIhM,GAAY,EAAGA,EAAIC,KAAK+0K,wBAAwBhpK,OAAQhM,IACzDC,KAAK+0K,wBAAwBh1K,GAAGsJ,UAAU0N,SAAS,aACnDu/J,GAAiB,GAGsC,KAAvDt2K,KAAK+0K,wBAAwBh1K,GAAGwe,aAAa,SAC7C83J,EAAUr2K,KAAK+0K,wBAAwBh1K,IAGvCC,KAAK+0K,wBAAwBh1K,GAAGsJ,UAAU0N,SAAS,cACnD/W,KAAK+0K,wBAAwBh1K,GAAGsJ,UAAUsN,OAAO,YAKzD2/J,KAAmBF,GACJ,MAAXC,IACKA,EAAQhtK,UAAU0N,SAAS,aAC5Bs/J,EAAQhtK,UAAUC,IAAI,WACO,MAAzBtJ,KAAKs1K,mBACLt1K,KAAKs1K,iBAAiB/zE,UAAY,OAM9C60E,GACe,MAAXC,GACIA,EAAQhtK,UAAU0N,SAAS,YAC3Bs/J,EAAQhtK,UAAUsN,OAAO,YAMjCi+J,mCAAA9zK,UAAA40K,aAAR,SAAqB71K,GACjB,GACS,MAALA,GACmB,MAAnBA,EAAE2xK,eACF3xK,EAAE2xK,cAActzJ,aAAa,SAC5Bre,EAAE2xK,cAAcnoK,UAAU0N,SAAS,aACtC,CACE8pE,EAAAl2D,SAASoS,KAAK,YACd,IAAI5vB,GAActN,EAAE2xK,cAAcjzJ,aAAa,MAC/Cve,MAAK81K,cACL91K,KAAKi2K,eACAp2K,EAAE2xK,cAAcnoK,UAAU0N,SAAS,YACpClX,EAAE2xK,cAAcnoK,UAAUC,IAAI,WAE9BzJ,EAAE2xK,cAAcnoK,UAAU0N,SAAS,cACnClX,EAAE2xK,cAAcnoK,UAAUsN,OAAO,aAErC3W,KAAKymI,OAASt5H,EACdnN,KAAKk2K,mBACyD,MAA1DhtK,SAASC,eAAe,iCACxBD,SAASC,eAAe,+BAA+ByxF,gBAAe,GAErB,WAA7Cp4F,EAAA+B,WAAW2B,eAAemO,iBAC1BnL,SAASC,eAAe,UAAU6N,UAAY,EAC9C9N,SAASC,eAAe,QAAQ6N,UAAY,MAMpD49J,mCAAA9zK,UAAA60K,YAAR,SAAoB91K,GAChB,GACS,MAALA,GACmB,MAAnBA,EAAE2xK,eACF3xK,EAAE2xK,cAActzJ,aAAa,SAC5Bre,EAAE2xK,cAAcnoK,UAAU0N,SAAS,aACtC,CACE8pE,EAAAl2D,SAASoS,KAAK,YACd,IAAI5vB,GAActN,EAAE2xK,cAAcjzJ,aAAa,MAC/C,IAA8B,MAA1Bve,KAAKq1K,kBACL,GAAW,KAAPloK,GAAgC,MAAlB23D,EAAAqD,WAAWK,IAAa,CACtC,GAAI+tG,GAA0B30K,EAAAyL,YAAY2sE,SAAS7sE,EAAK23D,EAAAqD,WAAWK,IACnExoE,MAAKq1K,kBAAkB9zE,UACnBg1E,EAAkB,IAAM3zK,EAAA4F,YAAY0rD,YAAYzxD,EAAAiG,SAASyrD,kBAE7Dn0D,MAAKq1K,kBAAkB9zE,UAAY,GAI3CvhG,MAAK+1K,kBACL/1K,KAAKk2K,mBACAr2K,EAAE2xK,cAAcnoK,UAAU0N,SAAS,YACpClX,EAAE2xK,cAAcnoK,UAAUC,IAAI,WAE9BzJ,EAAE2xK,cAAcnoK,UAAU0N,SAAS,cACnClX,EAAE2xK,cAAcnoK,UAAUsN,OAAO,aAEjB,MAAhB3W,KAAKu1K,SAAmBv1K,KAAKu1K,QAAQlsK,UAAU0N,SAAS,cACxD/W,KAAKu1K,QAAQlsK,UAAUsN,OAAO,aAElC3W,KAAKg1K,MAAQ7nK,EACbnN,KAAKm2K,kBACwD,MAAzDjtK,SAASC,eAAe,+BACxBD,SAASC,eAAe,8BAA8ByxF,gBAAe,GAGxB,WAA7Cp4F,EAAA+B,WAAW2B,eAAemO,iBAC1BnL,SAASC,eAAe,UAAU6N,UAAY,EAC9C9N,SAASC,eAAe,QAAQ6N,UAAY,KAKhD49J,mCAAA9zK,UAAA+0K,WAAR,SAAmBh2K,GACf,GACS,MAALA,GACmB,MAAnBA,EAAE2xK,eACF3xK,EAAE2xK,cAActzJ,aAAa,SAC5Bre,EAAE2xK,cAAcnoK,UAAU0N,SAAS,aACtC,CACE8pE,EAAAl2D,SAASoS,KAAK,YACd,IAAI5vB,GAActN,EAAE2xK,cAAcjzJ,aAAa,MAC/C,IAA6B,MAAzBve,KAAKs1K,iBACL,GAAW,KAAPnoK,GAAgC,MAAlB23D,EAAAqD,WAAWK,IAAa,CACtC,GAAI+tG,GAA0B30K,EAAAyL,YAAY2sE,SAAS7sE,EAAK23D,EAAAqD,WAAWK,IACnExoE,MAAKs1K,iBAAiB/zE,UAClBg1E,EAAkB,IAAM3zK,EAAA4F,YAAY0rD,YAAYzxD,EAAAiG,SAASyrD,kBAE7Dn0D,MAAKs1K,iBAAiB/zE,UAAY,GAG1CvhG,MAAKg2K,iBACLh2K,KAAKm2K,iBAAgB,GAChBt2K,EAAE2xK,cAAcnoK,UAAU0N,SAAS,YACpClX,EAAE2xK,cAAcnoK,UAAUC,IAAI,WAE9BzJ,EAAE2xK,cAAcnoK,UAAU0N,SAAS,cACnClX,EAAE2xK,cAAcnoK,UAAUsN,OAAO,aAErC3W,KAAKi1K,KAAO9nK,EAEqC,WAA7C3K,EAAA+B,WAAW2B,eAAemO,gBAC6B,MAAnDnL,SAASC,eAAe,0BACxBD,SAASC,eAAe,wBAAwByxF,gBAAe,GAC/D1xF,SAASC,eAAe,UAAU6N,UAAY,EAC9C9N,SAASC,eAAe,QAAQ6N,UAAY,KAMpD49J,mCAAA9zK,UAAA00K,YAAR,SAAoB31K,GACP,MAALA,GAAgC,MAAnBA,EAAE2xK,eAA0B3xK,EAAE2xK,cAAcnoK,UAAU0N,SAAS,eACxB,MAAhD7N,SAASC,eAAe,uBACxBD,SAASC,eAAe,qBAAqB6N,UAAY,GAE1C,MAAfhX,KAAKymI,SACL7jI,EAAA4F,YAAYi9D,cAAgBzlE,KAAKymI,QAEnB,MAAdzmI,KAAKg1K,OAAmC,MAAlBlwG,EAAAqD,WAAWK,MACf,KAAdxoE,KAAKg1K,MACLpyK,EAAA4F,YAAYm9D,kBAAoB3lE,KAAKg1K,MAErCpyK,EAAA4F,YAAYm9D,kBAAoB/jE,EAAAyL,YAAY2sE,SAASh6E,KAAKg1K,MAAOlwG,EAAAqD,WAAWK,MAGnE,MAAbxoE,KAAKi1K,MAAkC,MAAlBnwG,EAAAqD,WAAWK,MACf,KAAbxoE,KAAKi1K,KACLryK,EAAA4F,YAAYq9D,iBAAmB7lE,KAAKi1K,KAEpCryK,EAAA4F,YAAYq9D,iBAAmBjkE,EAAAyL,YAAY2sE,SAASh6E,KAAKi1K,KAAMnwG,EAAAqD,WAAWK,MAGlF9lE,EAAAyF,eAAeqvD,eAAe,cA7X1Co9G,mCAAAv5J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,cxLgliDxBkqJ,qCwL/kiDgDj7D,EAAAiB,qBAA3Cv6G,GAAAu0K,mCAAkCA,GxLuliDzC,SAASt0K,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GyL9miDjE5Z,EAAAzB,EAAgC,GAChC06G,EAAA16G,EAA4B,IAC5B0b,EAAA1b,EAA+B,IAW/Bq2K,EAAA,SAAAtzK,GAAuC3B,EAAAi1K,kBAAAtzK,EACnC,SAAAszK,qBAEItzK,EAAAzC,KAAAT,KAAM,IA+Bd,MAtBIw2K,mBAAA11K,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAQTA,EAAKU,aAAa,cAClBle,KAAKmP,SAAWjG,SAASC,eAAeqU,EAAKe,aAAa,aACrC,MAAjBve,KAAKmP,WAxBrBqnK,kBAAAn7J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,czL8niDxB8rJ,oByL7niD+B37D,EAAAnwF,YAA1BrqB,GAAAm2K,kBAAiBA,GzLqoiDxB,SAASl2K,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G0L9piDjEs2J,EAAA3xK,EAAkC,KAClCyB,EAAAzB,EAAgC,GAChC0b,EAAA1b,EAA+B,IAE/BuC,EAAAvC,EAA+B,IAG/Bs2K,EAAA,SAAAvzK,GAAyC3B,EAAAk1K,oBAAAvzK,EAGrC,SAAAuzK,uBACIvzK,EAAAzC,KAAAT,MAHIA,KAAA02K,SAA6B,KA+DzC,MAzDID,qBAAA31K,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GACbxd,KAAK22K,kBAGDF,oBAAA31K,UAAA61K,eAAR,WACI32K,KAAK02K,SAA6BxtK,SAAS6iC,cAAc,SACzD/rC,KAAK02K,SAASniJ,KAAO,WACrBv0B,KAAK02K,SAASrtK,UAAUC,IAAI,YAC5BtJ,KAAK02K,SAAS9kK,iBAAiB,QAAS5R,KAAK42K,WAAW/iK,KAAK7T,OAExC,MAAjBA,KAAKmP,UACLnP,KAAKmP,SAASgC,YAAYnR,KAAK02K,UAGnC12K,KAAKmP,SAAS9F,UAAUC,IAAI,mBAGhCmtK,oBAAA31K,UAAAwrG,QAAA,aAIAmqE,oBAAA31K,UAAA81K,WAAA,WAKI,GAAqB,MAAjB52K,KAAKmP,WAAqBnP,KAAKmP,SAAS9F,UAAU0N,SAASrU,EAAAyF,eAAes5E,iBACvD,MAAfzhF,KAAK89E,QACLp7E,EAAAyF,eAAeqvD,eAAex3D,KAAK89E,QAGlB,MAAjB99E,KAAKkyK,UACL,IAAK,GAAInyK,GAAY,EAAGA,EAAIC,KAAKkyK,SAASnmK,OAAQhM,IAC9C2C,EAAAyF,eAAewsF,iBAAiB30F,KAAKkyK,SAASnyK,KAM9D02K,oBAAA31K,UAAAm2F,QAAA,SAAQrqF,GACJ,GAAcif,SAAVjf,GAAiC,OAAVA,EAEvB,YADA5M,KAAK02K,SAASG,SAAW72K,KAAK02K,SAASG,QAG3C,IAAa,QAATjqK,EAAiB,CACjB,GAAI5M,KAAK02K,SAASG,QACd,MAEJ72K,MAAK02K,SAASG,SAAU,MACrB,CACH,IAAK72K,KAAK02K,SAASG,QACf,MAEJ72K,MAAK02K,SAASG,SAAU,IA9DpCJ,oBAAAp7J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,c1LutiDxB+rJ,sB0LttiDiC3E,EAAAG,kBAA5B5xK,GAAAo2K,oBAAmBA,G1L8tiD1B,SAASn2K,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G2LjviDjE5Z,EAAAzB,EAAgC,GAChCuC,EAAAvC,EAA+B,IAC/B0b,EAAA1b,EAA+B,IAC/Bw5G,EAAAx5G,EAAqC,IACrCqC,EAAArC,EAA2B,GAC3ByC,EAAAzC,EAA4B,IAQ5B22K,EAAA,SAAA5zK,GAAgD3B,EAAAu1K,2BAAA5zK,EAI5C,SAAA4zK,8BACI5zK,EAAAzC,KAAAT,MAkDR,MAzCI82K,4BAAAh2K,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,IAGjBs5J,2BAAAh2K,UAAAy2F,YAAA,SAAY3qF,GACgB,MAApB5M,KAAK+2K,cACL/2K,KAAK+2K,YAAc7tK,SAASC,eAAe,eAEpB,MAAvBnJ,KAAKg3K,iBACLh3K,KAAKg3K,eAAiB9tK,SAASC,eAAe,kBAG7B,MAAjBnJ,KAAKmP,WACDvC,GAAShK,EAAA4F,YAAYiH,UACrBzP,KAAKmP,SAAS9F,UAAUsN,OAAOjU,EAAAyF,eAAes5E,eAC1Cj/E,EAAA+B,WAAW2B,eAAeiuE,QACF,MAApBn0E,KAAK+2K,cACL/2K,KAAK+2K,YAAYrlK,MAAMC,QAAU,SAEV,MAAvB3R,KAAKg3K,iBACLh3K,KAAKg3K,eAAetlK,MAAMC,QAAU,UAGhB,MAApB3R,KAAK+2K,cACL/2K,KAAK+2K,YAAYrlK,MAAMC,QAAU,QAEV,MAAvB3R,KAAKg3K,iBACLh3K,KAAKg3K,eAAetlK,MAAMC,QAAU,WAIvC3R,KAAKmP,SAAS9F,UAAU0N,SAASrU,EAAAyF,eAAes5E,gBACjDzhF,KAAKmP,SAAS9F,UAAUC,IAAI5G,EAAAyF,eAAes5E,iBA/C/Dq1F,2BAAAz7J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,c3L8xiDxBosJ,6B2L7xiDwCn9D,EAAAiB,qBAAnCv6G,GAAAy2K,2BAA0BA,G3LqyiDjC,SAASx2K,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G4L9ziDjE5Z,EAAAzB,EAAgC,GAChC06G,EAAA16G,EAA4B,IAC5B0b,EAAA1b,EAA+B,IAQ/B82K,EAAA,SAAA/zK,GAA2C3B,EAAA01K,sBAAA/zK,EACvC,SAAA+zK,yBACI/zK,EAAAzC,KAAAT,MA2BR,MAlBIi3K,uBAAAn2K,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,IASjBy5J,sBAAAn2K,UAAAm2F,QAAA,SAAQrqF,GACJ,GAAa,MAATA,EAAe,CACf,GAAIuqF,GAA6BvqF,EAAMgW,MAAM,IACxB,OAAjB5iB,KAAKmP,UAA2C,IAAvBgoF,EAAYprF,SACrC/L,KAAKmP,SAASuC,MAAMhL,MAASgP,SAASyhF,EAAY,IAAMzhF,SAASyhF,EAAY,IAAO,IAAM,OA1B1G8/E,sBAAA57J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,c5L40iDxBusJ,wB4L30iDmCp8D,EAAAnwF,YAA9BrqB,GAAA42K,sBAAqBA,G5Lm1iD5B,SAAS32K,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G6Lz2iDjE5Z,EAAAzB,EAA6C,GAC7C0b,EAAA1b,EAA+B,IAC/B06G,EAAA16G,EAA4B,IAK5B+2K,EAAA,SAAAh0K,GAAsC3B,EAAA21K,iBAAAh0K,EAIlC,SAAAg0K,oBACIh0K,EAAAzC,KAAAT,MA8BR,MA3BIk3K,kBAAAp2K,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAETA,EAAKU,aAAa,SAClBle,YAAWwd,EAAKe,aAAa,QAGjCve,KAAKm3K,cAEgB,MAAjBn3K,KAAKmP,UACLnP,KAAKmP,SAASmI,cAAc82B,YAAYpuC,KAAKmP,WAI7C+nK,iBAAAp2K,UAAAq2K,YAAR,WACI,GAAIxiH,GAAS30D,KAAKmP,SAASmI,cACvB8/J,EAA+CluK,SAAS6iC,cAAc,OACtE3P,EAA4ClzB,SAAS6iC,cAAc,QACvEqrI,GAAa/tK,UAAUC,IAAI,gBAC3B8yB,EAAMi7I,QAAUr3K,YAChBo8B,EAAM7yB,UAAYvJ,KAAKmP,SAAS5F,UAChC6tK,EAAajmK,YAAYirB,GAEJ,MAAjBp8B,KAAKmP,UACLwlD,EAAO6vB,WAAWrzE,YAAYimK,IAjC1CF,iBAAA77J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,c7Lq4iDxBwsJ,mB6Lp4iD8Br8D,EAAAnwF,YAAzBrqB,GAAA62K,iBAAgBA,G7L44iDvB,SAAS52K,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G8L/5iDjE5Z,EAAAzB,EAAgC,GAChC06G,EAAA16G,EAA4B,IAC5B0b,EAAA1b,EAA+B,IAW/Bm3K,EAAA,SAAAp0K,GAA8B3B,EAAA+1K,SAAAp0K,EAG1B,SAAAo0K,YACIp0K,EAAAzC,KAAAT,KAAM,IAwCd,MA/BIs3K,UAAAx2K,UAAAa,OAAA,SAAO6b,GACHxd,KAAKmP,SAAWjG,SAAS6iC,cAAcvuB,EAAKI,UAEpB,MAApBJ,EAAKo9C,cACL56D,KAAKmP,SAASyrD,YAAcp9C,EAAKo9C,aAGjCp9C,EAAKU,aAAa,YAClBle,KAAK8sC,QAAUtvB,EAAKe,aAAa,WASjCf,EAAKU,aAAa,UAClBle,KAAKmP,SAASssG,QAAc,KAAIj+F,EAAKe,aAAa,SAGtDrb,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,IAGjB85J,SAAAx2K,UAAAm2F,QAAA,SAAQrqF,GACJ1J,EAAApC,UAAMm2F,QAAOx2F,KAAAT,KAAC4M,GAEM,MAAhB5M,KAAK8sC,SAA8C,MAA3B9sC,KAAKmP,SAAS5F,WAAgD,IAA3BvJ,KAAKmP,SAAS5F,YACzEvJ,KAAKmP,SAAS5F,UAAY,IAAMvJ,KAAKmP,SAAS5F,YA1C1D+tK,SAAAj8J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe0C,c9Lk7iDxB4sJ,W8Lj7iDsBz8D,EAAAnwF,YAAjBrqB,GAAAi3K,SAAQA,G9Ly7iDf,SAASh3K,EAAQD,EAASF,GAE/B,YACA,IAAIoB,GAAavB,MAAQA,KAAKuB,WAAc,SAAUC,EAAGJ,GACrD,IAAK,GAAIR,KAAKQ,GAAOA,EAAEL,eAAeH,KAAIY,EAAEZ,GAAKQ,EAAER,GACnD,SAASa,MAAOzB,KAAK0B,YAAcF,EACnCA,EAAEV,UAAkB,OAANM,EAAaP,OAAOc,OAAOP,IAAMK,GAAGX,UAAYM,EAAEN,UAAW,GAAIW,MAE/E4Z,EAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,G+Ll9iDjE5Z,EAAAzB,EAAgC,GAChCo3K,EAAAp3K,EAA0B,KAC1B0b,EAAA1b,EAA+B,IAa/Bq3K,EAAA,SAAAt0K,GAAwC3B,EAAAi2K,mBAAAt0K,EAGpC,SAAAs0K,sBACIt0K,EAAAzC,KAAAT,MAeR,MANIw3K,oBAAA12K,UAAAa,OAAA,SAAO6b,GACHta,EAAApC,UAAMa,OAAMlB,KAAAT,KAACwd,GAGbxd,KAAKwd,KAAOA,GAlBpBg6J,mBAAAn8J,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe8C,Y/Lo9iDxB0sJ,qB+Ln9iDgCD,EAAAzsJ,UAA3BzqB,GAAAm3K,mBAAkBA,G/L29iDzB,SAASl3K,EAAQD,EAASF,GAE/B,YACA,IAAIkb,GAAcrb,MAAQA,KAAKqb,YAAe,SAAUC,EAAY1Q,EAAQxF,EAAKmW,GAC7E,GAA2H/Z,GAAvHb,EAAIwC,UAAU4I,OAAQyP,EAAI7a,EAAI,EAAIiK,EAAkB,OAAT2Q,EAAgBA,EAAO1a,OAAO4a,yBAAyB7Q,EAAQxF,GAAOmW,CACrH,IAAuB,gBAAZG,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASL,EAAY1Q,EAAQxF,EAAKmW,OACpH,KAAK,GAAIxb,GAAIub,EAAWvP,OAAS,EAAGhM,GAAK,EAAGA,KAASyB,EAAI8Z,EAAWvb,MAAIyb,GAAK7a,EAAI,EAAIa,EAAEga,GAAK7a,EAAI,EAAIa,EAAEoJ,EAAQxF,EAAKoW,GAAKha,EAAEoJ,EAAQxF,KAASoW,EAChJ,OAAO7a,GAAI,GAAK6a,GAAK3a,OAAOkD,eAAe6G,EAAQxF,EAAKoW,GAAIA,GgMj/iDjE5Z,EAAAzB,EAAwC,GACxC0b,EAAA1b,EAA+B,IAO/B2qB,EAAA,mBAAAA,cAqBA,MAdIA,WAAAhqB,UAAAa,OAAA,SAAO6b,KAQGsN,UAAAhqB,UAAA0R,IAAV,SAAcC,KAhBlBqY,UAAAzP,GAACzZ,EAAAmmB,gBAAgBlM,EAAAmM,eAAe8C,YhM0/iDxBA,agMz/iDKzqB,GAAAyqB,UAASA,GhMigjDhB,SAASxqB,EAAQD,GiMvgjDvB,GAAIo3K,KAAQtkK,UAAUC,UAAY,4BAA4BF,KAAKC,UAAUC,SACzEqkK,KACAztK,KAAK8G,SAAS4mK,UAAY1tK,KAAK0tK,UAAU58C,MAE7C9wH,KAAK8G,SAASC,QAAU/G,KAAKgH,SAASC","file":"C:\\Agent4\\_work\\117\\s\\wwwroot\\scripts\\neo-richpirates.min.js","sourcesContent":["/*! Synot Games (c) 2025, Rich Pirates Game, version: 1.0.0 */\n(function(e, a) { for(var i in a) e[i] = a[i]; }(this, /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ((function(modules) {\n\t// Check all modules for deduplicated modules\n\tfor(var i in modules) {\n\t\tif(Object.prototype.hasOwnProperty.call(modules, i)) {\n\t\t\tswitch(typeof modules[i]) {\n\t\t\tcase \"function\": break;\n\t\t\tcase \"object\":\n\t\t\t\t// Module can be created from a template\n\t\t\t\tmodules[i] = (function(_m) {\n\t\t\t\t\tvar args = _m.slice(1), fn = modules[_m[0]];\n\t\t\t\t\treturn function (a,b,c) {\n\t\t\t\t\t\tfn.apply(this, [a,b,c].concat(args));\n\t\t\t\t\t};\n\t\t\t\t}(modules[i]));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Module is a copy of another module\n\t\t\t\tmodules[i] = modules[modules[i]];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn modules;\n}([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(1);\n\t__webpack_require__(9);\n\t__webpack_require__(21);\n\t__webpack_require__(10);\n\t__webpack_require__(74);\n\t__webpack_require__(46);\n\t__webpack_require__(80);\n\t__webpack_require__(81);\n\t__webpack_require__(82);\n\t__webpack_require__(83);\n\t__webpack_require__(84);\n\t__webpack_require__(36);\n\t__webpack_require__(23);\n\t__webpack_require__(28);\n\t__webpack_require__(27);\n\t__webpack_require__(41);\n\t__webpack_require__(34);\n\t__webpack_require__(35);\n\t__webpack_require__(37);\n\t__webpack_require__(42);\n\t__webpack_require__(54);\n\t__webpack_require__(49);\n\t__webpack_require__(43);\n\t__webpack_require__(24);\n\t__webpack_require__(59);\n\t__webpack_require__(26);\n\t__webpack_require__(51);\n\t__webpack_require__(58);\n\t__webpack_require__(53);\n\t__webpack_require__(85);\n\t__webpack_require__(71);\n\t__webpack_require__(91);\n\t__webpack_require__(120);\n\t__webpack_require__(124);\n\t__webpack_require__(125);\n\t__webpack_require__(130);\n\t__webpack_require__(134);\n\t__webpack_require__(135);\n\t__webpack_require__(132);\n\t__webpack_require__(131);\n\t__webpack_require__(133);\n\t__webpack_require__(136);\n\t__webpack_require__(137);\n\t__webpack_require__(138);\n\t__webpack_require__(139);\n\t__webpack_require__(76);\n\t__webpack_require__(67);\n\t__webpack_require__(68);\n\t__webpack_require__(13);\n\t__webpack_require__(52);\n\t__webpack_require__(60);\n\t__webpack_require__(15);\n\t__webpack_require__(14);\n\t__webpack_require__(100);\n\t__webpack_require__(11);\n\t__webpack_require__(140);\n\t__webpack_require__(90);\n\t__webpack_require__(103);\n\t__webpack_require__(141);\n\t__webpack_require__(102);\n\t__webpack_require__(142);\n\t__webpack_require__(143);\n\t__webpack_require__(12);\n\t__webpack_require__(97);\n\t__webpack_require__(109);\n\t__webpack_require__(144);\n\t__webpack_require__(146);\n\t__webpack_require__(147);\n\t__webpack_require__(148);\n\t__webpack_require__(149);\n\t__webpack_require__(104);\n\t__webpack_require__(150);\n\t__webpack_require__(151);\n\t__webpack_require__(99);\n\t__webpack_require__(98);\n\t__webpack_require__(152);\n\t__webpack_require__(110);\n\t__webpack_require__(111);\n\t__webpack_require__(101);\n\t__webpack_require__(75);\n\t__webpack_require__(66);\n\t__webpack_require__(69);\n\t__webpack_require__(70);\n\t__webpack_require__(63);\n\t__webpack_require__(39);\n\t__webpack_require__(18);\n\t__webpack_require__(65);\n\t__webpack_require__(153);\n\t__webpack_require__(64);\n\t__webpack_require__(38);\n\t__webpack_require__(112);\n\t__webpack_require__(6);\n\t__webpack_require__(154);\n\t__webpack_require__(155);\n\t__webpack_require__(156);\n\t__webpack_require__(157);\n\t__webpack_require__(118);\n\t__webpack_require__(50);\n\t__webpack_require__(160);\n\t__webpack_require__(162);\n\t__webpack_require__(166);\n\t__webpack_require__(167);\n\t__webpack_require__(165);\n\t__webpack_require__(164);\n\t__webpack_require__(163);\n\t__webpack_require__(161);\n\t__webpack_require__(168);\n\t__webpack_require__(169);\n\t__webpack_require__(170);\n\t__webpack_require__(158);\n\t__webpack_require__(171);\n\t__webpack_require__(117);\n\t__webpack_require__(172);\n\t__webpack_require__(159);\n\t__webpack_require__(119);\n\t__webpack_require__(116);\n\t__webpack_require__(173);\n\t__webpack_require__(174);\n\t__webpack_require__(129);\n\t__webpack_require__(92);\n\t__webpack_require__(45);\n\t__webpack_require__(93);\n\t__webpack_require__(87);\n\t__webpack_require__(121);\n\t__webpack_require__(123);\n\t__webpack_require__(122);\n\t__webpack_require__(86);\n\t__webpack_require__(88);\n\t__webpack_require__(89);\n\t__webpack_require__(113);\n\t__webpack_require__(96);\n\t__webpack_require__(94);\n\t__webpack_require__(95);\n\t__webpack_require__(105);\n\t__webpack_require__(126);\n\t__webpack_require__(127);\n\t__webpack_require__(128);\n\t__webpack_require__(175);\n\t__webpack_require__(114);\n\t__webpack_require__(115);\n\t__webpack_require__(107);\n\t__webpack_require__(106);\n\t__webpack_require__(108);\n\t__webpack_require__(176);\n\t__webpack_require__(177);\n\t__webpack_require__(178);\n\t__webpack_require__(179);\n\t__webpack_require__(181);\n\t__webpack_require__(182);\n\t__webpack_require__(183);\n\t__webpack_require__(185);\n\t__webpack_require__(184);\n\t__webpack_require__(180);\n\t__webpack_require__(186);\n\t__webpack_require__(187);\n\t__webpack_require__(72);\n\t__webpack_require__(188);\n\t__webpack_require__(189);\n\t__webpack_require__(73);\n\t__webpack_require__(190);\n\t__webpack_require__(191);\n\t__webpack_require__(47);\n\t__webpack_require__(192);\n\t__webpack_require__(193);\n\t__webpack_require__(48);\n\t__webpack_require__(33);\n\t__webpack_require__(31);\n\t__webpack_require__(29);\n\t__webpack_require__(30);\n\t__webpack_require__(44);\n\t__webpack_require__(32);\n\t__webpack_require__(55);\n\t__webpack_require__(79);\n\t__webpack_require__(194);\n\t__webpack_require__(61);\n\t__webpack_require__(19);\n\t__webpack_require__(20);\n\t__webpack_require__(62);\n\t__webpack_require__(8);\n\t__webpack_require__(22);\n\t__webpack_require__(25);\n\t__webpack_require__(40);\n\t__webpack_require__(7);\n\t__webpack_require__(145);\n\t__webpack_require__(56);\n\tmodule.exports = __webpack_require__(57);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tneo_common_1.libraryInitialize();\r\n\tvar neo_common_2 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar Strings_1 = __webpack_require__(4);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar PreloaderProvider_1 = __webpack_require__(63);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar ClientHostConsumer_1 = __webpack_require__(76);\r\n\tvar GameDefinition_1 = __webpack_require__(77);\r\n\tvar GameConfiguration_1 = __webpack_require__(78);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar PlatformsManager_1 = __webpack_require__(79);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar RetentionPanel_1 = __webpack_require__(40);\r\n\tif (false) {\r\n\t    require(\"./Utils/PerfDebug/PerfDebug\");\r\n\t    require(\"./Utils/PerfDebug/PerfDebugWindow\");\r\n\t}\r\n\tvar gameApp;\r\n\tvar GameApp = (function (_super) {\r\n\t    __extends(GameApp, _super);\r\n\t    function GameApp() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    GameApp.main = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Application\", \"start main\");\r\n\t        }\r\n\t        var urlInfo = neo_common_2.UriHelper.parseUrl(window.location.href, true, true);\r\n\t        if (urlInfo[\"query\"][\"lang\"] != null) {\r\n\t            GameApp.language = urlInfo[\"query\"][\"lang\"];\r\n\t        }\r\n\t        RetentionPanel_1.RetentionPanel.initialize();\r\n\t        gameApp = new GameApp();\r\n\t        gameApp.load();\r\n\t    };\r\n\t    Object.defineProperty(GameApp, \"gameClient\", {\r\n\t        get: function () {\r\n\t            return gameApp._gameClient;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    GameApp.exit = function () {\r\n\t        neo_games_1.Platforms.Platforms.gameClosing();\r\n\t        if (AppContext_1.AppContext.gameConfiguration.ExitUrl != \"\") {\r\n\t            neo_games_1.Platforms.Platforms.userAction(\"exit\", { url: AppContext_1.AppContext.gameConfiguration.ExitUrl });\r\n\t        }\r\n\t        return gameApp.exit();\r\n\t    };\r\n\t    GameApp.history = function () {\r\n\t        return gameApp.history();\r\n\t    };\r\n\t    GameApp.continue = function () {\r\n\t        return gameApp.continue();\r\n\t    };\r\n\t    GameApp.closeRealityCheck = function () {\r\n\t        return gameApp.closeRealityCheck();\r\n\t    };\r\n\t    GameApp.prototype.createGameClient = function (options) {\r\n\t        var gameClient = new neo_games_1.Communication.Game.GameClient(GameApp.key, options);\r\n\t        FreeRoundBonus_1.FreeRoundBonus.initialize(gameClient);\r\n\t        return gameClient;\r\n\t    };\r\n\t    GameApp.prototype.pauseAnimations = function () {\r\n\t        StageController_1.StageController.pauseAnimations();\r\n\t    };\r\n\t    GameApp.prototype.resumeAnimations = function () {\r\n\t        StageController_1.StageController.resumeAnimations();\r\n\t    };\r\n\t    GameApp.prototype.createPreloaderProvider = function () {\r\n\t        return new PreloaderProvider_1.PreloaderProvider();\r\n\t    };\r\n\t    GameApp.prototype.createGameDefinition = function (definition) {\r\n\t        return new GameDefinition_1.GameDefinition(definition);\r\n\t    };\r\n\t    GameApp.prototype.createGameConfiguration = function (configuration) {\r\n\t        return new GameConfiguration_1.GameConfiguration(configuration);\r\n\t    };\r\n\t    GameApp.prototype.createAppContext = function () {\r\n\t        return new AppContext_1.AppContext(this.gameConfiguration, this.gameDefinition);\r\n\t    };\r\n\t    GameApp.prototype.createClientHostConsumer = function () {\r\n\t        return new ClientHostConsumer_1.GameClientHostConsumer(this);\r\n\t    };\r\n\t    GameApp.prototype.requireStrings = function () {\r\n\t        __webpack_require__(4);\r\n\t    };\r\n\t    GameApp.prototype.createStage = function (quality, size) {\r\n\t        var color = 0x000000;\r\n\t        if (window[\"QUALITY\"] === \"DoubleFHD\") {\r\n\t            StageController_1.StageController.createStage(1920, 1080, color, \"canvas\");\r\n\t        }\r\n\t        else {\r\n\t            StageController_1.StageController.createStage(size.width, size.height, color, \"canvas\");\r\n\t        }\r\n\t    };\r\n\t    GameApp.prototype.initClientHost = function () {\r\n\t        PlatformsManager_1.PlatformsManager.create();\r\n\t        return Promise.resolve();\r\n\t    };\r\n\t    GameApp.prototype.parseLoadResult = function (loadResult) {\r\n\t        var result = null;\r\n\t        if (loadResult != null) {\r\n\t            if (loadResult.status == neo_games_1.GameEngine.Types.AppLoadStatus.Failure) {\r\n\t                if (loadResult.error != null) {\r\n\t                    result = {\r\n\t                        message: loadResult.error.message,\r\n\t                        stack: loadResult.error.stack,\r\n\t                    };\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    GameApp.prototype.finalizeLoad = function () {\r\n\t        if (this.loadingSucceed) {\r\n\t            if (AppContext_1.AppContext != null && AppContext_1.AppContext.current != null) {\r\n\t                var volume = AppContext_1.AppContext.current.getVolume();\r\n\t                if (!neo_common_1.Utils.isNullOrUndefined(volume)) {\r\n\t                    if (!neo_common_1.Utils.isNullOrUndefined(volume.CurrentStepNo)) {\r\n\t                        if (false) {\r\n\t                            neo_common_1.Logger.debugGroup(this.loggerGroup, \"Updating sound volume by step \" + volume.CurrentStepNo + \".\");\r\n\t                        }\r\n\t                        HtmlController_1.HtmlController.setSound(volume.CurrentStepNo);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            neo_common_1.Logger.debugGroup(this.loggerGroup, \"client host does not return valid value for volume 'CurrentStepNo'!\");\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        neo_common_1.Logger.debugGroup(this.loggerGroup, \"client host does not returns volume data, sound volume was not updated.\");\r\n\t                    }\r\n\t                }\r\n\t                Scaling_1.Scaling.resizeRoot();\r\n\t            }\r\n\t            var versionBuild = \"\";\r\n\t            if (false) {\r\n\t                var versionBuildValues = neo_common_1.Preloader.getVersionBuild().split(\"_\");\r\n\t                versionBuild = neo_common_1.Utils.valueOrDefault(versionBuildValues && versionBuildValues.length > 0\r\n\t                    ? versionBuildValues[versionBuildValues.length - 1]\r\n\t                    : \"\", \"\");\r\n\t            }\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBuildVersion, versionBuild);\r\n\t            DataManager_1.DataManager.configureGameData();\r\n\t            if (neo_games_1.Platforms.Platforms.canPlay) {\r\n\t                GameManager_1.GameManager.startGame(this._gameClient, this);\r\n\t                neo_games_1.Platforms.Platforms.gameReady();\r\n\t            }\r\n\t            else {\r\n\t                var loadingScreen = document.getElementById(\"loading\");\r\n\t                var element = document.getElementById(\"progressNumber\");\r\n\t                if (loadingScreen != null) {\r\n\t                    loadingScreen.classList.add(\"_error\");\r\n\t                }\r\n\t                if (element != null) {\r\n\t                    element.innerHTML = Strings_1.Strings.loaded\r\n\t                        ? Languages_1.Languages.getRid(\"ERROR_404\")\r\n\t                        : \"Internal error. Please contact support.\";\r\n\t                    GameApp.gameClient.sendPlayerLogError(\"ERROR - Loading game\", this.parseLoadResult(this._loadResult));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            neo_games_1.Platforms.Platforms.gameFailed();\r\n\t            window.onblur = null;\r\n\t            window.onfocus = null;\r\n\t            PIXI.sound.muteAll();\r\n\t            var loadingScreen = document.getElementById(\"loading\");\r\n\t            var element = document.getElementById(\"progressNumber\");\r\n\t            if (loadingScreen != null) {\r\n\t                loadingScreen.classList.add(\"_error\");\r\n\t            }\r\n\t            if (element != null) {\r\n\t                element.innerHTML = Strings_1.Strings.loaded\r\n\t                    ? Languages_1.Languages.getRid(\"ERROR_404\")\r\n\t                    : \"Internal error. Please contact support.\";\r\n\t                GameApp.gameClient.sendPlayerLogError(\"ERROR - Loading game\", this.parseLoadResult(this._loadResult));\r\n\t            }\r\n\t            if (false) {\r\n\t                var err = \"\";\r\n\t                if (!neo_common_1.PreloaderInfo.instance.loadSucceed) {\r\n\t                    err += \" Preloader does not load successfully!\";\r\n\t                }\r\n\t                neo_common_1.Logger.errorGroup(this.loggerGroup, err);\r\n\t            }\r\n\t        }\r\n\t        if (false) {\r\n\t            PerfDebug.setup(StageController_1.StageController.Stage);\r\n\t        }\r\n\t    };\r\n\t    GameApp.openGameRoundHistory = function (isGUI) {\r\n\t        if (isGUI === void 0) { isGUI = false; }\r\n\t        if (isGUI) {\r\n\t            if (!neo_common_2.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.GUIHistoryUrl) &&\r\n\t                AppContext_1.AppContext.gameConfiguration.GUIHistoryUrl !== \"\") {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.GUIHistoryUrl.toLowerCase() === \"userci_historyurl\" &&\r\n\t                    !neo_common_2.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n\t                    neo_games_1.Platforms.Platforms.gotoHistory({ target: AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl });\r\n\t                    if (neo_games_1.Platforms.Platforms.handleOpenHistoryPage) {\r\n\t                        return;\r\n\t                    }\r\n\t                    window.open(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl, \"_blank\");\r\n\t                }\r\n\t                else if (AppContext_1.AppContext.gameConfiguration.GUIHistoryUrl.toLowerCase() === \"userci_historyurl\" &&\r\n\t                    neo_common_2.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n\t                    GameApp.openGameRoundHistoryHome();\r\n\t                }\r\n\t                else {\r\n\t                    neo_games_1.Platforms.Platforms.gotoHistory({ target: AppContext_1.AppContext.gameConfiguration.GUIHistoryUrl });\r\n\t                    if (neo_games_1.Platforms.Platforms.handleOpenHistoryPage) {\r\n\t                        return;\r\n\t                    }\r\n\t                    window.open(AppContext_1.AppContext.gameConfiguration.GUIHistoryUrl, \"_blank\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                GameApp.openGameRoundHistoryHome();\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            GameApp.openGameRoundHistoryHome();\r\n\t        }\r\n\t    };\r\n\t    GameApp.openGameRoundHistoryHome = function () {\r\n\t        var gameKey = neo_common_2.UriHelper.getGameKey();\r\n\t        var urlInfo = neo_common_2.UriHelper.parseUrl(window.location.href, true, true);\r\n\t        var timeZoneOffset = new Date().getTimezoneOffset();\r\n\t        if (gameKey != null && urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\r\n\t            var serverUrl = urlInfo[\"query\"][\"serverUrl\"];\r\n\t            var token = urlInfo[\"hash\"].substring(1);\r\n\t            var lang = urlInfo[\"query\"][\"lang\"] ? urlInfo[\"query\"][\"lang\"] : GameApp.language;\r\n\t            var historyUrl = serverUrl + \"GameRounds/\" + GameApp.key + \"?culture=\" + lang + \"&tzo=\" + timeZoneOffset + \"&\" + token;\r\n\t            neo_games_1.Platforms.Platforms.gotoHistory({ target: historyUrl });\r\n\t            if (neo_games_1.Platforms.Platforms.handleOpenHistoryPage) {\r\n\t                return;\r\n\t            }\r\n\t            window.open(historyUrl, \"_blank\");\r\n\t        }\r\n\t    };\r\n\t    GameApp.openGameRoundHistoryFromUrl = function () {\r\n\t        if (!neo_common_2.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n\t            neo_games_1.Platforms.Platforms.gotoHistory({ target: AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl });\r\n\t            if (neo_games_1.Platforms.Platforms.handleOpenHistoryPage) {\r\n\t                return;\r\n\t            }\r\n\t            window.open(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl, \"_blank\");\r\n\t        }\r\n\t        else if (!neo_common_2.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.HistoryUrl)) {\r\n\t            neo_games_1.Platforms.Platforms.gotoHistory({ target: AppContext_1.AppContext.gameConfiguration.HistoryUrl });\r\n\t            if (neo_games_1.Platforms.Platforms.handleOpenHistoryPage) {\r\n\t                return;\r\n\t            }\r\n\t            window.open(AppContext_1.AppContext.gameConfiguration.HistoryUrl, \"_blank\");\r\n\t        }\r\n\t    };\r\n\t    GameApp.prototype.beforeExit = function () {\r\n\t        return this._gameClient.leaveGame();\r\n\t    };\r\n\t    GameApp.prototype.handleStringsLoadCompleted = function (lang) {\r\n\t        if (HtmlController_1.HtmlController.RidElements != null && HtmlController_1.HtmlController.RidElements.length > 0) {\r\n\t            for (var i = 0; i < HtmlController_1.HtmlController.RidElements.length; i++) {\r\n\t                HtmlController_1.HtmlController.RidElements[i].updateText();\r\n\t            }\r\n\t        }\r\n\t        var languageElements = document.querySelectorAll(\"[language]\");\r\n\t        for (var i = 0; i < languageElements.length; i++) {\r\n\t            languageElements[i].setAttribute(\"language\", lang);\r\n\t        }\r\n\t    };\r\n\t    GameApp.language = \"en-US\";\r\n\t    GameApp.key = \"RichPirates\";\r\n\t    return GameApp;\r\n\t}(neo_games_1.GameEngine.GameAppBase));\r\n\texports.GameApp = GameApp;\r\n\tGameApp.main();\r\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t(function() { module.exports = this[\"NeoCommon\"]; }());\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t(function() { module.exports = this[\"NeoGames\"]; }());\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tfunction checkInitialized() {\r\n\t    neo_common_1.StringsFactory.checkInitialized();\r\n\t}\r\n\tvar Strings = (function () {\r\n\t    function Strings(json) {\r\n\t        neo_common_1.ArgValidator.ensureIsNotNullOrUndefined(json, \"json\");\r\n\t        Strings._json = json;\r\n\t    }\r\n\t    Object.defineProperty(Strings, \"loaded\", {\r\n\t        get: function () {\r\n\t            return !neo_common_1.Utils.isNullOrUndefined(Strings._json);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Strings.get = function (key) {\r\n\t        return Strings._json && Strings._json.hasOwnProperty(key) ? Strings._json[key] : \"@@\" + key + \"@@\";\r\n\t    };\r\n\t    Strings.getWithValues = function (key) {\r\n\t        var tmpl = [];\r\n\t        for (var _i = 1; _i < arguments.length; _i++) {\r\n\t            tmpl[_i - 1] = arguments[_i];\r\n\t        }\r\n\t        if (Strings._json && Strings._json.hasOwnProperty(key)) {\r\n\t            var value = Strings._json[key];\r\n\t            var regexFormat = /(\\%m|\\%s)/gm;\r\n\t            var matchCnt = 0;\r\n\t            while (regexFormat.exec(value)) {\r\n\t                matchCnt++;\r\n\t            }\r\n\t            var args = tmpl;\r\n\t            if (matchCnt !== args.length) {\r\n\t                throw \"Provided argument count (\" + args.length + \") does not match required string params count (\" + matchCnt + \")\";\r\n\t            }\r\n\t            var idx = -1;\r\n\t            return value.replace(regexFormat, function (match) {\r\n\t                var val = args[++idx];\r\n\t                if (neo_common_1.StringUtils.equals(match, \"%m\", true)) {\r\n\t                    val = neo_common_1.NumberUtils.valueToNumber(val, AppContext_1.AppContext.gameConfiguration.UseCoins ? 0 : AppContext_1.AppContext.gameConfiguration.ShowDecimalPlaces);\r\n\t                }\r\n\t                else if (!neo_common_1.StringUtils.equals(match, \"%s\", true)) {\r\n\t                    throw \"Unknown formatter \\\"\" + match + \" !\\\"\";\r\n\t                }\r\n\t                return val;\r\n\t            });\r\n\t        }\r\n\t        return \"@@\" + key + \"@@\";\r\n\t    };\r\n\t    return Strings;\r\n\t}());\r\n\texports.Strings = Strings;\r\n\twindow[\"Strings\"] = Strings;\r\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar AppContext = (function (_super) {\r\n\t    __extends(AppContext, _super);\r\n\t    function AppContext(gameConfiguration, gameDefinition) {\r\n\t        _super.call(this, gameConfiguration, gameDefinition, GameApp_1.GameApp.key);\r\n\t        AppContext._current = this;\r\n\t    }\r\n\t    Object.defineProperty(AppContext, \"current\", {\r\n\t        get: function () {\r\n\t            return AppContext._current;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AppContext, \"gameConfiguration\", {\r\n\t        get: function () {\r\n\t            return AppContext._current == null ? null : AppContext._current.gameConfiguration;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AppContext, \"gameDefinition\", {\r\n\t        get: function () {\r\n\t            return AppContext._current.gameDefinition;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AppContext, \"clientHost\", {\r\n\t        get: function () {\r\n\t            return AppContext._current.clientHost;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    AppContext.prototype.setHideAmounts = function (hideAmounts) {\r\n\t        if (AppContext.clientHost != null) {\r\n\t            AppContext.clientHost.updateSharedSetting(\"HideAmounts\", hideAmounts.toString());\r\n\t        }\r\n\t    };\r\n\t    AppContext.prototype.getHideAmounts = function () {\r\n\t        if (AppContext.clientHost != null) {\r\n\t            if (AppContext.gameConfiguration.HideAmountsEnabled) {\r\n\t                var hideAmounts = AppContext.clientHost.getSharedSetting(\"HideAmounts\");\r\n\t                if (!neo_common_1.Utils.isNullOrUndefined(hideAmounts)) {\r\n\t                    return neo_common_1.StringUtils.parseBoolean(hideAmounts);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    AppContext._current = null;\r\n\t    return AppContext;\r\n\t}(neo_games_1.GameEngine.AppContextBase));\r\n\texports.AppContext = AppContext;\r\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar Focus_1 = __webpack_require__(62);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar Pool_1 = __webpack_require__(21);\r\n\tvar PageVisibilityHandler_1 = __webpack_require__(50);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar StageController = (function () {\r\n\t    function StageController() {\r\n\t    }\r\n\t    StageController.pauseAnimations = function () {\r\n\t        if (false) {\r\n\t            StageController._pauseAnimations = true;\r\n\t            neo_common_1.Logger.debugGroup(\"StageController\", \"Animations was paused\");\r\n\t        }\r\n\t    };\r\n\t    StageController.resumeAnimations = function () {\r\n\t        if (false) {\r\n\t            if (StageController._pauseAnimations) {\r\n\t                StageController._pauseAnimations = false;\r\n\t                StageController.redrawStage();\r\n\t                neo_common_1.Logger.debugGroup(\"StageController\", \"Animations was resumed\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(StageController, \"textureManager\", {\r\n\t        get: function () {\r\n\t            return StageController.Renderer.textureManager;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    StageController.updateTexture = function (texture) {\r\n\t        return this._noWebGL ? null : StageController.Renderer.textureManager.updateTexture(texture);\r\n\t    };\r\n\t    StageController.getTextureByResourceId = function (id) {\r\n\t        var texture = PIXI.utils.TextureCache[id];\r\n\t        var resourcePath = \"\";\r\n\t        if (neo_common_1.Utils.isNullOrUndefined(texture)) {\r\n\t            resourcePath = neo_common_1.PreloaderInfo.instance.getResourcePathById(id);\r\n\t            if (resourcePath) {\r\n\t                texture = PIXI.utils.TextureCache[resourcePath];\r\n\t                if (neo_common_1.Utils.isNullOrUndefined(texture)) {\r\n\t                    neo_common_1.Logger.errorGroup(\"StageController\", \"Could not find texture by id '\" + id + \"' (resourcePath: \" + resourcePath + \")\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                neo_common_1.Logger.errorGroup(\"StageController\", \"Could not find resource path for id '\" + id + \"' !\");\r\n\t            }\r\n\t        }\r\n\t        return texture;\r\n\t    };\r\n\t    StageController.handleLostWebGLContext = function () {\r\n\t        if (StageController._contextLost) {\r\n\t            return;\r\n\t        }\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.Enabled = false;\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.pauseAll();\r\n\t        HtmlController_1.HtmlController.dispatchActionAllowed = false;\r\n\t        var modules = neo_games_1.Communication.Game.GameModules;\r\n\t        for (var key in modules) {\r\n\t            if (modules.hasOwnProperty(key)) {\r\n\t                ModuleManager_1.ModuleManager.disableChannelModule(modules[key]);\r\n\t            }\r\n\t        }\r\n\t        GameManager_1.GameManager.gameClient.sendPlayerLogError(\"ERROR - WebGL\");\r\n\t        AppContext_1.AppContext.current.showDialog(Languages_1.Languages.getRid(\"ERROR_WEBGL\"), false, \"\", \"\", \"\", { special: true });\r\n\t        StageController._contextLost = true;\r\n\t    };\r\n\t    StageController.createStage = function (width, height, color, canvasId) {\r\n\t        StageController.Width = width;\r\n\t        StageController.Height = height;\r\n\t        var canvas = document.getElementById(canvasId);\r\n\t        var loading = document.getElementById(\"loading\");\r\n\t        var rendererOptions = { view: canvas, roundPixels: false };\r\n\t        rendererOptions.backgroundColor = color;\r\n\t        this.Renderer = PIXI.autoDetectRenderer(width, height, rendererOptions, this._noWebGL);\r\n\t        if (StageController.Renderer instanceof PIXI.CanvasRenderer) {\r\n\t            StageController._noWebGL = true;\r\n\t        }\r\n\t        PIXI.settings.GC_MODE = PIXI.GC_MODES.AUTO;\r\n\t        document.body.appendChild(this.Renderer.view);\r\n\t        this.Stage = new PIXI.Container();\r\n\t        Scaling_1.Scaling.scale();\r\n\t        Focus_1.Focus.focus();\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.handle();\r\n\t        loading.style.display = \"block\";\r\n\t        canvas.style.display = \"none\";\r\n\t        canvas.addEventListener(\"webglcontextlost\", StageController.handleLostWebGLContext);\r\n\t        window[\"__PIXI_STAGE__\"] = this.Stage;\r\n\t        window[\"__PIXI_RENDERER__\"] = this.Renderer;\r\n\t        this.redrawStage();\r\n\t    };\r\n\t    StageController.addChild = function (element) {\r\n\t        this.Stage.addChild(element);\r\n\t    };\r\n\t    StageController.redrawStage = function () {\r\n\t        if (StageController._pauseAnimations) {\r\n\t            return;\r\n\t        }\r\n\t        Pool_1.AnimationFramePool.draw();\r\n\t        if (StageController.baseStage &&\r\n\t            StageController.baseStageContainer != null &&\r\n\t            StageController.freespinStage &&\r\n\t            StageController.freespinsStageContainer != null) {\r\n\t            StageController.Renderer.render(StageController.Stage);\r\n\t        }\r\n\t        else if (StageController.baseStage && StageController.baseStageContainer != null) {\r\n\t            StageController.Renderer.render(StageController.baseStageContainer);\r\n\t        }\r\n\t        else if (StageController.freespinStage && StageController.freespinsStageContainer != null) {\r\n\t            StageController.Renderer.render(StageController.freespinsStageContainer);\r\n\t        }\r\n\t        else {\r\n\t            StageController.Renderer.render(StageController.Stage);\r\n\t        }\r\n\t        requestAnimationFrame(StageController.redrawStage);\r\n\t    };\r\n\t    StageController.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"StageController\", s);\r\n\t        }\r\n\t    };\r\n\t    StageController.UpdatedTextures = {};\r\n\t    StageController.FPS = 60;\r\n\t    StageController.baseStage = false;\r\n\t    StageController.freespinStage = false;\r\n\t    StageController._noWebGL = false;\r\n\t    StageController._pauseAnimations = false;\r\n\t    StageController._contextLost = false;\r\n\t    return StageController;\r\n\t}());\r\n\texports.StageController = StageController;\r\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar EventEmitter = PIXI.utils.EventEmitter;\r\n\tvar Scaling = (function () {\r\n\t    function Scaling() {\r\n\t    }\r\n\t    Scaling.scale = function () {\r\n\t        Scaling.Root = document.getElementById(\"root\");\r\n\t        Scaling.Screen = document.getElementById(\"screen\");\r\n\t        Scaling.IsIOs = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\r\n\t        Scaling.IsIOsTablet = /iPad/.test(navigator.platform);\r\n\t        Scaling.IsIOsWebview = Scaling.IsIOs && window.indexedDB !== null;\r\n\t        Scaling.IOsResizeTimer = FrameTimer_1.CreateFrameTimer(\"scalingTimer\");\r\n\t        Scaling.IOsResizeTimer.on(FrameTimer_1.FrameTimerEvents.Complete, Scaling.resizeRoot.bind(this, true));\r\n\t        Scaling.Emitter = new EventEmitter();\r\n\t        Scaling.resizeRoot();\r\n\t        window.onresize = Scaling.onResizeRoot;\r\n\t        document.body.classList.add(window[\"CHANNEL\"] === \"mobile\" ? \"mobile\" : \"desktop\");\r\n\t        document.body.classList.add(\"ui-v\" + window[\"UI-VERSION\"]);\r\n\t        if (Scaling.isSafari()) {\r\n\t            document.body.classList.add(\"safari\");\r\n\t        }\r\n\t        if (Scaling.isIosChrome()) {\r\n\t            document.body.classList.add(\"iOsChrome\");\r\n\t        }\r\n\t        if (Scaling.IsIOs) {\r\n\t            Scaling.setupIOs();\r\n\t        }\r\n\t        document.addEventListener(\"touchend\", function (event) {\r\n\t            if (AppContext_1.AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\r\n\t                return;\r\n\t            }\r\n\t            var diff = event.timeStamp - Scaling.lastTouch;\r\n\t            Scaling.lastTouch = event.timeStamp;\r\n\t            if (!diff || diff > 400) {\r\n\t                return;\r\n\t            }\r\n\t            event.preventDefault();\r\n\t            event.stopPropagation();\r\n\t            var evt = new MouseEvent(\"click\");\r\n\t            event.target.dispatchEvent(evt);\r\n\t        }, false);\r\n\t    };\r\n\t    Scaling.onResizeRoot = function () {\r\n\t        Scaling.resizeRoot();\r\n\t        if (Scaling.IsIOsWebview) {\r\n\t            setTimeout(function () { return Scaling.resizeRoot(); }, 500);\r\n\t        }\r\n\t    };\r\n\t    Scaling.resizeRoot = function (delayed, preventEmitEvent) {\r\n\t        if (delayed === void 0) { delayed = false; }\r\n\t        if (preventEmitEvent === void 0) { preventEmitEvent = true; }\r\n\t        if (!delayed && Scaling.IsIOs && Scaling.IOsResizeTimer && (Scaling.inIframe() || Scaling.isIosChrome())) {\r\n\t            Scaling.IOsResizeTimer.stop();\r\n\t            Scaling.IOsResizeTimer.start(Scaling.IOsResizeDelay);\r\n\t        }\r\n\t        document.body.style.overflow = \"hidden\";\r\n\t        neo_games_1.Plugins.StatusBar.updateHeight();\r\n\t        var sab = parseInt(getComputedStyle(document.documentElement).getPropertyValue(\"--sab\") || \"0\");\r\n\t        var innerHeight = window.innerHeight + neo_games_1.Plugins.StatusBar.StatusBarHeight - sab;\r\n\t        var innerWidth = window.innerWidth + neo_games_1.Plugins.StatusBar.StatusBarWidth;\r\n\t        if (Scaling.IsIOs && neo_games_1.Plugins.StatusBar.StatusBarHeight != 0) {\r\n\t            document.documentElement.style.width = sab > 0 ? window.innerWidth + \"px\" : \"\";\r\n\t            document.documentElement.style.height = sab > 0 ? window.innerHeight - sab + \"px\" : \"\";\r\n\t            document.documentElement.style.overflow = sab > 0 ? \"visible\" : \"\";\r\n\t        }\r\n\t        var ratioWidth = innerWidth / (StageController_1.StageController.Width + Scaling.LeftPanelWidth);\r\n\t        var ratioHeight = innerHeight / (StageController_1.StageController.Height + Jackpot_1.Jackpot.Height);\r\n\t        var top = -(StageController_1.StageController.Height + Jackpot_1.Jackpot.Height - innerHeight) / 2;\r\n\t        var left = -(StageController_1.StageController.Width - innerWidth) / 2;\r\n\t        if (ratioWidth < ratioHeight) {\r\n\t            Scaling.Root.style.transform = \"scale(\" + ratioWidth + \")\";\r\n\t            left += (Scaling.LeftPanelWidth / 2) * ratioWidth;\r\n\t        }\r\n\t        else {\r\n\t            Scaling.Root.style.transform = \"scale(\" + ratioHeight + \")\";\r\n\t            left += (Scaling.LeftPanelWidth / 2) * ratioHeight;\r\n\t        }\r\n\t        Scaling.Root.style.top = top.toString() + \"px\";\r\n\t        Scaling.Root.style.left = left.toString() + \"px\";\r\n\t        var enabledPortrait = true;\r\n\t        if (AppContext_1.AppContext != null && AppContext_1.AppContext.current != null) {\r\n\t            enabledPortrait = AppContext_1.AppContext.gameConfiguration.UsePortraitMode;\r\n\t            if (Scaling.IsIOsTablet) {\r\n\t                enabledPortrait = false;\r\n\t            }\r\n\t            if (!enabledPortrait) {\r\n\t                document.body.classList.remove(\"portrait\", \"mobile-xs\", \"tablet\", \"tablet-xs\");\r\n\t                Scaling.Root.style.height = StageController_1.StageController.Height + Jackpot_1.Jackpot.Height + \"px\";\r\n\t            }\r\n\t        }\r\n\t        if (enabledPortrait && window[\"CHANNEL\"] === \"mobile\") {\r\n\t            var portraitRatio = innerWidth / innerHeight;\r\n\t            if (innerHeight > innerWidth && portraitRatio < Scaling.PortraitRatio) {\r\n\t                document.body.classList.add(\"portrait\");\r\n\t                document.body.classList.remove(\"mobile-xs\", \"tablet\", \"tablet-xs\");\r\n\t                if (portraitRatio > Scaling.PortraitMobileRatio && portraitRatio < Scaling.PortraitRatio) {\r\n\t                    document.body.classList.add(\"tablet\");\r\n\t                    if (portraitRatio > 0.85) {\r\n\t                        document.body.classList.add(\"tablet-xs\");\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (portraitRatio > 0.61) {\r\n\t                        document.body.classList.add(\"mobile-xs\");\r\n\t                    }\r\n\t                }\r\n\t                ratioWidth = innerWidth / StageController_1.StageController.Height;\r\n\t                left = -(StageController_1.StageController.Height - innerWidth) / 2;\r\n\t                Scaling.Root.style.transform = \"scale(\" + ratioWidth + \")\";\r\n\t                Scaling.Root.style.top = \"0\";\r\n\t                Scaling.Root.style.left = left.toString() + \"px\";\r\n\t                Scaling.Root.style.height = (StageController_1.StageController.Height / innerWidth) * innerHeight + \"px\";\r\n\t            }\r\n\t            else {\r\n\t                document.body.classList.remove(\"portrait\", \"tablet\");\r\n\t                Scaling.Root.style.height = StageController_1.StageController.Height + Jackpot_1.Jackpot.Height + \"px\";\r\n\t            }\r\n\t            if (document.body.classList.contains(\"portrait\")) {\r\n\t                Scaling.Root.classList.remove(\"gameShadow\");\r\n\t                Scaling.Screen.classList.add(\"gameShadow\");\r\n\t            }\r\n\t            else {\r\n\t                Scaling.Root.classList.add(\"gameShadow\");\r\n\t                Scaling.Screen.classList.remove(\"gameShadow\");\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            Scaling.Root.style.height = StageController_1.StageController.Height + Jackpot_1.Jackpot.Height + \"px\";\r\n\t            Scaling.Root.classList.add(\"gameShadow\");\r\n\t        }\r\n\t        if (document.documentElement.scrollTop != 0) {\r\n\t            document.documentElement.scrollTop = 0;\r\n\t        }\r\n\t        document.body.style.overflow = \"\";\r\n\t        if (Scaling.Emitter && preventEmitEvent) {\r\n\t            Scaling.Emitter.emit(Scaling.EventResize, Scaling.isPortrait(), innerWidth / (innerHeight - Jackpot_1.Jackpot.Height));\r\n\t        }\r\n\t    };\r\n\t    Scaling.setupIOs = function () {\r\n\t        document.addEventListener(\"gesturestart\", this.preventPropagation, true);\r\n\t        document.addEventListener(\"gesturechange\", this.preventPropagation, true);\r\n\t        document.addEventListener(\"gestureend\", this.preventPropagation, true);\r\n\t        document.addEventListener(\"touchmove\", this.preventMovePropagation, true);\r\n\t    };\r\n\t    Scaling.preventPropagation = function (e) {\r\n\t        e.stopPropagation();\r\n\t        e.preventDefault();\r\n\t    };\r\n\t    Scaling.preventMovePropagation = function (e) {\r\n\t        var target = e.target;\r\n\t        while (target) {\r\n\t            if (target == document.documentElement) {\r\n\t                target = null;\r\n\t            }\r\n\t            else if (target.classList.contains(\"mask\") || target.classList.contains(\"dialogContent\")) {\r\n\t                return;\r\n\t            }\r\n\t            else {\r\n\t                if (target.parentElement != null) {\r\n\t                    target = target.parentElement;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        e.stopPropagation();\r\n\t        e.preventDefault();\r\n\t    };\r\n\t    Scaling.isSafari = function () {\r\n\t        var ua = navigator.userAgent;\r\n\t        var vendor = navigator.vendor;\r\n\t        return /Safari/i.test(ua) && /Apple Computer/.test(vendor);\r\n\t    };\r\n\t    Scaling.isIosChrome = function () {\r\n\t        return !!(Scaling.IsIOs && (navigator.userAgent.match(\"CriOS\") || navigator.userAgent.match(\"FxiOS\")));\r\n\t    };\r\n\t    Scaling.inIframe = function () {\r\n\t        try {\r\n\t            return window.self !== window.top;\r\n\t        }\r\n\t        catch (e) {\r\n\t            return true;\r\n\t        }\r\n\t    };\r\n\t    Scaling.onLoadComplete = function () {\r\n\t        document.body.classList.add(\"loaded\");\r\n\t    };\r\n\t    Scaling.isPortrait = function () {\r\n\t        return document.body.classList.contains(\"portrait\");\r\n\t    };\r\n\t    Scaling.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Scaling\", s);\r\n\t        }\r\n\t    };\r\n\t    Scaling.EventResize = \"eventResize\";\r\n\t    Scaling.PortraitRatio = 0.9;\r\n\t    Scaling.PortraitMobileRatio = 0.72;\r\n\t    Scaling.LeftPanelWidth = 0;\r\n\t    Scaling.IsIOs = false;\r\n\t    Scaling.IsIOsTablet = false;\r\n\t    Scaling.IsIOsWebview = false;\r\n\t    Scaling.IOsResizeDelay = 60;\r\n\t    return Scaling;\r\n\t}());\r\n\texports.Scaling = Scaling;\r\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar AnimationFrame_1 = __webpack_require__(9);\r\n\tvar FrameTimerPool_1 = __webpack_require__(22);\r\n\texports.FrameTimerEvents = {\r\n\t    Progress: \"progress\",\r\n\t    Complete: \"complete\",\r\n\t};\r\n\tvar FrameTimer = (function (_super) {\r\n\t    __extends(FrameTimer, _super);\r\n\t    function FrameTimer(timerName) {\r\n\t        _super.call(this);\r\n\t        this._useFrames = false;\r\n\t        this._playing = false;\r\n\t        this._paused = false;\r\n\t        timerName = neo_common_1.Utils.valueOrDefault(timerName, neo_common_1.Utils.generateUuid());\r\n\t        this._timerName = \"FrameTimer-\" + timerName;\r\n\t        this._uid = \"FrameTimer_\" + timerName + \"_\" + neo_common_1.Utils.generateUuid();\r\n\t        this._timerCounter = 0;\r\n\t        this._finalTimerCounter = 0;\r\n\t    }\r\n\t    FrameTimer.prototype.frame_onFrame = function () {\r\n\t        if (this._timerCounter === this._finalTimerCounter) {\r\n\t            this.stop();\r\n\t            this.conclude();\r\n\t        }\r\n\t        else {\r\n\t            this.super2.emit(exports.FrameTimerEvents.Progress);\r\n\t            this._timerCounter++;\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(FrameTimer.prototype, \"frame_name\", {\r\n\t        get: function () {\r\n\t            return this._timerName;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    FrameTimer.prototype.start = function (duration) {\r\n\t        var _this = this;\r\n\t        if (!this._playing) {\r\n\t            FrameTimerPool_1.FrameTimerPool.add(this._uid, this);\r\n\t        }\r\n\t        this._playing = true;\r\n\t        if (this._useFrames) {\r\n\t            this._timerCounter = 0;\r\n\t            this._finalTimerCounter = duration;\r\n\t            this.frame_stop();\r\n\t            this.count();\r\n\t        }\r\n\t        else {\r\n\t            this._startTime = new Date().getTime();\r\n\t            this._finalTimerCounter = duration * 16.7;\r\n\t            this._timer = setTimeout(function () { return _this.conclude(); }, this._finalTimerCounter);\r\n\t            if (FrameTimerPool_1.FrameTimerPool.paused) {\r\n\t                this.pause();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FrameTimer.prototype.stop = function () {\r\n\t        if (this._playing) {\r\n\t            FrameTimerPool_1.FrameTimerPool.remove(this._uid);\r\n\t        }\r\n\t        this._playing = false;\r\n\t        if (this._useFrames) {\r\n\t            this.frame_stop();\r\n\t        }\r\n\t        else {\r\n\t            if (this._timer != null) {\r\n\t                clearTimeout(this._timer);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FrameTimer.prototype.conclude = function () {\r\n\t        clearTimeout(this._timer);\r\n\t        FrameTimerPool_1.FrameTimerPool.remove(this._uid);\r\n\t        this._playing = false;\r\n\t        this.super2.emit(exports.FrameTimerEvents.Complete);\r\n\t    };\r\n\t    FrameTimer.prototype.pause = function () {\r\n\t        if (!this._playing || this._paused) {\r\n\t            return;\r\n\t        }\r\n\t        if (this._useFrames) {\r\n\t            this.frame_stop();\r\n\t        }\r\n\t        else {\r\n\t            clearTimeout(this._timer);\r\n\t            var currentTime = new Date().getTime();\r\n\t            this._finalTimerCounter -= currentTime - this._startTime;\r\n\t        }\r\n\t        this._paused = true;\r\n\t    };\r\n\t    FrameTimer.prototype.isPlaying = function () {\r\n\t        return this._playing;\r\n\t    };\r\n\t    FrameTimer.prototype.unpause = function () {\r\n\t        var _this = this;\r\n\t        if (!this._playing || !this._paused) {\r\n\t            return;\r\n\t        }\r\n\t        if (this._useFrames) {\r\n\t            this.count();\r\n\t        }\r\n\t        else {\r\n\t            this._startTime = new Date().getTime();\r\n\t            window.clearTimeout(this._timer);\r\n\t            this._timer = setTimeout(function () { return _this.conclude(); }, this._finalTimerCounter);\r\n\t        }\r\n\t        this._paused = false;\r\n\t    };\r\n\t    FrameTimer.prototype.count = function () {\r\n\t        this.frame_start();\r\n\t    };\r\n\t    FrameTimer.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"FrameTimer\", s);\r\n\t        }\r\n\t    };\r\n\t    return FrameTimer;\r\n\t}(AnimationFrame_1.AnimationFrameEventEmitter));\r\n\texports.FrameTimer = FrameTimer;\r\n\texports.CreateFrameTimer = function (timerName) {\r\n\t    return new FrameTimer(timerName);\r\n\t};\r\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Types_1 = __webpack_require__(10);\r\n\tvar Pool_1 = __webpack_require__(21);\r\n\tfunction AnimationFrameClass(Superclass) {\r\n\t    var sc = (Superclass || Object);\r\n\t    return (function (_super) {\r\n\t        __extends(AnimationFrame, _super);\r\n\t        function AnimationFrame() {\r\n\t            _super.call(this);\r\n\t            this._frame_stopped = true;\r\n\t            this._frame_starting = null;\r\n\t            this._frame_stopping = null;\r\n\t            this._frame_uid = null;\r\n\t            this.frame_draw = this.frame_draw.bind(this);\r\n\t        }\r\n\t        AnimationFrame.prototype.frame_onFrame = function () {\r\n\t            throw new Error(\"method \\\"frame_onFrame\\\" is not implemented!\");\r\n\t        };\r\n\t        Object.defineProperty(AnimationFrame.prototype, \"frame_name\", {\r\n\t            get: function () {\r\n\t                throw new Error(\"property \\\"frame_name\\\" is not implemented!\");\r\n\t            },\r\n\t            enumerable: true,\r\n\t            configurable: true\r\n\t        });\r\n\t        Object.defineProperty(AnimationFrame.prototype, \"isFrameStopped\", {\r\n\t            get: function () {\r\n\t                return this._frame_stopped;\r\n\t            },\r\n\t            enumerable: true,\r\n\t            configurable: true\r\n\t        });\r\n\t        Object.defineProperty(AnimationFrame.prototype, \"frame_uid\", {\r\n\t            get: function () {\r\n\t                if (this._frame_uid === null) {\r\n\t                    this._frame_uid = this.frame_name + neo_common_1.Utils.generateUuid();\r\n\t                }\r\n\t                return this._frame_uid;\r\n\t            },\r\n\t            enumerable: true,\r\n\t            configurable: true\r\n\t        });\r\n\t        AnimationFrame.prototype.frame_draw = function () {\r\n\t            if (this._frame_stopped) {\r\n\t                return;\r\n\t            }\r\n\t            this.frame_onFrame();\r\n\t        };\r\n\t        AnimationFrame.prototype.frame_log = function (msg, isError) {\r\n\t            isError = neo_common_1.Utils.valueOrDefault(isError, false);\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"AnimationFrame\", (\"[\" + this.frame_name + \"-AnimationFrame] \") + msg);\r\n\t            }\r\n\t            if (isError) {\r\n\t                neo_common_1.Logger.errorGroup(\"AnimationFrame\", (\"[\" + this.frame_name + \"-AnimationFrame] \") + msg);\r\n\t            }\r\n\t        };\r\n\t        AnimationFrame.prototype.frame_start = function () {\r\n\t            if (!this._frame_stopped) {\r\n\t                return;\r\n\t            }\r\n\t            if (this._frame_starting) {\r\n\t                return;\r\n\t            }\r\n\t            this._frame_starting = true;\r\n\t            try {\r\n\t                if (Pool_1.AnimationFramePool.registerFrame(this)) {\r\n\t                    this._frame_stopped = false;\r\n\t                }\r\n\t                else {\r\n\t                    this.frame_log(\"failed to start (already registered in stage pool!)\", true);\r\n\t                }\r\n\t            }\r\n\t            finally {\r\n\t                this._frame_starting = null;\r\n\t            }\r\n\t            this.frame_draw();\r\n\t        };\r\n\t        AnimationFrame.prototype.frame_stop = function () {\r\n\t            if (this._frame_stopped) {\r\n\t                return;\r\n\t            }\r\n\t            if (this._frame_stopping) {\r\n\t                return;\r\n\t            }\r\n\t            this._frame_stopping = true;\r\n\t            try {\r\n\t                if (Pool_1.AnimationFramePool.unregisterFrame(this)) {\r\n\t                    this._frame_stopped = true;\r\n\t                }\r\n\t                else {\r\n\t                    this.frame_log(\"failed to stop (not registered in stage pool!)\", true);\r\n\t                }\r\n\t            }\r\n\t            finally {\r\n\t                this._frame_stopping = null;\r\n\t            }\r\n\t        };\r\n\t        return AnimationFrame;\r\n\t    }(sc));\r\n\t}\r\n\texports.AnimationFrameClass = AnimationFrameClass;\r\n\tvar AnimationFrameEventEmitter = (function (_super) {\r\n\t    __extends(AnimationFrameEventEmitter, _super);\r\n\t    function AnimationFrameEventEmitter() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Object.defineProperty(AnimationFrameEventEmitter.prototype, \"super2\", {\r\n\t        get: function () {\r\n\t            return this;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return AnimationFrameEventEmitter;\r\n\t}(AnimationFrameClass(Types_1.EventEmmiterClass())));\r\n\texports.AnimationFrameEventEmitter = AnimationFrameEventEmitter;\r\n\tvar AnimationFrameBaseElement = (function (_super) {\r\n\t    __extends(AnimationFrameBaseElement, _super);\r\n\t    function AnimationFrameBaseElement() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Object.defineProperty(AnimationFrameBaseElement.prototype, \"super2\", {\r\n\t        get: function () {\r\n\t            return this;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return AnimationFrameBaseElement;\r\n\t}(AnimationFrameClass(Types_1.BaseElementClass())));\r\n\texports.AnimationFrameBaseElement = AnimationFrameBaseElement;\r\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tfunction EventEmmiterClass() {\r\n\t    return (function (_super) {\r\n\t        __extends(EventEmmiterDescendant, _super);\r\n\t        function EventEmmiterDescendant() {\r\n\t            _super.apply(this, arguments);\r\n\t        }\r\n\t        return EventEmmiterDescendant;\r\n\t    }(PIXI.utils.EventEmitter));\r\n\t}\r\n\texports.EventEmmiterClass = EventEmmiterClass;\r\n\tfunction BaseElementClass() {\r\n\t    return (function (_super) {\r\n\t        __extends(BaseElementDescendant, _super);\r\n\t        function BaseElementDescendant() {\r\n\t            _super.apply(this, arguments);\r\n\t        }\r\n\t        return BaseElementDescendant;\r\n\t    }(BaseElement_1.BaseElement));\r\n\t}\r\n\texports.BaseElementClass = BaseElementClass;\r\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ShapeElement_1 = __webpack_require__(12);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar Attributes_1 = __webpack_require__(19);\r\n\tvar BaseElement = (function (_super) {\r\n\t    __extends(BaseElement, _super);\r\n\t    function BaseElement() {\r\n\t        _super.call(this);\r\n\t        this._cloned = false;\r\n\t        this.__destroyed = false;\r\n\t        this._uid = this.componentName + \"_\" + neo_common_1.Utils.generateUuid();\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                this._uid = PerfDebug.generateElementUID(this);\r\n\t                PerfDebug.newElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    BaseElement.prototype.getDebugInfo = function () {\r\n\t        if (false) {\r\n\t            var debugInfoFn = this.debugInfo;\r\n\t            return debugInfoFn ? debugInfoFn.call(this) : this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    Object.defineProperty(BaseElement.prototype, \"tweenEngine\", {\r\n\t        get: function () {\r\n\t            return this._tweenEngine;\r\n\t        },\r\n\t        set: function (engine) {\r\n\t            this._tweenEngine = engine;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseElement.prototype, \"cloned\", {\r\n\t        get: function () {\r\n\t            return this._cloned;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseElement.prototype, \"destroyed\", {\r\n\t        get: function () {\r\n\t            return this.__destroyed;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseElement.prototype, \"uid\", {\r\n\t        get: function () {\r\n\t            return this._uid;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseElement.prototype, \"componentName\", {\r\n\t        get: function () {\r\n\t            return this.__componentName__;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    BaseElement.prototype.destroy = function (options) {\r\n\t        this.assertDestroyed(\"destroy\");\r\n\t        if (neo_common_1.Utils.isNullOrUndefined(options)) {\r\n\t            options = BaseElement._destroyOptions;\r\n\t        }\r\n\t        this.internalDestroy(options);\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.children)) {\r\n\t            _super.prototype.destroy.call(this, options);\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.destroy(this);\r\n\t            }\r\n\t        }\r\n\t        this.__destroyed = true;\r\n\t    };\r\n\t    BaseElement.prototype.internalDestroy = function (options) {\r\n\t        Tweens_1.Tweens.removeTweens(this);\r\n\t    };\r\n\t    BaseElement.prototype.clone = function () {\r\n\t        throw new Error(\"Not implemented\");\r\n\t    };\r\n\t    BaseElement.prototype.removeAndDestroyChildren = function () {\r\n\t        this._removeAndDestroyChildren();\r\n\t    };\r\n\t    BaseElement.prototype._removeAndDestroyChildren = function () {\r\n\t        this.assertDestroyed(\"_removeAndDestroyChildren\");\r\n\t        var destroyOptions = {\r\n\t            children: true,\r\n\t        };\r\n\t        if (this.children != null && this.children.length > 0) {\r\n\t            for (var i = this.children.length - 1; i >= 0; i--) {\r\n\t                if (this.children[i] != null) {\r\n\t                    this.children[i].destroy(destroyOptions);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.removeChildren();\r\n\t    };\r\n\t    BaseElement.prototype.assertDestroyed = function (method) {\r\n\t        if (false) {\r\n\t            if (this.__destroyed) {\r\n\t                throw new Error(this.componentName + \"[\" + this.uid + \"] was already destroyed, calling method '\" + method + \"'\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseElement.prototype.markAsCloned = function () {\r\n\t        this._markAsCloned();\r\n\t    };\r\n\t    BaseElement.prototype._markAsCloned = function () {\r\n\t        this.assertDestroyed(\"markAsCloned()\");\r\n\t        this._cloned = true;\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.clone(this);\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseElement.prototype._create = function (node) {\r\n\t        this.createByNode(node);\r\n\t        this.updateByNode(node);\r\n\t    };\r\n\t    BaseElement.prototype.create = function (node) {\r\n\t        this._create(node);\r\n\t    };\r\n\t    BaseElement.prototype.createByNode = function (node) {\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.BaseElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.BaseElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        this.assertDestroyed(\"_create()\");\r\n\t        if (this.name == null) {\r\n\t            this.name = node.nodeName;\r\n\t        }\r\n\t        this.alpha = Attributes_1.Attributes.assignFloatAttribute(node, exports.BaseElementAttributes.ALPHA, this.alpha);\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.ROTATION)) {\r\n\t            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(exports.BaseElementAttributes.ROTATION)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.START_ROTATION)) {\r\n\t            if (node.getAttribute(exports.BaseElementAttributes.START_ROTATION) === exports.BaseElementAttributes.START_ROTATION) {\r\n\t                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SKEW_X)) {\r\n\t            this.skew.x = this.degrees2radians(parseFloat(node.getAttribute(exports.BaseElementAttributes.SKEW_X)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SKEW_Y)) {\r\n\t            this.skew.y = this.degrees2radians(parseFloat(node.getAttribute(exports.BaseElementAttributes.SKEW_Y)));\r\n\t        }\r\n\t        this.scale.x = Attributes_1.Attributes.assignFloatAttribute(node, exports.BaseElementAttributes.SCALE_X, this.scale.x);\r\n\t        this.scale.y = Attributes_1.Attributes.assignFloatAttribute(node, exports.BaseElementAttributes.SCALE_Y, this.scale.y);\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.BaseElementAttributes.SCALE));\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.BaseElementAttributes.SCALE));\r\n\t        }\r\n\t        this.position.x = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.X, this.position.x);\r\n\t        this.position.y = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.Y, this.position.y);\r\n\t        this.pivot.x = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.PIVOT_X, this.pivot.x);\r\n\t        this.pivot.y = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.PIVOT_Y, this.pivot.y);\r\n\t        this.visible = Attributes_1.Attributes.assignBooleanAttribute(node, exports.BaseElementAttributes.VISIBLE, this.visible);\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.MASK)) {\r\n\t            var next = node.parentElement.firstElementChild;\r\n\t            while (next != null) {\r\n\t                if (next.nodeName === node.getAttribute(exports.BaseElementAttributes.MASK)) {\r\n\t                    var shapeElement = new ShapeElement_1.ShapeElement();\r\n\t                    shapeElement.create(next);\r\n\t                    this.mask = shapeElement;\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t            if (this.mask == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no element with name: \" + node.getAttribute(exports.BaseElementAttributes.MASK));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.BITMAP_MASK)) {\r\n\t            var image = StageController_1.StageController.getTextureByResourceId(node.getAttribute(exports.BaseElementAttributes.BITMAP_MASK));\r\n\t            if (image != null) {\r\n\t                this.maskSprite = new PIXI.Sprite(image);\r\n\t                if (node.hasAttribute(exports.BaseElementAttributes.BITMAP_MASK_X)) {\r\n\t                    this.maskSprite.position.x = parseFloat(node.getAttribute(exports.BaseElementAttributes.BITMAP_MASK_X));\r\n\t                }\r\n\t                if (node.hasAttribute(exports.BaseElementAttributes.BITMAP_MASK_Y)) {\r\n\t                    this.maskSprite.position.y = parseFloat(node.getAttribute(exports.BaseElementAttributes.BITMAP_MASK_Y));\r\n\t                }\r\n\t                if (!node.hasAttribute(exports.BaseElementAttributes.BITMAP_MASK_SHOW)) {\r\n\t                    this.addChild(this.maskSprite);\r\n\t                    this.mask = this.maskSprite;\r\n\t                }\r\n\t                this.maskSprite.scale.x = node.hasAttribute(exports.BaseElementAttributes.BITMAP_MASK_SCALE_X)\r\n\t                    ? parseFloat(node.getAttribute(exports.BaseElementAttributes.BITMAP_MASK_SCALE_X))\r\n\t                    : node.hasAttribute(exports.BaseElementAttributes.BITMAP_MASK_SCALE)\r\n\t                        ? parseFloat(node.getAttribute(exports.BaseElementAttributes.BITMAP_MASK_SCALE))\r\n\t                        : 1;\r\n\t                this.maskSprite.scale.y = node.hasAttribute(exports.BaseElementAttributes.BITMAP_MASK_SCALE_Y)\r\n\t                    ? parseFloat(node.getAttribute(exports.BaseElementAttributes.BITMAP_MASK_SCALE_Y))\r\n\t                    : node.hasAttribute(exports.BaseElementAttributes.BITMAP_MASK_SCALE)\r\n\t                        ? parseFloat(node.getAttribute(exports.BaseElementAttributes.BITMAP_MASK_SCALE))\r\n\t                        : 1;\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR\" +\r\n\t                        this.componentName +\r\n\t                        \" no image with name for mask: \" +\r\n\t                        node.getAttribute(exports.BaseElementAttributes.BITMAP_MASK));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.TWEEN_ENGINE)) {\r\n\t            this._tweenEngine = node.getAttribute(exports.BaseElementAttributes.TWEEN_ENGINE);\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.createElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseElement.prototype.updateByNode = function (node) {\r\n\t        if (!node) {\r\n\t            this.logError(\"No node specified for element update!\");\r\n\t            return;\r\n\t        }\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.BaseElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.BaseElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        if (!node.hasAttribute(exports.BaseElementAttributes.TWEEN_PERSISTENT) ||\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.BaseElementAttributes.TWEEN_PERSISTENT)) != true) {\r\n\t            Tweens_1.Tweens.removeTweens(this);\r\n\t        }\r\n\t        this.visible = Attributes_1.Attributes.assignBooleanAttribute(node, exports.BaseElementAttributes.VISIBLE, this.visible);\r\n\t        this.alpha = Attributes_1.Attributes.assignFloatAttribute(node, exports.BaseElementAttributes.ALPHA, this.alpha);\r\n\t        this.pivot.x = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.PIVOT_X, this.pivot.x);\r\n\t        this.pivot.y = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.PIVOT_Y, this.pivot.y);\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.ROTATION)) {\r\n\t            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(exports.BaseElementAttributes.ROTATION)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.START_ROTATION)) {\r\n\t            if (node.getAttribute(exports.BaseElementAttributes.START_ROTATION) === exports.BaseElementAttributes.START_ROTATION) {\r\n\t                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n\t            }\r\n\t        }\r\n\t        this.position.x = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.X, this.position.x);\r\n\t        this.position.y = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.Y, this.position.y);\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SKEW_X)) {\r\n\t            this.skew.x = this.degrees2radians(parseFloat(node.getAttribute(exports.BaseElementAttributes.SKEW_X)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SKEW_Y)) {\r\n\t            this.skew.y = this.degrees2radians(parseFloat(node.getAttribute(exports.BaseElementAttributes.SKEW_Y)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE_X)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.BaseElementAttributes.SCALE_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE_Y)) {\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.BaseElementAttributes.SCALE_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.BaseElementAttributes.SCALE));\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.BaseElementAttributes.SCALE));\r\n\t        }\r\n\t        this.runAlphaTween(node);\r\n\t        this.runPositionTween(node);\r\n\t        this.runRotationTween(node);\r\n\t        this.runScaleTween(node);\r\n\t        this.runSkewTween(node);\r\n\t        this.runTween(node);\r\n\t        this.updateByNodeInherited(node);\r\n\t    };\r\n\t    BaseElement.prototype.updateByNodeInherited = function (node) { };\r\n\t    BaseElement.prototype.runAlphaTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.BaseElementAttributes.ALPHA_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"alpha\");\r\n\t        var alphaTween;\r\n\t        var alphaTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.ALPHA_TWEEN_POSITION, null);\r\n\t        if (alphaTweenPosition == exports.BaseElementAttributes.ALPHA_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.ALPHA_TWEEN)).map(function (value) { return value + _this.alpha; });\r\n\t        }\r\n\t        else if (alphaTweenPosition == exports.BaseElementAttributes.ALPHA_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.ALPHA_TWEEN));\r\n\t            if (alphaTween.length) {\r\n\t                alphaTween[0] = this.alpha;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.ALPHA_TWEEN));\r\n\t        }\r\n\t        var alphas = alphaTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.ALPHA_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.ALPHA_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.ALPHA_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.BaseElementAttributes.ALPHA_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.BaseElementAttributes.ALPHA_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.BaseElementAttributes.ALPHA_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.ALPHA_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.alphaTween(this, { alphas: alphas, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    BaseElement.prototype.runPositionTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.BaseElementAttributes.POSITION_TWEEN_X) ||\r\n\t            !node.hasAttribute(exports.BaseElementAttributes.POSITION_TWEEN_Y)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        var positionTweenX;\r\n\t        var positionTweenY;\r\n\t        var positionTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.POSITION_TWEEN_POSITION, null);\r\n\t        if (positionTweenPosition == exports.BaseElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.POSITION_TWEEN_X)).map(function (value) { return value + _this.position.x; });\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.POSITION_TWEEN_Y)).map(function (value) { return value + _this.position.y; });\r\n\t        }\r\n\t        else if (positionTweenPosition == exports.BaseElementAttributes.POSITION_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.POSITION_TWEEN_X));\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.POSITION_TWEEN_Y));\r\n\t            if (positionTweenX.length) {\r\n\t                positionTweenX[0] = this.position.x;\r\n\t            }\r\n\t            if (positionTweenY.length) {\r\n\t                positionTweenY[0] = this.position.y;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.POSITION_TWEEN_X));\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.POSITION_TWEEN_Y));\r\n\t        }\r\n\t        var tweenX = positionTweenX || [];\r\n\t        var tweenY = positionTweenY || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.POSITION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.POSITION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.POSITION_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.BaseElementAttributes.POSITION_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.BaseElementAttributes.POSITION_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.BaseElementAttributes.POSITION_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.POSITION_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.positionTween(this, { tweenX: tweenX, tweenY: tweenY, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    BaseElement.prototype.runSkewTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.BaseElementAttributes.SKEW_TWEEN_X) &&\r\n\t            !node.hasAttribute(exports.BaseElementAttributes.SKEW_TWEEN_Y)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"skew\");\r\n\t        var skewTweenX;\r\n\t        var skewTweenY;\r\n\t        var skewTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.SKEW_TWEEN_POSITION, null);\r\n\t        if (skewTweenPosition == exports.BaseElementAttributes.SKEW_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            skewTweenX = node.hasAttribute(exports.BaseElementAttributes.SKEW_TWEEN_X)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.SKEW_TWEEN_X)).map(function (value) { return Tweens_1.Tweens.degrees2radians(value) + _this.skew.x; })\r\n\t                : null;\r\n\t            skewTweenY = node.hasAttribute(exports.BaseElementAttributes.SKEW_TWEEN_Y)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.SKEW_TWEEN_Y)).map(function (value) { return Tweens_1.Tweens.degrees2radians(value) + _this.skew.y; })\r\n\t                : null;\r\n\t        }\r\n\t        else if (skewTweenPosition == exports.BaseElementAttributes.SKEW_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            skewTweenX = node.hasAttribute(exports.BaseElementAttributes.SKEW_TWEEN_X)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.SKEW_TWEEN_X)).map(function (value) {\r\n\t                    return Tweens_1.Tweens.degrees2radians(value);\r\n\t                })\r\n\t                : null;\r\n\t            skewTweenY = node.hasAttribute(exports.BaseElementAttributes.SKEW_TWEEN_Y)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.SKEW_TWEEN_Y)).map(function (value) {\r\n\t                    return Tweens_1.Tweens.degrees2radians(value);\r\n\t                })\r\n\t                : null;\r\n\t            if (skewTweenX && skewTweenX.length) {\r\n\t                skewTweenX[0] = this.skew.x;\r\n\t            }\r\n\t            if (skewTweenY && skewTweenY.length) {\r\n\t                skewTweenY[0] = this.skew.y;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            skewTweenX = node.hasAttribute(exports.BaseElementAttributes.SKEW_TWEEN_X)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.SKEW_TWEEN_X)).map(function (value) {\r\n\t                    return Tweens_1.Tweens.degrees2radians(value);\r\n\t                })\r\n\t                : null;\r\n\t            skewTweenY = node.hasAttribute(exports.BaseElementAttributes.SKEW_TWEEN_Y)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.SKEW_TWEEN_Y)).map(function (value) {\r\n\t                    return Tweens_1.Tweens.degrees2radians(value);\r\n\t                })\r\n\t                : null;\r\n\t        }\r\n\t        var tweenX = skewTweenX || [];\r\n\t        var tweenY = skewTweenY || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.SKEW_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.SKEW_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SKEW_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.BaseElementAttributes.SKEW_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.BaseElementAttributes.SKEW_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.BaseElementAttributes.SKEW_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.SKEW_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.skewTween(this, { tweenX: tweenX, tweenY: tweenY, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    BaseElement.prototype.runRotationTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.BaseElementAttributes.ROTATION_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"rotation\");\r\n\t        var rotationTween;\r\n\t        var rotationTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.ROTATION_TWEEN_POSITION, null);\r\n\t        if (rotationTweenPosition == exports.BaseElementAttributes.ROTATION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.ROTATION_TWEEN)).map(function (value) { return value + Tweens_1.Tweens.radians2degrees(_this.rotation); });\r\n\t        }\r\n\t        else if (rotationTweenPosition == exports.BaseElementAttributes.ROTATION_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.ROTATION_TWEEN));\r\n\t            if (rotationTween.length) {\r\n\t                rotationTween[0] = Tweens_1.Tweens.radians2degrees(this.rotation);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.ROTATION_TWEEN));\r\n\t        }\r\n\t        var degrees = rotationTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.ROTATION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.ROTATION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.ROTATION_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.BaseElementAttributes.ROTATION_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.BaseElementAttributes.ROTATION_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.BaseElementAttributes.ROTATION_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.ROTATION_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.rotationTween(this, { degrees: degrees, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    BaseElement.prototype.runScaleTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.BaseElementAttributes.SCALE_TWEEN_X) &&\r\n\t            !node.hasAttribute(exports.BaseElementAttributes.SCALE_TWEEN_Y) &&\r\n\t            !node.hasAttribute(exports.BaseElementAttributes.SCALE_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"scale\");\r\n\t        var scaleTweenX;\r\n\t        var scaleTweenY;\r\n\t        var scaleTween;\r\n\t        var tweenValues = [];\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE_TWEEN_X)) {\r\n\t            scaleTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.SCALE_TWEEN_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE_TWEEN_Y)) {\r\n\t            scaleTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.SCALE_TWEEN_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE_TWEEN)) {\r\n\t            scaleTween = BaseElement._getPointsFromPointsAttribute(node.getAttribute(exports.BaseElementAttributes.SCALE_TWEEN));\r\n\t        }\r\n\t        var scaleTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.SCALE_TWEEN_POSITION, null);\r\n\t        if (scaleTween && scaleTween.length) {\r\n\t            if (scaleTweenPosition == exports.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                tweenValues = scaleTween.map(function (value) {\r\n\t                    return {\r\n\t                        x: value.x + _this.scale.x,\r\n\t                        y: value.y + _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t            else if (scaleTweenPosition == exports.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                tweenValues = scaleTween;\r\n\t                if (tweenValues.length) {\r\n\t                    tweenValues[0].x = this.scale.x;\r\n\t                    tweenValues[0].y = this.scale.y;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                tweenValues = scaleTween;\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenX && scaleTweenY) {\r\n\t            if (scaleTweenX.length === scaleTweenY.length) {\r\n\t                if (scaleTweenPosition == exports.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                    tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                        return {\r\n\t                            x: scaleXValue + _this.scale.x,\r\n\t                            y: scaleTweenY[i] + _this.scale.y,\r\n\t                        };\r\n\t                    });\r\n\t                }\r\n\t                else if (scaleTweenPosition == exports.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                    tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                        return {\r\n\t                            x: scaleXValue,\r\n\t                            y: scaleTweenY[i],\r\n\t                        };\r\n\t                    });\r\n\t                    if (tweenValues.length) {\r\n\t                        tweenValues[0].x = this.scale.x;\r\n\t                        tweenValues[0].y = this.scale.y;\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                        return {\r\n\t                            x: scaleXValue,\r\n\t                            y: scaleTweenY[i],\r\n\t                        };\r\n\t                    });\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenX) {\r\n\t            if (scaleTweenPosition == exports.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue + _this.scale.x,\r\n\t                        y: _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t            else if (scaleTweenPosition == exports.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue,\r\n\t                        y: _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t                if (tweenValues.length) {\r\n\t                    tweenValues[0].x = this.scale.x;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue,\r\n\t                        y: _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenY) {\r\n\t            if (scaleTweenPosition == exports.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                    return {\r\n\t                        x: _this.scale.x,\r\n\t                        y: scaleYValue + _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t            else if (scaleTweenPosition == exports.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                    return {\r\n\t                        x: _this.scale.x,\r\n\t                        y: scaleYValue,\r\n\t                    };\r\n\t                });\r\n\t                if (tweenValues.length) {\r\n\t                    tweenValues[0].y = this.scale.y;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                    return {\r\n\t                        x: _this.scale.x,\r\n\t                        y: scaleYValue,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.BaseElementAttributes.SCALE_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.BaseElementAttributes.SCALE_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.BaseElementAttributes.SCALE_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.BaseElementAttributes.SCALE_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.BaseElementAttributes.SCALE_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.BaseElementAttributes.SCALE_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.SCALE_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.scaleTween(this, { tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    BaseElement.prototype.runTween = function (node) {\r\n\t        if (node.hasAttribute(Tweens_1.TweensAttributes.TWEEN)) {\r\n\t            var tweens = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN));\r\n\t            for (var i = 0; i < tweens.length; i++) {\r\n\t                if (!node.hasAttribute(Tweens_1.TweensAttributes.TWEEN_VALUES + i)) {\r\n\t                    return false;\r\n\t                }\r\n\t                var tween = tweens[i];\r\n\t                var tweenValues = this.formatTweenValues(tween, neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_VALUES + i)));\r\n\t                var tweenDuration = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DURATION + i) || \"120\");\r\n\t                var tweenEase = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_EASE + i) || \"linear\");\r\n\t                var tweenDelay = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DELAY + i) || \"0\");\r\n\t                var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, Tweens_1.TweensAttributes.TWEEN_LOOP + i, null);\r\n\t                Tweens_1.Tweens.removeTweens(this, tween);\r\n\t                if (tween == \"scale\") {\r\n\t                    tween = \"scale.x\";\r\n\t                    tweens[i] = \"scale.y\";\r\n\t                    i--;\r\n\t                }\r\n\t                Tweens_1.Tweens.customTween(this, { tween: tween, tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    BaseElement.prototype.formatTweenValues = function (tween, values) {\r\n\t        var tweenValues = [];\r\n\t        if (tween === \"scale\") {\r\n\t            tween = \"scale.x\";\r\n\t        }\r\n\t        var property = tween.split(\".\");\r\n\t        var value;\r\n\t        for (var i = 0; i < values.length; i++) {\r\n\t            var current = values[i];\r\n\t            switch (current[current.length - 1]) {\r\n\t                case \"c\":\r\n\t                    if (property.length == 1) {\r\n\t                        value = this[property[0]];\r\n\t                        if (property[0] === \"rotation\") {\r\n\t                            value = this.radians2degrees(value);\r\n\t                        }\r\n\t                        tweenValues.push(value);\r\n\t                    }\r\n\t                    else if (property.length == 2) {\r\n\t                        tweenValues.push(this[property[0]][property[1]]);\r\n\t                    }\r\n\t                    break;\r\n\t                case \"+\":\r\n\t                    value = parseFloat(current.slice(0, -1));\r\n\t                    if (tweenValues.length > 0) {\r\n\t                        value = tweenValues[tweenValues.length - 1] + value;\r\n\t                    }\r\n\t                    tweenValues.push(value);\r\n\t                    break;\r\n\t                case \"-\":\r\n\t                    value = parseFloat(current.slice(0, -1));\r\n\t                    if (tweenValues.length > 0) {\r\n\t                        value = tweenValues[tweenValues.length - 1] - value;\r\n\t                    }\r\n\t                    tweenValues.push(value);\r\n\t                    break;\r\n\t                default:\r\n\t                    tweenValues.push(parseFloat(current));\r\n\t            }\r\n\t        }\r\n\t        return tweenValues;\r\n\t    };\r\n\t    BaseElement._getPointsFromPointsAttribute = function (pointsString) {\r\n\t        if (!pointsString) {\r\n\t            return [];\r\n\t        }\r\n\t        return pointsString\r\n\t            .replace(/\\s/g, \"\")\r\n\t            .split(\";\")\r\n\t            .map(function (valuesPair) {\r\n\t            return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\r\n\t        })\r\n\t            .map(function (valuesPair) {\r\n\t            return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n\t        });\r\n\t    };\r\n\t    BaseElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    BaseElement.prototype.logError = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.errorGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    BaseElement.prototype.degrees2radians = function (degrees) {\r\n\t        return degrees * (Math.PI / 180);\r\n\t    };\r\n\t    BaseElement.prototype.radians2degrees = function (radians) {\r\n\t        return radians * (180 / Math.PI);\r\n\t    };\r\n\t    BaseElement._destroyOptions = {\r\n\t        children: true,\r\n\t    };\r\n\t    BaseElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], BaseElement);\r\n\t    return BaseElement;\r\n\t}(PIXI.Container));\r\n\texports.BaseElement = BaseElement;\r\n\texports.BaseElementAttributes = {\r\n\t    ALPHA: \"Alpha\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\r\n\t    ALPHA_TWEEN_KEY_TIMES: \"AlphaTweenKeyTimes\",\r\n\t    ALPHA_TWEEN_POSITION: \"AlphaTweenPosition\",\r\n\t    ALPHA_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    BITMAP_MASK: \"BitmapMask\",\r\n\t    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\r\n\t    BITMAP_MASK_X: \"BitmapMaskX\",\r\n\t    BITMAP_MASK_Y: \"BitmapMaskY\",\r\n\t    BITMAP_MASK_SCALE_X: \"BitmapMaskScaleX\",\r\n\t    BITMAP_MASK_SCALE_Y: \"BitmapMaskScaleY\",\r\n\t    BITMAP_MASK_SCALE: \"BitmapMaskScale\",\r\n\t    DEBUG: \"Debug\",\r\n\t    MASK: \"Mask\",\r\n\t    PIVOT_X: \"PivotX\",\r\n\t    PIVOT_Y: \"PivotY\",\r\n\t    POSITION_TWEEN_X: \"PositionTweenX\",\r\n\t    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n\t    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n\t    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n\t    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\r\n\t    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n\t    POSITION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\r\n\t    POSITION_TWEEN_KEY_TIMES: \"PositionTweenKeyTimes\",\r\n\t    ROTATION_TWEEN: \"RotationTween\",\r\n\t    ROTATION_TWEEN_DEGREES: \"RotationTweenDegrees\",\r\n\t    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\t    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n\t    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n\t    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\r\n\t    ROTATION_TWEEN_KEY_TIMES: \"RotationTweenKeyTimes\",\r\n\t    ROTATION_TWEEN_POSITION: \"RotationTweenPosition\",\r\n\t    ROTATION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    ROTATION: \"Rotation\",\r\n\t    SCALE_TWEEN: \"ScaleTween\",\r\n\t    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\r\n\t    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n\t    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n\t    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\r\n\t    SCALE_TWEEN_KEY_TIMES: \"ScaleTweenKeyTimes\",\r\n\t    SCALE_TWEEN_POSITION: \"ScaleTweenPosition\",\r\n\t    SCALE_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    SCALE_TWEEN_X: \"ScaleTweenX\",\r\n\t    SCALE_TWEEN_Y: \"ScaleTweenY\",\r\n\t    SCALE: \"Scale\",\r\n\t    SCALE_X: \"ScaleX\",\r\n\t    SCALE_Y: \"ScaleY\",\r\n\t    SKEW_X: \"SkewX\",\r\n\t    SKEW_Y: \"SkewY\",\r\n\t    SKEW_TWEEN_X: \"SkewTweenX\",\r\n\t    SKEW_TWEEN_Y: \"SkewTweenY\",\r\n\t    SKEW_TWEEN_EASE: \"SkewTweenEase\",\r\n\t    SKEW_TWEEN_DURATION: \"SkewTweenDuration\",\r\n\t    SKEW_TWEEN_DELAY: \"SkewTweenDelay\",\r\n\t    SKEW_TWEEN_POSITION: \"SkewTweenPosition\",\r\n\t    SKEW_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    SKEW_TWEEN_LOOP: \"SkewTweenLoop\",\r\n\t    SKEW_TWEEN_KEY_TIMES: \"SkewTweenKeyTimes\",\r\n\t    START_ROTATION: \"StartRotation\",\r\n\t    TWEEN_ENGINE: \"TweenEngine\",\r\n\t    TWEEN_PERSISTENT: \"TweenPersistent\",\r\n\t    VISIBLE: \"Visible\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t};\r\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar StyleManager_1 = __webpack_require__(18);\r\n\tvar Attributes_1 = __webpack_require__(19);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar CustomUtils_1 = __webpack_require__(20);\r\n\tvar ShapeElement = (function (_super) {\r\n\t    __extends(ShapeElement, _super);\r\n\t    function ShapeElement() {\r\n\t        _super.call(this);\r\n\t        this._x = 0;\r\n\t        this._y = 0;\r\n\t        this._color = 0xff0000;\r\n\t        this._uid = this.componentName + \"_\" + neo_common_1.Utils.generateUuid();\r\n\t    }\r\n\t    Object.defineProperty(ShapeElement.prototype, \"tweenEngine\", {\r\n\t        get: function () {\r\n\t            return this._tweenEngine;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ShapeElement.prototype.internalDestroy = function (options) {\r\n\t        Tweens_1.Tweens.removeTweens(this);\r\n\t    };\r\n\t    ShapeElement.prototype.create = function (node) {\r\n\t        Tweens_1.Tweens.removeTweens(this);\r\n\t        if (this.name == null) {\r\n\t            this.name = node.nodeName;\r\n\t        }\r\n\t        if (node.hasAttribute(\"Style\")) {\r\n\t            this.style = StyleManager_1.StyleManager.Styles[node.getAttribute(exports.ShapeElementAttributes.STYLE)];\r\n\t            if (this.style != null) {\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no style with name: \" + node.getAttribute(exports.ShapeElementAttributes.STYLE));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (!this.updateByNode(node)) {\r\n\t            this.redraw();\r\n\t        }\r\n\t    };\r\n\t    ShapeElement.prototype.redraw = function () {\r\n\t        this.clear();\r\n\t        this.beginFill(this._color, this._fillAlpha);\r\n\t        this.lineStyle(this._lineWidth, this._lineColor, this._lineAlpha);\r\n\t        this.drawRect(this._x, this._y, this._width, this._height);\r\n\t        this.endFill();\r\n\t    };\r\n\t    ShapeElement.prototype.updateByNode = function (node) {\r\n\t        var redraw = false;\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.LINE_COLOR)) {\r\n\t            this._lineColor = parseInt(node.getAttribute(exports.ShapeElementAttributes.LINE_COLOR), 16);\r\n\t            redraw = true;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.LINE_WIDTH)) {\r\n\t            this._lineWidth = parseInt(node.getAttribute(exports.ShapeElementAttributes.LINE_WIDTH));\r\n\t            redraw = true;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.LINE_ALPHA)) {\r\n\t            this._lineAlpha = parseInt(node.getAttribute(exports.ShapeElementAttributes.LINE_ALPHA));\r\n\t            redraw = true;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.COLOR)) {\r\n\t            this._color = parseInt(node.getAttribute(exports.ShapeElementAttributes.COLOR), 16);\r\n\t            redraw = true;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.FILL_ALPHA)) {\r\n\t            this._fillAlpha = parseInt(node.getAttribute(exports.ShapeElementAttributes.FILL_ALPHA));\r\n\t            redraw = true;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.BLEND_MODE)) {\r\n\t            this.blendMode = CustomUtils_1.CustomUtils.getBlendMode(parseInt(node.getAttribute(exports.ShapeElementAttributes.BLEND_MODE)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.VISIBLE)) {\r\n\t            this.visible = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ShapeElementAttributes.VISIBLE));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.POSITION_X)) {\r\n\t            this.position.x = parseInt(node.getAttribute(exports.ShapeElementAttributes.POSITION_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.POSITION_Y)) {\r\n\t            this.position.y = parseInt(node.getAttribute(exports.ShapeElementAttributes.POSITION_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.X)) {\r\n\t            this._x = parseInt(node.getAttribute(exports.ShapeElementAttributes.X));\r\n\t            redraw = true;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.Y)) {\r\n\t            this._y = parseInt(node.getAttribute(exports.ShapeElementAttributes.Y));\r\n\t            redraw = true;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.WIDTH)) {\r\n\t            this._width = parseInt(node.getAttribute(exports.ShapeElementAttributes.WIDTH));\r\n\t            redraw = true;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.HEIGHT)) {\r\n\t            this._height = parseInt(node.getAttribute(exports.ShapeElementAttributes.HEIGHT));\r\n\t            redraw = true;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.ALPHA)) {\r\n\t            this.alpha = parseFloat(node.getAttribute(exports.ShapeElementAttributes.ALPHA));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.PIVOT_X)) {\r\n\t            this.pivot.x = parseFloat(node.getAttribute(exports.ShapeElementAttributes.PIVOT_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.PIVOT_Y)) {\r\n\t            this.pivot.y = parseFloat(node.getAttribute(exports.ShapeElementAttributes.PIVOT_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.SCALE)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.ShapeElementAttributes.SCALE));\r\n\t            this.scale.y = this.scale.x;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.SCALE_X)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.ShapeElementAttributes.SCALE_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.SCALE_Y)) {\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.ShapeElementAttributes.SCALE_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ShapeElementAttributes.MASK)) {\r\n\t            var next = node.parentElement.firstElementChild;\r\n\t            while (next != null) {\r\n\t                if (next.nodeName === node.getAttribute(exports.ShapeElementAttributes.MASK)) {\r\n\t                    var shapeElement = new ShapeElement();\r\n\t                    shapeElement.create(next);\r\n\t                    this.mask = shapeElement;\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t            if (this.mask == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no element with name: \" + node.getAttribute(exports.ShapeElementAttributes.MASK));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.runAlphaTween(node);\r\n\t        this.runPositionTween(node);\r\n\t        this.runRotationTween(node);\r\n\t        this.runScaleTween(node);\r\n\t        this.runSkewTween(node);\r\n\t        this.runTween(node);\r\n\t        if (redraw) {\r\n\t            this.redraw();\r\n\t        }\r\n\t        return redraw;\r\n\t    };\r\n\t    ShapeElement.prototype.runAlphaTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(BaseElement_1.BaseElementAttributes.ALPHA_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"alpha\");\r\n\t        var alphaTween;\r\n\t        var alphaTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, BaseElement_1.BaseElementAttributes.ALPHA_TWEEN_POSITION, null);\r\n\t        if (alphaTweenPosition == BaseElement_1.BaseElementAttributes.ALPHA_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.ALPHA_TWEEN)).map(function (value) { return value + _this.alpha; });\r\n\t        }\r\n\t        else if (alphaTweenPosition == BaseElement_1.BaseElementAttributes.ALPHA_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.ALPHA_TWEEN));\r\n\t            if (alphaTween.length) {\r\n\t                alphaTween[0] = this.alpha;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.ALPHA_TWEEN));\r\n\t        }\r\n\t        var alphas = alphaTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, BaseElement_1.BaseElementAttributes.ALPHA_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, BaseElement_1.BaseElementAttributes.ALPHA_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(BaseElement_1.BaseElementAttributes.ALPHA_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(BaseElement_1.BaseElementAttributes.ALPHA_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, BaseElement_1.BaseElementAttributes.ALPHA_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(BaseElement_1.BaseElementAttributes.ALPHA_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.ALPHA_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.alphaTween(this, { alphas: alphas, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    ShapeElement.prototype.runPositionTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(BaseElement_1.BaseElementAttributes.POSITION_TWEEN_X) ||\r\n\t            !node.hasAttribute(BaseElement_1.BaseElementAttributes.POSITION_TWEEN_Y)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        var positionTweenX;\r\n\t        var positionTweenY;\r\n\t        var positionTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, BaseElement_1.BaseElementAttributes.POSITION_TWEEN_POSITION, null);\r\n\t        if (positionTweenPosition == BaseElement_1.BaseElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.POSITION_TWEEN_X)).map(function (value) { return value + _this.position.x; });\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.POSITION_TWEEN_Y)).map(function (value) { return value + _this.position.y; });\r\n\t        }\r\n\t        else if (positionTweenPosition == BaseElement_1.BaseElementAttributes.POSITION_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.POSITION_TWEEN_X));\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.POSITION_TWEEN_Y));\r\n\t            if (positionTweenX.length) {\r\n\t                positionTweenX[0] = this.position.x;\r\n\t            }\r\n\t            if (positionTweenY.length) {\r\n\t                positionTweenY[0] = this.position.y;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.POSITION_TWEEN_X));\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.POSITION_TWEEN_Y));\r\n\t        }\r\n\t        var tweenX = positionTweenX || [];\r\n\t        var tweenY = positionTweenY || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, BaseElement_1.BaseElementAttributes.POSITION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, BaseElement_1.BaseElementAttributes.POSITION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(BaseElement_1.BaseElementAttributes.POSITION_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(BaseElement_1.BaseElementAttributes.POSITION_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, BaseElement_1.BaseElementAttributes.POSITION_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(BaseElement_1.BaseElementAttributes.POSITION_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.POSITION_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.positionTween(this, { tweenX: tweenX, tweenY: tweenY, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    ShapeElement.prototype.runSkewTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_X) &&\r\n\t            !node.hasAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_Y)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"skew\");\r\n\t        var skewTweenX;\r\n\t        var skewTweenY;\r\n\t        var skewTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, BaseElement_1.BaseElementAttributes.SKEW_TWEEN_POSITION, null);\r\n\t        if (skewTweenPosition == BaseElement_1.BaseElementAttributes.SKEW_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            skewTweenX = node.hasAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_X)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_X)).map(function (value) { return Tweens_1.Tweens.degrees2radians(value) + _this.skew.x; })\r\n\t                : null;\r\n\t            skewTweenY = node.hasAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_Y)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_Y)).map(function (value) { return Tweens_1.Tweens.degrees2radians(value) + _this.skew.y; })\r\n\t                : null;\r\n\t        }\r\n\t        else if (skewTweenPosition == BaseElement_1.BaseElementAttributes.SKEW_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            skewTweenX = node.hasAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_X)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_X)).map(function (value) {\r\n\t                    return Tweens_1.Tweens.degrees2radians(value);\r\n\t                })\r\n\t                : null;\r\n\t            skewTweenY = node.hasAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_Y)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_Y)).map(function (value) {\r\n\t                    return Tweens_1.Tweens.degrees2radians(value);\r\n\t                })\r\n\t                : null;\r\n\t            if (skewTweenX && skewTweenX.length) {\r\n\t                skewTweenX[0] = this.skew.x;\r\n\t            }\r\n\t            if (skewTweenY && skewTweenY.length) {\r\n\t                skewTweenY[0] = this.skew.y;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            skewTweenX = node.hasAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_X)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_X)).map(function (value) {\r\n\t                    return Tweens_1.Tweens.degrees2radians(value);\r\n\t                })\r\n\t                : null;\r\n\t            skewTweenY = node.hasAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_Y)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_Y)).map(function (value) {\r\n\t                    return Tweens_1.Tweens.degrees2radians(value);\r\n\t                })\r\n\t                : null;\r\n\t        }\r\n\t        var tweenX = skewTweenX || [];\r\n\t        var tweenY = skewTweenY || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, BaseElement_1.BaseElementAttributes.SKEW_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, BaseElement_1.BaseElementAttributes.SKEW_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, BaseElement_1.BaseElementAttributes.SKEW_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.SKEW_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.skewTween(this, { tweenX: tweenX, tweenY: tweenY, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    ShapeElement.prototype.runRotationTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(BaseElement_1.BaseElementAttributes.ROTATION_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"rotation\");\r\n\t        var rotationTween;\r\n\t        var rotationTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, BaseElement_1.BaseElementAttributes.ROTATION_TWEEN_POSITION, null);\r\n\t        if (rotationTweenPosition == BaseElement_1.BaseElementAttributes.ROTATION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.ROTATION_TWEEN)).map(function (value) { return value + Tweens_1.Tweens.radians2degrees(_this.rotation); });\r\n\t        }\r\n\t        else if (rotationTweenPosition == BaseElement_1.BaseElementAttributes.ROTATION_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.ROTATION_TWEEN));\r\n\t            if (rotationTween.length) {\r\n\t                rotationTween[0] = Tweens_1.Tweens.radians2degrees(this.rotation);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.ROTATION_TWEEN));\r\n\t        }\r\n\t        var degrees = rotationTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, BaseElement_1.BaseElementAttributes.ROTATION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, BaseElement_1.BaseElementAttributes.ROTATION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(BaseElement_1.BaseElementAttributes.ROTATION_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(BaseElement_1.BaseElementAttributes.ROTATION_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, BaseElement_1.BaseElementAttributes.ROTATION_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(BaseElement_1.BaseElementAttributes.ROTATION_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.ROTATION_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.rotationTween(this, { degrees: degrees, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    ShapeElement.prototype.runScaleTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(BaseElement_1.BaseElementAttributes.SCALE_TWEEN_X) &&\r\n\t            !node.hasAttribute(BaseElement_1.BaseElementAttributes.SCALE_TWEEN_Y) &&\r\n\t            !node.hasAttribute(BaseElement_1.BaseElementAttributes.SCALE_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"scale\");\r\n\t        var scaleTweenX;\r\n\t        var scaleTweenY;\r\n\t        var scaleTween;\r\n\t        var tweenValues = [];\r\n\t        if (node.hasAttribute(BaseElement_1.BaseElementAttributes.SCALE_TWEEN_X)) {\r\n\t            scaleTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.SCALE_TWEEN_X));\r\n\t        }\r\n\t        if (node.hasAttribute(BaseElement_1.BaseElementAttributes.SCALE_TWEEN_Y)) {\r\n\t            scaleTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.SCALE_TWEEN_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(BaseElement_1.BaseElementAttributes.SCALE_TWEEN)) {\r\n\t            scaleTween = ShapeElement._getPointsFromPointsAttribute(node.getAttribute(BaseElement_1.BaseElementAttributes.SCALE_TWEEN));\r\n\t        }\r\n\t        var scaleTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, BaseElement_1.BaseElementAttributes.SCALE_TWEEN_POSITION, null);\r\n\t        if (scaleTween && scaleTween.length) {\r\n\t            if (scaleTweenPosition == BaseElement_1.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                tweenValues = scaleTween.map(function (value) {\r\n\t                    return {\r\n\t                        x: value.x + _this.scale.x,\r\n\t                        y: value.y + _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t            else if (scaleTweenPosition == BaseElement_1.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                tweenValues = scaleTween;\r\n\t                if (tweenValues.length) {\r\n\t                    tweenValues[0].x = this.scale.x;\r\n\t                    tweenValues[0].y = this.scale.y;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                tweenValues = scaleTween;\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenX && scaleTweenY) {\r\n\t            if (scaleTweenX.length === scaleTweenY.length) {\r\n\t                if (scaleTweenPosition == BaseElement_1.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                    tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                        return {\r\n\t                            x: scaleXValue + _this.scale.x,\r\n\t                            y: scaleTweenY[i] + _this.scale.y,\r\n\t                        };\r\n\t                    });\r\n\t                }\r\n\t                else if (scaleTweenPosition == BaseElement_1.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                    tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                        return {\r\n\t                            x: scaleXValue,\r\n\t                            y: scaleTweenY[i],\r\n\t                        };\r\n\t                    });\r\n\t                    if (tweenValues.length) {\r\n\t                        tweenValues[0].x = this.scale.x;\r\n\t                        tweenValues[0].y = this.scale.y;\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                        return {\r\n\t                            x: scaleXValue,\r\n\t                            y: scaleTweenY[i],\r\n\t                        };\r\n\t                    });\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenX) {\r\n\t            if (scaleTweenPosition == BaseElement_1.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue + _this.scale.x,\r\n\t                        y: _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t            else if (scaleTweenPosition == BaseElement_1.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue,\r\n\t                        y: _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t                if (tweenValues.length) {\r\n\t                    tweenValues[0].x = this.scale.x;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue,\r\n\t                        y: _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenY) {\r\n\t            if (scaleTweenPosition == BaseElement_1.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                    return {\r\n\t                        x: _this.scale.x,\r\n\t                        y: scaleYValue + _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t            else if (scaleTweenPosition == BaseElement_1.BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                    return {\r\n\t                        x: _this.scale.x,\r\n\t                        y: scaleYValue,\r\n\t                    };\r\n\t                });\r\n\t                if (tweenValues.length) {\r\n\t                    tweenValues[0].y = this.scale.y;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                    return {\r\n\t                        x: _this.scale.x,\r\n\t                        y: scaleYValue,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, BaseElement_1.BaseElementAttributes.SCALE_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, BaseElement_1.BaseElementAttributes.SCALE_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(BaseElement_1.BaseElementAttributes.SCALE_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(BaseElement_1.BaseElementAttributes.SCALE_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, BaseElement_1.BaseElementAttributes.SCALE_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(BaseElement_1.BaseElementAttributes.SCALE_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(BaseElement_1.BaseElementAttributes.SCALE_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.scaleTween(this, { tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    ShapeElement.prototype.runTween = function (node) {\r\n\t        if (node.hasAttribute(Tweens_1.TweensAttributes.TWEEN)) {\r\n\t            var tweens = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN));\r\n\t            for (var i = 0; i < tweens.length; i++) {\r\n\t                if (!node.hasAttribute(Tweens_1.TweensAttributes.TWEEN_VALUES + i)) {\r\n\t                    return false;\r\n\t                }\r\n\t                var tween = tweens[i];\r\n\t                var tweenValues = this.formatTweenValues(tween, neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_VALUES + i)));\r\n\t                var tweenDuration = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DURATION + i) || \"120\");\r\n\t                var tweenEase = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_EASE + i) || \"linear\");\r\n\t                var tweenDelay = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DELAY + i) || \"0\");\r\n\t                var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, Tweens_1.TweensAttributes.TWEEN_LOOP + i, null);\r\n\t                Tweens_1.Tweens.removeTweens(this, tween);\r\n\t                if (tween == \"scale\") {\r\n\t                    tween = \"scale.x\";\r\n\t                    tweens[i] = \"scale.y\";\r\n\t                    i--;\r\n\t                }\r\n\t                Tweens_1.Tweens.customTween(this, { tween: tween, tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ShapeElement.prototype.formatTweenValues = function (tween, values) {\r\n\t        var tweenValues = [];\r\n\t        if (tween === \"scale\") {\r\n\t            tween = \"scale.x\";\r\n\t        }\r\n\t        var property = tween.split(\".\");\r\n\t        var value;\r\n\t        for (var i = 0; i < values.length; i++) {\r\n\t            var current = values[i];\r\n\t            switch (current[current.length - 1]) {\r\n\t                case \"c\":\r\n\t                    if (property.length == 1) {\r\n\t                        value = this[property[0]];\r\n\t                        if (property[0] === \"rotation\") {\r\n\t                            value = this.radians2degrees(value);\r\n\t                        }\r\n\t                        tweenValues.push(value);\r\n\t                    }\r\n\t                    else if (property.length == 2) {\r\n\t                        tweenValues.push(this[property[0]][property[1]]);\r\n\t                    }\r\n\t                    break;\r\n\t                case \"+\":\r\n\t                    value = parseFloat(current.slice(0, -1));\r\n\t                    if (tweenValues.length > 0) {\r\n\t                        value = tweenValues[tweenValues.length - 1] + value;\r\n\t                    }\r\n\t                    tweenValues.push(value);\r\n\t                    break;\r\n\t                case \"-\":\r\n\t                    value = parseFloat(current.slice(0, -1));\r\n\t                    if (tweenValues.length > 0) {\r\n\t                        value = tweenValues[tweenValues.length - 1] - value;\r\n\t                    }\r\n\t                    tweenValues.push(value);\r\n\t                    break;\r\n\t                default:\r\n\t                    tweenValues.push(parseFloat(current));\r\n\t            }\r\n\t        }\r\n\t        return tweenValues;\r\n\t    };\r\n\t    ShapeElement.prototype.degrees2radians = function (degrees) {\r\n\t        return degrees * (Math.PI / 180);\r\n\t    };\r\n\t    ShapeElement.prototype.radians2degrees = function (radians) {\r\n\t        return radians * (180 / Math.PI);\r\n\t    };\r\n\t    ShapeElement._getPointsFromPointsAttribute = function (pointsString) {\r\n\t        if (!pointsString) {\r\n\t            return [];\r\n\t        }\r\n\t        return pointsString\r\n\t            .replace(/\\s/g, \"\")\r\n\t            .split(\";\")\r\n\t            .map(function (valuesPair) {\r\n\t            return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\r\n\t        })\r\n\t            .map(function (valuesPair) {\r\n\t            return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n\t        });\r\n\t    };\r\n\t    Object.defineProperty(ShapeElement.prototype, \"uid\", {\r\n\t        get: function () {\r\n\t            return this._uid;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ShapeElement.prototype, \"componentName\", {\r\n\t        get: function () {\r\n\t            return this.__componentName__;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ShapeElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    ShapeElement.prototype.logError = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.errorGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    ShapeElement.prototype.clone = function () {\r\n\t        var element = new ShapeElement();\r\n\t        element.removeChildren();\r\n\t        element._x = this._x;\r\n\t        element._y = this._y;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.tint = this.tint;\r\n\t        element.blendMode = this.blendMode;\r\n\t        element.name = this.name;\r\n\t        element._tweenEngine = this._tweenEngine;\r\n\t        element._width = this._width;\r\n\t        element._height = this._height;\r\n\t        element._lineWidth = this._lineWidth;\r\n\t        element._lineColor = this._lineColor;\r\n\t        element._lineAlpha = this._lineAlpha;\r\n\t        element._fillAlpha = this._fillAlpha;\r\n\t        element._color = this._color;\r\n\t        element.redraw();\r\n\t        return element;\r\n\t    };\r\n\t    ShapeElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ShapeElement);\r\n\t    return ShapeElement;\r\n\t}(PIXI.Graphics));\r\n\texports.ShapeElement = ShapeElement;\r\n\texports.ShapeElementAttributes = {\r\n\t    ALPHA: \"Alpha\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_KEY_TIMES: \"AlphaTweenKeyTimes\",\r\n\t    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\r\n\t    ALPHA_TWEEN_POSITION: \"AlphaTweenPosition\",\r\n\t    ALPHA_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    COLOR: \"Color\",\r\n\t    FILL_ALPHA: \"FillAlpha\",\r\n\t    HEIGHT: \"Height\",\r\n\t    LINE_ALPHA: \"LineAlpha\",\r\n\t    LINE_COLOR: \"LineColor\",\r\n\t    LINE_WIDTH: \"LineWidth\",\r\n\t    MASK: \"Mask\",\r\n\t    PIVOT_X: \"PivotX\",\r\n\t    PIVOT_Y: \"PivotY\",\r\n\t    SCALE_X: \"ScaleX\",\r\n\t    SCALE_Y: \"ScaleY\",\r\n\t    SCALE: \"Scale\",\r\n\t    STYLE: \"Style\",\r\n\t    VISIBLE: \"Visible\",\r\n\t    WIDTH: \"Width\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t    POSITION_X: \"PositionX\",\r\n\t    POSITION_Y: \"PositionY\",\r\n\t};\r\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\texports.ComponentTypes = {\r\n\t    Element: \"Element\",\r\n\t    DisplayObject: \"DisplayObject\",\r\n\t    HtmlElement: \"HtmlElement\",\r\n\t    PlayList: \"PlayList\",\r\n\t    Song: \"Song\",\r\n\t    Style: \"Style\",\r\n\t    HtmlStyle: \"HtmlStyle\",\r\n\t    Controller: \"Controller\",\r\n\t    LinkedElement: \"LinkedElement\",\r\n\t    ActionSet: \"ActionSet\",\r\n\t};\r\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar GsapEffects_1 = __webpack_require__(15);\r\n\tvar Tweens = (function () {\r\n\t    function Tweens() {\r\n\t    }\r\n\t    Tweens.registerTween = function (uid, tween) {\r\n\t        if (uid != null) {\r\n\t            if (Tweens.tweenArray[uid] != null) {\r\n\t                Tweens.tweenArray[uid].push(tween);\r\n\t            }\r\n\t            else {\r\n\t                Tweens.tweenArray[uid] = [tween];\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Tweens.getRegisteredTweens = function (uid) {\r\n\t        if (uid != null) {\r\n\t            if (Tweens.tweenArray[uid] != null) {\r\n\t                return {\r\n\t                    tweens: Tweens.tweenArray[uid],\r\n\t                    length: Tweens.tweenArray[uid].length,\r\n\t                };\r\n\t            }\r\n\t            return null;\r\n\t        }\r\n\t        else {\r\n\t            return {\r\n\t                tweens: Tweens.tweenArray,\r\n\t                length: Object.keys(Tweens.tweenArray).length,\r\n\t            };\r\n\t        }\r\n\t    };\r\n\t    Tweens.removeTweenFromRegistry = function (uid, property) {\r\n\t        if (property === void 0) { property = \"all\"; }\r\n\t        if (uid != null) {\r\n\t            if (Tweens.tweenArray[uid] != null) {\r\n\t                for (var i = Tweens.tweenArray[uid].length - 1; i >= 0; i--) {\r\n\t                    var tween = Tweens.tweenArray[uid][i];\r\n\t                    if (tween.name === \"alphaTween\" && (property === \"alpha\" || property === \"all\")) {\r\n\t                        Tweens.tweenArray[uid][i] = null;\r\n\t                        Tweens.tweenArray[uid].splice(i, 1);\r\n\t                    }\r\n\t                    if (tween.name === \"positionTween\" && (property === \"position\" || property === \"all\")) {\r\n\t                        Tweens.tweenArray[uid][i] = null;\r\n\t                        Tweens.tweenArray[uid].splice(i, 1);\r\n\t                    }\r\n\t                    if (tween.name === \"skewTween\" && (property === \"skew\" || property === \"all\")) {\r\n\t                        Tweens.tweenArray[uid][i] = null;\r\n\t                        Tweens.tweenArray[uid].splice(i, 1);\r\n\t                    }\r\n\t                    if (tween.name === \"scaleTween\" && (property === \"scale\" || property === \"all\")) {\r\n\t                        Tweens.tweenArray[uid][i] = null;\r\n\t                        Tweens.tweenArray[uid].splice(i, 1);\r\n\t                    }\r\n\t                    if (tween.name === \"rotationTween\" && (property === \"rotation\" || property === \"all\")) {\r\n\t                        Tweens.tweenArray[uid][i] = null;\r\n\t                        Tweens.tweenArray[uid].splice(i, 1);\r\n\t                    }\r\n\t                    if (tween.name === property + \"Tween\" &&\r\n\t                        property !== \"alpha\" &&\r\n\t                        property !== \"position\" &&\r\n\t                        property !== \"scale\" &&\r\n\t                        property !== \"rotation\") {\r\n\t                        Tweens.tweenArray[uid][i] = null;\r\n\t                        Tweens.tweenArray[uid].splice(i, 1);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Tweens.restartTweens = function (uid) {\r\n\t        if (Tweens.tweenArray[uid] != null) {\r\n\t            for (var i = 0; i < Tweens.tweenArray[uid].length; i++) {\r\n\t                Tweens.tweenArray[uid][i].restart();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Tweens.removeTweens = function (object, property) {\r\n\t        if (property === void 0) { property = \"all\"; }\r\n\t        if (object !== undefined) {\r\n\t            if (object.uid != null) {\r\n\t                if (Tweens.tweenArray[object.uid] != null) {\r\n\t                    if (Tweens.tweenArray[object.uid].length > 0) {\r\n\t                        for (var i = Tweens.tweenArray[object.uid].length - 1; i >= 0; i--) {\r\n\t                            var tween = Tweens.tweenArray[object.uid][i];\r\n\t                            if (tween.name === \"alphaTween\" && (property === \"alpha\" || property === \"all\")) {\r\n\t                                tween.kill({ alpha: true }, object);\r\n\t                                Tweens.tweenArray[object.uid][i] = null;\r\n\t                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n\t                            }\r\n\t                            if (tween.name === \"positionTween\" && (property === \"position\" || property === \"all\")) {\r\n\t                                tween.kill(null, object.position);\r\n\t                                Tweens.tweenArray[object.uid][i] = null;\r\n\t                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n\t                            }\r\n\t                            if (tween.name === \"skewTween\" && (property === \"skew\" || property === \"all\")) {\r\n\t                                tween.kill(null, object.position);\r\n\t                                Tweens.tweenArray[object.uid][i] = null;\r\n\t                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n\t                            }\r\n\t                            if (tween.name === \"scaleTween\" && (property === \"scale\" || property === \"all\")) {\r\n\t                                tween.kill(null, object.scale);\r\n\t                                Tweens.tweenArray[object.uid][i] = null;\r\n\t                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n\t                            }\r\n\t                            if (tween.name === \"rotationTween\" && (property === \"rotation\" || property === \"all\")) {\r\n\t                                tween.kill({ rotation: true }, object);\r\n\t                                Tweens.tweenArray[object.uid][i] = null;\r\n\t                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n\t                            }\r\n\t                            if (tween.name === property + \"Tween\" &&\r\n\t                                property !== \"alpha\" &&\r\n\t                                property !== \"position\" &&\r\n\t                                property !== \"scale\" &&\r\n\t                                property !== \"rotation\") {\r\n\t                                tween.kill((_a = {}, _a[property] = true, _a), object);\r\n\t                                Tweens.tweenArray[object.uid][i] = null;\r\n\t                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        var _a;\r\n\t    };\r\n\t    Tweens.alphaTween = function (object, options) {\r\n\t        if (options.alphas.length < 2) {\r\n\t            return;\r\n\t        }\r\n\t        object.alpha = options.alphas.shift();\r\n\t        if (options.keyTimes && options.keyTimes.length) {\r\n\t            options.keyTimes = options.keyTimes.slice();\r\n\t            options.keyTimes.shift();\r\n\t        }\r\n\t        var tween;\r\n\t        if (options.alphas.length === 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.alphaTween_Tweenlite(object, options);\r\n\t        }\r\n\t        else if (options.alphas.length > 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.alphaTween_TimelineLite(object, options);\r\n\t        }\r\n\t        tween.name = \"alphaTween\";\r\n\t        tween.objectName = object.name;\r\n\t        this.registerTween(object.uid, tween);\r\n\t        return tween;\r\n\t    };\r\n\t    Tweens.positionTween = function (object, options) {\r\n\t        if ((!options.tweenX && !options.tweenY) || (options.tweenX.length < 2 && options.tweenY.length < 2)) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR No tweenX or tweenY option for \" + (object.name ? object.name : \"object\"));\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (options.tweenX.length !== options.tweenY.length) {\r\n\t            if (options.tweenX.length > options.tweenY.length) {\r\n\t                options.tweenY = Array.apply(null, Array(options.tweenX.length)).map(function (value) { return object.position.y || 0; });\r\n\t            }\r\n\t            else {\r\n\t                options.tweenX = Array.apply(null, Array(options.tweenY.length)).map(function (value) { return object.position.x || 0; });\r\n\t            }\r\n\t        }\r\n\t        object.position.x = options.tweenX.shift();\r\n\t        object.position.y = options.tweenY.shift();\r\n\t        if (options.keyTimes && options.keyTimes.length) {\r\n\t            options.keyTimes = options.keyTimes.slice();\r\n\t            options.keyTimes.shift();\r\n\t        }\r\n\t        var tween;\r\n\t        if (options.tweenX.length === 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.positionTween_Tweenlite(object, options);\r\n\t        }\r\n\t        else if (options.tweenX.length > 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.positionTween_TimelineLite(object, options);\r\n\t        }\r\n\t        tween.name = \"positionTween\";\r\n\t        tween.objectName = object.name;\r\n\t        this.registerTween(object.uid, tween);\r\n\t        return tween;\r\n\t    };\r\n\t    Tweens.skewTween = function (object, options) {\r\n\t        if ((!options.tweenX && !options.tweenY) || (options.tweenX.length < 2 && options.tweenY.length < 2)) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR No tweenX or tweenY option for \" + (object.name ? object.name : \"object\"));\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (options.tweenX.length !== options.tweenY.length) {\r\n\t            if (options.tweenX.length > options.tweenY.length) {\r\n\t                options.tweenY = Array.apply(null, Array(options.tweenX.length)).map(function (value) { return object.skew.y || 0; });\r\n\t            }\r\n\t            else {\r\n\t                options.tweenX = Array.apply(null, Array(options.tweenY.length)).map(function (value) { return object.skew.x || 0; });\r\n\t            }\r\n\t        }\r\n\t        object.skew.x = options.tweenX.shift();\r\n\t        object.skew.y = options.tweenY.shift();\r\n\t        if (options.keyTimes && options.keyTimes.length) {\r\n\t            options.keyTimes = options.keyTimes.slice();\r\n\t            options.keyTimes.shift();\r\n\t        }\r\n\t        var tween;\r\n\t        if (options.tweenX.length === 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.skewTween_Tweenlite(object, options);\r\n\t        }\r\n\t        else if (options.tweenX.length > 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.skewTween_TimelineLite(object, options);\r\n\t        }\r\n\t        tween.name = \"skewTween\";\r\n\t        tween.objectName = object.name;\r\n\t        this.registerTween(object.uid, tween);\r\n\t        return tween;\r\n\t    };\r\n\t    Tweens.rotationTween = function (object, options) {\r\n\t        if (options.degrees.length < 2) {\r\n\t            return;\r\n\t        }\r\n\t        object.rotation = Tweens.degrees2radians(options.degrees.shift());\r\n\t        if (options.keyTimes && options.keyTimes.length) {\r\n\t            options.keyTimes = options.keyTimes.slice();\r\n\t            options.keyTimes.shift();\r\n\t        }\r\n\t        var tween;\r\n\t        if (options.degrees.length === 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.rotationTween_Tweenlite(object, options);\r\n\t        }\r\n\t        else if (options.degrees.length > 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.rotationTween_TimelineLite(object, options);\r\n\t        }\r\n\t        tween.name = \"rotationTween\";\r\n\t        tween.objectName = object.name;\r\n\t        this.registerTween(object.uid, tween);\r\n\t        return tween;\r\n\t    };\r\n\t    Tweens.scaleTween = function (object, options) {\r\n\t        if (options.tweenValues.length < 2) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR No ScaleTweenX or ScaleTweenY or ScaleTween option for \" +\r\n\t                    (object.name ? object.name : \"object\"));\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        object.scale.x = options.tweenValues[0].x;\r\n\t        object.scale.y = options.tweenValues[0].y;\r\n\t        options.tweenValues.shift();\r\n\t        if (options.keyTimes && options.keyTimes.length) {\r\n\t            options.keyTimes = options.keyTimes.slice();\r\n\t            options.keyTimes.shift();\r\n\t        }\r\n\t        var tween;\r\n\t        if (options.tweenValues.length === 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.scaleTween_Tweenlite(object, options);\r\n\t        }\r\n\t        else if (options.tweenValues.length > 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.scaleTween_TimelineLite(object, options);\r\n\t        }\r\n\t        tween.name = \"scaleTween\";\r\n\t        tween.objectName = object.name;\r\n\t        this.registerTween(object.uid, tween);\r\n\t        return tween;\r\n\t    };\r\n\t    Tweens.customTween = function (object, options) {\r\n\t        var property = options.tween.split(\".\");\r\n\t        options = Tweens.prepareTweenData(options);\r\n\t        if (property.length == 1) {\r\n\t            object[property[0]] = options.tweenValues.shift();\r\n\t        }\r\n\t        else if (property.length == 2) {\r\n\t            object[property[0]][property[1]] = options.tweenValues.shift();\r\n\t        }\r\n\t        var tween;\r\n\t        if (options.tweenValues.length === 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.tween_Tweenlite(object, options);\r\n\t        }\r\n\t        else if (options.tweenValues.length > 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.tween_TimelineLite(object, options);\r\n\t        }\r\n\t        tween.name = property[0] + \"Tween\";\r\n\t        tween.objectName = object.name;\r\n\t        this.registerTween(object.uid, tween);\r\n\t        return tween;\r\n\t    };\r\n\t    Tweens.colorTween = function (object, options) {\r\n\t        if (options.tweenValues.length < 2) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR Not enough tweenValues option for \" + (object.name ? object.name : \"object\"));\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        object[options.tween] = options.tweenValues.shift();\r\n\t        if (options.keyTimes && options.keyTimes.length) {\r\n\t            options.keyTimes.shift();\r\n\t        }\r\n\t        var tween;\r\n\t        if (options.tweenValues.length === 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.colorTween_Tweenlite(object, options);\r\n\t        }\r\n\t        else if (options.tweenValues.length > 1) {\r\n\t            tween = GsapEffects_1.GsapEffects.colorTween_TimelineLite(object, options);\r\n\t        }\r\n\t        tween.name = options.tween + \"Tween\";\r\n\t        tween.objectName = object.name;\r\n\t        this.registerTween(object.uid, tween);\r\n\t        return tween;\r\n\t    };\r\n\t    Tweens.prepareTweenData = function (data) {\r\n\t        var length = data.tweenValues.length - 1;\r\n\t        data.tweenEase = Tweens.stringValueToFormatedArray(length, data.tweenEase, \"linear\");\r\n\t        data.tweenDelay = Tweens.numberValueToFormatedArray(length, data.tweenDelay, 0);\r\n\t        data.tweenDelay = data.tweenDelay.map(function (x) {\r\n\t            return x * GsapEffects_1.GsapEffects.TickTime;\r\n\t        });\r\n\t        if (data.tweenDuration != null) {\r\n\t            if (data.tweenDuration.length == 1) {\r\n\t                var partDuration = data.tweenDuration[0] / length;\r\n\t                data.tweenDuration = Tweens.numberValueToFormatedArray(length, null, partDuration);\r\n\t            }\r\n\t            else {\r\n\t                data.tweenDuration = Tweens.numberValueToFormatedArray(length, data.tweenDuration, 30);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            var defaultValue = Math.floor(Math.random() * 120 + 120);\r\n\t            data.tweenDuration = Tweens.numberValueToFormatedArray(length, null, defaultValue);\r\n\t        }\r\n\t        data.tweenDuration = data.tweenDuration.map(function (x) {\r\n\t            return x * GsapEffects_1.GsapEffects.TickTime;\r\n\t        });\r\n\t        if (data.tween == \"rotation\") {\r\n\t            data.tweenValues = data.tweenValues.map(function (x) {\r\n\t                return Tweens.degrees2radians(x);\r\n\t            });\r\n\t        }\r\n\t        return data;\r\n\t    };\r\n\t    Tweens.stringValueToFormatedArray = function (length, data, defaultValue) {\r\n\t        if (data != null) {\r\n\t            if (Array.isArray(data)) {\r\n\t                if (data.length == length) {\r\n\t                    return data;\r\n\t                }\r\n\t                if (data.length < length) {\r\n\t                    for (var i = data.length; i < length; i++) {\r\n\t                        data.push(defaultValue);\r\n\t                    }\r\n\t                    return data;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                return Array.apply(null, Array(length)).map(function (value) { return data; });\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            return Array.apply(null, Array(length)).map(function (value) { return defaultValue; });\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    Tweens.numberValueToFormatedArray = function (length, data, defaultValue) {\r\n\t        if (data != null) {\r\n\t            if (Array.isArray(data)) {\r\n\t                if (data.length == length) {\r\n\t                    return data;\r\n\t                }\r\n\t                if (data.length < length) {\r\n\t                    for (var i = data.length; i < length; i++) {\r\n\t                        data.push(defaultValue);\r\n\t                    }\r\n\t                    return data;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                return Array.apply(null, Array(length)).map(function (value) { return data; });\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            return Array.apply(null, Array(length)).map(function (value) { return defaultValue; });\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    Tweens.degrees2radians = function (degrees) {\r\n\t        return degrees * (Math.PI / 180);\r\n\t    };\r\n\t    Tweens.radians2degrees = function (radians) {\r\n\t        return radians * (180 / Math.PI);\r\n\t    };\r\n\t    Object.defineProperty(Tweens, \"componentName\", {\r\n\t        get: function () {\r\n\t            return \"Tweens\";\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Tweens.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = Tweens.componentName;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    Tweens.tweenArray = [];\r\n\t    return Tweens;\r\n\t}());\r\n\texports.Tweens = Tweens;\r\n\texports.TweensAttributes = {\r\n\t    TWEEN: \"Tween\",\r\n\t    TWEEN_VALUES: \"TweenValues\",\r\n\t    TWEEN_EASE: \"TweenEase\",\r\n\t    TWEEN_DURATION: \"TweenDuration\",\r\n\t    TWEEN_DELAY: \"TweenDelay\",\r\n\t    TWEEN_LOOP: \"TweenLoop\",\r\n\t};\r\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar gsap_1 = __webpack_require__(16);\r\n\tvar GsapEffects = (function () {\r\n\t    function GsapEffects() {\r\n\t    }\r\n\t    GsapEffects.alphaTween_TimelineLite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.alphas.length) * GsapEffects.TickTime;\r\n\t        var tweenPaused = options.paused;\r\n\t        var tweenEaseArray = (options.tweenEase || \"Linear.easeNone\")\r\n\t            .split(\";\")\r\n\t            .map(function (value) { return GsapEffects.getEaseing(value); });\r\n\t        var alphaTimeline = new gsap_1.TimelineLite({\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t            paused: tweenPaused || false,\r\n\t        });\r\n\t        options.alphas.forEach(function (alpha, i) {\r\n\t            alphaTimeline.to(object, options.keyTimes && options.keyTimes[i] != null\r\n\t                ? (i > 0 ? options.keyTimes[i] - options.keyTimes[i - 1] : options.keyTimes[i]) *\r\n\t                    tweenDuration *\r\n\t                    GsapEffects.TickTime\r\n\t                : tweenDurationPerPart, {\r\n\t                alpha: alpha,\r\n\t                ease: tweenEaseArray[i] || tweenEaseArray[0],\r\n\t                paused: tweenPaused || false,\r\n\t            });\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            alphaTimeline.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            alphaTimeline.eventCallback(\"onComplete\", alphaTimeline.restart);\r\n\t        }\r\n\t        return alphaTimeline;\r\n\t    };\r\n\t    GsapEffects.alphaTween_Tweenlite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.alphas.length) * GsapEffects.TickTime;\r\n\t        var tweenEase = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n\t        var tweenPaused = options.paused;\r\n\t        var alphaTweenLite;\r\n\t        alphaTweenLite = gsap_1.TweenLite.to(object, tweenDurationPerPart, {\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t            alpha: options.alphas,\r\n\t            ease: tweenEase,\r\n\t            paused: tweenPaused || false,\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            alphaTweenLite.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            alphaTweenLite.eventCallback(\"onComplete\", alphaTweenLite.restart);\r\n\t        }\r\n\t        return alphaTweenLite;\r\n\t    };\r\n\t    GsapEffects.positionTween_TimelineLite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.tweenX.length) * GsapEffects.TickTime;\r\n\t        var tweenPaused = options.paused;\r\n\t        var tweenEaseArray = (options.tweenEase || \"Linear.easeNone\")\r\n\t            .split(\";\")\r\n\t            .map(function (value) { return GsapEffects.getEaseing(value); });\r\n\t        var positionTimeline = new gsap_1.TimelineLite({\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t        });\r\n\t        options.tweenX.forEach(function (tweenX, i) {\r\n\t            positionTimeline.to(object.position, options.keyTimes && options.keyTimes[i] != null\r\n\t                ? (i > 0 ? options.keyTimes[i] - options.keyTimes[i - 1] : options.keyTimes[i]) *\r\n\t                    tweenDuration *\r\n\t                    GsapEffects.TickTime\r\n\t                : tweenDurationPerPart, {\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                x: tweenX,\r\n\t                y: options.tweenY[i],\r\n\t                ease: tweenEaseArray[i] || tweenEaseArray[0],\r\n\t                paused: tweenPaused || false,\r\n\t            });\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            positionTimeline.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            positionTimeline.eventCallback(\"onComplete\", positionTimeline.restart);\r\n\t        }\r\n\t        return positionTimeline;\r\n\t    };\r\n\t    GsapEffects.skewTween_TimelineLite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.tweenX.length) * GsapEffects.TickTime;\r\n\t        var tweenPaused = options.paused;\r\n\t        var tweenEaseArray = (options.tweenEase || \"Linear.easeNone\")\r\n\t            .split(\";\")\r\n\t            .map(function (value) { return GsapEffects.getEaseing(value); });\r\n\t        var skewTimeline = new gsap_1.TimelineLite({\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t        });\r\n\t        options.tweenX.forEach(function (tweenX, i) {\r\n\t            skewTimeline.to(object.skew, options.keyTimes && options.keyTimes[i] != null\r\n\t                ? (i > 0 ? options.keyTimes[i] - options.keyTimes[i - 1] : options.keyTimes[i]) *\r\n\t                    tweenDuration *\r\n\t                    GsapEffects.TickTime\r\n\t                : tweenDurationPerPart, {\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                x: tweenX,\r\n\t                y: options.tweenY[i],\r\n\t                ease: tweenEaseArray[i] || tweenEaseArray[0],\r\n\t                paused: tweenPaused || false,\r\n\t            });\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            skewTimeline.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            skewTimeline.eventCallback(\"onComplete\", skewTimeline.restart);\r\n\t        }\r\n\t        return skewTimeline;\r\n\t    };\r\n\t    GsapEffects.positionTween_Tweenlite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.tweenX.length) * GsapEffects.TickTime;\r\n\t        var tweenEase = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n\t        var tweenBezier = options.bezier;\r\n\t        var tweenPaused = options.paused;\r\n\t        var positionTweenLite;\r\n\t        if (tweenBezier != null) {\r\n\t            positionTweenLite = gsap_1.TweenLite.to(object.position, tweenDurationPerPart, {\r\n\t                bezier: tweenBezier || 0,\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                delay: options.tweenDelay != null && options.tweenDelay > 0\r\n\t                    ? options.tweenDelay * GsapEffects.TickTime\r\n\t                    : 0,\r\n\t                ease: tweenEase,\r\n\t                paused: tweenPaused || false,\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            positionTweenLite = gsap_1.TweenLite.to(object.position, tweenDurationPerPart, {\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                delay: options.tweenDelay != null && options.tweenDelay > 0\r\n\t                    ? options.tweenDelay * GsapEffects.TickTime\r\n\t                    : 0,\r\n\t                x: options.tweenX[0],\r\n\t                y: options.tweenY[0],\r\n\t                ease: tweenEase,\r\n\t                paused: tweenPaused || false,\r\n\t            });\r\n\t        }\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            positionTweenLite.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            positionTweenLite.eventCallback(\"onComplete\", positionTweenLite.restart);\r\n\t        }\r\n\t        return positionTweenLite;\r\n\t    };\r\n\t    GsapEffects.skewTween_Tweenlite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.tweenX.length) * GsapEffects.TickTime;\r\n\t        var tweenEase = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n\t        var tweenBezier = options.bezier;\r\n\t        var tweenPaused = options.paused;\r\n\t        var skewTweenLite;\r\n\t        if (tweenBezier != null) {\r\n\t            skewTweenLite = gsap_1.TweenLite.to(object.skew, tweenDurationPerPart, {\r\n\t                bezier: tweenBezier || 0,\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                delay: options.tweenDelay != null && options.tweenDelay > 0\r\n\t                    ? options.tweenDelay * GsapEffects.TickTime\r\n\t                    : 0,\r\n\t                ease: tweenEase,\r\n\t                paused: tweenPaused || false,\r\n\t                roundProps: \"bezier\",\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            skewTweenLite = gsap_1.TweenLite.to(object.skew, tweenDurationPerPart, {\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                delay: options.tweenDelay != null && options.tweenDelay > 0\r\n\t                    ? options.tweenDelay * GsapEffects.TickTime\r\n\t                    : 0,\r\n\t                x: options.tweenX[0],\r\n\t                y: options.tweenY[0],\r\n\t                ease: tweenEase,\r\n\t                paused: tweenPaused || false,\r\n\t            });\r\n\t        }\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            skewTweenLite.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            skewTweenLite.eventCallback(\"onComplete\", skewTweenLite.restart);\r\n\t        }\r\n\t        return skewTweenLite;\r\n\t    };\r\n\t    GsapEffects.rotationTween_TimelineLite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.degrees.length) * GsapEffects.TickTime;\r\n\t        var tweenPaused = options.paused;\r\n\t        var tweenEaseArray = (options.tweenEase || \"Linear.easeNone\")\r\n\t            .split(\";\")\r\n\t            .map(function (value) { return GsapEffects.getEaseing(value); });\r\n\t        var rotationTimeline = new gsap_1.TimelineLite({\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t            paused: tweenPaused || false,\r\n\t        });\r\n\t        options.degrees.map(GsapEffects.degrees2radians).forEach(function (degree, i) {\r\n\t            rotationTimeline.to(object, options.keyTimes && options.keyTimes[i] != null\r\n\t                ? (i > 0 ? options.keyTimes[i] - options.keyTimes[i - 1] : options.keyTimes[i]) *\r\n\t                    tweenDuration *\r\n\t                    GsapEffects.TickTime\r\n\t                : tweenDurationPerPart, {\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                rotation: degree,\r\n\t                ease: tweenEaseArray[i] || tweenEaseArray[0],\r\n\t                paused: tweenPaused || false,\r\n\t            });\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            rotationTimeline.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            rotationTimeline.eventCallback(\"onComplete\", rotationTimeline.restart);\r\n\t        }\r\n\t        return rotationTimeline;\r\n\t    };\r\n\t    GsapEffects.rotationTween_Tweenlite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.degrees.length) * GsapEffects.TickTime;\r\n\t        var tweenEase = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n\t        var tweenPaused = options.paused;\r\n\t        var rotationTweenLite;\r\n\t        rotationTweenLite = gsap_1.TweenLite.to(object, tweenDurationPerPart, {\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t            rotation: GsapEffects.degrees2radians(options.degrees[0]),\r\n\t            ease: tweenEase,\r\n\t            paused: tweenPaused || false,\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            rotationTweenLite.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            rotationTweenLite.eventCallback(\"onComplete\", rotationTweenLite.restart);\r\n\t        }\r\n\t        return rotationTweenLite;\r\n\t    };\r\n\t    GsapEffects.scaleTween_TimelineLite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.tweenValues.length) * GsapEffects.TickTime;\r\n\t        var tweenPaused = options.paused;\r\n\t        var tweenEaseArray = (options.tweenEase || \"Linear.easeNone\")\r\n\t            .split(\";\")\r\n\t            .map(function (value) { return GsapEffects.getEaseing(value); });\r\n\t        var scaleTimeline = new gsap_1.TimelineLite({\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t            paused: tweenPaused || false,\r\n\t        });\r\n\t        options.tweenValues.forEach(function (tweenValue, i) {\r\n\t            scaleTimeline.to(object.scale, options.keyTimes && options.keyTimes[i] != null\r\n\t                ? (i > 0 ? options.keyTimes[i] - options.keyTimes[i - 1] : options.keyTimes[i]) *\r\n\t                    tweenDuration *\r\n\t                    GsapEffects.TickTime\r\n\t                : tweenDurationPerPart, {\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                x: tweenValue.x,\r\n\t                y: tweenValue.y,\r\n\t                ease: tweenEaseArray[i] || tweenEaseArray[0],\r\n\t                paused: tweenPaused || false,\r\n\t                roundProps: \"bezier\",\r\n\t            });\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            scaleTimeline.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            scaleTimeline.eventCallback(\"onComplete\", scaleTimeline.restart);\r\n\t        }\r\n\t        return scaleTimeline;\r\n\t    };\r\n\t    GsapEffects.scaleTween_Tweenlite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.tweenValues.length) * GsapEffects.TickTime;\r\n\t        var tweenEase = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n\t        var tweenPaused = options.paused;\r\n\t        var scaleTweenLite;\r\n\t        scaleTweenLite = gsap_1.TweenLite.to(object.scale, tweenDurationPerPart, {\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t            x: options.tweenValues[0].x,\r\n\t            y: options.tweenValues[0].y,\r\n\t            ease: tweenEase,\r\n\t            paused: tweenPaused || false,\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            scaleTweenLite.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            scaleTweenLite.eventCallback(\"onComplete\", scaleTweenLite.restart);\r\n\t        }\r\n\t        return scaleTweenLite;\r\n\t    };\r\n\t    GsapEffects.colorTween_TimelineLite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.tweenValues.length) * GsapEffects.TickTime;\r\n\t        var tweenPaused = options.paused;\r\n\t        var tweenEaseArray = (options.tweenEase || \"Linear.easeNone\")\r\n\t            .split(\";\")\r\n\t            .map(function (value) { return GsapEffects.getEaseing(value); });\r\n\t        var timeline = new gsap_1.TimelineLite({\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n\t            paused: tweenPaused || false,\r\n\t        });\r\n\t        options.tweenValues.forEach(function (value, i) {\r\n\t            timeline.to(object, options.keyTimes && options.keyTimes[i] != null\r\n\t                ? (i > 0 ? options.keyTimes[i] - options.keyTimes[i - 1] : options.keyTimes[i]) *\r\n\t                    tweenDuration *\r\n\t                    GsapEffects.TickTime\r\n\t                : tweenDurationPerPart, {\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                ease: tweenEaseArray[i] || tweenEaseArray[0],\r\n\t                paused: tweenPaused || false,\r\n\t                delay: options.tweenDelay[i],\r\n\t                colorProps: (_a = {},\r\n\t                    _a[options.tween] = value,\r\n\t                    _a.format = typeof value == \"number\" ? \"number\" : undefined,\r\n\t                    _a\r\n\t                ),\r\n\t            });\r\n\t            var _a;\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            timeline.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            timeline.eventCallback(\"onComplete\", timeline.restart);\r\n\t        }\r\n\t        return timeline;\r\n\t    };\r\n\t    GsapEffects.colorTween_Tweenlite = function (object, options) {\r\n\t        var tweenDuration = options.tweenDuration == null || isNaN(options.tweenDuration)\r\n\t            ? Math.floor(Math.random() * 120 + 120)\r\n\t            : options.tweenDuration;\r\n\t        var tweenDurationPerPart = (tweenDuration / options.tweenValues.length) * GsapEffects.TickTime;\r\n\t        var tweenPaused = options.paused;\r\n\t        var tweenlite;\r\n\t        tweenlite = gsap_1.TweenLite.to(object, tweenDurationPerPart, {\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay || 0,\r\n\t            ease: GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\",\r\n\t            paused: tweenPaused || false,\r\n\t            colorProps: (_a = {},\r\n\t                _a[options.tween] = options.tweenValues[0],\r\n\t                _a.format = typeof options.tweenValues[0] == \"number\" ? \"number\" : undefined,\r\n\t                _a\r\n\t            ),\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            tweenlite.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            tweenlite.eventCallback(\"onComplete\", tweenlite.restart);\r\n\t        }\r\n\t        return tweenlite;\r\n\t        var _a;\r\n\t    };\r\n\t    GsapEffects.tween_TimelineLite = function (object, options) {\r\n\t        var tween = options.tween.split(\".\");\r\n\t        var tweenProperty = tween[tween.length - 1];\r\n\t        var tweenPaused = options.paused;\r\n\t        var timeline = new gsap_1.TimelineLite({\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t        });\r\n\t        options.tweenValues.forEach(function (value, i) {\r\n\t            timeline.to(tween.length == 1 ? object : object[tween[0]], options.tweenDuration[i], (_a = {\r\n\t                    useFrames: GsapEffects.UseFrames\r\n\t                },\r\n\t                _a[tweenProperty] = value,\r\n\t                _a.ease = GsapEffects.getEaseing(options.tweenEase[i]) || \"Linear.easeNone\",\r\n\t                _a.paused = tweenPaused || false,\r\n\t                _a.delay = options.tweenDelay[i],\r\n\t                _a\r\n\t            ));\r\n\t            var _a;\r\n\t        });\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            timeline.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            timeline.eventCallback(\"onComplete\", timeline.restart);\r\n\t        }\r\n\t        return timeline;\r\n\t    };\r\n\t    GsapEffects.tween_Tweenlite = function (object, options) {\r\n\t        var tween = options.tween.split(\".\");\r\n\t        var tweenProperty = tween[tween.length - 1];\r\n\t        var tweenPaused = options.paused;\r\n\t        var tweenlite;\r\n\t        tweenlite = gsap_1.TweenLite.to(tween.length == 1 ? object : object[tween[0]], options.tweenDuration[0], (_a = {\r\n\t                useFrames: GsapEffects.UseFrames,\r\n\t                delay: options.tweenDelay[0]\r\n\t            },\r\n\t            _a[tweenProperty] = options.tweenValues[0],\r\n\t            _a.ease = GsapEffects.getEaseing(options.tweenEase[0]) || \"Linear.easeNone\",\r\n\t            _a.paused = tweenPaused || false,\r\n\t            _a\r\n\t        ));\r\n\t        if (options.callbackFunction != null) {\r\n\t            if (options.callbackType == null) {\r\n\t                options.callbackType = \"onComplete\";\r\n\t            }\r\n\t            tweenlite.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            tweenlite.eventCallback(\"onComplete\", tweenlite.restart);\r\n\t        }\r\n\t        return tweenlite;\r\n\t        var _a;\r\n\t    };\r\n\t    GsapEffects.degrees2radians = function (degrees) {\r\n\t        return degrees * (Math.PI / 180);\r\n\t    };\r\n\t    GsapEffects.getEaseing = function (ease) {\r\n\t        switch (\"\" + ease) {\r\n\t            case \"0\":\r\n\t            case \"linear\":\r\n\t                return \"Linear.easeNone\";\r\n\t            case \"1\":\r\n\t            case \"backIn\":\r\n\t                return \"Back.easeIn\";\r\n\t            case \"2\":\r\n\t            case \"backInOut\":\r\n\t                return \"Back.easeInOut\";\r\n\t            case \"3\":\r\n\t            case \"backOut\":\r\n\t                return \"Back.easeOut\";\r\n\t            case \"4\":\r\n\t            case \"bounceIn\":\r\n\t                return \"Bounce.easeIn\";\r\n\t            case \"5\":\r\n\t            case \"bounceInOut\":\r\n\t                return \"Bounce.easeInOut\";\r\n\t            case \"6\":\r\n\t            case \"bounceOut\":\r\n\t                return \"Bounce.easeOut\";\r\n\t            case \"7\":\r\n\t            case \"circIn\":\r\n\t                return \"Circ.easeIn\";\r\n\t            case \"8\":\r\n\t            case \"circInOut\":\r\n\t                return \"Circ.easeInOut\";\r\n\t            case \"9\":\r\n\t            case \"circOut\":\r\n\t                return \"Circ.easeOut\";\r\n\t            case \"10\":\r\n\t            case \"cubicIn\":\r\n\t                return \"Cubic.easeIn\";\r\n\t            case \"11\":\r\n\t            case \"cubicInOut\":\r\n\t                return \"Cubic.easeInOut\";\r\n\t            case \"12\":\r\n\t            case \"cubicOut\":\r\n\t                return \"Cubic.easeOut\";\r\n\t            case \"13\":\r\n\t            case \"elasticIn\":\r\n\t                return \"Elastic.easeIn\";\r\n\t            case \"14\":\r\n\t            case \"elasticInOut\":\r\n\t                return \"Elastic.easeInOut\";\r\n\t            case \"15\":\r\n\t            case \"elasticOut\":\r\n\t                return \"Elastic.easeOut\";\r\n\t            case \"16\":\r\n\t            case \"quadIn\":\r\n\t                return \"Quad.easeIn\";\r\n\t            case \"17\":\r\n\t            case \"quadInOut\":\r\n\t                return \"Quad.easeInOut\";\r\n\t            case \"18\":\r\n\t            case \"quadOut\":\r\n\t                return \"Quad.easeOut\";\r\n\t            case \"19\":\r\n\t            case \"quartIn\":\r\n\t                return \"Quart.easeIn\";\r\n\t            case \"20\":\r\n\t            case \"quartInOut\":\r\n\t                return \"Quart.easeInOut\";\r\n\t            case \"21\":\r\n\t            case \"quartOut\":\r\n\t                return \"Quart.easeOut\";\r\n\t            case \"22\":\r\n\t            case \"quintIn\":\r\n\t                return \"Quint.easeIn\";\r\n\t            case \"23\":\r\n\t            case \"quintInOut\":\r\n\t                return \"Quint.easeInOut\";\r\n\t            case \"24\":\r\n\t            case \"quintOut\":\r\n\t                return \"Quint.easeOut\";\r\n\t            case \"25\":\r\n\t            case \"sineIn\":\r\n\t                return \"Sine.easeIn\";\r\n\t            case \"26\":\r\n\t            case \"sineInOut\":\r\n\t                return \"Sine.easeInOut\";\r\n\t            case \"27\":\r\n\t            case \"sineOut\":\r\n\t                return \"Sine.easeOut\";\r\n\t            case \"28\":\r\n\t            case \"expoOut\":\r\n\t                return \"Expo.easeOut\";\r\n\t            case \"29\":\r\n\t            case \"expoIn\":\r\n\t                return \"Expo.easeIn\";\r\n\t            default:\r\n\t                return \"Linear.easeNone\";\r\n\t        }\r\n\t    };\r\n\t    GsapEffects.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__ || \"GsapEffects\";\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    GsapEffects.UseFrames = false;\r\n\t    GsapEffects.TickTime = 0.0167;\r\n\t    return GsapEffects;\r\n\t}());\r\n\texports.GsapEffects = GsapEffects;\r\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global) {/*!\n\t * VERSION: 1.19.0\n\t * DATE: 2016-07-14\n\t * UPDATES AND DOCS AT: http://greensock.com\n\t * \n\t * Includes all of the following: TweenLite, TweenMax, TimelineLite, TimelineMax, EasePack, CSSPlugin, RoundPropsPlugin, BezierPlugin, AttrPlugin, DirectionalRotationPlugin\n\t *\n\t * @license Copyright (c) 2008-2016, GreenSock. All rights reserved.\n\t * This work is subject to the terms at http://greensock.com/standard-license or for\n\t * Club GreenSock members, the software agreement that was issued with your membership.\n\t * \n\t * @author: Jack Doyle, jack@greensock.com\n\t **/\n\tvar _gsScope = (typeof(module) !== \"undefined\" && module.exports && typeof(global) !== \"undefined\") ? global : this || window; //helps ensure compatibility with AMD/RequireJS and CommonJS/Node\n\t(_gsScope._gsQueue || (_gsScope._gsQueue = [])).push( function() {\n\t\n\t\t\"use strict\";\n\t\n\t\t_gsScope._gsDefine(\"TweenMax\", [\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"], function(Animation, SimpleTimeline, TweenLite) {\n\t\n\t\t\tvar _slice = function(a) { //don't use [].slice because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\tvar b = [],\n\t\t\t\t\t\tl = a.length,\n\t\t\t\t\t\ti;\n\t\t\t\t\tfor (i = 0; i !== l; b.push(a[i++]));\n\t\t\t\t\treturn b;\n\t\t\t\t},\n\t\t\t\t_applyCycle = function(vars, targets, i) {\n\t\t\t\t\tvar alt = vars.cycle,\n\t\t\t\t\t\tp, val;\n\t\t\t\t\tfor (p in alt) {\n\t\t\t\t\t\tval = alt[p];\n\t\t\t\t\t\tvars[p] = (typeof(val) === \"function\") ? val(i, targets[i]) : val[i % val.length];\n\t\t\t\t\t}\n\t\t\t\t\tdelete vars.cycle;\n\t\t\t\t},\n\t\t\t\tTweenMax = function(target, duration, vars) {\n\t\t\t\t\tTweenLite.call(this, target, duration, vars);\n\t\t\t\t\tthis._cycle = 0;\n\t\t\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\t\tthis._dirty = true; //ensures that if there is any repeat, the totalDuration will get recalculated to accurately report it.\n\t\t\t\t\tthis.render = TweenMax.prototype.render; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\t\t\t\t},\n\t\t\t\t_tinyNum = 0.0000000001,\n\t\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t\t_isSelector = TweenLiteInternals.isSelector,\n\t\t\t\t_isArray = TweenLiteInternals.isArray,\n\t\t\t\tp = TweenMax.prototype = TweenLite.to({}, 0.1, {}),\n\t\t\t\t_blankArray = [];\n\t\n\t\t\tTweenMax.version = \"1.19.0\";\n\t\t\tp.constructor = TweenMax;\n\t\t\tp.kill()._gc = false;\n\t\t\tTweenMax.killTweensOf = TweenMax.killDelayedCallsTo = TweenLite.killTweensOf;\n\t\t\tTweenMax.getTweensOf = TweenLite.getTweensOf;\n\t\t\tTweenMax.lagSmoothing = TweenLite.lagSmoothing;\n\t\t\tTweenMax.ticker = TweenLite.ticker;\n\t\t\tTweenMax.render = TweenLite.render;\n\t\n\t\t\tp.invalidate = function() {\n\t\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\tthis._uncache(true);\n\t\t\t\treturn TweenLite.prototype.invalidate.call(this);\n\t\t\t};\n\t\t\t\n\t\t\tp.updateTo = function(vars, resetDuration) {\n\t\t\t\tvar curRatio = this.ratio,\n\t\t\t\t\timmediate = this.vars.immediateRender || vars.immediateRender,\n\t\t\t\t\tp;\n\t\t\t\tif (resetDuration && this._startTime < this._timeline._time) {\n\t\t\t\t\tthis._startTime = this._timeline._time;\n\t\t\t\t\tthis._uncache(false);\n\t\t\t\t\tif (this._gc) {\n\t\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._timeline.insert(this, this._startTime - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tthis.vars[p] = vars[p];\n\t\t\t\t}\n\t\t\t\tif (this._initted || immediate) {\n\t\t\t\t\tif (resetDuration) {\n\t\t\t\t\t\tthis._initted = false;\n\t\t\t\t\t\tif (immediate) {\n\t\t\t\t\t\t\tthis.render(0, true, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (this._gc) {\n\t\t\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this._notifyPluginsOfEnabled && this._firstPT) {\n\t\t\t\t\t\t\tTweenLite._onPluginEvent(\"_onDisable\", this); //in case a plugin like MotionBlur must perform some cleanup tasks\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this._time / this._duration > 0.998) { //if the tween has finished (or come extremely close to finishing), we just need to rewind it to 0 and then render it again at the end which forces it to re-initialize (parsing the new vars). We allow tweens that are close to finishing (but haven't quite finished) to work this way too because otherwise, the values are so small when determining where to project the starting values that binary math issues creep in and can make the tween appear to render incorrectly when run backwards. \n\t\t\t\t\t\t\tvar prevTime = this._totalTime;\n\t\t\t\t\t\t\tthis.render(0, true, false);\n\t\t\t\t\t\t\tthis._initted = false;\n\t\t\t\t\t\t\tthis.render(prevTime, true, false);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._initted = false;\n\t\t\t\t\t\t\tthis._init();\n\t\t\t\t\t\t\tif (this._time > 0 || immediate) {\n\t\t\t\t\t\t\t\tvar inv = 1 / (1 - curRatio),\n\t\t\t\t\t\t\t\t\tpt = this._firstPT, endValue;\n\t\t\t\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\t\t\t\tendValue = pt.s + pt.c;\n\t\t\t\t\t\t\t\t\tpt.c *= inv;\n\t\t\t\t\t\t\t\t\tpt.s = endValue - pt.c;\n\t\t\t\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\t\t\t\n\t\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t\tif (!this._initted) if (this._duration === 0 && this.vars.repeat) { //zero duration tweens that render immediately have render() called from TweenLite's constructor, before TweenMax's constructor has finished setting _repeat, _repeatDelay, and _yoyo which are critical in determining totalDuration() so we need to call invalidate() which is a low-kb way to get those set properly.\n\t\t\t\t\tthis.invalidate();\n\t\t\t\t}\n\t\t\t\tvar totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(),\n\t\t\t\t\tprevTime = this._time,\n\t\t\t\t\tprevTotalTime = this._totalTime, \n\t\t\t\t\tprevCycle = this._cycle,\n\t\t\t\t\tduration = this._duration,\n\t\t\t\t\tprevRawPrevTime = this._rawPrevTime,\n\t\t\t\t\tisComplete, callback, pt, cycleDuration, r, type, pow, rawPrevTime;\n\t\t\t\tif (time >= totalDur - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\t\tthis._totalTime = totalDur;\n\t\t\t\t\tthis._cycle = this._repeat;\n\t\t\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\t\t\tthis._time = 0;\n\t\t\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._time = duration;\n\t\t\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._reversed) {\n\t\t\t\t\t\tisComplete = true;\n\t\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\t\tforce = (force || this._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\t}\n\t\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (this._startTime === this._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -0.0000001) || (prevRawPrevTime === _tinyNum && this.data !== \"isPause\")) if (prevRawPrevTime !== time) { //note: when this.data is \"isPause\", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\t\tthis._totalTime = this._time = this._cycle = 0;\n\t\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;\n\t\t\t\t\tif (prevTotalTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t\t}\n\t\t\t\t\tif (time < 0) {\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\t\tif (prevRawPrevTime >= 0) {\n\t\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._initted) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._totalTime = this._time = time;\n\t\t\t\t\tif (this._repeat !== 0) {\n\t\t\t\t\t\tcycleDuration = duration + this._repeatDelay;\n\t\t\t\t\t\tthis._cycle = (this._totalTime / cycleDuration) >> 0; //originally _totalTime % cycleDuration but floating point errors caused problems, so I normalized it. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\n\t\t\t\t\t\tif (this._cycle !== 0) if (this._cycle === this._totalTime / cycleDuration && prevTotalTime <= time) {\n\t\t\t\t\t\t\tthis._cycle--; //otherwise when rendered exactly at the end time, it will act as though it is repeating (at the beginning)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._time = this._totalTime - (this._cycle * cycleDuration);\n\t\t\t\t\t\tif (this._yoyo) if ((this._cycle & 1) !== 0) {\n\t\t\t\t\t\t\tthis._time = duration - this._time;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this._time > duration) {\n\t\t\t\t\t\t\tthis._time = duration;\n\t\t\t\t\t\t} else if (this._time < 0) {\n\t\t\t\t\t\t\tthis._time = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this._easeType) {\n\t\t\t\t\t\tr = this._time / duration;\n\t\t\t\t\t\ttype = this._easeType;\n\t\t\t\t\t\tpow = this._easePower;\n\t\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\t\tr *= r;\n\t\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (type === 1) {\n\t\t\t\t\t\t\tthis.ratio = 1 - r;\n\t\t\t\t\t\t} else if (type === 2) {\n\t\t\t\t\t\t\tthis.ratio = r;\n\t\t\t\t\t\t} else if (this._time / duration < 0.5) {\n\t\t\t\t\t\t\tthis.ratio = r / 2;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.ratio = 1 - (r / 2);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.ratio = this._ease.getRatio(this._time / duration);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\tif (prevTime === this._time && !force && prevCycle === this._cycle) {\n\t\t\t\t\tif (prevTotalTime !== this._totalTime) if (this._onUpdate) if (!suppressEvents) { //so that onUpdate fires even during the repeatDelay - as long as the totalTime changed, we should trigger onUpdate.\n\t\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!this._initted) {\n\t\t\t\t\tthis._init();\n\t\t\t\t\tif (!this._initted || this._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else if (!force && this._firstPT && ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration))) { //we stick it in the queue for rendering at the very end of the tick - this is a performance optimization because browsers invalidate styles and force a recalculation if you read, write, and then read style data (so it's better to read/read/read/write/write/write than read/write/read/write/read/write). The down side, of course, is that usually you WANT things to render immediately because you may have code running right after that which depends on the change. Like imagine running TweenLite.set(...) and then immediately after that, creating a nother tween that animates the same property to another value; the starting values of that 2nd tween wouldn't be accurate if lazy is true.\n\t\t\t\t\t\tthis._time = prevTime;\n\t\t\t\t\t\tthis._totalTime = prevTotalTime;\n\t\t\t\t\t\tthis._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\t\tthis._cycle = prevCycle;\n\t\t\t\t\t\tTweenLiteInternals.lazyTweens.push(this);\n\t\t\t\t\t\tthis._lazy = [time, suppressEvents];\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\t\tif (this._time && !isComplete) {\n\t\t\t\t\t\tthis.ratio = this._ease.getRatio(this._time / duration);\n\t\t\t\t\t} else if (isComplete && this._ease._calcEnd) {\n\t\t\t\t\t\tthis.ratio = this._ease.getRatio((this._time === 0) ? 0 : 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._lazy !== false) {\n\t\t\t\t\tthis._lazy = false;\n\t\t\t\t}\n\t\n\t\t\t\tif (!this._active) if (!this._paused && this._time !== prevTime && time >= 0) {\n\t\t\t\t\tthis._active = true; //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t\t}\n\t\t\t\tif (prevTotalTime === 0) {\n\t\t\t\t\tif (this._initted === 2 && time > 0) {\n\t\t\t\t\t\t//this.invalidate();\n\t\t\t\t\t\tthis._init(); //will just apply overwriting since _initted of (2) means it was a from() tween that had immediateRender:true\n\t\t\t\t\t}\n\t\t\t\t\tif (this._startAt) {\n\t\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\t\tcallback = \"_dummyGS\"; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this.vars.onStart) if (this._totalTime !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\t\tthis._callback(\"onStart\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\tpt.t[pt.p](pt.c * this.ratio + pt.s);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p] = pt.c * this.ratio + pt.s;\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (this._onUpdate) {\n\t\t\t\t\tif (time < 0) if (this._startAt && this._startTime) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t\t}\n\t\t\t\t\tif (!suppressEvents) if (this._totalTime !== prevTotalTime || callback) {\n\t\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._cycle !== prevCycle) if (!suppressEvents) if (!this._gc) if (this.vars.onRepeat) {\n\t\t\t\t\tthis._callback(\"onRepeat\");\n\t\t\t\t}\n\t\t\t\tif (callback) if (!this._gc || force) { //check gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\t\tif (time < 0 && this._startAt && !this._onUpdate && this._startTime) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t\t}\n\t\t\t\t\tif (isComplete) {\n\t\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\t\tthis._callback(callback);\n\t\t\t\t\t}\n\t\t\t\t\tif (duration === 0 && this._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \"time\" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\t\tthis._rawPrevTime = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t//---- STATIC FUNCTIONS -----------------------------------------------------------------------------------------------------------\n\t\t\t\n\t\t\tTweenMax.to = function(target, duration, vars) {\n\t\t\t\treturn new TweenMax(target, duration, vars);\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.from = function(target, duration, vars) {\n\t\t\t\tvars.runBackwards = true;\n\t\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\t\treturn new TweenMax(target, duration, vars);\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\t\ttoVars.startAt = fromVars;\n\t\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\t\treturn new TweenMax(target, duration, toVars);\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.staggerTo = TweenMax.allTo = function(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\t\tstagger = stagger || 0;\n\t\t\t\tvar delay = 0,\n\t\t\t\t\ta = [],\n\t\t\t\t\tfinalComplete = function() {\n\t\t\t\t\t\tif (vars.onComplete) {\n\t\t\t\t\t\t\tvars.onComplete.apply(vars.onCompleteScope || this, arguments);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonCompleteAll.apply(onCompleteAllScope || vars.callbackScope || this, onCompleteAllParams || _blankArray);\n\t\t\t\t\t},\n\t\t\t\t\tcycle = vars.cycle,\n\t\t\t\t\tfromCycle = (vars.startAt && vars.startAt.cycle),\n\t\t\t\t\tl, copy, i, p;\n\t\t\t\tif (!_isArray(targets)) {\n\t\t\t\t\tif (typeof(targets) === \"string\") {\n\t\t\t\t\t\ttargets = TweenLite.selector(targets) || targets;\n\t\t\t\t\t}\n\t\t\t\t\tif (_isSelector(targets)) {\n\t\t\t\t\t\ttargets = _slice(targets);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttargets = targets || [];\n\t\t\t\tif (stagger < 0) {\n\t\t\t\t\ttargets = _slice(targets);\n\t\t\t\t\ttargets.reverse();\n\t\t\t\t\tstagger *= -1;\n\t\t\t\t}\n\t\t\t\tl = targets.length - 1;\n\t\t\t\tfor (i = 0; i <= l; i++) {\n\t\t\t\t\tcopy = {};\n\t\t\t\t\tfor (p in vars) {\n\t\t\t\t\t\tcopy[p] = vars[p];\n\t\t\t\t\t}\n\t\t\t\t\tif (cycle) {\n\t\t\t\t\t\t_applyCycle(copy, targets, i);\n\t\t\t\t\t\tif (copy.duration != null) {\n\t\t\t\t\t\t\tduration = copy.duration;\n\t\t\t\t\t\t\tdelete copy.duration;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (fromCycle) {\n\t\t\t\t\t\tfromCycle = copy.startAt = {};\n\t\t\t\t\t\tfor (p in vars.startAt) {\n\t\t\t\t\t\t\tfromCycle[p] = vars.startAt[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_applyCycle(copy.startAt, targets, i);\n\t\t\t\t\t}\n\t\t\t\t\tcopy.delay = delay + (copy.delay || 0);\n\t\t\t\t\tif (i === l && onCompleteAll) {\n\t\t\t\t\t\tcopy.onComplete = finalComplete;\n\t\t\t\t\t}\n\t\t\t\t\ta[i] = new TweenMax(targets[i], duration, copy);\n\t\t\t\t\tdelay += stagger;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.staggerFrom = TweenMax.allFrom = function(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\t\tvars.runBackwards = true;\n\t\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\t\treturn TweenMax.staggerTo(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.staggerFromTo = TweenMax.allFromTo = function(targets, duration, fromVars, toVars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\t\ttoVars.startAt = fromVars;\n\t\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\t\treturn TweenMax.staggerTo(targets, duration, toVars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t\t};\n\t\t\t\t\t\n\t\t\tTweenMax.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\t\treturn new TweenMax(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, useFrames:useFrames, overwrite:0});\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.set = function(target, vars) {\n\t\t\t\treturn new TweenMax(target, 0, vars);\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.isTweening = function(target) {\n\t\t\t\treturn (TweenLite.getTweensOf(target, true).length > 0);\n\t\t\t};\n\t\t\t\n\t\t\tvar _getChildrenOf = function(timeline, includeTimelines) {\n\t\t\t\t\tvar a = [],\n\t\t\t\t\t\tcnt = 0,\n\t\t\t\t\t\ttween = timeline._first;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tif (tween instanceof TweenLite) {\n\t\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (includeTimelines) {\n\t\t\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ta = a.concat(_getChildrenOf(tween, includeTimelines));\n\t\t\t\t\t\t\tcnt = a.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t}\n\t\t\t\t\treturn a;\n\t\t\t\t}, \n\t\t\t\tgetAllTweens = TweenMax.getAllTweens = function(includeTimelines) {\n\t\t\t\t\treturn _getChildrenOf(Animation._rootTimeline, includeTimelines).concat( _getChildrenOf(Animation._rootFramesTimeline, includeTimelines) );\n\t\t\t\t};\n\t\t\t\n\t\t\tTweenMax.killAll = function(complete, tweens, delayedCalls, timelines) {\n\t\t\t\tif (tweens == null) {\n\t\t\t\t\ttweens = true;\n\t\t\t\t}\n\t\t\t\tif (delayedCalls == null) {\n\t\t\t\t\tdelayedCalls = true;\n\t\t\t\t}\n\t\t\t\tvar a = getAllTweens((timelines != false)),\n\t\t\t\t\tl = a.length,\n\t\t\t\t\tallTrue = (tweens && delayedCalls && timelines),\n\t\t\t\t\tisDC, tween, i;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\ttween = a[i];\n\t\t\t\t\tif (allTrue || (tween instanceof SimpleTimeline) || ((isDC = (tween.target === tween.vars.onComplete)) && delayedCalls) || (tweens && !isDC)) {\n\t\t\t\t\t\tif (complete) {\n\t\t\t\t\t\t\ttween.totalTime(tween._reversed ? 0 : tween.totalDuration());\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.killChildTweensOf = function(parent, complete) {\n\t\t\t\tif (parent == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar tl = TweenLiteInternals.tweenLookup,\n\t\t\t\t\ta, curParent, p, i, l;\n\t\t\t\tif (typeof(parent) === \"string\") {\n\t\t\t\t\tparent = TweenLite.selector(parent) || parent;\n\t\t\t\t}\n\t\t\t\tif (_isSelector(parent)) {\n\t\t\t\t\tparent = _slice(parent);\n\t\t\t\t}\n\t\t\t\tif (_isArray(parent)) {\n\t\t\t\t\ti = parent.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tTweenMax.killChildTweensOf(parent[i], complete);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ta = [];\n\t\t\t\tfor (p in tl) {\n\t\t\t\t\tcurParent = tl[p].target.parentNode;\n\t\t\t\t\twhile (curParent) {\n\t\t\t\t\t\tif (curParent === parent) {\n\t\t\t\t\t\t\ta = a.concat(tl[p].tweens);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurParent = curParent.parentNode;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tl = a.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tif (complete) {\n\t\t\t\t\t\ta[i].totalTime(a[i].totalDuration());\n\t\t\t\t\t}\n\t\t\t\t\ta[i]._enabled(false, false);\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tvar _changePause = function(pause, tweens, delayedCalls, timelines) {\n\t\t\t\ttweens = (tweens !== false);\n\t\t\t\tdelayedCalls = (delayedCalls !== false);\n\t\t\t\ttimelines = (timelines !== false);\n\t\t\t\tvar a = getAllTweens(timelines),\n\t\t\t\t\tallTrue = (tweens && delayedCalls && timelines),\n\t\t\t\t\ti = a.length,\n\t\t\t\t\tisDC, tween;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ttween = a[i];\n\t\t\t\t\tif (allTrue || (tween instanceof SimpleTimeline) || ((isDC = (tween.target === tween.vars.onComplete)) && delayedCalls) || (tweens && !isDC)) {\n\t\t\t\t\t\ttween.paused(pause);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.pauseAll = function(tweens, delayedCalls, timelines) {\n\t\t\t\t_changePause(true, tweens, delayedCalls, timelines);\n\t\t\t};\n\t\t\t\n\t\t\tTweenMax.resumeAll = function(tweens, delayedCalls, timelines) {\n\t\t\t\t_changePause(false, tweens, delayedCalls, timelines);\n\t\t\t};\n\t\n\t\t\tTweenMax.globalTimeScale = function(value) {\n\t\t\t\tvar tl = Animation._rootTimeline,\n\t\t\t\t\tt = TweenLite.ticker.time;\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn tl._timeScale;\n\t\t\t\t}\n\t\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\t\ttl._startTime = t - ((t - tl._startTime) * tl._timeScale / value);\n\t\t\t\ttl = Animation._rootFramesTimeline;\n\t\t\t\tt = TweenLite.ticker.frame;\n\t\t\t\ttl._startTime = t - ((t - tl._startTime) * tl._timeScale / value);\n\t\t\t\ttl._timeScale = Animation._rootTimeline._timeScale = value;\n\t\t\t\treturn value;\n\t\t\t};\n\t\t\t\n\t\t\n\t//---- GETTERS / SETTERS ----------------------------------------------------------------------------------------------------------\n\t\t\t\n\t\t\tp.progress = function(value, suppressEvents) {\n\t\t\t\treturn (!arguments.length) ? this._time / this.duration() : this.totalTime( this.duration() * ((this._yoyo && (this._cycle & 1) !== 0) ? 1 - value : value) + (this._cycle * (this._duration + this._repeatDelay)), suppressEvents);\n\t\t\t};\n\t\t\t\n\t\t\tp.totalProgress = function(value, suppressEvents) {\n\t\t\t\treturn (!arguments.length) ? this._totalTime / this.totalDuration() : this.totalTime( this.totalDuration() * value, suppressEvents);\n\t\t\t};\n\t\t\t\n\t\t\tp.time = function(value, suppressEvents) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._time;\n\t\t\t\t}\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tthis.totalDuration();\n\t\t\t\t}\n\t\t\t\tif (value > this._duration) {\n\t\t\t\t\tvalue = this._duration;\n\t\t\t\t}\n\t\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\t\tvalue = (this._duration - value) + (this._cycle * (this._duration + this._repeatDelay));\n\t\t\t\t} else if (this._repeat !== 0) {\n\t\t\t\t\tvalue += this._cycle * (this._duration + this._repeatDelay);\n\t\t\t\t}\n\t\t\t\treturn this.totalTime(value, suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.duration = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._duration; //don't set _dirty = false because there could be repeats that haven't been factored into the _totalDuration yet. Otherwise, if you create a repeated TweenMax and then immediately check its duration(), it would cache the value and the totalDuration would not be correct, thus repeats wouldn't take effect.\n\t\t\t\t}\n\t\t\t\treturn Animation.prototype.duration.call(this, value);\n\t\t\t};\n\t\n\t\t\tp.totalDuration = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\t//instead of Infinity, we use 999999999999 so that we can accommodate reverses\n\t\t\t\t\t\tthis._totalDuration = (this._repeat === -1) ? 999999999999 : this._duration * (this._repeat + 1) + (this._repeatDelay * this._repeat);\n\t\t\t\t\t\tthis._dirty = false;\n\t\t\t\t\t}\n\t\t\t\t\treturn this._totalDuration;\n\t\t\t\t}\n\t\t\t\treturn (this._repeat === -1) ? this : this.duration( (value - (this._repeat * this._repeatDelay)) / (this._repeat + 1) );\n\t\t\t};\n\t\t\t\n\t\t\tp.repeat = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._repeat;\n\t\t\t\t}\n\t\t\t\tthis._repeat = value;\n\t\t\t\treturn this._uncache(true);\n\t\t\t};\n\t\t\t\n\t\t\tp.repeatDelay = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._repeatDelay;\n\t\t\t\t}\n\t\t\t\tthis._repeatDelay = value;\n\t\t\t\treturn this._uncache(true);\n\t\t\t};\n\t\t\t\n\t\t\tp.yoyo = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._yoyo;\n\t\t\t\t}\n\t\t\t\tthis._yoyo = value;\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\t\n\t\t\t\n\t\t\treturn TweenMax;\n\t\t\t\n\t\t}, true);\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * TimelineLite\n\t * ----------------------------------------------------------------\n\t */\n\t\t_gsScope._gsDefine(\"TimelineLite\", [\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"], function(Animation, SimpleTimeline, TweenLite) {\n\t\n\t\t\tvar TimelineLite = function(vars) {\n\t\t\t\t\tSimpleTimeline.call(this, vars);\n\t\t\t\t\tthis._labels = {};\n\t\t\t\t\tthis.autoRemoveChildren = (this.vars.autoRemoveChildren === true);\n\t\t\t\t\tthis.smoothChildTiming = (this.vars.smoothChildTiming === true);\n\t\t\t\t\tthis._sortChildren = true;\n\t\t\t\t\tthis._onUpdate = this.vars.onUpdate;\n\t\t\t\t\tvar v = this.vars,\n\t\t\t\t\t\tval, p;\n\t\t\t\t\tfor (p in v) {\n\t\t\t\t\t\tval = v[p];\n\t\t\t\t\t\tif (_isArray(val)) if (val.join(\"\").indexOf(\"{self}\") !== -1) {\n\t\t\t\t\t\t\tv[p] = this._swapSelfInParams(val);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (_isArray(v.tweens)) {\n\t\t\t\t\t\tthis.add(v.tweens, 0, v.align, v.stagger);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_tinyNum = 0.0000000001,\n\t\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t\t_internals = TimelineLite._internals = {},\n\t\t\t\t_isSelector = TweenLiteInternals.isSelector,\n\t\t\t\t_isArray = TweenLiteInternals.isArray,\n\t\t\t\t_lazyTweens = TweenLiteInternals.lazyTweens,\n\t\t\t\t_lazyRender = TweenLiteInternals.lazyRender,\n\t\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t\t_copy = function(vars) {\n\t\t\t\t\tvar copy = {}, p;\n\t\t\t\t\tfor (p in vars) {\n\t\t\t\t\t\tcopy[p] = vars[p];\n\t\t\t\t\t}\n\t\t\t\t\treturn copy;\n\t\t\t\t},\n\t\t\t\t_applyCycle = function(vars, targets, i) {\n\t\t\t\t\tvar alt = vars.cycle,\n\t\t\t\t\t\tp, val;\n\t\t\t\t\tfor (p in alt) {\n\t\t\t\t\t\tval = alt[p];\n\t\t\t\t\t\tvars[p] = (typeof(val) === \"function\") ? val.call(targets[i], i) : val[i % val.length];\n\t\t\t\t\t}\n\t\t\t\t\tdelete vars.cycle;\n\t\t\t\t},\n\t\t\t\t_pauseCallback = _internals.pauseCallback = function() {},\n\t\t\t\t_slice = function(a) { //don't use [].slice because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\tvar b = [],\n\t\t\t\t\t\tl = a.length,\n\t\t\t\t\t\ti;\n\t\t\t\t\tfor (i = 0; i !== l; b.push(a[i++]));\n\t\t\t\t\treturn b;\n\t\t\t\t},\n\t\t\t\tp = TimelineLite.prototype = new SimpleTimeline();\n\t\n\t\t\tTimelineLite.version = \"1.19.0\";\n\t\t\tp.constructor = TimelineLite;\n\t\t\tp.kill()._gc = p._forcingPlayhead = p._hasPause = false;\n\t\n\t\t\t/* might use later...\n\t\t\t//translates a local time inside an animation to the corresponding time on the root/global timeline, factoring in all nesting and timeScales.\n\t\t\tfunction localToGlobal(time, animation) {\n\t\t\t\twhile (animation) {\n\t\t\t\t\ttime = (time / animation._timeScale) + animation._startTime;\n\t\t\t\t\tanimation = animation.timeline;\n\t\t\t\t}\n\t\t\t\treturn time;\n\t\t\t}\n\t\n\t\t\t//translates the supplied time on the root/global timeline into the corresponding local time inside a particular animation, factoring in all nesting and timeScales\n\t\t\tfunction globalToLocal(time, animation) {\n\t\t\t\tvar scale = 1;\n\t\t\t\ttime -= localToGlobal(0, animation);\n\t\t\t\twhile (animation) {\n\t\t\t\t\tscale *= animation._timeScale;\n\t\t\t\t\tanimation = animation.timeline;\n\t\t\t\t}\n\t\t\t\treturn time * scale;\n\t\t\t}\n\t\t\t*/\n\t\n\t\t\tp.to = function(target, duration, vars, position) {\n\t\t\t\tvar Engine = (vars.repeat && _globals.TweenMax) || TweenLite;\n\t\t\t\treturn duration ? this.add( new Engine(target, duration, vars), position) : this.set(target, vars, position);\n\t\t\t};\n\t\n\t\t\tp.from = function(target, duration, vars, position) {\n\t\t\t\treturn this.add( ((vars.repeat && _globals.TweenMax) || TweenLite).from(target, duration, vars), position);\n\t\t\t};\n\t\n\t\t\tp.fromTo = function(target, duration, fromVars, toVars, position) {\n\t\t\t\tvar Engine = (toVars.repeat && _globals.TweenMax) || TweenLite;\n\t\t\t\treturn duration ? this.add( Engine.fromTo(target, duration, fromVars, toVars), position) : this.set(target, toVars, position);\n\t\t\t};\n\t\n\t\t\tp.staggerTo = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\t\tvar tl = new TimelineLite({onComplete:onCompleteAll, onCompleteParams:onCompleteAllParams, callbackScope:onCompleteAllScope, smoothChildTiming:this.smoothChildTiming}),\n\t\t\t\t\tcycle = vars.cycle,\n\t\t\t\t\tcopy, i;\n\t\t\t\tif (typeof(targets) === \"string\") {\n\t\t\t\t\ttargets = TweenLite.selector(targets) || targets;\n\t\t\t\t}\n\t\t\t\ttargets = targets || [];\n\t\t\t\tif (_isSelector(targets)) { //senses if the targets object is a selector. If it is, we should translate it into an array.\n\t\t\t\t\ttargets = _slice(targets);\n\t\t\t\t}\n\t\t\t\tstagger = stagger || 0;\n\t\t\t\tif (stagger < 0) {\n\t\t\t\t\ttargets = _slice(targets);\n\t\t\t\t\ttargets.reverse();\n\t\t\t\t\tstagger *= -1;\n\t\t\t\t}\n\t\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\t\tcopy = _copy(vars);\n\t\t\t\t\tif (copy.startAt) {\n\t\t\t\t\t\tcopy.startAt = _copy(copy.startAt);\n\t\t\t\t\t\tif (copy.startAt.cycle) {\n\t\t\t\t\t\t\t_applyCycle(copy.startAt, targets, i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (cycle) {\n\t\t\t\t\t\t_applyCycle(copy, targets, i);\n\t\t\t\t\t\tif (copy.duration != null) {\n\t\t\t\t\t\t\tduration = copy.duration;\n\t\t\t\t\t\t\tdelete copy.duration;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttl.to(targets[i], duration, copy, i * stagger);\n\t\t\t\t}\n\t\t\t\treturn this.add(tl, position);\n\t\t\t};\n\t\n\t\t\tp.staggerFrom = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\t\tvars.runBackwards = true;\n\t\t\t\treturn this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t\t};\n\t\n\t\t\tp.staggerFromTo = function(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\t\ttoVars.startAt = fromVars;\n\t\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\t\treturn this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t\t};\n\t\n\t\t\tp.call = function(callback, params, scope, position) {\n\t\t\t\treturn this.add( TweenLite.delayedCall(0, callback, params, scope), position);\n\t\t\t};\n\t\n\t\t\tp.set = function(target, vars, position) {\n\t\t\t\tposition = this._parseTimeOrLabel(position, 0, true);\n\t\t\t\tif (vars.immediateRender == null) {\n\t\t\t\t\tvars.immediateRender = (position === this._time && !this._paused);\n\t\t\t\t}\n\t\t\t\treturn this.add( new TweenLite(target, 0, vars), position);\n\t\t\t};\n\t\n\t\t\tTimelineLite.exportRoot = function(vars, ignoreDelayedCalls) {\n\t\t\t\tvars = vars || {};\n\t\t\t\tif (vars.smoothChildTiming == null) {\n\t\t\t\t\tvars.smoothChildTiming = true;\n\t\t\t\t}\n\t\t\t\tvar tl = new TimelineLite(vars),\n\t\t\t\t\troot = tl._timeline,\n\t\t\t\t\ttween, next;\n\t\t\t\tif (ignoreDelayedCalls == null) {\n\t\t\t\t\tignoreDelayedCalls = true;\n\t\t\t\t}\n\t\t\t\troot._remove(tl, true);\n\t\t\t\ttl._startTime = 0;\n\t\t\t\ttl._rawPrevTime = tl._time = tl._totalTime = root._time;\n\t\t\t\ttween = root._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._next;\n\t\t\t\t\tif (!ignoreDelayedCalls || !(tween instanceof TweenLite && tween.target === tween.vars.onComplete)) {\n\t\t\t\t\t\ttl.add(tween, tween._startTime - tween._delay);\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t\troot.add(tl, 0);\n\t\t\t\treturn tl;\n\t\t\t};\n\t\n\t\t\tp.add = function(value, position, align, stagger) {\n\t\t\t\tvar curTime, l, i, child, tl, beforeRawTime;\n\t\t\t\tif (typeof(position) !== \"number\") {\n\t\t\t\t\tposition = this._parseTimeOrLabel(position, 0, true, value);\n\t\t\t\t}\n\t\t\t\tif (!(value instanceof Animation)) {\n\t\t\t\t\tif ((value instanceof Array) || (value && value.push && _isArray(value))) {\n\t\t\t\t\t\talign = align || \"normal\";\n\t\t\t\t\t\tstagger = stagger || 0;\n\t\t\t\t\t\tcurTime = position;\n\t\t\t\t\t\tl = value.length;\n\t\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\t\tif (_isArray(child = value[i])) {\n\t\t\t\t\t\t\t\tchild = new TimelineLite({tweens:child});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.add(child, curTime);\n\t\t\t\t\t\t\tif (typeof(child) !== \"string\" && typeof(child) !== \"function\") {\n\t\t\t\t\t\t\t\tif (align === \"sequence\") {\n\t\t\t\t\t\t\t\t\tcurTime = child._startTime + (child.totalDuration() / child._timeScale);\n\t\t\t\t\t\t\t\t} else if (align === \"start\") {\n\t\t\t\t\t\t\t\t\tchild._startTime -= child.delay();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurTime += stagger;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this._uncache(true);\n\t\t\t\t\t} else if (typeof(value) === \"string\") {\n\t\t\t\t\t\treturn this.addLabel(value, position);\n\t\t\t\t\t} else if (typeof(value) === \"function\") {\n\t\t\t\t\t\tvalue = TweenLite.delayedCall(0, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow(\"Cannot add \" + value + \" into the timeline; it is not a tween, timeline, function, or string.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tSimpleTimeline.prototype.add.call(this, value, position);\n\t\n\t\t\t\t//if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. We should also align the playhead with the parent timeline's when appropriate.\n\t\t\t\tif (this._gc || this._time === this._duration) if (!this._paused) if (this._duration < this.duration()) {\n\t\t\t\t\t//in case any of the ancestors had completed but should now be enabled...\n\t\t\t\t\ttl = this;\n\t\t\t\t\tbeforeRawTime = (tl.rawTime() > value._startTime); //if the tween is placed on the timeline so that it starts BEFORE the current rawTime, we should align the playhead (move the timeline). This is because sometimes users will create a timeline, let it finish, and much later append a tween and expect it to run instead of jumping to its end state. While technically one could argue that it should jump to its end state, that's not what users intuitively expect.\n\t\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\t\tif (beforeRawTime && tl._timeline.smoothChildTiming) {\n\t\t\t\t\t\t\ttl.totalTime(tl._totalTime, true); //moves the timeline (shifts its startTime) if necessary, and also enables it.\n\t\t\t\t\t\t} else if (tl._gc) {\n\t\t\t\t\t\t\ttl._enabled(true, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.remove = function(value) {\n\t\t\t\tif (value instanceof Animation) {\n\t\t\t\t\tthis._remove(value, false);\n\t\t\t\t\tvar tl = value._timeline = value.vars.useFrames ? Animation._rootFramesTimeline : Animation._rootTimeline; //now that it's removed, default it to the root timeline so that if it gets played again, it doesn't jump back into this timeline.\n\t\t\t\t\tvalue._startTime = (value._paused ? value._pauseTime : tl._time) - ((!value._reversed ? value._totalTime : value.totalDuration() - value._totalTime) / value._timeScale); //ensure that if it gets played again, the timing is correct.\n\t\t\t\t\treturn this;\n\t\t\t\t} else if (value instanceof Array || (value && value.push && _isArray(value))) {\n\t\t\t\t\tvar i = value.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tthis.remove(value[i]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t} else if (typeof(value) === \"string\") {\n\t\t\t\t\treturn this.removeLabel(value);\n\t\t\t\t}\n\t\t\t\treturn this.kill(null, value);\n\t\t\t};\n\t\n\t\t\tp._remove = function(tween, skipDisable) {\n\t\t\t\tSimpleTimeline.prototype._remove.call(this, tween, skipDisable);\n\t\t\t\tvar last = this._last;\n\t\t\t\tif (!last) {\n\t\t\t\t\tthis._time = this._totalTime = this._duration = this._totalDuration = 0;\n\t\t\t\t} else if (this._time > last._startTime + last._totalDuration / last._timeScale) {\n\t\t\t\t\tthis._time = this.duration();\n\t\t\t\t\tthis._totalTime = this._totalDuration;\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.append = function(value, offsetOrLabel) {\n\t\t\t\treturn this.add(value, this._parseTimeOrLabel(null, offsetOrLabel, true, value));\n\t\t\t};\n\t\n\t\t\tp.insert = p.insertMultiple = function(value, position, align, stagger) {\n\t\t\t\treturn this.add(value, position || 0, align, stagger);\n\t\t\t};\n\t\n\t\t\tp.appendMultiple = function(tweens, offsetOrLabel, align, stagger) {\n\t\t\t\treturn this.add(tweens, this._parseTimeOrLabel(null, offsetOrLabel, true, tweens), align, stagger);\n\t\t\t};\n\t\n\t\t\tp.addLabel = function(label, position) {\n\t\t\t\tthis._labels[label] = this._parseTimeOrLabel(position);\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.addPause = function(position, callback, params, scope) {\n\t\t\t\tvar t = TweenLite.delayedCall(0, _pauseCallback, params, scope || this);\n\t\t\t\tt.vars.onComplete = t.vars.onReverseComplete = callback;\n\t\t\t\tt.data = \"isPause\";\n\t\t\t\tthis._hasPause = true;\n\t\t\t\treturn this.add(t, position);\n\t\t\t};\n\t\n\t\t\tp.removeLabel = function(label) {\n\t\t\t\tdelete this._labels[label];\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.getLabelTime = function(label) {\n\t\t\t\treturn (this._labels[label] != null) ? this._labels[label] : -1;\n\t\t\t};\n\t\n\t\t\tp._parseTimeOrLabel = function(timeOrLabel, offsetOrLabel, appendIfAbsent, ignore) {\n\t\t\t\tvar i;\n\t\t\t\t//if we're about to add a tween/timeline (or an array of them) that's already a child of this timeline, we should remove it first so that it doesn't contaminate the duration().\n\t\t\t\tif (ignore instanceof Animation && ignore.timeline === this) {\n\t\t\t\t\tthis.remove(ignore);\n\t\t\t\t} else if (ignore && ((ignore instanceof Array) || (ignore.push && _isArray(ignore)))) {\n\t\t\t\t\ti = ignore.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (ignore[i] instanceof Animation && ignore[i].timeline === this) {\n\t\t\t\t\t\t\tthis.remove(ignore[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof(offsetOrLabel) === \"string\") {\n\t\t\t\t\treturn this._parseTimeOrLabel(offsetOrLabel, (appendIfAbsent && typeof(timeOrLabel) === \"number\" && this._labels[offsetOrLabel] == null) ? timeOrLabel - this.duration() : 0, appendIfAbsent);\n\t\t\t\t}\n\t\t\t\toffsetOrLabel = offsetOrLabel || 0;\n\t\t\t\tif (typeof(timeOrLabel) === \"string\" && (isNaN(timeOrLabel) || this._labels[timeOrLabel] != null)) { //if the string is a number like \"1\", check to see if there's a label with that name, otherwise interpret it as a number (absolute value).\n\t\t\t\t\ti = timeOrLabel.indexOf(\"=\");\n\t\t\t\t\tif (i === -1) {\n\t\t\t\t\t\tif (this._labels[timeOrLabel] == null) {\n\t\t\t\t\t\t\treturn appendIfAbsent ? (this._labels[timeOrLabel] = this.duration() + offsetOrLabel) : offsetOrLabel;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this._labels[timeOrLabel] + offsetOrLabel;\n\t\t\t\t\t}\n\t\t\t\t\toffsetOrLabel = parseInt(timeOrLabel.charAt(i-1) + \"1\", 10) * Number(timeOrLabel.substr(i+1));\n\t\t\t\t\ttimeOrLabel = (i > 1) ? this._parseTimeOrLabel(timeOrLabel.substr(0, i-1), 0, appendIfAbsent) : this.duration();\n\t\t\t\t} else if (timeOrLabel == null) {\n\t\t\t\t\ttimeOrLabel = this.duration();\n\t\t\t\t}\n\t\t\t\treturn Number(timeOrLabel) + offsetOrLabel;\n\t\t\t};\n\t\n\t\t\tp.seek = function(position, suppressEvents) {\n\t\t\t\treturn this.totalTime((typeof(position) === \"number\") ? position : this._parseTimeOrLabel(position), (suppressEvents !== false));\n\t\t\t};\n\t\n\t\t\tp.stop = function() {\n\t\t\t\treturn this.paused(true);\n\t\t\t};\n\t\n\t\t\tp.gotoAndPlay = function(position, suppressEvents) {\n\t\t\t\treturn this.play(position, suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.gotoAndStop = function(position, suppressEvents) {\n\t\t\t\treturn this.pause(position, suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t\tif (this._gc) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t}\n\t\t\t\tvar totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(),\n\t\t\t\t\tprevTime = this._time,\n\t\t\t\t\tprevStart = this._startTime,\n\t\t\t\t\tprevTimeScale = this._timeScale,\n\t\t\t\t\tprevPaused = this._paused,\n\t\t\t\t\ttween, isComplete, next, callback, internalForce, pauseTween, curTime;\n\t\t\t\tif (time >= totalDur - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\t\tthis._totalTime = this._time = totalDur;\n\t\t\t\t\tif (!this._reversed) if (!this._hasPausedChild()) {\n\t\t\t\t\t\tisComplete = true;\n\t\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\t\tinternalForce = !!this._timeline.autoRemoveChildren; //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\t\tif (this._duration === 0) if ((time <= 0 && time >= -0.0000001) || this._rawPrevTime < 0 || this._rawPrevTime === _tinyNum) if (this._rawPrevTime !== time && this._first) {\n\t\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\t\tif (this._rawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\ttime = totalDur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7.\n\t\n\t\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\t\tthis._totalTime = this._time = 0;\n\t\t\t\t\tif (prevTime !== 0 || (this._duration === 0 && this._rawPrevTime !== _tinyNum && (this._rawPrevTime > 0 || (time < 0 && this._rawPrevTime >= 0)))) {\n\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t\t}\n\t\t\t\t\tif (time < 0) {\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t\tif (this._timeline.autoRemoveChildren && this._reversed) { //ensures proper GC if a timeline is resumed after it's finished reversing.\n\t\t\t\t\t\t\tinternalForce = isComplete = true;\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t} else if (this._rawPrevTime >= 0 && this._first) { //when going back beyond the start, force a render so that zero-duration tweens that sit at the very beginning render their start values properly. Otherwise, if the parent timeline's playhead lands exactly at this timeline's startTime, and then moves backwards, the zero-duration tweens at the beginning would still be at their end state.\n\t\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._rawPrevTime = time;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t\tif (time === 0 && isComplete) { //if there's a zero-duration tween at the very beginning of a timeline and the playhead lands EXACTLY at time 0, that tween will correctly render its end values, but we need to keep the timeline alive for one more render so that the beginning values render properly as the parent's playhead keeps moving beyond the begining. Imagine obj.x starts at 0 and then we do tl.set(obj, {x:100}).to(obj, 1, {x:200}) and then later we tl.reverse()...the goal is to have obj.x revert to 0. If the playhead happens to land on exactly 0, without this chunk of code, it'd complete the timeline and remove it from the rendering queue (not good).\n\t\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\t\twhile (tween && tween._startTime === 0) {\n\t\t\t\t\t\t\t\tif (!tween._duration) {\n\t\t\t\t\t\t\t\t\tisComplete = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttime = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)\n\t\t\t\t\t\tif (!this._initted) {\n\t\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t} else {\n\t\n\t\t\t\t\tif (this._hasPause && !this._forcingPlayhead && !suppressEvents) {\n\t\t\t\t\t\tif (time >= prevTime) {\n\t\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\t\twhile (tween && tween._startTime <= time && !pauseTween) {\n\t\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && !tween.ratio && !(tween._startTime === 0 && this._rawPrevTime === 0)) {\n\t\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween = this._last;\n\t\t\t\t\t\t\twhile (tween && tween._startTime >= time && !pauseTween) {\n\t\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && tween._rawPrevTime > 0) {\n\t\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttween = tween._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pauseTween) {\n\t\t\t\t\t\t\tthis._time = time = pauseTween._startTime;\n\t\t\t\t\t\t\tthis._totalTime = time + (this._cycle * (this._totalDuration + this._repeatDelay));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tthis._totalTime = this._time = this._rawPrevTime = time;\n\t\t\t\t}\n\t\t\t\tif ((this._time === prevTime || !this._first) && !force && !internalForce && !pauseTween) {\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!this._initted) {\n\t\t\t\t\tthis._initted = true;\n\t\t\t\t}\n\t\n\t\t\t\tif (!this._active) if (!this._paused && this._time !== prevTime && time > 0) {\n\t\t\t\t\tthis._active = true;  //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example.\n\t\t\t\t}\n\t\n\t\t\t\tif (prevTime === 0) if (this.vars.onStart) if (this._time !== 0 || !this._duration) if (!suppressEvents) {\n\t\t\t\t\tthis._callback(\"onStart\");\n\t\t\t\t}\n\t\n\t\t\t\tcurTime = this._time;\n\t\t\t\tif (curTime >= prevTime) {\n\t\t\t\t\ttween = this._first;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (tween._active || (tween._startTime <= curTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = next;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttween = this._last;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tnext = tween._prev; //record it here because the value could change after rendering...\n\t\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\t\tpauseTween = tween._prev; //the linked list is organized by _startTime, thus it's possible that a tween could start BEFORE the pause and end after it, in which case it would be positioned before the pause tween in the linked list, but we should render it before we pause() the timeline and cease rendering. This is only a concern when going in reverse.\n\t\t\t\t\t\t\t\twhile (pauseTween && pauseTween.endTime() > this._time) {\n\t\t\t\t\t\t\t\t\tpauseTween.render( (pauseTween._reversed ? pauseTween.totalDuration() - ((time - pauseTween._startTime) * pauseTween._timeScale) : (time - pauseTween._startTime) * pauseTween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t\t\tpauseTween = pauseTween._prev;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpauseTween = null;\n\t\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (this._onUpdate) if (!suppressEvents) {\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t}\n\t\n\t\t\t\tif (callback) if (!this._gc) if (prevStart === this._startTime || prevTimeScale !== this._timeScale) if (this._time === 0 || totalDur >= this.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\t\tif (isComplete) {\n\t\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onComplete on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\t\tthis._callback(callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tp._hasPausedChild = function() {\n\t\t\t\tvar tween = this._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tif (tween._paused || ((tween instanceof TimelineLite) && tween._hasPausedChild())) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\n\t\t\tp.getChildren = function(nested, tweens, timelines, ignoreBeforeTime) {\n\t\t\t\tignoreBeforeTime = ignoreBeforeTime || -9999999999;\n\t\t\t\tvar a = [],\n\t\t\t\t\ttween = this._first,\n\t\t\t\t\tcnt = 0;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tif (tween._startTime < ignoreBeforeTime) {\n\t\t\t\t\t\t//do nothing\n\t\t\t\t\t} else if (tween instanceof TweenLite) {\n\t\t\t\t\t\tif (tweens !== false) {\n\t\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (timelines !== false) {\n\t\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nested !== false) {\n\t\t\t\t\t\t\ta = a.concat(tween.getChildren(true, tweens, timelines));\n\t\t\t\t\t\t\tcnt = a.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t};\n\t\n\t\t\tp.getTweensOf = function(target, nested) {\n\t\t\t\tvar disabled = this._gc,\n\t\t\t\t\ta = [],\n\t\t\t\t\tcnt = 0,\n\t\t\t\t\ttweens, i;\n\t\t\t\tif (disabled) {\n\t\t\t\t\tthis._enabled(true, true); //getTweensOf() filters out disabled tweens, and we have to mark them as _gc = true when the timeline completes in order to allow clean garbage collection, so temporarily re-enable the timeline here.\n\t\t\t\t}\n\t\t\t\ttweens = TweenLite.getTweensOf(target);\n\t\t\t\ti = tweens.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (tweens[i].timeline === this || (nested && this._contains(tweens[i]))) {\n\t\t\t\t\t\ta[cnt++] = tweens[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (disabled) {\n\t\t\t\t\tthis._enabled(false, true);\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t};\n\t\n\t\t\tp.recent = function() {\n\t\t\t\treturn this._recent;\n\t\t\t};\n\t\n\t\t\tp._contains = function(tween) {\n\t\t\t\tvar tl = tween.timeline;\n\t\t\t\twhile (tl) {\n\t\t\t\t\tif (tl === this) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\ttl = tl.timeline;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\n\t\t\tp.shiftChildren = function(amount, adjustLabels, ignoreBeforeTime) {\n\t\t\t\tignoreBeforeTime = ignoreBeforeTime || 0;\n\t\t\t\tvar tween = this._first,\n\t\t\t\t\tlabels = this._labels,\n\t\t\t\t\tp;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tif (tween._startTime >= ignoreBeforeTime) {\n\t\t\t\t\t\ttween._startTime += amount;\n\t\t\t\t\t}\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t\tif (adjustLabels) {\n\t\t\t\t\tfor (p in labels) {\n\t\t\t\t\t\tif (labels[p] >= ignoreBeforeTime) {\n\t\t\t\t\t\t\tlabels[p] += amount;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this._uncache(true);\n\t\t\t};\n\t\n\t\t\tp._kill = function(vars, target) {\n\t\t\t\tif (!vars && !target) {\n\t\t\t\t\treturn this._enabled(false, false);\n\t\t\t\t}\n\t\t\t\tvar tweens = (!target) ? this.getChildren(true, true, false) : this.getTweensOf(target),\n\t\t\t\t\ti = tweens.length,\n\t\t\t\t\tchanged = false;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (tweens[i]._kill(vars, target)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn changed;\n\t\t\t};\n\t\n\t\t\tp.clear = function(labels) {\n\t\t\t\tvar tweens = this.getChildren(false, true, true),\n\t\t\t\t\ti = tweens.length;\n\t\t\t\tthis._time = this._totalTime = 0;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ttweens[i]._enabled(false, false);\n\t\t\t\t}\n\t\t\t\tif (labels !== false) {\n\t\t\t\t\tthis._labels = {};\n\t\t\t\t}\n\t\t\t\treturn this._uncache(true);\n\t\t\t};\n\t\n\t\t\tp.invalidate = function() {\n\t\t\t\tvar tween = this._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\ttween.invalidate();\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t\treturn Animation.prototype.invalidate.call(this);;\n\t\t\t};\n\t\n\t\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\t\tif (enabled === this._gc) {\n\t\t\t\t\tvar tween = this._first;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\ttween._enabled(enabled, true);\n\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn SimpleTimeline.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t\t};\n\t\n\t\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\t\tthis._forcingPlayhead = true;\n\t\t\t\tvar val = Animation.prototype.totalTime.apply(this, arguments);\n\t\t\t\tthis._forcingPlayhead = false;\n\t\t\t\treturn val;\n\t\t\t};\n\t\n\t\t\tp.duration = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\tthis.totalDuration(); //just triggers recalculation\n\t\t\t\t\t}\n\t\t\t\t\treturn this._duration;\n\t\t\t\t}\n\t\t\t\tif (this.duration() !== 0 && value !== 0) {\n\t\t\t\t\tthis.timeScale(this._duration / value);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.totalDuration = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\tvar max = 0,\n\t\t\t\t\t\t\ttween = this._last,\n\t\t\t\t\t\t\tprevStart = 999999999999,\n\t\t\t\t\t\t\tprev, end;\n\t\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\t\tprev = tween._prev; //record it here in case the tween changes position in the sequence...\n\t\t\t\t\t\t\tif (tween._dirty) {\n\t\t\t\t\t\t\t\ttween.totalDuration(); //could change the tween._startTime, so make sure the tween's cache is clean before analyzing it.\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (tween._startTime > prevStart && this._sortChildren && !tween._paused) { //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence\n\t\t\t\t\t\t\t\tthis.add(tween, tween._startTime - tween._delay);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tprevStart = tween._startTime;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (tween._startTime < 0 && !tween._paused) { //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found.\n\t\t\t\t\t\t\t\tmax -= tween._startTime;\n\t\t\t\t\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\t\t\t\t\tthis._startTime += tween._startTime / this._timeScale;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.shiftChildren(-tween._startTime, false, -9999999999);\n\t\t\t\t\t\t\t\tprevStart = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tend = tween._startTime + (tween._totalDuration / tween._timeScale);\n\t\t\t\t\t\t\tif (end > max) {\n\t\t\t\t\t\t\t\tmax = end;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = prev;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._duration = this._totalDuration = max;\n\t\t\t\t\t\tthis._dirty = false;\n\t\t\t\t\t}\n\t\t\t\t\treturn this._totalDuration;\n\t\t\t\t}\n\t\t\t\treturn (value && this.totalDuration()) ? this.timeScale(this._totalDuration / value) : this;\n\t\t\t};\n\t\n\t\t\tp.paused = function(value) {\n\t\t\t\tif (!value) { //if there's a pause directly at the spot from where we're unpausing, skip it.\n\t\t\t\t\tvar tween = this._first,\n\t\t\t\t\t\ttime = this._time;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tif (tween._startTime === time && tween.data === \"isPause\") {\n\t\t\t\t\t\t\ttween._rawPrevTime = 0; //remember, _rawPrevTime is how zero-duration tweens/callbacks sense directionality and determine whether or not to fire. If _rawPrevTime is the same as _startTime on the next render, it won't fire.\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn Animation.prototype.paused.apply(this, arguments);\n\t\t\t};\n\t\n\t\t\tp.usesFrames = function() {\n\t\t\t\tvar tl = this._timeline;\n\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t}\n\t\t\t\treturn (tl === Animation._rootFramesTimeline);\n\t\t\t};\n\t\n\t\t\tp.rawTime = function() {\n\t\t\t\treturn this._paused ? this._totalTime : (this._timeline.rawTime() - this._startTime) * this._timeScale;\n\t\t\t};\n\t\n\t\t\treturn TimelineLite;\n\t\n\t\t}, true);\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * TimelineMax\n\t * ----------------------------------------------------------------\n\t */\n\t\t_gsScope._gsDefine(\"TimelineMax\", [\"TimelineLite\",\"TweenLite\",\"easing.Ease\"], function(TimelineLite, TweenLite, Ease) {\n\t\n\t\t\tvar TimelineMax = function(vars) {\n\t\t\t\t\tTimelineLite.call(this, vars);\n\t\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\t\tthis._cycle = 0;\n\t\t\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\t\t\tthis._dirty = true;\n\t\t\t\t},\n\t\t\t\t_tinyNum = 0.0000000001,\n\t\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t\t_lazyTweens = TweenLiteInternals.lazyTweens,\n\t\t\t\t_lazyRender = TweenLiteInternals.lazyRender,\n\t\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t\t_easeNone = new Ease(null, null, 1, 0),\n\t\t\t\tp = TimelineMax.prototype = new TimelineLite();\n\t\n\t\t\tp.constructor = TimelineMax;\n\t\t\tp.kill()._gc = false;\n\t\t\tTimelineMax.version = \"1.19.0\";\n\t\n\t\t\tp.invalidate = function() {\n\t\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\tthis._uncache(true);\n\t\t\t\treturn TimelineLite.prototype.invalidate.call(this);\n\t\t\t};\n\t\n\t\t\tp.addCallback = function(callback, position, params, scope) {\n\t\t\t\treturn this.add( TweenLite.delayedCall(0, callback, params, scope), position);\n\t\t\t};\n\t\n\t\t\tp.removeCallback = function(callback, position) {\n\t\t\t\tif (callback) {\n\t\t\t\t\tif (position == null) {\n\t\t\t\t\t\tthis._kill(null, callback);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar a = this.getTweensOf(callback, false),\n\t\t\t\t\t\t\ti = a.length,\n\t\t\t\t\t\t\ttime = this._parseTimeOrLabel(position);\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i]._startTime === time) {\n\t\t\t\t\t\t\t\ta[i]._enabled(false, false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.removePause = function(position) {\n\t\t\t\treturn this.removeCallback(TimelineLite._internals.pauseCallback, position);\n\t\t\t};\n\t\n\t\t\tp.tweenTo = function(position, vars) {\n\t\t\t\tvars = vars || {};\n\t\t\t\tvar copy = {ease:_easeNone, useFrames:this.usesFrames(), immediateRender:false},\n\t\t\t\t\tEngine = (vars.repeat && _globals.TweenMax) || TweenLite,\n\t\t\t\t\tduration, p, t;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tcopy[p] = vars[p];\n\t\t\t\t}\n\t\t\t\tcopy.time = this._parseTimeOrLabel(position);\n\t\t\t\tduration = (Math.abs(Number(copy.time) - this._time) / this._timeScale) || 0.001;\n\t\t\t\tt = new Engine(this, duration, copy);\n\t\t\t\tcopy.onStart = function() {\n\t\t\t\t\tt.target.paused(true);\n\t\t\t\t\tif (t.vars.time !== t.target.time() && duration === t.duration()) { //don't make the duration zero - if it's supposed to be zero, don't worry because it's already initting the tween and will complete immediately, effectively making the duration zero anyway. If we make duration zero, the tween won't run at all.\n\t\t\t\t\t\tt.duration( Math.abs( t.vars.time - t.target.time()) / t.target._timeScale );\n\t\t\t\t\t}\n\t\t\t\t\tif (vars.onStart) { //in case the user had an onStart in the vars - we don't want to overwrite it.\n\t\t\t\t\t\tt._callback(\"onStart\");\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treturn t;\n\t\t\t};\n\t\n\t\t\tp.tweenFromTo = function(fromPosition, toPosition, vars) {\n\t\t\t\tvars = vars || {};\n\t\t\t\tfromPosition = this._parseTimeOrLabel(fromPosition);\n\t\t\t\tvars.startAt = {onComplete:this.seek, onCompleteParams:[fromPosition], callbackScope:this};\n\t\t\t\tvars.immediateRender = (vars.immediateRender !== false);\n\t\t\t\tvar t = this.tweenTo(toPosition, vars);\n\t\t\t\treturn t.duration((Math.abs( t.vars.time - fromPosition) / this._timeScale) || 0.001);\n\t\t\t};\n\t\n\t\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t\tif (this._gc) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t}\n\t\t\t\tvar totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(),\n\t\t\t\t\tdur = this._duration,\n\t\t\t\t\tprevTime = this._time,\n\t\t\t\t\tprevTotalTime = this._totalTime,\n\t\t\t\t\tprevStart = this._startTime,\n\t\t\t\t\tprevTimeScale = this._timeScale,\n\t\t\t\t\tprevRawPrevTime = this._rawPrevTime,\n\t\t\t\t\tprevPaused = this._paused,\n\t\t\t\t\tprevCycle = this._cycle,\n\t\t\t\t\ttween, isComplete, next, callback, internalForce, cycleDuration, pauseTween, curTime;\n\t\t\t\tif (time >= totalDur - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\t\tif (!this._locked) {\n\t\t\t\t\t\tthis._totalTime = totalDur;\n\t\t\t\t\t\tthis._cycle = this._repeat;\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._reversed) if (!this._hasPausedChild()) {\n\t\t\t\t\t\tisComplete = true;\n\t\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\t\tinternalForce = !!this._timeline.autoRemoveChildren; //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\t\tif (this._duration === 0) if ((time <= 0 && time >= -0.0000001) || prevRawPrevTime < 0 || prevRawPrevTime === _tinyNum) if (prevRawPrevTime !== time && this._first) {\n\t\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\t\t\tthis._time = time = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._time = dur;\n\t\t\t\t\t\ttime = dur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7. We cannot do less then 0.0001 because the same issue can occur when the duration is extremely large like 999999999999 in which case adding 0.00000001, for example, causes it to act like nothing was added.\n\t\t\t\t\t}\n\t\n\t\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\t\tif (!this._locked) {\n\t\t\t\t\t\tthis._totalTime = this._cycle = 0;\n\t\t\t\t\t}\n\t\t\t\t\tthis._time = 0;\n\t\t\t\t\tif (prevTime !== 0 || (dur === 0 && prevRawPrevTime !== _tinyNum && (prevRawPrevTime > 0 || (time < 0 && prevRawPrevTime >= 0)) && !this._locked)) { //edge case for checking time < 0 && prevRawPrevTime >= 0: a zero-duration fromTo() tween inside a zero-duration timeline (yeah, very rare)\n\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t\t}\n\t\t\t\t\tif (time < 0) {\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t\tif (this._timeline.autoRemoveChildren && this._reversed) {\n\t\t\t\t\t\t\tinternalForce = isComplete = true;\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t} else if (prevRawPrevTime >= 0 && this._first) { //when going back beyond the start, force a render so that zero-duration tweens that sit at the very beginning render their start values properly. Otherwise, if the parent timeline's playhead lands exactly at this timeline's startTime, and then moves backwards, the zero-duration tweens at the beginning would still be at their end state.\n\t\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._rawPrevTime = time;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._rawPrevTime = (dur || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t\tif (time === 0 && isComplete) { //if there's a zero-duration tween at the very beginning of a timeline and the playhead lands EXACTLY at time 0, that tween will correctly render its end values, but we need to keep the timeline alive for one more render so that the beginning values render properly as the parent's playhead keeps moving beyond the begining. Imagine obj.x starts at 0 and then we do tl.set(obj, {x:100}).to(obj, 1, {x:200}) and then later we tl.reverse()...the goal is to have obj.x revert to 0. If the playhead happens to land on exactly 0, without this chunk of code, it'd complete the timeline and remove it from the rendering queue (not good).\n\t\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\t\twhile (tween && tween._startTime === 0) {\n\t\t\t\t\t\t\t\tif (!tween._duration) {\n\t\t\t\t\t\t\t\t\tisComplete = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttime = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)\n\t\t\t\t\t\tif (!this._initted) {\n\t\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t} else {\n\t\t\t\t\tif (dur === 0 && prevRawPrevTime < 0) { //without this, zero-duration repeating timelines (like with a simple callback nested at the very beginning and a repeatDelay) wouldn't render the first time through.\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis._time = this._rawPrevTime = time;\n\t\t\t\t\tif (!this._locked) {\n\t\t\t\t\t\tthis._totalTime = time;\n\t\t\t\t\t\tif (this._repeat !== 0) {\n\t\t\t\t\t\t\tcycleDuration = dur + this._repeatDelay;\n\t\t\t\t\t\t\tthis._cycle = (this._totalTime / cycleDuration) >> 0; //originally _totalTime % cycleDuration but floating point errors caused problems, so I normalized it. (4 % 0.8 should be 0 but it gets reported as 0.79999999!)\n\t\t\t\t\t\t\tif (this._cycle !== 0) if (this._cycle === this._totalTime / cycleDuration && prevTotalTime <= time) {\n\t\t\t\t\t\t\t\tthis._cycle--; //otherwise when rendered exactly at the end time, it will act as though it is repeating (at the beginning)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._time = this._totalTime - (this._cycle * cycleDuration);\n\t\t\t\t\t\t\tif (this._yoyo) if ((this._cycle & 1) !== 0) {\n\t\t\t\t\t\t\t\tthis._time = dur - this._time;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (this._time > dur) {\n\t\t\t\t\t\t\t\tthis._time = dur;\n\t\t\t\t\t\t\t\ttime = dur + 0.0001; //to avoid occasional floating point rounding error\n\t\t\t\t\t\t\t} else if (this._time < 0) {\n\t\t\t\t\t\t\t\tthis._time = time = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttime = this._time;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this._hasPause && !this._forcingPlayhead && !suppressEvents) {\n\t\t\t\t\t\ttime = this._time;\n\t\t\t\t\t\tif (time >= prevTime) {\n\t\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\t\twhile (tween && tween._startTime <= time && !pauseTween) {\n\t\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && !tween.ratio && !(tween._startTime === 0 && this._rawPrevTime === 0)) {\n\t\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween = this._last;\n\t\t\t\t\t\t\twhile (tween && tween._startTime >= time && !pauseTween) {\n\t\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && tween._rawPrevTime > 0) {\n\t\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttween = tween._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pauseTween) {\n\t\t\t\t\t\t\tthis._time = time = pauseTween._startTime;\n\t\t\t\t\t\t\tthis._totalTime = time + (this._cycle * (this._totalDuration + this._repeatDelay));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t}\n\t\n\t\t\t\tif (this._cycle !== prevCycle) if (!this._locked) {\n\t\t\t\t\t/*\n\t\t\t\t\tmake sure children at the end/beginning of the timeline are rendered properly. If, for example,\n\t\t\t\t\ta 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which\n\t\t\t\t\twould get transated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there\n\t\t\t\t\tcould be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So\n\t\t\t\t\twe need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must\n\t\t\t\t\tensure that zero-duration tweens at the very beginning or end of the TimelineMax work.\n\t\t\t\t\t*/\n\t\t\t\t\tvar backwards = (this._yoyo && (prevCycle & 1) !== 0),\n\t\t\t\t\t\twrap = (backwards === (this._yoyo && (this._cycle & 1) !== 0)),\n\t\t\t\t\t\trecTotalTime = this._totalTime,\n\t\t\t\t\t\trecCycle = this._cycle,\n\t\t\t\t\t\trecRawPrevTime = this._rawPrevTime,\n\t\t\t\t\t\trecTime = this._time;\n\t\n\t\t\t\t\tthis._totalTime = prevCycle * dur;\n\t\t\t\t\tif (this._cycle < prevCycle) {\n\t\t\t\t\t\tbackwards = !backwards;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._totalTime += dur;\n\t\t\t\t\t}\n\t\t\t\t\tthis._time = prevTime; //temporarily revert _time so that render() renders the children in the correct order. Without this, tweens won't rewind correctly. We could arhictect things in a \"cleaner\" way by splitting out the rendering queue into a separate method but for performance reasons, we kept it all inside this method.\n\t\n\t\t\t\t\tthis._rawPrevTime = (dur === 0) ? prevRawPrevTime - 0.0001 : prevRawPrevTime;\n\t\t\t\t\tthis._cycle = prevCycle;\n\t\t\t\t\tthis._locked = true; //prevents changes to totalTime and skips repeat/yoyo behavior when we recursively call render()\n\t\t\t\t\tprevTime = (backwards) ? 0 : dur;\n\t\t\t\t\tthis.render(prevTime, suppressEvents, (dur === 0));\n\t\t\t\t\tif (!suppressEvents) if (!this._gc) {\n\t\t\t\t\t\tif (this.vars.onRepeat) {\n\t\t\t\t\t\t\tthis._callback(\"onRepeat\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (prevTime !== this._time) { //in case there's a callback like onComplete in a nested tween/timeline that changes the playhead position, like via seek(), we should just abort.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (wrap) {\n\t\t\t\t\t\tprevTime = (backwards) ? dur + 0.0001 : -0.0001;\n\t\t\t\t\t\tthis.render(prevTime, true, false);\n\t\t\t\t\t}\n\t\t\t\t\tthis._locked = false;\n\t\t\t\t\tif (this._paused && !prevPaused) { //if the render() triggered callback that paused this timeline, we should abort (very rare, but possible)\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis._time = recTime;\n\t\t\t\t\tthis._totalTime = recTotalTime;\n\t\t\t\t\tthis._cycle = recCycle;\n\t\t\t\t\tthis._rawPrevTime = recRawPrevTime;\n\t\t\t\t}\n\t\n\t\t\t\tif ((this._time === prevTime || !this._first) && !force && !internalForce && !pauseTween) {\n\t\t\t\t\tif (prevTotalTime !== this._totalTime) if (this._onUpdate) if (!suppressEvents) { //so that onUpdate fires even during the repeatDelay - as long as the totalTime changed, we should trigger onUpdate.\n\t\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!this._initted) {\n\t\t\t\t\tthis._initted = true;\n\t\t\t\t}\n\t\n\t\t\t\tif (!this._active) if (!this._paused && this._totalTime !== prevTotalTime && time > 0) {\n\t\t\t\t\tthis._active = true;  //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example.\n\t\t\t\t}\n\t\n\t\t\t\tif (prevTotalTime === 0) if (this.vars.onStart) if (this._totalTime !== 0 || !this._totalDuration) if (!suppressEvents) {\n\t\t\t\t\tthis._callback(\"onStart\");\n\t\t\t\t}\n\t\n\t\t\t\tcurTime = this._time;\n\t\t\t\tif (curTime >= prevTime) {\n\t\t\t\t\ttween = this._first;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (tween._active || (tween._startTime <= this._time && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = next;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttween = this._last;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tnext = tween._prev; //record it here because the value could change after rendering...\n\t\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\t\tpauseTween = tween._prev; //the linked list is organized by _startTime, thus it's possible that a tween could start BEFORE the pause and end after it, in which case it would be positioned before the pause tween in the linked list, but we should render it before we pause() the timeline and cease rendering. This is only a concern when going in reverse.\n\t\t\t\t\t\t\t\twhile (pauseTween && pauseTween.endTime() > this._time) {\n\t\t\t\t\t\t\t\t\tpauseTween.render( (pauseTween._reversed ? pauseTween.totalDuration() - ((time - pauseTween._startTime) * pauseTween._timeScale) : (time - pauseTween._startTime) * pauseTween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t\t\tpauseTween = pauseTween._prev;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpauseTween = null;\n\t\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (this._onUpdate) if (!suppressEvents) {\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t\tif (callback) if (!this._locked) if (!this._gc) if (prevStart === this._startTime || prevTimeScale !== this._timeScale) if (this._time === 0 || totalDur >= this.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\t\tif (isComplete) {\n\t\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onComplete on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\t\tthis._callback(callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tp.getActive = function(nested, tweens, timelines) {\n\t\t\t\tif (nested == null) {\n\t\t\t\t\tnested = true;\n\t\t\t\t}\n\t\t\t\tif (tweens == null) {\n\t\t\t\t\ttweens = true;\n\t\t\t\t}\n\t\t\t\tif (timelines == null) {\n\t\t\t\t\ttimelines = false;\n\t\t\t\t}\n\t\t\t\tvar a = [],\n\t\t\t\t\tall = this.getChildren(nested, tweens, timelines),\n\t\t\t\t\tcnt = 0,\n\t\t\t\t\tl = all.length,\n\t\t\t\t\ti, tween;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\ttween = all[i];\n\t\t\t\t\tif (tween.isActive()) {\n\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t};\n\t\n\t\n\t\t\tp.getLabelAfter = function(time) {\n\t\t\t\tif (!time) if (time !== 0) { //faster than isNan()\n\t\t\t\t\ttime = this._time;\n\t\t\t\t}\n\t\t\t\tvar labels = this.getLabelsArray(),\n\t\t\t\t\tl = labels.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tif (labels[i].time > time) {\n\t\t\t\t\t\treturn labels[i].name;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t};\n\t\n\t\t\tp.getLabelBefore = function(time) {\n\t\t\t\tif (time == null) {\n\t\t\t\t\ttime = this._time;\n\t\t\t\t}\n\t\t\t\tvar labels = this.getLabelsArray(),\n\t\t\t\t\ti = labels.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (labels[i].time < time) {\n\t\t\t\t\t\treturn labels[i].name;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t};\n\t\n\t\t\tp.getLabelsArray = function() {\n\t\t\t\tvar a = [],\n\t\t\t\t\tcnt = 0,\n\t\t\t\t\tp;\n\t\t\t\tfor (p in this._labels) {\n\t\t\t\t\ta[cnt++] = {time:this._labels[p], name:p};\n\t\t\t\t}\n\t\t\t\ta.sort(function(a,b) {\n\t\t\t\t\treturn a.time - b.time;\n\t\t\t\t});\n\t\t\t\treturn a;\n\t\t\t};\n\t\n\t\n\t//---- GETTERS / SETTERS -------------------------------------------------------------------------------------------------------\n\t\n\t\t\tp.progress = function(value, suppressEvents) {\n\t\t\t\treturn (!arguments.length) ? this._time / this.duration() : this.totalTime( this.duration() * ((this._yoyo && (this._cycle & 1) !== 0) ? 1 - value : value) + (this._cycle * (this._duration + this._repeatDelay)), suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.totalProgress = function(value, suppressEvents) {\n\t\t\t\treturn (!arguments.length) ? this._totalTime / this.totalDuration() : this.totalTime( this.totalDuration() * value, suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.totalDuration = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\tTimelineLite.prototype.totalDuration.call(this); //just forces refresh\n\t\t\t\t\t\t//Instead of Infinity, we use 999999999999 so that we can accommodate reverses.\n\t\t\t\t\t\tthis._totalDuration = (this._repeat === -1) ? 999999999999 : this._duration * (this._repeat + 1) + (this._repeatDelay * this._repeat);\n\t\t\t\t\t}\n\t\t\t\t\treturn this._totalDuration;\n\t\t\t\t}\n\t\t\t\treturn (this._repeat === -1 || !value) ? this : this.timeScale( this.totalDuration() / value );\n\t\t\t};\n\t\n\t\t\tp.time = function(value, suppressEvents) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._time;\n\t\t\t\t}\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tthis.totalDuration();\n\t\t\t\t}\n\t\t\t\tif (value > this._duration) {\n\t\t\t\t\tvalue = this._duration;\n\t\t\t\t}\n\t\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\t\tvalue = (this._duration - value) + (this._cycle * (this._duration + this._repeatDelay));\n\t\t\t\t} else if (this._repeat !== 0) {\n\t\t\t\t\tvalue += this._cycle * (this._duration + this._repeatDelay);\n\t\t\t\t}\n\t\t\t\treturn this.totalTime(value, suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.repeat = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._repeat;\n\t\t\t\t}\n\t\t\t\tthis._repeat = value;\n\t\t\t\treturn this._uncache(true);\n\t\t\t};\n\t\n\t\t\tp.repeatDelay = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._repeatDelay;\n\t\t\t\t}\n\t\t\t\tthis._repeatDelay = value;\n\t\t\t\treturn this._uncache(true);\n\t\t\t};\n\t\n\t\t\tp.yoyo = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._yoyo;\n\t\t\t\t}\n\t\t\t\tthis._yoyo = value;\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.currentLabel = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this.getLabelBefore(this._time + 0.00000001);\n\t\t\t\t}\n\t\t\t\treturn this.seek(value, true);\n\t\t\t};\n\t\n\t\t\treturn TimelineMax;\n\t\n\t\t}, true);\n\t\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * BezierPlugin\n\t * ----------------------------------------------------------------\n\t */\n\t\t(function() {\n\t\n\t\t\tvar _RAD2DEG = 180 / Math.PI,\n\t\t\t\t_r1 = [],\n\t\t\t\t_r2 = [],\n\t\t\t\t_r3 = [],\n\t\t\t\t_corProps = {},\n\t\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t\tSegment = function(a, b, c, d) {\n\t\t\t\t\tif (c === d) { //if c and d match, the final autoRotate value could lock at -90 degrees, so differentiate them slightly.\n\t\t\t\t\t\tc = d - (d - b) / 1000000;\n\t\t\t\t\t}\n\t\t\t\t\tif (a === b) { //if a and b match, the starting autoRotate value could lock at -90 degrees, so differentiate them slightly.\n\t\t\t\t\t\tb = a + (c - a) / 1000000;\n\t\t\t\t\t}\n\t\t\t\t\tthis.a = a;\n\t\t\t\t\tthis.b = b;\n\t\t\t\t\tthis.c = c;\n\t\t\t\t\tthis.d = d;\n\t\t\t\t\tthis.da = d - a;\n\t\t\t\t\tthis.ca = c - a;\n\t\t\t\t\tthis.ba = b - a;\n\t\t\t\t},\n\t\t\t\t_correlate = \",x,y,z,left,top,right,bottom,marginTop,marginLeft,marginRight,marginBottom,paddingLeft,paddingTop,paddingRight,paddingBottom,backgroundPosition,backgroundPosition_y,\",\n\t\t\t\tcubicToQuadratic = function(a, b, c, d) {\n\t\t\t\t\tvar q1 = {a:a},\n\t\t\t\t\t\tq2 = {},\n\t\t\t\t\t\tq3 = {},\n\t\t\t\t\t\tq4 = {c:d},\n\t\t\t\t\t\tmab = (a + b) / 2,\n\t\t\t\t\t\tmbc = (b + c) / 2,\n\t\t\t\t\t\tmcd = (c + d) / 2,\n\t\t\t\t\t\tmabc = (mab + mbc) / 2,\n\t\t\t\t\t\tmbcd = (mbc + mcd) / 2,\n\t\t\t\t\t\tm8 = (mbcd - mabc) / 8;\n\t\t\t\t\tq1.b = mab + (a - mab) / 4;\n\t\t\t\t\tq2.b = mabc + m8;\n\t\t\t\t\tq1.c = q2.a = (q1.b + q2.b) / 2;\n\t\t\t\t\tq2.c = q3.a = (mabc + mbcd) / 2;\n\t\t\t\t\tq3.b = mbcd - m8;\n\t\t\t\t\tq4.b = mcd + (d - mcd) / 4;\n\t\t\t\t\tq3.c = q4.a = (q3.b + q4.b) / 2;\n\t\t\t\t\treturn [q1, q2, q3, q4];\n\t\t\t\t},\n\t\t\t\t_calculateControlPoints = function(a, curviness, quad, basic, correlate) {\n\t\t\t\t\tvar l = a.length - 1,\n\t\t\t\t\t\tii = 0,\n\t\t\t\t\t\tcp1 = a[0].a,\n\t\t\t\t\t\ti, p1, p2, p3, seg, m1, m2, mm, cp2, qb, r1, r2, tl;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tseg = a[ii];\n\t\t\t\t\t\tp1 = seg.a;\n\t\t\t\t\t\tp2 = seg.d;\n\t\t\t\t\t\tp3 = a[ii+1].d;\n\t\n\t\t\t\t\t\tif (correlate) {\n\t\t\t\t\t\t\tr1 = _r1[i];\n\t\t\t\t\t\t\tr2 = _r2[i];\n\t\t\t\t\t\t\ttl = ((r2 + r1) * curviness * 0.25) / (basic ? 0.5 : _r3[i] || 0.5);\n\t\t\t\t\t\t\tm1 = p2 - (p2 - p1) * (basic ? curviness * 0.5 : (r1 !== 0 ? tl / r1 : 0));\n\t\t\t\t\t\t\tm2 = p2 + (p3 - p2) * (basic ? curviness * 0.5 : (r2 !== 0 ? tl / r2 : 0));\n\t\t\t\t\t\t\tmm = p2 - (m1 + (((m2 - m1) * ((r1 * 3 / (r1 + r2)) + 0.5) / 4) || 0));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tm1 = p2 - (p2 - p1) * curviness * 0.5;\n\t\t\t\t\t\t\tm2 = p2 + (p3 - p2) * curviness * 0.5;\n\t\t\t\t\t\t\tmm = p2 - (m1 + m2) / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tm1 += mm;\n\t\t\t\t\t\tm2 += mm;\n\t\n\t\t\t\t\t\tseg.c = cp2 = m1;\n\t\t\t\t\t\tif (i !== 0) {\n\t\t\t\t\t\t\tseg.b = cp1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tseg.b = cp1 = seg.a + (seg.c - seg.a) * 0.6; //instead of placing b on a exactly, we move it inline with c so that if the user specifies an ease like Back.easeIn or Elastic.easeIn which goes BEYOND the beginning, it will do so smoothly.\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tseg.da = p2 - p1;\n\t\t\t\t\t\tseg.ca = cp2 - p1;\n\t\t\t\t\t\tseg.ba = cp1 - p1;\n\t\n\t\t\t\t\t\tif (quad) {\n\t\t\t\t\t\t\tqb = cubicToQuadratic(p1, cp1, cp2, p2);\n\t\t\t\t\t\t\ta.splice(ii, 1, qb[0], qb[1], qb[2], qb[3]);\n\t\t\t\t\t\t\tii += 4;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tii++;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tcp1 = m2;\n\t\t\t\t\t}\n\t\t\t\t\tseg = a[ii];\n\t\t\t\t\tseg.b = cp1;\n\t\t\t\t\tseg.c = cp1 + (seg.d - cp1) * 0.4; //instead of placing c on d exactly, we move it inline with b so that if the user specifies an ease like Back.easeOut or Elastic.easeOut which goes BEYOND the end, it will do so smoothly.\n\t\t\t\t\tseg.da = seg.d - seg.a;\n\t\t\t\t\tseg.ca = seg.c - seg.a;\n\t\t\t\t\tseg.ba = cp1 - seg.a;\n\t\t\t\t\tif (quad) {\n\t\t\t\t\t\tqb = cubicToQuadratic(seg.a, cp1, seg.c, seg.d);\n\t\t\t\t\t\ta.splice(ii, 1, qb[0], qb[1], qb[2], qb[3]);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_parseAnchors = function(values, p, correlate, prepend) {\n\t\t\t\t\tvar a = [],\n\t\t\t\t\t\tl, i, p1, p2, p3, tmp;\n\t\t\t\t\tif (prepend) {\n\t\t\t\t\t\tvalues = [prepend].concat(values);\n\t\t\t\t\t\ti = values.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (typeof( (tmp = values[i][p]) ) === \"string\") if (tmp.charAt(1) === \"=\") {\n\t\t\t\t\t\t\t\tvalues[i][p] = prepend[p] + Number(tmp.charAt(0) + tmp.substr(2)); //accommodate relative values. Do it inline instead of breaking it out into a function for speed reasons\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tl = values.length - 2;\n\t\t\t\t\tif (l < 0) {\n\t\t\t\t\t\ta[0] = new Segment(values[0][p], 0, 0, values[(l < -1) ? 0 : 1][p]);\n\t\t\t\t\t\treturn a;\n\t\t\t\t\t}\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tp1 = values[i][p];\n\t\t\t\t\t\tp2 = values[i+1][p];\n\t\t\t\t\t\ta[i] = new Segment(p1, 0, 0, p2);\n\t\t\t\t\t\tif (correlate) {\n\t\t\t\t\t\t\tp3 = values[i+2][p];\n\t\t\t\t\t\t\t_r1[i] = (_r1[i] || 0) + (p2 - p1) * (p2 - p1);\n\t\t\t\t\t\t\t_r2[i] = (_r2[i] || 0) + (p3 - p2) * (p3 - p2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ta[i] = new Segment(values[i][p], 0, 0, values[i+1][p]);\n\t\t\t\t\treturn a;\n\t\t\t\t},\n\t\t\t\tbezierThrough = function(values, curviness, quadratic, basic, correlate, prepend) {\n\t\t\t\t\tvar obj = {},\n\t\t\t\t\t\tprops = [],\n\t\t\t\t\t\tfirst = prepend || values[0],\n\t\t\t\t\t\ti, p, a, j, r, l, seamless, last;\n\t\t\t\t\tcorrelate = (typeof(correlate) === \"string\") ? \",\"+correlate+\",\" : _correlate;\n\t\t\t\t\tif (curviness == null) {\n\t\t\t\t\t\tcurviness = 1;\n\t\t\t\t\t}\n\t\t\t\t\tfor (p in values[0]) {\n\t\t\t\t\t\tprops.push(p);\n\t\t\t\t\t}\n\t\t\t\t\t//check to see if the last and first values are identical (well, within 0.05). If so, make seamless by appending the second element to the very end of the values array and the 2nd-to-last element to the very beginning (we'll remove those segments later)\n\t\t\t\t\tif (values.length > 1) {\n\t\t\t\t\t\tlast = values[values.length - 1];\n\t\t\t\t\t\tseamless = true;\n\t\t\t\t\t\ti = props.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = props[i];\n\t\t\t\t\t\t\tif (Math.abs(first[p] - last[p]) > 0.05) { //build in a tolerance of +/-0.05 to accommodate rounding errors.\n\t\t\t\t\t\t\t\tseamless = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (seamless) {\n\t\t\t\t\t\t\tvalues = values.concat(); //duplicate the array to avoid contaminating the original which the user may be reusing for other tweens\n\t\t\t\t\t\t\tif (prepend) {\n\t\t\t\t\t\t\t\tvalues.unshift(prepend);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalues.push(values[1]);\n\t\t\t\t\t\t\tprepend = values[values.length - 3];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t_r1.length = _r2.length = _r3.length = 0;\n\t\t\t\t\ti = props.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tp = props[i];\n\t\t\t\t\t\t_corProps[p] = (correlate.indexOf(\",\"+p+\",\") !== -1);\n\t\t\t\t\t\tobj[p] = _parseAnchors(values, p, _corProps[p], prepend);\n\t\t\t\t\t}\n\t\t\t\t\ti = _r1.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t_r1[i] = Math.sqrt(_r1[i]);\n\t\t\t\t\t\t_r2[i] = Math.sqrt(_r2[i]);\n\t\t\t\t\t}\n\t\t\t\t\tif (!basic) {\n\t\t\t\t\t\ti = props.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (_corProps[p]) {\n\t\t\t\t\t\t\t\ta = obj[props[i]];\n\t\t\t\t\t\t\t\tl = a.length - 1;\n\t\t\t\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\t\t\t\tr = (a[j+1].da / _r2[j] + a[j].da / _r1[j]) || 0;\n\t\t\t\t\t\t\t\t\t_r3[j] = (_r3[j] || 0) + r * r;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ti = _r3.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t_r3[i] = Math.sqrt(_r3[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ti = props.length;\n\t\t\t\t\tj = quadratic ? 4 : 1;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tp = props[i];\n\t\t\t\t\t\ta = obj[p];\n\t\t\t\t\t\t_calculateControlPoints(a, curviness, quadratic, basic, _corProps[p]); //this method requires that _parseAnchors() and _setSegmentRatios() ran first so that _r1, _r2, and _r3 values are populated for all properties\n\t\t\t\t\t\tif (seamless) {\n\t\t\t\t\t\t\ta.splice(0, j);\n\t\t\t\t\t\t\ta.splice(a.length - j, j);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn obj;\n\t\t\t\t},\n\t\t\t\t_parseBezierData = function(values, type, prepend) {\n\t\t\t\t\ttype = type || \"soft\";\n\t\t\t\t\tvar obj = {},\n\t\t\t\t\t\tinc = (type === \"cubic\") ? 3 : 2,\n\t\t\t\t\t\tsoft = (type === \"soft\"),\n\t\t\t\t\t\tprops = [],\n\t\t\t\t\t\ta, b, c, d, cur, i, j, l, p, cnt, tmp;\n\t\t\t\t\tif (soft && prepend) {\n\t\t\t\t\t\tvalues = [prepend].concat(values);\n\t\t\t\t\t}\n\t\t\t\t\tif (values == null || values.length < inc + 1) { throw \"invalid Bezier data\"; }\n\t\t\t\t\tfor (p in values[0]) {\n\t\t\t\t\t\tprops.push(p);\n\t\t\t\t\t}\n\t\t\t\t\ti = props.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tp = props[i];\n\t\t\t\t\t\tobj[p] = cur = [];\n\t\t\t\t\t\tcnt = 0;\n\t\t\t\t\t\tl = values.length;\n\t\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\t\ta = (prepend == null) ? values[j][p] : (typeof( (tmp = values[j][p]) ) === \"string\" && tmp.charAt(1) === \"=\") ? prepend[p] + Number(tmp.charAt(0) + tmp.substr(2)) : Number(tmp);\n\t\t\t\t\t\t\tif (soft) if (j > 1) if (j < l - 1) {\n\t\t\t\t\t\t\t\tcur[cnt++] = (a + cur[cnt-2]) / 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcur[cnt++] = a;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tl = cnt - inc + 1;\n\t\t\t\t\t\tcnt = 0;\n\t\t\t\t\t\tfor (j = 0; j < l; j += inc) {\n\t\t\t\t\t\t\ta = cur[j];\n\t\t\t\t\t\t\tb = cur[j+1];\n\t\t\t\t\t\t\tc = cur[j+2];\n\t\t\t\t\t\t\td = (inc === 2) ? 0 : cur[j+3];\n\t\t\t\t\t\t\tcur[cnt++] = tmp = (inc === 3) ? new Segment(a, b, c, d) : new Segment(a, (2 * b + a) / 3, (2 * b + c) / 3, c);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcur.length = cnt;\n\t\t\t\t\t}\n\t\t\t\t\treturn obj;\n\t\t\t\t},\n\t\t\t\t_addCubicLengths = function(a, steps, resolution) {\n\t\t\t\t\tvar inc = 1 / resolution,\n\t\t\t\t\t\tj = a.length,\n\t\t\t\t\t\td, d1, s, da, ca, ba, p, i, inv, bez, index;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\tbez = a[j];\n\t\t\t\t\t\ts = bez.a;\n\t\t\t\t\t\tda = bez.d - s;\n\t\t\t\t\t\tca = bez.c - s;\n\t\t\t\t\t\tba = bez.b - s;\n\t\t\t\t\t\td = d1 = 0;\n\t\t\t\t\t\tfor (i = 1; i <= resolution; i++) {\n\t\t\t\t\t\t\tp = inc * i;\n\t\t\t\t\t\t\tinv = 1 - p;\n\t\t\t\t\t\t\td = d1 - (d1 = (p * p * da + 3 * inv * (p * ca + inv * ba)) * p);\n\t\t\t\t\t\t\tindex = j * resolution + i - 1;\n\t\t\t\t\t\t\tsteps[index] = (steps[index] || 0) + d * d;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_parseLengthData = function(obj, resolution) {\n\t\t\t\t\tresolution = resolution >> 0 || 6;\n\t\t\t\t\tvar a = [],\n\t\t\t\t\t\tlengths = [],\n\t\t\t\t\t\td = 0,\n\t\t\t\t\t\ttotal = 0,\n\t\t\t\t\t\tthreshold = resolution - 1,\n\t\t\t\t\t\tsegments = [],\n\t\t\t\t\t\tcurLS = [], //current length segments array\n\t\t\t\t\t\tp, i, l, index;\n\t\t\t\t\tfor (p in obj) {\n\t\t\t\t\t\t_addCubicLengths(obj[p], a, resolution);\n\t\t\t\t\t}\n\t\t\t\t\tl = a.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\td += Math.sqrt(a[i]);\n\t\t\t\t\t\tindex = i % resolution;\n\t\t\t\t\t\tcurLS[index] = d;\n\t\t\t\t\t\tif (index === threshold) {\n\t\t\t\t\t\t\ttotal += d;\n\t\t\t\t\t\t\tindex = (i / resolution) >> 0;\n\t\t\t\t\t\t\tsegments[index] = curLS;\n\t\t\t\t\t\t\tlengths[index] = total;\n\t\t\t\t\t\t\td = 0;\n\t\t\t\t\t\t\tcurLS = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn {length:total, lengths:lengths, segments:segments};\n\t\t\t\t},\n\t\n\t\n\t\n\t\t\t\tBezierPlugin = _gsScope._gsDefine.plugin({\n\t\t\t\t\t\tpropName: \"bezier\",\n\t\t\t\t\t\tpriority: -1,\n\t\t\t\t\t\tversion: \"1.3.7\",\n\t\t\t\t\t\tAPI: 2,\n\t\t\t\t\t\tglobal:true,\n\t\n\t\t\t\t\t\t//gets called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\t\t\tinit: function(target, vars, tween) {\n\t\t\t\t\t\t\tthis._target = target;\n\t\t\t\t\t\t\tif (vars instanceof Array) {\n\t\t\t\t\t\t\t\tvars = {values:vars};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._func = {};\n\t\t\t\t\t\t\tthis._mod = {};\n\t\t\t\t\t\t\tthis._props = [];\n\t\t\t\t\t\t\tthis._timeRes = (vars.timeResolution == null) ? 6 : parseInt(vars.timeResolution, 10);\n\t\t\t\t\t\t\tvar values = vars.values || [],\n\t\t\t\t\t\t\t\tfirst = {},\n\t\t\t\t\t\t\t\tsecond = values[0],\n\t\t\t\t\t\t\t\tautoRotate = vars.autoRotate || tween.vars.orientToBezier,\n\t\t\t\t\t\t\t\tp, isFunc, i, j, prepend;\n\t\n\t\t\t\t\t\t\tthis._autoRotate = autoRotate ? (autoRotate instanceof Array) ? autoRotate : [[\"x\",\"y\",\"rotation\",((autoRotate === true) ? 0 : Number(autoRotate) || 0)]] : null;\n\t\t\t\t\t\t\tfor (p in second) {\n\t\t\t\t\t\t\t\tthis._props.push(p);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\ti = this._props.length;\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tp = this._props[i];\n\t\n\t\t\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t\t\t\tisFunc = this._func[p] = (typeof(target[p]) === \"function\");\n\t\t\t\t\t\t\t\tfirst[p] = (!isFunc) ? parseFloat(target[p]) : target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ]();\n\t\t\t\t\t\t\t\tif (!prepend) if (first[p] !== values[0][p]) {\n\t\t\t\t\t\t\t\t\tprepend = first;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._beziers = (vars.type !== \"cubic\" && vars.type !== \"quadratic\" && vars.type !== \"soft\") ? bezierThrough(values, isNaN(vars.curviness) ? 1 : vars.curviness, false, (vars.type === \"thruBasic\"), vars.correlate, prepend) : _parseBezierData(values, vars.type, first);\n\t\t\t\t\t\t\tthis._segCount = this._beziers[p].length;\n\t\n\t\t\t\t\t\t\tif (this._timeRes) {\n\t\t\t\t\t\t\t\tvar ld = _parseLengthData(this._beziers, this._timeRes);\n\t\t\t\t\t\t\t\tthis._length = ld.length;\n\t\t\t\t\t\t\t\tthis._lengths = ld.lengths;\n\t\t\t\t\t\t\t\tthis._segments = ld.segments;\n\t\t\t\t\t\t\t\tthis._l1 = this._li = this._s1 = this._si = 0;\n\t\t\t\t\t\t\t\tthis._l2 = this._lengths[0];\n\t\t\t\t\t\t\t\tthis._curSeg = this._segments[0];\n\t\t\t\t\t\t\t\tthis._s2 = this._curSeg[0];\n\t\t\t\t\t\t\t\tthis._prec = 1 / this._curSeg.length;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif ((autoRotate = this._autoRotate)) {\n\t\t\t\t\t\t\t\tthis._initialRotations = [];\n\t\t\t\t\t\t\t\tif (!(autoRotate[0] instanceof Array)) {\n\t\t\t\t\t\t\t\t\tthis._autoRotate = autoRotate = [autoRotate];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ti = autoRotate.length;\n\t\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < 3; j++) {\n\t\t\t\t\t\t\t\t\t\tp = autoRotate[i][j];\n\t\t\t\t\t\t\t\t\t\tthis._func[p] = (typeof(target[p]) === \"function\") ? target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ] : false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tp = autoRotate[i][2];\n\t\t\t\t\t\t\t\t\tthis._initialRotations[i] = (this._func[p] ? this._func[p].call(this._target) : this._target[p]) || 0;\n\t\t\t\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._startRatio = tween.vars.runBackwards ? 1 : 0; //we determine the starting ratio when the tween inits which is always 0 unless the tween has runBackwards:true (indicating it's a from() tween) in which case it's 1.\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t//called each time the values should be updated, and the ratio gets passed as the only parameter (typically it's a value between 0 and 1, but it can exceed those when using an ease like Elastic.easeOut or Back.easeOut, etc.)\n\t\t\t\t\t\tset: function(v) {\n\t\t\t\t\t\t\tvar segments = this._segCount,\n\t\t\t\t\t\t\t\tfunc = this._func,\n\t\t\t\t\t\t\t\ttarget = this._target,\n\t\t\t\t\t\t\t\tnotStart = (v !== this._startRatio),\n\t\t\t\t\t\t\t\tcurIndex, inv, i, p, b, t, val, l, lengths, curSeg;\n\t\t\t\t\t\t\tif (!this._timeRes) {\n\t\t\t\t\t\t\t\tcurIndex = (v < 0) ? 0 : (v >= 1) ? segments - 1 : (segments * v) >> 0;\n\t\t\t\t\t\t\t\tt = (v - (curIndex * (1 / segments))) * segments;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlengths = this._lengths;\n\t\t\t\t\t\t\t\tcurSeg = this._curSeg;\n\t\t\t\t\t\t\t\tv *= this._length;\n\t\t\t\t\t\t\t\ti = this._li;\n\t\t\t\t\t\t\t\t//find the appropriate segment (if the currently cached one isn't correct)\n\t\t\t\t\t\t\t\tif (v > this._l2 && i < segments - 1) {\n\t\t\t\t\t\t\t\t\tl = segments - 1;\n\t\t\t\t\t\t\t\t\twhile (i < l && (this._l2 = lengths[++i]) <= v) {\t}\n\t\t\t\t\t\t\t\t\tthis._l1 = lengths[i-1];\n\t\t\t\t\t\t\t\t\tthis._li = i;\n\t\t\t\t\t\t\t\t\tthis._curSeg = curSeg = this._segments[i];\n\t\t\t\t\t\t\t\t\tthis._s2 = curSeg[(this._s1 = this._si = 0)];\n\t\t\t\t\t\t\t\t} else if (v < this._l1 && i > 0) {\n\t\t\t\t\t\t\t\t\twhile (i > 0 && (this._l1 = lengths[--i]) >= v) { }\n\t\t\t\t\t\t\t\t\tif (i === 0 && v < this._l1) {\n\t\t\t\t\t\t\t\t\t\tthis._l1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthis._l2 = lengths[i];\n\t\t\t\t\t\t\t\t\tthis._li = i;\n\t\t\t\t\t\t\t\t\tthis._curSeg = curSeg = this._segments[i];\n\t\t\t\t\t\t\t\t\tthis._s1 = curSeg[(this._si = curSeg.length - 1) - 1] || 0;\n\t\t\t\t\t\t\t\t\tthis._s2 = curSeg[this._si];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcurIndex = i;\n\t\t\t\t\t\t\t\t//now find the appropriate sub-segment (we split it into the number of pieces that was defined by \"precision\" and measured each one)\n\t\t\t\t\t\t\t\tv -= this._l1;\n\t\t\t\t\t\t\t\ti = this._si;\n\t\t\t\t\t\t\t\tif (v > this._s2 && i < curSeg.length - 1) {\n\t\t\t\t\t\t\t\t\tl = curSeg.length - 1;\n\t\t\t\t\t\t\t\t\twhile (i < l && (this._s2 = curSeg[++i]) <= v) {\t}\n\t\t\t\t\t\t\t\t\tthis._s1 = curSeg[i-1];\n\t\t\t\t\t\t\t\t\tthis._si = i;\n\t\t\t\t\t\t\t\t} else if (v < this._s1 && i > 0) {\n\t\t\t\t\t\t\t\t\twhile (i > 0 && (this._s1 = curSeg[--i]) >= v) {\t}\n\t\t\t\t\t\t\t\t\tif (i === 0 && v < this._s1) {\n\t\t\t\t\t\t\t\t\t\tthis._s1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthis._s2 = curSeg[i];\n\t\t\t\t\t\t\t\t\tthis._si = i;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tt = ((i + (v - this._s1) / (this._s2 - this._s1)) * this._prec) || 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinv = 1 - t;\n\t\n\t\t\t\t\t\t\ti = this._props.length;\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tp = this._props[i];\n\t\t\t\t\t\t\t\tb = this._beziers[p][curIndex];\n\t\t\t\t\t\t\t\tval = (t * t * b.da + 3 * inv * (t * b.ca + inv * b.ba)) * t + b.a;\n\t\t\t\t\t\t\t\tif (this._mod[p]) {\n\t\t\t\t\t\t\t\t\tval = this._mod[p](val, target);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (func[p]) {\n\t\t\t\t\t\t\t\t\ttarget[p](val);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttarget[p] = val;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif (this._autoRotate) {\n\t\t\t\t\t\t\t\tvar ar = this._autoRotate,\n\t\t\t\t\t\t\t\t\tb2, x1, y1, x2, y2, add, conv;\n\t\t\t\t\t\t\t\ti = ar.length;\n\t\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\t\tp = ar[i][2];\n\t\t\t\t\t\t\t\t\tadd = ar[i][3] || 0;\n\t\t\t\t\t\t\t\t\tconv = (ar[i][4] === true) ? 1 : _RAD2DEG;\n\t\t\t\t\t\t\t\t\tb = this._beziers[ar[i][0]];\n\t\t\t\t\t\t\t\t\tb2 = this._beziers[ar[i][1]];\n\t\n\t\t\t\t\t\t\t\t\tif (b && b2) { //in case one of the properties got overwritten.\n\t\t\t\t\t\t\t\t\t\tb = b[curIndex];\n\t\t\t\t\t\t\t\t\t\tb2 = b2[curIndex];\n\t\n\t\t\t\t\t\t\t\t\t\tx1 = b.a + (b.b - b.a) * t;\n\t\t\t\t\t\t\t\t\t\tx2 = b.b + (b.c - b.b) * t;\n\t\t\t\t\t\t\t\t\t\tx1 += (x2 - x1) * t;\n\t\t\t\t\t\t\t\t\t\tx2 += ((b.c + (b.d - b.c) * t) - x2) * t;\n\t\n\t\t\t\t\t\t\t\t\t\ty1 = b2.a + (b2.b - b2.a) * t;\n\t\t\t\t\t\t\t\t\t\ty2 = b2.b + (b2.c - b2.b) * t;\n\t\t\t\t\t\t\t\t\t\ty1 += (y2 - y1) * t;\n\t\t\t\t\t\t\t\t\t\ty2 += ((b2.c + (b2.d - b2.c) * t) - y2) * t;\n\t\n\t\t\t\t\t\t\t\t\t\tval = notStart ? Math.atan2(y2 - y1, x2 - x1) * conv + add : this._initialRotations[i];\n\t\n\t\t\t\t\t\t\t\t\t\tif (this._mod[p]) {\n\t\t\t\t\t\t\t\t\t\t\tval = this._mod[p](val, target); //for modProps\n\t\t\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\t\t\tif (func[p]) {\n\t\t\t\t\t\t\t\t\t\t\ttarget[p](val);\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\ttarget[p] = val;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tp = BezierPlugin.prototype;\n\t\n\t\n\t\t\tBezierPlugin.bezierThrough = bezierThrough;\n\t\t\tBezierPlugin.cubicToQuadratic = cubicToQuadratic;\n\t\t\tBezierPlugin._autoCSS = true; //indicates that this plugin can be inserted into the \"css\" object using the autoCSS feature of TweenLite\n\t\t\tBezierPlugin.quadraticToCubic = function(a, b, c) {\n\t\t\t\treturn new Segment(a, (2 * b + a) / 3, (2 * b + c) / 3, c);\n\t\t\t};\n\t\n\t\t\tBezierPlugin._cssRegister = function() {\n\t\t\t\tvar CSSPlugin = _globals.CSSPlugin;\n\t\t\t\tif (!CSSPlugin) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar _internals = CSSPlugin._internals,\n\t\t\t\t\t_parseToProxy = _internals._parseToProxy,\n\t\t\t\t\t_setPluginRatio = _internals._setPluginRatio,\n\t\t\t\t\tCSSPropTween = _internals.CSSPropTween;\n\t\t\t\t_internals._registerComplexSpecialProp(\"bezier\", {parser:function(t, e, prop, cssp, pt, plugin) {\n\t\t\t\t\tif (e instanceof Array) {\n\t\t\t\t\t\te = {values:e};\n\t\t\t\t\t}\n\t\t\t\t\tplugin = new BezierPlugin();\n\t\t\t\t\tvar values = e.values,\n\t\t\t\t\t\tl = values.length - 1,\n\t\t\t\t\t\tpluginValues = [],\n\t\t\t\t\t\tv = {},\n\t\t\t\t\t\ti, p, data;\n\t\t\t\t\tif (l < 0) {\n\t\t\t\t\t\treturn pt;\n\t\t\t\t\t}\n\t\t\t\t\tfor (i = 0; i <= l; i++) {\n\t\t\t\t\t\tdata = _parseToProxy(t, values[i], cssp, pt, plugin, (l !== i));\n\t\t\t\t\t\tpluginValues[i] = data.end;\n\t\t\t\t\t}\n\t\t\t\t\tfor (p in e) {\n\t\t\t\t\t\tv[p] = e[p]; //duplicate the vars object because we need to alter some things which would cause problems if the user plans to reuse the same vars object for another tween.\n\t\t\t\t\t}\n\t\t\t\t\tv.values = pluginValues;\n\t\t\t\t\tpt = new CSSPropTween(t, \"bezier\", 0, 0, data.pt, 2);\n\t\t\t\t\tpt.data = data;\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\tpt.setRatio = _setPluginRatio;\n\t\t\t\t\tif (v.autoRotate === 0) {\n\t\t\t\t\t\tv.autoRotate = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (v.autoRotate && !(v.autoRotate instanceof Array)) {\n\t\t\t\t\t\ti = (v.autoRotate === true) ? 0 : Number(v.autoRotate);\n\t\t\t\t\t\tv.autoRotate = (data.end.left != null) ? [[\"left\",\"top\",\"rotation\",i,false]] : (data.end.x != null) ? [[\"x\",\"y\",\"rotation\",i,false]] : false;\n\t\t\t\t\t}\n\t\t\t\t\tif (v.autoRotate) {\n\t\t\t\t\t\tif (!cssp._transform) {\n\t\t\t\t\t\t\tcssp._enableTransforms(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata.autoRotate = cssp._target._gsTransform;\n\t\t\t\t\t\tdata.proxy.rotation = data.autoRotate.rotation || 0;\n\t\t\t\t\t\tcssp._overwriteProps.push(\"rotation\");\n\t\t\t\t\t}\n\t\t\t\t\tplugin._onInitTween(data.proxy, v, cssp._tween);\n\t\t\t\t\treturn pt;\n\t\t\t\t}});\n\t\t\t};\n\t\n\t\t\tp._mod = function(lookup) {\n\t\t\t\tvar op = this._overwriteProps,\n\t\t\t\t\ti = op.length,\n\t\t\t\t\tval;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tval = lookup[op[i]];\n\t\t\t\t\tif (val && typeof(val) === \"function\") {\n\t\t\t\t\t\tthis._mod[op[i]] = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tp._kill = function(lookup) {\n\t\t\t\tvar a = this._props,\n\t\t\t\t\tp, i;\n\t\t\t\tfor (p in this._beziers) {\n\t\t\t\t\tif (p in lookup) {\n\t\t\t\t\t\tdelete this._beziers[p];\n\t\t\t\t\t\tdelete this._func[p];\n\t\t\t\t\t\ti = a.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i] === p) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ta = this._autoRotate;\n\t\t\t\tif (a) {\n\t\t\t\t\ti = a.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (lookup[a[i][2]]) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this._super._kill.call(this, lookup);\n\t\t\t};\n\t\n\t\t}());\n\t\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * CSSPlugin\n\t * ----------------------------------------------------------------\n\t */\n\t\t_gsScope._gsDefine(\"plugins.CSSPlugin\", [\"plugins.TweenPlugin\",\"TweenLite\"], function(TweenPlugin, TweenLite) {\n\t\n\t\t\t/** @constructor **/\n\t\t\tvar CSSPlugin = function() {\n\t\t\t\t\tTweenPlugin.call(this, \"css\");\n\t\t\t\t\tthis._overwriteProps.length = 0;\n\t\t\t\t\tthis.setRatio = CSSPlugin.prototype.setRatio; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\t\t\t\t},\n\t\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t\t_hasPriority, //turns true whenever a CSSPropTween instance is created that has a priority other than 0. This helps us discern whether or not we should spend the time organizing the linked list or not after a CSSPlugin's _onInitTween() method is called.\n\t\t\t\t_suffixMap, //we set this in _onInitTween() each time as a way to have a persistent variable we can use in other methods like _parse() without having to pass it around as a parameter and we keep _parse() decoupled from a particular CSSPlugin instance\n\t\t\t\t_cs, //computed style (we store this in a shared variable to conserve memory and make minification tighter\n\t\t\t\t_overwriteProps, //alias to the currently instantiating CSSPlugin's _overwriteProps array. We use this closure in order to avoid having to pass a reference around from method to method and aid in minification.\n\t\t\t\t_specialProps = {},\n\t\t\t\tp = CSSPlugin.prototype = new TweenPlugin(\"css\");\n\t\n\t\t\tp.constructor = CSSPlugin;\n\t\t\tCSSPlugin.version = \"1.19.0\";\n\t\t\tCSSPlugin.API = 2;\n\t\t\tCSSPlugin.defaultTransformPerspective = 0;\n\t\t\tCSSPlugin.defaultSkewType = \"compensated\";\n\t\t\tCSSPlugin.defaultSmoothOrigin = true;\n\t\t\tp = \"px\"; //we'll reuse the \"p\" variable to keep file size down\n\t\t\tCSSPlugin.suffixMap = {top:p, right:p, bottom:p, left:p, width:p, height:p, fontSize:p, padding:p, margin:p, perspective:p, lineHeight:\"\"};\n\t\n\t\n\t\t\tvar _numExp = /(?:\\-|\\.|\\b)(\\d|\\.|e\\-)+/g,\n\t\t\t\t_relNumExp = /(?:\\d|\\-\\d|\\.\\d|\\-\\.\\d|\\+=\\d|\\-=\\d|\\+=.\\d|\\-=\\.\\d)+/g,\n\t\t\t\t_valuesExp = /(?:\\+=|\\-=|\\-|\\b)[\\d\\-\\.]+[a-zA-Z0-9]*(?:%|\\b)/gi, //finds all the values that begin with numbers or += or -= and then a number. Includes suffixes. We use this to split complex values apart like \"1px 5px 20px rgb(255,102,51)\"\n\t\t\t\t_NaNExp = /(?![+-]?\\d*\\.?\\d+|[+-]|e[+-]\\d+)[^0-9]/g, //also allows scientific notation and doesn't kill the leading -/+ in -= and +=\n\t\t\t\t_suffixExp = /(?:\\d|\\-|\\+|=|#|\\.)*/g,\n\t\t\t\t_opacityExp = /opacity *= *([^)]*)/i,\n\t\t\t\t_opacityValExp = /opacity:([^;]*)/i,\n\t\t\t\t_alphaFilterExp = /alpha\\(opacity *=.+?\\)/i,\n\t\t\t\t_rgbhslExp = /^(rgb|hsl)/,\n\t\t\t\t_capsExp = /([A-Z])/g,\n\t\t\t\t_camelExp = /-([a-z])/gi,\n\t\t\t\t_urlExp = /(^(?:url\\(\\\"|url\\())|(?:(\\\"\\))$|\\)$)/gi, //for pulling out urls from url(...) or url(\"...\") strings (some browsers wrap urls in quotes, some don't when reporting things like backgroundImage)\n\t\t\t\t_camelFunc = function(s, g) { return g.toUpperCase(); },\n\t\t\t\t_horizExp = /(?:Left|Right|Width)/i,\n\t\t\t\t_ieGetMatrixExp = /(M11|M12|M21|M22)=[\\d\\-\\.e]+/gi,\n\t\t\t\t_ieSetMatrixExp = /progid\\:DXImageTransform\\.Microsoft\\.Matrix\\(.+?\\)/i,\n\t\t\t\t_commasOutsideParenExp = /,(?=[^\\)]*(?:\\(|$))/gi, //finds any commas that are not within parenthesis\n\t\t\t\t_complexExp = /[\\s,\\(]/i, //for testing a string to find if it has a space, comma, or open parenthesis (clues that it's a complex value)\n\t\t\t\t_DEG2RAD = Math.PI / 180,\n\t\t\t\t_RAD2DEG = 180 / Math.PI,\n\t\t\t\t_forcePT = {},\n\t\t\t\t_doc = document,\n\t\t\t\t_createElement = function(type) {\n\t\t\t\t\treturn _doc.createElementNS ? _doc.createElementNS(\"http://www.w3.org/1999/xhtml\", type) : _doc.createElement(type);\n\t\t\t\t},\n\t\t\t\t_tempDiv = _createElement(\"div\"),\n\t\t\t\t_tempImg = _createElement(\"img\"),\n\t\t\t\t_internals = CSSPlugin._internals = {_specialProps:_specialProps}, //provides a hook to a few internal methods that we need to access from inside other plugins\n\t\t\t\t_agent = navigator.userAgent,\n\t\t\t\t_autoRound,\n\t\t\t\t_reqSafariFix, //we won't apply the Safari transform fix until we actually come across a tween that affects a transform property (to maintain best performance).\n\t\n\t\t\t\t_isSafari,\n\t\t\t\t_isFirefox, //Firefox has a bug that causes 3D transformed elements to randomly disappear unless a repaint is forced after each update on each element.\n\t\t\t\t_isSafariLT6, //Safari (and Android 4 which uses a flavor of Safari) has a bug that prevents changes to \"top\" and \"left\" properties from rendering properly if changed on the same frame as a transform UNLESS we set the element's WebkitBackfaceVisibility to hidden (weird, I know). Doing this for Android 3 and earlier seems to actually cause other problems, though (fun!)\n\t\t\t\t_ieVers,\n\t\t\t\t_supportsOpacity = (function() { //we set _isSafari, _ieVers, _isFirefox, and _supportsOpacity all in one function here to reduce file size slightly, especially in the minified version.\n\t\t\t\t\tvar i = _agent.indexOf(\"Android\"),\n\t\t\t\t\t\ta = _createElement(\"a\");\n\t\t\t\t\t_isSafari = (_agent.indexOf(\"Safari\") !== -1 && _agent.indexOf(\"Chrome\") === -1 && (i === -1 || Number(_agent.substr(i+8, 1)) > 3));\n\t\t\t\t\t_isSafariLT6 = (_isSafari && (Number(_agent.substr(_agent.indexOf(\"Version/\")+8, 1)) < 6));\n\t\t\t\t\t_isFirefox = (_agent.indexOf(\"Firefox\") !== -1);\n\t\t\t\t\tif ((/MSIE ([0-9]{1,}[\\.0-9]{0,})/).exec(_agent) || (/Trident\\/.*rv:([0-9]{1,}[\\.0-9]{0,})/).exec(_agent)) {\n\t\t\t\t\t\t_ieVers = parseFloat( RegExp.$1 );\n\t\t\t\t\t}\n\t\t\t\t\tif (!a) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\ta.style.cssText = \"top:1px;opacity:.55;\";\n\t\t\t\t\treturn /^0.55/.test(a.style.opacity);\n\t\t\t\t}()),\n\t\t\t\t_getIEOpacity = function(v) {\n\t\t\t\t\treturn (_opacityExp.test( ((typeof(v) === \"string\") ? v : (v.currentStyle ? v.currentStyle.filter : v.style.filter) || \"\") ) ? ( parseFloat( RegExp.$1 ) / 100 ) : 1);\n\t\t\t\t},\n\t\t\t\t_log = function(s) {//for logging messages, but in a way that won't throw errors in old versions of IE.\n\t\t\t\t\tif (window.console) {\n\t\t\t\t\t\tconsole.log(s);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_target, //when initting a CSSPlugin, we set this variable so that we can access it from within many other functions without having to pass it around as params\n\t\t\t\t_index, //when initting a CSSPlugin, we set this variable so that we can access it from within many other functions without having to pass it around as params\n\t\n\t\t\t\t_prefixCSS = \"\", //the non-camelCase vendor prefix like \"-o-\", \"-moz-\", \"-ms-\", or \"-webkit-\"\n\t\t\t\t_prefix = \"\", //camelCase vendor prefix like \"O\", \"ms\", \"Webkit\", or \"Moz\".\n\t\n\t\t\t\t// @private feed in a camelCase property name like \"transform\" and it will check to see if it is valid as-is or if it needs a vendor prefix. It returns the corrected camelCase property name (i.e. \"WebkitTransform\" or \"MozTransform\" or \"transform\" or null if no such property is found, like if the browser is IE8 or before, \"transform\" won't be found at all)\n\t\t\t\t_checkPropPrefix = function(p, e) {\n\t\t\t\t\te = e || _tempDiv;\n\t\t\t\t\tvar s = e.style,\n\t\t\t\t\t\ta, i;\n\t\t\t\t\tif (s[p] !== undefined) {\n\t\t\t\t\t\treturn p;\n\t\t\t\t\t}\n\t\t\t\t\tp = p.charAt(0).toUpperCase() + p.substr(1);\n\t\t\t\t\ta = [\"O\",\"Moz\",\"ms\",\"Ms\",\"Webkit\"];\n\t\t\t\t\ti = 5;\n\t\t\t\t\twhile (--i > -1 && s[a[i]+p] === undefined) { }\n\t\t\t\t\tif (i >= 0) {\n\t\t\t\t\t\t_prefix = (i === 3) ? \"ms\" : a[i];\n\t\t\t\t\t\t_prefixCSS = \"-\" + _prefix.toLowerCase() + \"-\";\n\t\t\t\t\t\treturn _prefix + p;\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\t\n\t\t\t\t_getComputedStyle = _doc.defaultView ? _doc.defaultView.getComputedStyle : function() {},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Returns the css style for a particular property of an element. For example, to get whatever the current \"left\" css value for an element with an ID of \"myElement\", you could do:\n\t\t\t\t * var currentLeft = CSSPlugin.getStyle( document.getElementById(\"myElement\"), \"left\");\n\t\t\t\t *\n\t\t\t\t * @param {!Object} t Target element whose style property you want to query\n\t\t\t\t * @param {!string} p Property name (like \"left\" or \"top\" or \"marginTop\", etc.)\n\t\t\t\t * @param {Object=} cs Computed style object. This just provides a way to speed processing if you're going to get several properties on the same element in quick succession - you can reuse the result of the getComputedStyle() call.\n\t\t\t\t * @param {boolean=} calc If true, the value will not be read directly from the element's \"style\" property (if it exists there), but instead the getComputedStyle() result will be used. This can be useful when you want to ensure that the browser itself is interpreting the value.\n\t\t\t\t * @param {string=} dflt Default value that should be returned in the place of null, \"none\", \"auto\" or \"auto auto\".\n\t\t\t\t * @return {?string} The current property value\n\t\t\t\t */\n\t\t\t\t_getStyle = CSSPlugin.getStyle = function(t, p, cs, calc, dflt) {\n\t\t\t\t\tvar rv;\n\t\t\t\t\tif (!_supportsOpacity) if (p === \"opacity\") { //several versions of IE don't use the standard \"opacity\" property - they use things like filter:alpha(opacity=50), so we parse that here.\n\t\t\t\t\t\treturn _getIEOpacity(t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!calc && t.style[p]) {\n\t\t\t\t\t\trv = t.style[p];\n\t\t\t\t\t} else if ((cs = cs || _getComputedStyle(t))) {\n\t\t\t\t\t\trv = cs[p] || cs.getPropertyValue(p) || cs.getPropertyValue(p.replace(_capsExp, \"-$1\").toLowerCase());\n\t\t\t\t\t} else if (t.currentStyle) {\n\t\t\t\t\t\trv = t.currentStyle[p];\n\t\t\t\t\t}\n\t\t\t\t\treturn (dflt != null && (!rv || rv === \"none\" || rv === \"auto\" || rv === \"auto auto\")) ? dflt : rv;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Pass the target element, the property name, the numeric value, and the suffix (like \"%\", \"em\", \"px\", etc.) and it will spit back the equivalent pixel number.\n\t\t\t\t * @param {!Object} t Target element\n\t\t\t\t * @param {!string} p Property name (like \"left\", \"top\", \"marginLeft\", etc.)\n\t\t\t\t * @param {!number} v Value\n\t\t\t\t * @param {string=} sfx Suffix (like \"px\" or \"%\" or \"em\")\n\t\t\t\t * @param {boolean=} recurse If true, the call is a recursive one. In some browsers (like IE7/8), occasionally the value isn't accurately reported initially, but if we run the function again it will take effect.\n\t\t\t\t * @return {number} value in pixels\n\t\t\t\t */\n\t\t\t\t_convertToPixels = _internals.convertToPixels = function(t, p, v, sfx, recurse) {\n\t\t\t\t\tif (sfx === \"px\" || !sfx) { return v; }\n\t\t\t\t\tif (sfx === \"auto\" || !v) { return 0; }\n\t\t\t\t\tvar horiz = _horizExp.test(p),\n\t\t\t\t\t\tnode = t,\n\t\t\t\t\t\tstyle = _tempDiv.style,\n\t\t\t\t\t\tneg = (v < 0),\n\t\t\t\t\t\tprecise = (v === 1),\n\t\t\t\t\t\tpix, cache, time;\n\t\t\t\t\tif (neg) {\n\t\t\t\t\t\tv = -v;\n\t\t\t\t\t}\n\t\t\t\t\tif (precise) {\n\t\t\t\t\t\tv *= 100;\n\t\t\t\t\t}\n\t\t\t\t\tif (sfx === \"%\" && p.indexOf(\"border\") !== -1) {\n\t\t\t\t\t\tpix = (v / 100) * (horiz ? t.clientWidth : t.clientHeight);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle.cssText = \"border:0 solid red;position:\" + _getStyle(t, \"position\") + \";line-height:0;\";\n\t\t\t\t\t\tif (sfx === \"%\" || !node.appendChild || sfx.charAt(0) === \"v\" || sfx === \"rem\") {\n\t\t\t\t\t\t\tnode = t.parentNode || _doc.body;\n\t\t\t\t\t\t\tcache = node._gsCache;\n\t\t\t\t\t\t\ttime = TweenLite.ticker.frame;\n\t\t\t\t\t\t\tif (cache && horiz && cache.time === time) { //performance optimization: we record the width of elements along with the ticker frame so that we can quickly get it again on the same tick (seems relatively safe to assume it wouldn't change on the same tick)\n\t\t\t\t\t\t\t\treturn cache.width * v / 100;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyle[(horiz ? \"width\" : \"height\")] = v + sfx;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstyle[(horiz ? \"borderLeftWidth\" : \"borderTopWidth\")] = v + sfx;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode.appendChild(_tempDiv);\n\t\t\t\t\t\tpix = parseFloat(_tempDiv[(horiz ? \"offsetWidth\" : \"offsetHeight\")]);\n\t\t\t\t\t\tnode.removeChild(_tempDiv);\n\t\t\t\t\t\tif (horiz && sfx === \"%\" && CSSPlugin.cacheWidths !== false) {\n\t\t\t\t\t\t\tcache = node._gsCache = node._gsCache || {};\n\t\t\t\t\t\t\tcache.time = time;\n\t\t\t\t\t\t\tcache.width = pix / v * 100;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pix === 0 && !recurse) {\n\t\t\t\t\t\t\tpix = _convertToPixels(t, p, v, sfx, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (precise) {\n\t\t\t\t\t\tpix /= 100;\n\t\t\t\t\t}\n\t\t\t\t\treturn neg ? -pix : pix;\n\t\t\t\t},\n\t\t\t\t_calculateOffset = _internals.calculateOffset = function(t, p, cs) { //for figuring out \"top\" or \"left\" in px when it's \"auto\". We need to factor in margin with the offsetLeft/offsetTop\n\t\t\t\t\tif (_getStyle(t, \"position\", cs) !== \"absolute\") { return 0; }\n\t\t\t\t\tvar dim = ((p === \"left\") ? \"Left\" : \"Top\"),\n\t\t\t\t\t\tv = _getStyle(t, \"margin\" + dim, cs);\n\t\t\t\t\treturn t[\"offset\" + dim] - (_convertToPixels(t, p, parseFloat(v), v.replace(_suffixExp, \"\")) || 0);\n\t\t\t\t},\n\t\n\t\t\t\t// @private returns at object containing ALL of the style properties in camelCase and their associated values.\n\t\t\t\t_getAllStyles = function(t, cs) {\n\t\t\t\t\tvar s = {},\n\t\t\t\t\t\ti, tr, p;\n\t\t\t\t\tif ((cs = cs || _getComputedStyle(t, null))) {\n\t\t\t\t\t\tif ((i = cs.length)) {\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tp = cs[i];\n\t\t\t\t\t\t\t\tif (p.indexOf(\"-transform\") === -1 || _transformPropCSS === p) { //Some webkit browsers duplicate transform values, one non-prefixed and one prefixed (\"transform\" and \"WebkitTransform\"), so we must weed out the extra one here.\n\t\t\t\t\t\t\t\t\ts[p.replace(_camelExp, _camelFunc)] = cs.getPropertyValue(p);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else { //some browsers behave differently - cs.length is always 0, so we must do a for...in loop.\n\t\t\t\t\t\t\tfor (i in cs) {\n\t\t\t\t\t\t\t\tif (i.indexOf(\"Transform\") === -1 || _transformProp === i) { //Some webkit browsers duplicate transform values, one non-prefixed and one prefixed (\"transform\" and \"WebkitTransform\"), so we must weed out the extra one here.\n\t\t\t\t\t\t\t\t\ts[i] = cs[i];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ((cs = t.currentStyle || t.style)) {\n\t\t\t\t\t\tfor (i in cs) {\n\t\t\t\t\t\t\tif (typeof(i) === \"string\" && s[i] === undefined) {\n\t\t\t\t\t\t\t\ts[i.replace(_camelExp, _camelFunc)] = cs[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!_supportsOpacity) {\n\t\t\t\t\t\ts.opacity = _getIEOpacity(t);\n\t\t\t\t\t}\n\t\t\t\t\ttr = _getTransform(t, cs, false);\n\t\t\t\t\ts.rotation = tr.rotation;\n\t\t\t\t\ts.skewX = tr.skewX;\n\t\t\t\t\ts.scaleX = tr.scaleX;\n\t\t\t\t\ts.scaleY = tr.scaleY;\n\t\t\t\t\ts.x = tr.x;\n\t\t\t\t\ts.y = tr.y;\n\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\ts.z = tr.z;\n\t\t\t\t\t\ts.rotationX = tr.rotationX;\n\t\t\t\t\t\ts.rotationY = tr.rotationY;\n\t\t\t\t\t\ts.scaleZ = tr.scaleZ;\n\t\t\t\t\t}\n\t\t\t\t\tif (s.filters) {\n\t\t\t\t\t\tdelete s.filters;\n\t\t\t\t\t}\n\t\t\t\t\treturn s;\n\t\t\t\t},\n\t\n\t\t\t\t// @private analyzes two style objects (as returned by _getAllStyles()) and only looks for differences between them that contain tweenable values (like a number or color). It returns an object with a \"difs\" property which refers to an object containing only those isolated properties and values for tweening, and a \"firstMPT\" property which refers to the first MiniPropTween instance in a linked list that recorded all the starting values of the different properties so that we can revert to them at the end or beginning of the tween - we don't want the cascading to get messed up. The forceLookup parameter is an optional generic object with properties that should be forced into the results - this is necessary for className tweens that are overwriting others because imagine a scenario where a rollover/rollout adds/removes a class and the user swipes the mouse over the target SUPER fast, thus nothing actually changed yet and the subsequent comparison of the properties would indicate they match (especially when px rounding is taken into consideration), thus no tweening is necessary even though it SHOULD tween and remove those properties after the tween (otherwise the inline styles will contaminate things). See the className SpecialProp code for details.\n\t\t\t\t_cssDif = function(t, s1, s2, vars, forceLookup) {\n\t\t\t\t\tvar difs = {},\n\t\t\t\t\t\tstyle = t.style,\n\t\t\t\t\t\tval, p, mpt;\n\t\t\t\t\tfor (p in s2) {\n\t\t\t\t\t\tif (p !== \"cssText\") if (p !== \"length\") if (isNaN(p)) if (s1[p] !== (val = s2[p]) || (forceLookup && forceLookup[p])) if (p.indexOf(\"Origin\") === -1) if (typeof(val) === \"number\" || typeof(val) === \"string\") {\n\t\t\t\t\t\t\tdifs[p] = (val === \"auto\" && (p === \"left\" || p === \"top\")) ? _calculateOffset(t, p) : ((val === \"\" || val === \"auto\" || val === \"none\") && typeof(s1[p]) === \"string\" && s1[p].replace(_NaNExp, \"\") !== \"\") ? 0 : val; //if the ending value is defaulting (\"\" or \"auto\"), we check the starting value and if it can be parsed into a number (a string which could have a suffix too, like 700px), then we swap in 0 for \"\" or \"auto\" so that things actually tween.\n\t\t\t\t\t\t\tif (style[p] !== undefined) { //for className tweens, we must remember which properties already existed inline - the ones that didn't should be removed when the tween isn't in progress because they were only introduced to facilitate the transition between classes.\n\t\t\t\t\t\t\t\tmpt = new MiniPropTween(style, p, style[p], mpt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (vars) {\n\t\t\t\t\t\tfor (p in vars) { //copy properties (except className)\n\t\t\t\t\t\t\tif (p !== \"className\") {\n\t\t\t\t\t\t\t\tdifs[p] = vars[p];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn {difs:difs, firstMPT:mpt};\n\t\t\t\t},\n\t\t\t\t_dimensions = {width:[\"Left\",\"Right\"], height:[\"Top\",\"Bottom\"]},\n\t\t\t\t_margins = [\"marginLeft\",\"marginRight\",\"marginTop\",\"marginBottom\"],\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Gets the width or height of an element\n\t\t\t\t * @param {!Object} t Target element\n\t\t\t\t * @param {!string} p Property name (\"width\" or \"height\")\n\t\t\t\t * @param {Object=} cs Computed style object (if one exists). Just a speed optimization.\n\t\t\t\t * @return {number} Dimension (in pixels)\n\t\t\t\t */\n\t\t\t\t_getDimension = function(t, p, cs) {\n\t\t\t\t\tif ((t.nodeName + \"\").toLowerCase() === \"svg\") { //Chrome no longer supports offsetWidth/offsetHeight on SVG elements.\n\t\t\t\t\t\treturn (cs || _getComputedStyle(t))[p] || 0;\n\t\t\t\t\t} else if (t.getBBox && _isSVG(t)) {\n\t\t\t\t\t\treturn t.getBBox()[p] || 0;\n\t\t\t\t\t}\n\t\t\t\t\tvar v = parseFloat((p === \"width\") ? t.offsetWidth : t.offsetHeight),\n\t\t\t\t\t\ta = _dimensions[p],\n\t\t\t\t\t\ti = a.length;\n\t\t\t\t\tcs = cs || _getComputedStyle(t, null);\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tv -= parseFloat( _getStyle(t, \"padding\" + a[i], cs, true) ) || 0;\n\t\t\t\t\t\tv -= parseFloat( _getStyle(t, \"border\" + a[i] + \"Width\", cs, true) ) || 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn v;\n\t\t\t\t},\n\t\n\t\t\t\t// @private Parses position-related complex strings like \"top left\" or \"50px 10px\" or \"70% 20%\", etc. which are used for things like transformOrigin or backgroundPosition. Optionally decorates a supplied object (recObj) with the following properties: \"ox\" (offsetX), \"oy\" (offsetY), \"oxp\" (if true, \"ox\" is a percentage not a pixel value), and \"oxy\" (if true, \"oy\" is a percentage not a pixel value)\n\t\t\t\t_parsePosition = function(v, recObj) {\n\t\t\t\t\tif (v === \"contain\" || v === \"auto\" || v === \"auto auto\") { //note: Firefox uses \"auto auto\" as default whereas Chrome uses \"auto\".\n\t\t\t\t\t\treturn v + \" \";\n\t\t\t\t\t}\n\t\t\t\t\tif (v == null || v === \"\") {\n\t\t\t\t\t\tv = \"0 0\";\n\t\t\t\t\t}\n\t\t\t\t\tvar a = v.split(\" \"),\n\t\t\t\t\t\tx = (v.indexOf(\"left\") !== -1) ? \"0%\" : (v.indexOf(\"right\") !== -1) ? \"100%\" : a[0],\n\t\t\t\t\t\ty = (v.indexOf(\"top\") !== -1) ? \"0%\" : (v.indexOf(\"bottom\") !== -1) ? \"100%\" : a[1],\n\t\t\t\t\t\ti;\n\t\t\t\t\tif (a.length > 3 && !recObj) { //multiple positions\n\t\t\t\t\t\ta = v.split(\", \").join(\",\").split(\",\");\n\t\t\t\t\t\tv = [];\n\t\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\t\tv.push(_parsePosition(a[i]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn v.join(\",\");\n\t\t\t\t\t}\n\t\t\t\t\tif (y == null) {\n\t\t\t\t\t\ty = (x === \"center\") ? \"50%\" : \"0\";\n\t\t\t\t\t} else if (y === \"center\") {\n\t\t\t\t\t\ty = \"50%\";\n\t\t\t\t\t}\n\t\t\t\t\tif (x === \"center\" || (isNaN(parseFloat(x)) && (x + \"\").indexOf(\"=\") === -1)) { //remember, the user could flip-flop the values and say \"bottom center\" or \"center bottom\", etc. \"center\" is ambiguous because it could be used to describe horizontal or vertical, hence the isNaN(). If there's an \"=\" sign in the value, it's relative.\n\t\t\t\t\t\tx = \"50%\";\n\t\t\t\t\t}\n\t\t\t\t\tv = x + \" \" + y + ((a.length > 2) ? \" \" + a[2] : \"\");\n\t\t\t\t\tif (recObj) {\n\t\t\t\t\t\trecObj.oxp = (x.indexOf(\"%\") !== -1);\n\t\t\t\t\t\trecObj.oyp = (y.indexOf(\"%\") !== -1);\n\t\t\t\t\t\trecObj.oxr = (x.charAt(1) === \"=\");\n\t\t\t\t\t\trecObj.oyr = (y.charAt(1) === \"=\");\n\t\t\t\t\t\trecObj.ox = parseFloat(x.replace(_NaNExp, \"\"));\n\t\t\t\t\t\trecObj.oy = parseFloat(y.replace(_NaNExp, \"\"));\n\t\t\t\t\t\trecObj.v = v;\n\t\t\t\t\t}\n\t\t\t\t\treturn recObj || v;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Takes an ending value (typically a string, but can be a number) and a starting value and returns the change between the two, looking for relative value indicators like += and -= and it also ignores suffixes (but make sure the ending value starts with a number or +=/-= and that the starting value is a NUMBER!)\n\t\t\t\t * @param {(number|string)} e End value which is typically a string, but could be a number\n\t\t\t\t * @param {(number|string)} b Beginning value which is typically a string but could be a number\n\t\t\t\t * @return {number} Amount of change between the beginning and ending values (relative values that have a \"+=\" or \"-=\" are recognized)\n\t\t\t\t */\n\t\t\t\t_parseChange = function(e, b) {\n\t\t\t\t\tif (typeof(e) === \"function\") {\n\t\t\t\t\t\te = e(_index, _target);\n\t\t\t\t\t}\n\t\t\t\t\treturn (typeof(e) === \"string\" && e.charAt(1) === \"=\") ? parseInt(e.charAt(0) + \"1\", 10) * parseFloat(e.substr(2)) : (parseFloat(e) - parseFloat(b)) || 0;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Takes a value and a default number, checks if the value is relative, null, or numeric and spits back a normalized number accordingly. Primarily used in the _parseTransform() function.\n\t\t\t\t * @param {Object} v Value to be parsed\n\t\t\t\t * @param {!number} d Default value (which is also used for relative calculations if \"+=\" or \"-=\" is found in the first parameter)\n\t\t\t\t * @return {number} Parsed value\n\t\t\t\t */\n\t\t\t\t_parseVal = function(v, d) {\n\t\t\t\t\tif (typeof(v) === \"function\") {\n\t\t\t\t\t\tv = v(_index, _target);\n\t\t\t\t\t}\n\t\t\t\t\treturn (v == null) ? d : (typeof(v) === \"string\" && v.charAt(1) === \"=\") ? parseInt(v.charAt(0) + \"1\", 10) * parseFloat(v.substr(2)) + d : parseFloat(v) || 0;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Translates strings like \"40deg\" or \"40\" or 40rad\" or \"+=40deg\" or \"270_short\" or \"-90_cw\" or \"+=45_ccw\" to a numeric radian angle. Of course a starting/default value must be fed in too so that relative values can be calculated properly.\n\t\t\t\t * @param {Object} v Value to be parsed\n\t\t\t\t * @param {!number} d Default value (which is also used for relative calculations if \"+=\" or \"-=\" is found in the first parameter)\n\t\t\t\t * @param {string=} p property name for directionalEnd (optional - only used when the parsed value is directional (\"_short\", \"_cw\", or \"_ccw\" suffix). We need a way to store the uncompensated value so that at the end of the tween, we set it to exactly what was requested with no directional compensation). Property name would be \"rotation\", \"rotationX\", or \"rotationY\"\n\t\t\t\t * @param {Object=} directionalEnd An object that will store the raw end values for directional angles (\"_short\", \"_cw\", or \"_ccw\" suffix). We need a way to store the uncompensated value so that at the end of the tween, we set it to exactly what was requested with no directional compensation.\n\t\t\t\t * @return {number} parsed angle in radians\n\t\t\t\t */\n\t\t\t\t_parseAngle = function(v, d, p, directionalEnd) {\n\t\t\t\t\tvar min = 0.000001,\n\t\t\t\t\t\tcap, split, dif, result, isRelative;\n\t\t\t\t\tif (typeof(v) === \"function\") {\n\t\t\t\t\t\tv = v(_index, _target);\n\t\t\t\t\t}\n\t\t\t\t\tif (v == null) {\n\t\t\t\t\t\tresult = d;\n\t\t\t\t\t} else if (typeof(v) === \"number\") {\n\t\t\t\t\t\tresult = v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcap = 360;\n\t\t\t\t\t\tsplit = v.split(\"_\");\n\t\t\t\t\t\tisRelative = (v.charAt(1) === \"=\");\n\t\t\t\t\t\tdif = (isRelative ? parseInt(v.charAt(0) + \"1\", 10) * parseFloat(split[0].substr(2)) : parseFloat(split[0])) * ((v.indexOf(\"rad\") === -1) ? 1 : _RAD2DEG) - (isRelative ? 0 : d);\n\t\t\t\t\t\tif (split.length) {\n\t\t\t\t\t\t\tif (directionalEnd) {\n\t\t\t\t\t\t\t\tdirectionalEnd[p] = d + dif;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (v.indexOf(\"short\") !== -1) {\n\t\t\t\t\t\t\t\tdif = dif % cap;\n\t\t\t\t\t\t\t\tif (dif !== dif % (cap / 2)) {\n\t\t\t\t\t\t\t\t\tdif = (dif < 0) ? dif + cap : dif - cap;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (v.indexOf(\"_cw\") !== -1 && dif < 0) {\n\t\t\t\t\t\t\t\tdif = ((dif + cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t\t} else if (v.indexOf(\"ccw\") !== -1 && dif > 0) {\n\t\t\t\t\t\t\t\tdif = ((dif - cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult = d + dif;\n\t\t\t\t\t}\n\t\t\t\t\tif (result < min && result > -min) {\n\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\n\t\t\t\t_colorLookup = {aqua:[0,255,255],\n\t\t\t\t\tlime:[0,255,0],\n\t\t\t\t\tsilver:[192,192,192],\n\t\t\t\t\tblack:[0,0,0],\n\t\t\t\t\tmaroon:[128,0,0],\n\t\t\t\t\tteal:[0,128,128],\n\t\t\t\t\tblue:[0,0,255],\n\t\t\t\t\tnavy:[0,0,128],\n\t\t\t\t\twhite:[255,255,255],\n\t\t\t\t\tfuchsia:[255,0,255],\n\t\t\t\t\tolive:[128,128,0],\n\t\t\t\t\tyellow:[255,255,0],\n\t\t\t\t\torange:[255,165,0],\n\t\t\t\t\tgray:[128,128,128],\n\t\t\t\t\tpurple:[128,0,128],\n\t\t\t\t\tgreen:[0,128,0],\n\t\t\t\t\tred:[255,0,0],\n\t\t\t\t\tpink:[255,192,203],\n\t\t\t\t\tcyan:[0,255,255],\n\t\t\t\t\ttransparent:[255,255,255,0]},\n\t\n\t\t\t\t_hue = function(h, m1, m2) {\n\t\t\t\t\th = (h < 0) ? h + 1 : (h > 1) ? h - 1 : h;\n\t\t\t\t\treturn ((((h * 6 < 1) ? m1 + (m2 - m1) * h * 6 : (h < 0.5) ? m2 : (h * 3 < 2) ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * 255) + 0.5) | 0;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Parses a color (like #9F0, #FF9900, rgb(255,51,153) or hsl(108, 50%, 10%)) into an array with 3 elements for red, green, and blue or if toHSL parameter is true, it will populate the array with hue, saturation, and lightness values. If a relative value is found in an hsl() or hsla() string, it will preserve those relative prefixes and all the values in the array will be strings instead of numbers (in all other cases it will be populated with numbers).\n\t\t\t\t * @param {(string|number)} v The value the should be parsed which could be a string like #9F0 or rgb(255,102,51) or rgba(255,0,0,0.5) or it could be a number like 0xFF00CC or even a named color like red, blue, purple, etc.\n\t\t\t\t * @param {(boolean)} toHSL If true, an hsl() or hsla() value will be returned instead of rgb() or rgba()\n\t\t\t\t * @return {Array.<number>} An array containing red, green, and blue (and optionally alpha) in that order, or if the toHSL parameter was true, the array will contain hue, saturation and lightness (and optionally alpha) in that order. Always numbers unless there's a relative prefix found in an hsl() or hsla() string and toHSL is true.\n\t\t\t\t */\n\t\t\t\t_parseColor = CSSPlugin.parseColor = function(v, toHSL) {\n\t\t\t\t\tvar a, r, g, b, h, s, l, max, min, d, wasHSL;\n\t\t\t\t\tif (!v) {\n\t\t\t\t\t\ta = _colorLookup.black;\n\t\t\t\t\t} else if (typeof(v) === \"number\") {\n\t\t\t\t\t\ta = [v >> 16, (v >> 8) & 255, v & 255];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (v.charAt(v.length - 1) === \",\") { //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:\"2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)\" - in this example \"blue,\" has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value.\n\t\t\t\t\t\t\tv = v.substr(0, v.length - 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (_colorLookup[v]) {\n\t\t\t\t\t\t\ta = _colorLookup[v];\n\t\t\t\t\t\t} else if (v.charAt(0) === \"#\") {\n\t\t\t\t\t\t\tif (v.length === 4) { //for shorthand like #9F0\n\t\t\t\t\t\t\t\tr = v.charAt(1);\n\t\t\t\t\t\t\t\tg = v.charAt(2);\n\t\t\t\t\t\t\t\tb = v.charAt(3);\n\t\t\t\t\t\t\t\tv = \"#\" + r + r + g + g + b + b;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tv = parseInt(v.substr(1), 16);\n\t\t\t\t\t\t\ta = [v >> 16, (v >> 8) & 255, v & 255];\n\t\t\t\t\t\t} else if (v.substr(0, 3) === \"hsl\") {\n\t\t\t\t\t\t\ta = wasHSL = v.match(_numExp);\n\t\t\t\t\t\t\tif (!toHSL) {\n\t\t\t\t\t\t\t\th = (Number(a[0]) % 360) / 360;\n\t\t\t\t\t\t\t\ts = Number(a[1]) / 100;\n\t\t\t\t\t\t\t\tl = Number(a[2]) / 100;\n\t\t\t\t\t\t\t\tg = (l <= 0.5) ? l * (s + 1) : l + s - l * s;\n\t\t\t\t\t\t\t\tr = l * 2 - g;\n\t\t\t\t\t\t\t\tif (a.length > 3) {\n\t\t\t\t\t\t\t\t\ta[3] = Number(v[3]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ta[0] = _hue(h + 1 / 3, r, g);\n\t\t\t\t\t\t\t\ta[1] = _hue(h, r, g);\n\t\t\t\t\t\t\t\ta[2] = _hue(h - 1 / 3, r, g);\n\t\t\t\t\t\t\t} else if (v.indexOf(\"=\") !== -1) { //if relative values are found, just return the raw strings with the relative prefixes in place.\n\t\t\t\t\t\t\t\treturn v.match(_relNumExp);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ta = v.match(_numExp) || _colorLookup.transparent;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ta[0] = Number(a[0]);\n\t\t\t\t\t\ta[1] = Number(a[1]);\n\t\t\t\t\t\ta[2] = Number(a[2]);\n\t\t\t\t\t\tif (a.length > 3) {\n\t\t\t\t\t\t\ta[3] = Number(a[3]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (toHSL && !wasHSL) {\n\t\t\t\t\t\tr = a[0] / 255;\n\t\t\t\t\t\tg = a[1] / 255;\n\t\t\t\t\t\tb = a[2] / 255;\n\t\t\t\t\t\tmax = Math.max(r, g, b);\n\t\t\t\t\t\tmin = Math.min(r, g, b);\n\t\t\t\t\t\tl = (max + min) / 2;\n\t\t\t\t\t\tif (max === min) {\n\t\t\t\t\t\t\th = s = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\td = max - min;\n\t\t\t\t\t\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\t\t\t\t\t\th = (max === r) ? (g - b) / d + (g < b ? 6 : 0) : (max === g) ? (b - r) / d + 2 : (r - g) / d + 4;\n\t\t\t\t\t\t\th *= 60;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ta[0] = (h + 0.5) | 0;\n\t\t\t\t\t\ta[1] = (s * 100 + 0.5) | 0;\n\t\t\t\t\t\ta[2] = (l * 100 + 0.5) | 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn a;\n\t\t\t\t},\n\t\t\t\t_formatColors = function(s, toHSL) {\n\t\t\t\t\tvar colors = s.match(_colorExp) || [],\n\t\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\t\tparsed = colors.length ? \"\" : s,\n\t\t\t\t\t\ti, color, temp;\n\t\t\t\t\tfor (i = 0; i < colors.length; i++) {\n\t\t\t\t\t\tcolor = colors[i];\n\t\t\t\t\t\ttemp = s.substr(charIndex, s.indexOf(color, charIndex)-charIndex);\n\t\t\t\t\t\tcharIndex += temp.length + color.length;\n\t\t\t\t\t\tcolor = _parseColor(color, toHSL);\n\t\t\t\t\t\tif (color.length === 3) {\n\t\t\t\t\t\t\tcolor.push(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparsed += temp + (toHSL ? \"hsla(\" + color[0] + \",\" + color[1] + \"%,\" + color[2] + \"%,\" + color[3] : \"rgba(\" + color.join(\",\")) + \")\";\n\t\t\t\t\t}\n\t\t\t\t\treturn parsed + s.substr(charIndex);\n\t\t\t\t},\n\t\t\t\t_colorExp = \"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3}){1,2}\\\\b\"; //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc.\n\t\n\t\t\tfor (p in _colorLookup) {\n\t\t\t\t_colorExp += \"|\" + p + \"\\\\b\";\n\t\t\t}\n\t\t\t_colorExp = new RegExp(_colorExp+\")\", \"gi\");\n\t\n\t\t\tCSSPlugin.colorStringFilter = function(a) {\n\t\t\t\tvar combined = a[0] + a[1],\n\t\t\t\t\ttoHSL;\n\t\t\t\tif (_colorExp.test(combined)) {\n\t\t\t\t\ttoHSL = (combined.indexOf(\"hsl(\") !== -1 || combined.indexOf(\"hsla(\") !== -1);\n\t\t\t\t\ta[0] = _formatColors(a[0], toHSL);\n\t\t\t\t\ta[1] = _formatColors(a[1], toHSL);\n\t\t\t\t}\n\t\t\t\t_colorExp.lastIndex = 0;\n\t\t\t};\n\t\n\t\t\tif (!TweenLite.defaultStringFilter) {\n\t\t\t\tTweenLite.defaultStringFilter = CSSPlugin.colorStringFilter;\n\t\t\t}\n\t\n\t\t\t/**\n\t\t\t * @private Returns a formatter function that handles taking a string (or number in some cases) and returning a consistently formatted one in terms of delimiters, quantity of values, etc. For example, we may get boxShadow values defined as \"0px red\" or \"0px 0px 10px rgb(255,0,0)\" or \"0px 0px 20px 20px #F00\" and we need to ensure that what we get back is described with 4 numbers and a color. This allows us to feed it into the _parseComplex() method and split the values up appropriately. The neat thing about this _getFormatter() function is that the dflt defines a pattern as well as a default, so for example, _getFormatter(\"0px 0px 0px 0px #777\", true) not only sets the default as 0px for all distances and #777 for the color, but also sets the pattern such that 4 numbers and a color will always get returned.\n\t\t\t * @param {!string} dflt The default value and pattern to follow. So \"0px 0px 0px 0px #777\" will ensure that 4 numbers and a color will always get returned.\n\t\t\t * @param {boolean=} clr If true, the values should be searched for color-related data. For example, boxShadow values typically contain a color whereas borderRadius don't.\n\t\t\t * @param {boolean=} collapsible If true, the value is a top/left/right/bottom style one that acts like margin or padding, where if only one value is received, it's used for all 4; if 2 are received, the first is duplicated for 3rd (bottom) and the 2nd is duplicated for the 4th spot (left), etc.\n\t\t\t * @return {Function} formatter function\n\t\t\t */\n\t\t\tvar _getFormatter = function(dflt, clr, collapsible, multi) {\n\t\t\t\t\tif (dflt == null) {\n\t\t\t\t\t\treturn function(v) {return v;};\n\t\t\t\t\t}\n\t\t\t\t\tvar dColor = clr ? (dflt.match(_colorExp) || [\"\"])[0] : \"\",\n\t\t\t\t\t\tdVals = dflt.split(dColor).join(\"\").match(_valuesExp) || [],\n\t\t\t\t\t\tpfx = dflt.substr(0, dflt.indexOf(dVals[0])),\n\t\t\t\t\t\tsfx = (dflt.charAt(dflt.length - 1) === \")\") ? \")\" : \"\",\n\t\t\t\t\t\tdelim = (dflt.indexOf(\" \") !== -1) ? \" \" : \",\",\n\t\t\t\t\t\tnumVals = dVals.length,\n\t\t\t\t\t\tdSfx = (numVals > 0) ? dVals[0].replace(_numExp, \"\") : \"\",\n\t\t\t\t\t\tformatter;\n\t\t\t\t\tif (!numVals) {\n\t\t\t\t\t\treturn function(v) {return v;};\n\t\t\t\t\t}\n\t\t\t\t\tif (clr) {\n\t\t\t\t\t\tformatter = function(v) {\n\t\t\t\t\t\t\tvar color, vals, i, a;\n\t\t\t\t\t\t\tif (typeof(v) === \"number\") {\n\t\t\t\t\t\t\t\tv += dSfx;\n\t\t\t\t\t\t\t} else if (multi && _commasOutsideParenExp.test(v)) {\n\t\t\t\t\t\t\t\ta = v.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\t\t\t\ta[i] = formatter(a[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn a.join(\",\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcolor = (v.match(_colorExp) || [dColor])[0];\n\t\t\t\t\t\t\tvals = v.split(color).join(\"\").match(_valuesExp) || [];\n\t\t\t\t\t\t\ti = vals.length;\n\t\t\t\t\t\t\tif (numVals > i--) {\n\t\t\t\t\t\t\t\twhile (++i < numVals) {\n\t\t\t\t\t\t\t\t\tvals[i] = collapsible ? vals[(((i - 1) / 2) | 0)] : dVals[i];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn pfx + vals.join(delim) + delim + color + sfx + (v.indexOf(\"inset\") !== -1 ? \" inset\" : \"\");\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn formatter;\n\t\n\t\t\t\t\t}\n\t\t\t\t\tformatter = function(v) {\n\t\t\t\t\t\tvar vals, a, i;\n\t\t\t\t\t\tif (typeof(v) === \"number\") {\n\t\t\t\t\t\t\tv += dSfx;\n\t\t\t\t\t\t} else if (multi && _commasOutsideParenExp.test(v)) {\n\t\t\t\t\t\t\ta = v.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\t\t\ta[i] = formatter(a[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn a.join(\",\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvals = v.match(_valuesExp) || [];\n\t\t\t\t\t\ti = vals.length;\n\t\t\t\t\t\tif (numVals > i--) {\n\t\t\t\t\t\t\twhile (++i < numVals) {\n\t\t\t\t\t\t\t\tvals[i] = collapsible ? vals[(((i - 1) / 2) | 0)] : dVals[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn pfx + vals.join(delim) + sfx;\n\t\t\t\t\t};\n\t\t\t\t\treturn formatter;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private returns a formatter function that's used for edge-related values like marginTop, marginLeft, paddingBottom, paddingRight, etc. Just pass a comma-delimited list of property names related to the edges.\n\t\t\t\t * @param {!string} props a comma-delimited list of property names in order from top to left, like \"marginTop,marginRight,marginBottom,marginLeft\"\n\t\t\t\t * @return {Function} a formatter function\n\t\t\t\t */\n\t\t\t\t_getEdgeParser = function(props) {\n\t\t\t\t\tprops = props.split(\",\");\n\t\t\t\t\treturn function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\t\t\tvar a = (e + \"\").split(\" \"),\n\t\t\t\t\t\t\ti;\n\t\t\t\t\t\tvars = {};\n\t\t\t\t\t\tfor (i = 0; i < 4; i++) {\n\t\t\t\t\t\t\tvars[props[i]] = a[i] = a[i] || a[(((i - 1) / 2) >> 0)];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn cssp.parse(t, vars, pt, plugin);\n\t\t\t\t\t};\n\t\t\t\t},\n\t\n\t\t\t\t// @private used when other plugins must tween values first, like BezierPlugin or ThrowPropsPlugin, etc. That plugin's setRatio() gets called first so that the values are updated, and then we loop through the MiniPropTweens which handle copying the values into their appropriate slots so that they can then be applied correctly in the main CSSPlugin setRatio() method. Remember, we typically create a proxy object that has a bunch of uniquely-named properties that we feed to the sub-plugin and it does its magic normally, and then we must interpret those values and apply them to the css because often numbers must get combined/concatenated, suffixes added, etc. to work with css, like boxShadow could have 4 values plus a color.\n\t\t\t\t_setPluginRatio = _internals._setPluginRatio = function(v) {\n\t\t\t\t\tthis.plugin.setRatio(v);\n\t\t\t\t\tvar d = this.data,\n\t\t\t\t\t\tproxy = d.proxy,\n\t\t\t\t\t\tmpt = d.firstMPT,\n\t\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\t\tval, pt, i, str, p;\n\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\tval = proxy[mpt.v];\n\t\t\t\t\t\tif (mpt.r) {\n\t\t\t\t\t\t\tval = Math.round(val);\n\t\t\t\t\t\t} else if (val < min && val > -min) {\n\t\t\t\t\t\t\tval = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmpt.t[mpt.p] = val;\n\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t}\n\t\t\t\t\tif (d.autoRotate) {\n\t\t\t\t\t\td.autoRotate.rotation = d.mod ? d.mod(proxy.rotation, this.t) : proxy.rotation; //special case for ModifyPlugin to hook into an auto-rotating bezier\n\t\t\t\t\t}\n\t\t\t\t\t//at the end, we must set the CSSPropTween's \"e\" (end) value dynamically here because that's what is used in the final setRatio() method. Same for \"b\" at the beginning.\n\t\t\t\t\tif (v === 1 || v === 0) {\n\t\t\t\t\t\tmpt = d.firstMPT;\n\t\t\t\t\t\tp = (v === 1) ? \"e\" : \"b\";\n\t\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\t\tpt = mpt.t;\n\t\t\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\t\t\tpt[p] = pt.s + pt.xs0;\n\t\t\t\t\t\t\t} else if (pt.type === 1) {\n\t\t\t\t\t\t\t\tstr = pt.xs0 + pt.s + pt.xs1;\n\t\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt[p] = str;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private @constructor Used by a few SpecialProps to hold important values for proxies. For example, _parseToProxy() creates a MiniPropTween instance for each property that must get tweened on the proxy, and we record the original property name as well as the unique one we create for the proxy, plus whether or not the value needs to be rounded plus the original value.\n\t\t\t\t * @param {!Object} t target object whose property we're tweening (often a CSSPropTween)\n\t\t\t\t * @param {!string} p property name\n\t\t\t\t * @param {(number|string|object)} v value\n\t\t\t\t * @param {MiniPropTween=} next next MiniPropTween in the linked list\n\t\t\t\t * @param {boolean=} r if true, the tweened value should be rounded to the nearest integer\n\t\t\t\t */\n\t\t\t\tMiniPropTween = function(t, p, v, next, r) {\n\t\t\t\t\tthis.t = t;\n\t\t\t\t\tthis.p = p;\n\t\t\t\t\tthis.v = v;\n\t\t\t\t\tthis.r = r;\n\t\t\t\t\tif (next) {\n\t\t\t\t\t\tnext._prev = this;\n\t\t\t\t\t\tthis._next = next;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * @private Most other plugins (like BezierPlugin and ThrowPropsPlugin and others) can only tween numeric values, but CSSPlugin must accommodate special values that have a bunch of extra data (like a suffix or strings between numeric values, etc.). For example, boxShadow has values like \"10px 10px 20px 30px rgb(255,0,0)\" which would utterly confuse other plugins. This method allows us to split that data apart and grab only the numeric data and attach it to uniquely-named properties of a generic proxy object ({}) so that we can feed that to virtually any plugin to have the numbers tweened. However, we must also keep track of which properties from the proxy go with which CSSPropTween values and instances. So we create a linked list of MiniPropTweens. Each one records a target (the original CSSPropTween), property (like \"s\" or \"xn1\" or \"xn2\") that we're tweening and the unique property name that was used for the proxy (like \"boxShadow_xn1\" and \"boxShadow_xn2\") and whether or not they need to be rounded. That way, in the _setPluginRatio() method we can simply copy the values over from the proxy to the CSSPropTween instance(s). Then, when the main CSSPlugin setRatio() method runs and applies the CSSPropTween values accordingly, they're updated nicely. So the external plugin tweens the numbers, _setPluginRatio() copies them over, and setRatio() acts normally, applying css-specific values to the element.\n\t\t\t\t * This method returns an object that has the following properties:\n\t\t\t\t *  - proxy: a generic object containing the starting values for all the properties that will be tweened by the external plugin.  This is what we feed to the external _onInitTween() as the target\n\t\t\t\t *  - end: a generic object containing the ending values for all the properties that will be tweened by the external plugin. This is what we feed to the external plugin's _onInitTween() as the destination values\n\t\t\t\t *  - firstMPT: the first MiniPropTween in the linked list\n\t\t\t\t *  - pt: the first CSSPropTween in the linked list that was created when parsing. If shallow is true, this linked list will NOT attach to the one passed into the _parseToProxy() as the \"pt\" (4th) parameter.\n\t\t\t\t * @param {!Object} t target object to be tweened\n\t\t\t\t * @param {!(Object|string)} vars the object containing the information about the tweening values (typically the end/destination values) that should be parsed\n\t\t\t\t * @param {!CSSPlugin} cssp The CSSPlugin instance\n\t\t\t\t * @param {CSSPropTween=} pt the next CSSPropTween in the linked list\n\t\t\t\t * @param {TweenPlugin=} plugin the external TweenPlugin instance that will be handling tweening the numeric values\n\t\t\t\t * @param {boolean=} shallow if true, the resulting linked list from the parse will NOT be attached to the CSSPropTween that was passed in as the \"pt\" (4th) parameter.\n\t\t\t\t * @return An object containing the following properties: proxy, end, firstMPT, and pt (see above for descriptions)\n\t\t\t\t */\n\t\t\t\t_parseToProxy = _internals._parseToProxy = function(t, vars, cssp, pt, plugin, shallow) {\n\t\t\t\t\tvar bpt = pt,\n\t\t\t\t\t\tstart = {},\n\t\t\t\t\t\tend = {},\n\t\t\t\t\t\ttransform = cssp._transform,\n\t\t\t\t\t\toldForce = _forcePT,\n\t\t\t\t\t\ti, p, xp, mpt, firstPT;\n\t\t\t\t\tcssp._transform = null;\n\t\t\t\t\t_forcePT = vars;\n\t\t\t\t\tpt = firstPT = cssp.parse(t, vars, pt, plugin);\n\t\t\t\t\t_forcePT = oldForce;\n\t\t\t\t\t//break off from the linked list so the new ones are isolated.\n\t\t\t\t\tif (shallow) {\n\t\t\t\t\t\tcssp._transform = transform;\n\t\t\t\t\t\tif (bpt) {\n\t\t\t\t\t\t\tbpt._prev = null;\n\t\t\t\t\t\t\tif (bpt._prev) {\n\t\t\t\t\t\t\t\tbpt._prev._next = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\twhile (pt && pt !== bpt) {\n\t\t\t\t\t\tif (pt.type <= 1) {\n\t\t\t\t\t\t\tp = pt.p;\n\t\t\t\t\t\t\tend[p] = pt.s + pt.c;\n\t\t\t\t\t\t\tstart[p] = pt.s;\n\t\t\t\t\t\t\tif (!shallow) {\n\t\t\t\t\t\t\t\tmpt = new MiniPropTween(pt, \"s\", p, mpt, pt.r);\n\t\t\t\t\t\t\t\tpt.c = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pt.type === 1) {\n\t\t\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\t\t\twhile (--i > 0) {\n\t\t\t\t\t\t\t\t\txp = \"xn\" + i;\n\t\t\t\t\t\t\t\t\tp = pt.p + \"_\" + xp;\n\t\t\t\t\t\t\t\t\tend[p] = pt.data[xp];\n\t\t\t\t\t\t\t\t\tstart[p] = pt[xp];\n\t\t\t\t\t\t\t\t\tif (!shallow) {\n\t\t\t\t\t\t\t\t\t\tmpt = new MiniPropTween(pt, xp, p, mpt, pt.rxp[xp]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\t\t\t\treturn {proxy:start, end:end, firstMPT:mpt, pt:firstPT};\n\t\t\t\t},\n\t\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * @constructor Each property that is tweened has at least one CSSPropTween associated with it. These instances store important information like the target, property, starting value, amount of change, etc. They can also optionally have a number of \"extra\" strings and numeric values named xs1, xn1, xs2, xn2, xs3, xn3, etc. where \"s\" indicates string and \"n\" indicates number. These can be pieced together in a complex-value tween (type:1) that has alternating types of data like a string, number, string, number, etc. For example, boxShadow could be \"5px 5px 8px rgb(102, 102, 51)\". In that value, there are 6 numbers that may need to tween and then pieced back together into a string again with spaces, suffixes, etc. xs0 is special in that it stores the suffix for standard (type:0) tweens, -OR- the first string (prefix) in a complex-value (type:1) CSSPropTween -OR- it can be the non-tweening value in a type:-1 CSSPropTween. We do this to conserve memory.\n\t\t\t\t * CSSPropTweens have the following optional properties as well (not defined through the constructor):\n\t\t\t\t *  - l: Length in terms of the number of extra properties that the CSSPropTween has (default: 0). For example, for a boxShadow we may need to tween 5 numbers in which case l would be 5; Keep in mind that the start/end values for the first number that's tweened are always stored in the s and c properties to conserve memory. All additional values thereafter are stored in xn1, xn2, etc.\n\t\t\t\t *  - xfirst: The first instance of any sub-CSSPropTweens that are tweening properties of this instance. For example, we may split up a boxShadow tween so that there's a main CSSPropTween of type:1 that has various xs* and xn* values associated with the h-shadow, v-shadow, blur, color, etc. Then we spawn a CSSPropTween for each of those that has a higher priority and runs BEFORE the main CSSPropTween so that the values are all set by the time it needs to re-assemble them. The xfirst gives us an easy way to identify the first one in that chain which typically ends at the main one (because they're all prepende to the linked list)\n\t\t\t\t *  - plugin: The TweenPlugin instance that will handle the tweening of any complex values. For example, sometimes we don't want to use normal subtweens (like xfirst refers to) to tween the values - we might want ThrowPropsPlugin or BezierPlugin some other plugin to do the actual tweening, so we create a plugin instance and store a reference here. We need this reference so that if we get a request to round values or disable a tween, we can pass along that request.\n\t\t\t\t *  - data: Arbitrary data that needs to be stored with the CSSPropTween. Typically if we're going to have a plugin handle the tweening of a complex-value tween, we create a generic object that stores the END values that we're tweening to and the CSSPropTween's xs1, xs2, etc. have the starting values. We store that object as data. That way, we can simply pass that object to the plugin and use the CSSPropTween as the target.\n\t\t\t\t *  - setRatio: Only used for type:2 tweens that require custom functionality. In this case, we call the CSSPropTween's setRatio() method and pass the ratio each time the tween updates. This isn't quite as efficient as doing things directly in the CSSPlugin's setRatio() method, but it's very convenient and flexible.\n\t\t\t\t * @param {!Object} t Target object whose property will be tweened. Often a DOM element, but not always. It could be anything.\n\t\t\t\t * @param {string} p Property to tween (name). For example, to tween element.width, p would be \"width\".\n\t\t\t\t * @param {number} s Starting numeric value\n\t\t\t\t * @param {number} c Change in numeric value over the course of the entire tween. For example, if element.width starts at 5 and should end at 100, c would be 95.\n\t\t\t\t * @param {CSSPropTween=} next The next CSSPropTween in the linked list. If one is defined, we will define its _prev as the new instance, and the new instance's _next will be pointed at it.\n\t\t\t\t * @param {number=} type The type of CSSPropTween where -1 = a non-tweening value, 0 = a standard simple tween, 1 = a complex value (like one that has multiple numbers in a comma- or space-delimited string like border:\"1px solid red\"), and 2 = one that uses a custom setRatio function that does all of the work of applying the values on each update.\n\t\t\t\t * @param {string=} n Name of the property that should be used for overwriting purposes which is typically the same as p but not always. For example, we may need to create a subtween for the 2nd part of a \"clip:rect(...)\" tween in which case \"p\" might be xs1 but \"n\" is still \"clip\"\n\t\t\t\t * @param {boolean=} r If true, the value(s) should be rounded\n\t\t\t\t * @param {number=} pr Priority in the linked list order. Higher priority CSSPropTweens will be updated before lower priority ones. The default priority is 0.\n\t\t\t\t * @param {string=} b Beginning value. We store this to ensure that it is EXACTLY what it was when the tween began without any risk of interpretation issues.\n\t\t\t\t * @param {string=} e Ending value. We store this to ensure that it is EXACTLY what the user defined at the end of the tween without any risk of interpretation issues.\n\t\t\t\t */\n\t\t\t\tCSSPropTween = _internals.CSSPropTween = function(t, p, s, c, next, type, n, r, pr, b, e) {\n\t\t\t\t\tthis.t = t; //target\n\t\t\t\t\tthis.p = p; //property\n\t\t\t\t\tthis.s = s; //starting value\n\t\t\t\t\tthis.c = c; //change value\n\t\t\t\t\tthis.n = n || p; //name that this CSSPropTween should be associated to (usually the same as p, but not always - n is what overwriting looks at)\n\t\t\t\t\tif (!(t instanceof CSSPropTween)) {\n\t\t\t\t\t\t_overwriteProps.push(this.n);\n\t\t\t\t\t}\n\t\t\t\t\tthis.r = r; //round (boolean)\n\t\t\t\t\tthis.type = type || 0; //0 = normal tween, -1 = non-tweening (in which case xs0 will be applied to the target's property, like tp.t[tp.p] = tp.xs0), 1 = complex-value SpecialProp, 2 = custom setRatio() that does all the work\n\t\t\t\t\tif (pr) {\n\t\t\t\t\t\tthis.pr = pr;\n\t\t\t\t\t\t_hasPriority = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis.b = (b === undefined) ? s : b;\n\t\t\t\t\tthis.e = (e === undefined) ? s + c : e;\n\t\t\t\t\tif (next) {\n\t\t\t\t\t\tthis._next = next;\n\t\t\t\t\t\tnext._prev = this;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\n\t\t\t\t_addNonTweeningNumericPT = function(target, prop, start, end, next, overwriteProp) { //cleans up some code redundancies and helps minification. Just a fast way to add a NUMERIC non-tweening CSSPropTween\n\t\t\t\t\tvar pt = new CSSPropTween(target, prop, start, end - start, next, -1, overwriteProp);\n\t\t\t\t\tpt.b = start;\n\t\t\t\t\tpt.e = pt.xs0 = end;\n\t\t\t\t\treturn pt;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * Takes a target, the beginning value and ending value (as strings) and parses them into a CSSPropTween (possibly with child CSSPropTweens) that accommodates multiple numbers, colors, comma-delimited values, etc. For example:\n\t\t\t\t * sp.parseComplex(element, \"boxShadow\", \"5px 10px 20px rgb(255,102,51)\", \"0px 0px 0px red\", true, \"0px 0px 0px rgb(0,0,0,0)\", pt);\n\t\t\t\t * It will walk through the beginning and ending values (which should be in the same format with the same number and type of values) and figure out which parts are numbers, what strings separate the numeric/tweenable values, and then create the CSSPropTweens accordingly. If a plugin is defined, no child CSSPropTweens will be created. Instead, the ending values will be stored in the \"data\" property of the returned CSSPropTween like: {s:-5, xn1:-10, xn2:-20, xn3:255, xn4:0, xn5:0} so that it can be fed to any other plugin and it'll be plain numeric tweens but the recomposition of the complex value will be handled inside CSSPlugin's setRatio().\n\t\t\t\t * If a setRatio is defined, the type of the CSSPropTween will be set to 2 and recomposition of the values will be the responsibility of that method.\n\t\t\t\t *\n\t\t\t\t * @param {!Object} t Target whose property will be tweened\n\t\t\t\t * @param {!string} p Property that will be tweened (its name, like \"left\" or \"backgroundColor\" or \"boxShadow\")\n\t\t\t\t * @param {string} b Beginning value\n\t\t\t\t * @param {string} e Ending value\n\t\t\t\t * @param {boolean} clrs If true, the value could contain a color value like \"rgb(255,0,0)\" or \"#F00\" or \"red\". The default is false, so no colors will be recognized (a performance optimization)\n\t\t\t\t * @param {(string|number|Object)} dflt The default beginning value that should be used if no valid beginning value is defined or if the number of values inside the complex beginning and ending values don't match\n\t\t\t\t * @param {?CSSPropTween} pt CSSPropTween instance that is the current head of the linked list (we'll prepend to this).\n\t\t\t\t * @param {number=} pr Priority in the linked list order. Higher priority properties will be updated before lower priority ones. The default priority is 0.\n\t\t\t\t * @param {TweenPlugin=} plugin If a plugin should handle the tweening of extra properties, pass the plugin instance here. If one is defined, then NO subtweens will be created for any extra properties (the properties will be created - just not additional CSSPropTween instances to tween them) because the plugin is expected to do so. However, the end values WILL be populated in the \"data\" property, like {s:100, xn1:50, xn2:300}\n\t\t\t\t * @param {function(number)=} setRatio If values should be set in a custom function instead of being pieced together in a type:1 (complex-value) CSSPropTween, define that custom function here.\n\t\t\t\t * @return {CSSPropTween} The first CSSPropTween in the linked list which includes the new one(s) added by the parseComplex() call.\n\t\t\t\t */\n\t\t\t\t_parseComplex = CSSPlugin.parseComplex = function(t, p, b, e, clrs, dflt, pt, pr, plugin, setRatio) {\n\t\t\t\t\t//DEBUG: _log(\"parseComplex: \"+p+\", b: \"+b+\", e: \"+e);\n\t\t\t\t\tb = b || dflt || \"\";\n\t\t\t\t\tif (typeof(e) === \"function\") {\n\t\t\t\t\t\te = e(_index, _target);\n\t\t\t\t\t}\n\t\t\t\t\tpt = new CSSPropTween(t, p, 0, 0, pt, (setRatio ? 2 : 1), null, false, pr, b, e);\n\t\t\t\t\te += \"\"; //ensures it's a string\n\t\t\t\t\tif (clrs && _colorExp.test(e + b)) { //if colors are found, normalize the formatting to rgba() or hsla().\n\t\t\t\t\t\te = [b, e];\n\t\t\t\t\t\tCSSPlugin.colorStringFilter(e);\n\t\t\t\t\t\tb = e[0];\n\t\t\t\t\t\te = e[1];\n\t\t\t\t\t}\n\t\t\t\t\tvar ba = b.split(\", \").join(\",\").split(\" \"), //beginning array\n\t\t\t\t\t\tea = e.split(\", \").join(\",\").split(\" \"), //ending array\n\t\t\t\t\t\tl = ba.length,\n\t\t\t\t\t\tautoRound = (_autoRound !== false),\n\t\t\t\t\t\ti, xi, ni, bv, ev, bnums, enums, bn, hasAlpha, temp, cv, str, useHSL;\n\t\t\t\t\tif (e.indexOf(\",\") !== -1 || b.indexOf(\",\") !== -1) {\n\t\t\t\t\t\tba = ba.join(\" \").replace(_commasOutsideParenExp, \", \").split(\" \");\n\t\t\t\t\t\tea = ea.join(\" \").replace(_commasOutsideParenExp, \", \").split(\" \");\n\t\t\t\t\t\tl = ba.length;\n\t\t\t\t\t}\n\t\t\t\t\tif (l !== ea.length) {\n\t\t\t\t\t\t//DEBUG: _log(\"mismatched formatting detected on \" + p + \" (\" + b + \" vs \" + e + \")\");\n\t\t\t\t\t\tba = (dflt || \"\").split(\" \");\n\t\t\t\t\t\tl = ba.length;\n\t\t\t\t\t}\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\tpt.setRatio = setRatio;\n\t\t\t\t\t_colorExp.lastIndex = 0;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tbv = ba[i];\n\t\t\t\t\t\tev = ea[i];\n\t\t\t\t\t\tbn = parseFloat(bv);\n\t\t\t\t\t\t//if the value begins with a number (most common). It's fine if it has a suffix like px\n\t\t\t\t\t\tif (bn || bn === 0) {\n\t\t\t\t\t\t\tpt.appendXtra(\"\", bn, _parseChange(ev, bn), ev.replace(_relNumExp, \"\"), (autoRound && ev.indexOf(\"px\") !== -1), true);\n\t\n\t\t\t\t\t\t//if the value is a color\n\t\t\t\t\t\t} else if (clrs && _colorExp.test(bv)) {\n\t\t\t\t\t\t\tstr = ev.indexOf(\")\") + 1;\n\t\t\t\t\t\t\tstr = \")\" + (str ? ev.substr(str) : \"\"); //if there's a comma or ) at the end, retain it.\n\t\t\t\t\t\t\tuseHSL = (ev.indexOf(\"hsl\") !== -1 && _supportsOpacity);\n\t\t\t\t\t\t\tbv = _parseColor(bv, useHSL);\n\t\t\t\t\t\t\tev = _parseColor(ev, useHSL);\n\t\t\t\t\t\t\thasAlpha = (bv.length + ev.length > 6);\n\t\t\t\t\t\t\tif (hasAlpha && !_supportsOpacity && ev[3] === 0) { //older versions of IE don't support rgba(), so if the destination alpha is 0, just use \"transparent\" for the end color\n\t\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += pt.l ? \" transparent\" : \"transparent\";\n\t\t\t\t\t\t\t\tpt.e = pt.e.split(ea[i]).join(\"transparent\");\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (!_supportsOpacity) { //old versions of IE don't support rgba().\n\t\t\t\t\t\t\t\t\thasAlpha = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (useHSL) {\n\t\t\t\t\t\t\t\t\tpt.appendXtra((hasAlpha ? \"hsla(\" : \"hsl(\"), bv[0], _parseChange(ev[0], bv[0]), \",\", false, true)\n\t\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[1], _parseChange(ev[1], bv[1]), \"%,\", false)\n\t\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[2], _parseChange(ev[2], bv[2]), (hasAlpha ? \"%,\" : \"%\" + str), false);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tpt.appendXtra((hasAlpha ? \"rgba(\" : \"rgb(\"), bv[0], ev[0] - bv[0], \",\", true, true)\n\t\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[1], ev[1] - bv[1], \",\", true)\n\t\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[2], ev[2] - bv[2], (hasAlpha ? \",\" : str), true);\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\tif (hasAlpha) {\n\t\t\t\t\t\t\t\t\tbv = (bv.length < 4) ? 1 : bv[3];\n\t\t\t\t\t\t\t\t\tpt.appendXtra(\"\", bv, ((ev.length < 4) ? 1 : ev[3]) - bv, str, false);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t_colorExp.lastIndex = 0; //otherwise the test() on the RegExp could move the lastIndex and taint future results.\n\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbnums = bv.match(_numExp); //gets each group of numbers in the beginning value string and drops them into an array\n\t\n\t\t\t\t\t\t\t//if no number is found, treat it as a non-tweening value and just append the string to the current xs.\n\t\t\t\t\t\t\tif (!bnums) {\n\t\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += (pt.l || pt[\"xs\" + pt.l]) ? \" \" + ev : ev;\n\t\n\t\t\t\t\t\t\t//loop through all the numbers that are found and construct the extra values on the pt.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tenums = ev.match(_relNumExp); //get each group of numbers in the end value string and drop them into an array. We allow relative values too, like +=50 or -=.5\n\t\t\t\t\t\t\t\tif (!enums || enums.length !== bnums.length) {\n\t\t\t\t\t\t\t\t\t//DEBUG: _log(\"mismatched formatting detected on \" + p + \" (\" + b + \" vs \" + e + \")\");\n\t\t\t\t\t\t\t\t\treturn pt;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tni = 0;\n\t\t\t\t\t\t\t\tfor (xi = 0; xi < bnums.length; xi++) {\n\t\t\t\t\t\t\t\t\tcv = bnums[xi];\n\t\t\t\t\t\t\t\t\ttemp = bv.indexOf(cv, ni);\n\t\t\t\t\t\t\t\t\tpt.appendXtra(bv.substr(ni, temp - ni), Number(cv), _parseChange(enums[xi], cv), \"\", (autoRound && bv.substr(temp + cv.length, 2) === \"px\"), (xi === 0));\n\t\t\t\t\t\t\t\t\tni = temp + cv.length;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += bv.substr(ni);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//if there are relative values (\"+=\" or \"-=\" prefix), we need to adjust the ending value to eliminate the prefixes and combine the values properly.\n\t\t\t\t\tif (e.indexOf(\"=\") !== -1) if (pt.data) {\n\t\t\t\t\t\tstr = pt.xs0 + pt.data.s;\n\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\tstr += pt[\"xs\" + i] + pt.data[\"xn\" + i];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt.e = str + pt[\"xs\" + i];\n\t\t\t\t\t}\n\t\t\t\t\tif (!pt.l) {\n\t\t\t\t\t\tpt.type = -1;\n\t\t\t\t\t\tpt.xs0 = pt.e;\n\t\t\t\t\t}\n\t\t\t\t\treturn pt.xfirst || pt;\n\t\t\t\t},\n\t\t\t\ti = 9;\n\t\n\t\n\t\t\tp = CSSPropTween.prototype;\n\t\t\tp.l = p.pr = 0; //length (number of extra properties like xn1, xn2, xn3, etc.\n\t\t\twhile (--i > 0) {\n\t\t\t\tp[\"xn\" + i] = 0;\n\t\t\t\tp[\"xs\" + i] = \"\";\n\t\t\t}\n\t\t\tp.xs0 = \"\";\n\t\t\tp._next = p._prev = p.xfirst = p.data = p.plugin = p.setRatio = p.rxp = null;\n\t\n\t\n\t\t\t/**\n\t\t\t * Appends and extra tweening value to a CSSPropTween and automatically manages any prefix and suffix strings. The first extra value is stored in the s and c of the main CSSPropTween instance, but thereafter any extras are stored in the xn1, xn2, xn3, etc. The prefixes and suffixes are stored in the xs0, xs1, xs2, etc. properties. For example, if I walk through a clip value like \"rect(10px, 5px, 0px, 20px)\", the values would be stored like this:\n\t\t\t * xs0:\"rect(\", s:10, xs1:\"px, \", xn1:5, xs2:\"px, \", xn2:0, xs3:\"px, \", xn3:20, xn4:\"px)\"\n\t\t\t * And they'd all get joined together when the CSSPlugin renders (in the setRatio() method).\n\t\t\t * @param {string=} pfx Prefix (if any)\n\t\t\t * @param {!number} s Starting value\n\t\t\t * @param {!number} c Change in numeric value over the course of the entire tween. For example, if the start is 5 and the end is 100, the change would be 95.\n\t\t\t * @param {string=} sfx Suffix (if any)\n\t\t\t * @param {boolean=} r Round (if true).\n\t\t\t * @param {boolean=} pad If true, this extra value should be separated by the previous one by a space. If there is no previous extra and pad is true, it will automatically drop the space.\n\t\t\t * @return {CSSPropTween} returns itself so that multiple methods can be chained together.\n\t\t\t */\n\t\t\tp.appendXtra = function(pfx, s, c, sfx, r, pad) {\n\t\t\t\tvar pt = this,\n\t\t\t\t\tl = pt.l;\n\t\t\t\tpt[\"xs\" + l] += (pad && (l || pt[\"xs\" + l])) ? \" \" + pfx : pfx || \"\";\n\t\t\t\tif (!c) if (l !== 0 && !pt.plugin) { //typically we'll combine non-changing values right into the xs to optimize performance, but we don't combine them when there's a plugin that will be tweening the values because it may depend on the values being split apart, like for a bezier, if a value doesn't change between the first and second iteration but then it does on the 3rd, we'll run into trouble because there's no xn slot for that value!\n\t\t\t\t\tpt[\"xs\" + l] += s + (sfx || \"\");\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t\tpt.l++;\n\t\t\t\tpt.type = pt.setRatio ? 2 : 1;\n\t\t\t\tpt[\"xs\" + pt.l] = sfx || \"\";\n\t\t\t\tif (l > 0) {\n\t\t\t\t\tpt.data[\"xn\" + l] = s + c;\n\t\t\t\t\tpt.rxp[\"xn\" + l] = r; //round extra property (we need to tap into this in the _parseToProxy() method)\n\t\t\t\t\tpt[\"xn\" + l] = s;\n\t\t\t\t\tif (!pt.plugin) {\n\t\t\t\t\t\tpt.xfirst = new CSSPropTween(pt, \"xn\" + l, s, c, pt.xfirst || pt, 0, pt.n, r, pt.pr);\n\t\t\t\t\t\tpt.xfirst.xs0 = 0; //just to ensure that the property stays numeric which helps modern browsers speed up processing. Remember, in the setRatio() method, we do pt.t[pt.p] = val + pt.xs0 so if pt.xs0 is \"\" (the default), it'll cast the end value as a string. When a property is a number sometimes and a string sometimes, it prevents the compiler from locking in the data type, slowing things down slightly.\n\t\t\t\t\t}\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t\tpt.data = {s:s + c};\n\t\t\t\tpt.rxp = {};\n\t\t\t\tpt.s = s;\n\t\t\t\tpt.c = c;\n\t\t\t\tpt.r = r;\n\t\t\t\treturn pt;\n\t\t\t};\n\t\n\t\t\t/**\n\t\t\t * @constructor A SpecialProp is basically a css property that needs to be treated in a non-standard way, like if it may contain a complex value like boxShadow:\"5px 10px 15px rgb(255, 102, 51)\" or if it is associated with another plugin like ThrowPropsPlugin or BezierPlugin. Every SpecialProp is associated with a particular property name like \"boxShadow\" or \"throwProps\" or \"bezier\" and it will intercept those values in the vars object that's passed to the CSSPlugin and handle them accordingly.\n\t\t\t * @param {!string} p Property name (like \"boxShadow\" or \"throwProps\")\n\t\t\t * @param {Object=} options An object containing any of the following configuration options:\n\t\t\t *                      - defaultValue: the default value\n\t\t\t *                      - parser: A function that should be called when the associated property name is found in the vars. This function should return a CSSPropTween instance and it should ensure that it is properly inserted into the linked list. It will receive 4 paramters: 1) The target, 2) The value defined in the vars, 3) The CSSPlugin instance (whose _firstPT should be used for the linked list), and 4) A computed style object if one was calculated (this is a speed optimization that allows retrieval of starting values quicker)\n\t\t\t *                      - formatter: a function that formats any value received for this special property (for example, boxShadow could take \"5px 5px red\" and format it to \"5px 5px 0px 0px red\" so that both the beginning and ending values have a common order and quantity of values.)\n\t\t\t *                      - prefix: if true, we'll determine whether or not this property requires a vendor prefix (like Webkit or Moz or ms or O)\n\t\t\t *                      - color: set this to true if the value for this SpecialProp may contain color-related values like rgb(), rgba(), etc.\n\t\t\t *                      - priority: priority in the linked list order. Higher priority SpecialProps will be updated before lower priority ones. The default priority is 0.\n\t\t\t *                      - multi: if true, the formatter should accommodate a comma-delimited list of values, like boxShadow could have multiple boxShadows listed out.\n\t\t\t *                      - collapsible: if true, the formatter should treat the value like it's a top/right/bottom/left value that could be collapsed, like \"5px\" would apply to all, \"5px, 10px\" would use 5px for top/bottom and 10px for right/left, etc.\n\t\t\t *                      - keyword: a special keyword that can [optionally] be found inside the value (like \"inset\" for boxShadow). This allows us to validate beginning/ending values to make sure they match (if the keyword is found in one, it'll be added to the other for consistency by default).\n\t\t\t */\n\t\t\tvar SpecialProp = function(p, options) {\n\t\t\t\t\toptions = options || {};\n\t\t\t\t\tthis.p = options.prefix ? _checkPropPrefix(p) || p : p;\n\t\t\t\t\t_specialProps[p] = _specialProps[this.p] = this;\n\t\t\t\t\tthis.format = options.formatter || _getFormatter(options.defaultValue, options.color, options.collapsible, options.multi);\n\t\t\t\t\tif (options.parser) {\n\t\t\t\t\t\tthis.parse = options.parser;\n\t\t\t\t\t}\n\t\t\t\t\tthis.clrs = options.color;\n\t\t\t\t\tthis.multi = options.multi;\n\t\t\t\t\tthis.keyword = options.keyword;\n\t\t\t\t\tthis.dflt = options.defaultValue;\n\t\t\t\t\tthis.pr = options.priority || 0;\n\t\t\t\t},\n\t\n\t\t\t\t//shortcut for creating a new SpecialProp that can accept multiple properties as a comma-delimited list (helps minification). dflt can be an array for multiple values (we don't do a comma-delimited list because the default value may contain commas, like rect(0px,0px,0px,0px)). We attach this method to the SpecialProp class/object instead of using a private _createSpecialProp() method so that we can tap into it externally if necessary, like from another plugin.\n\t\t\t\t_registerComplexSpecialProp = _internals._registerComplexSpecialProp = function(p, options, defaults) {\n\t\t\t\t\tif (typeof(options) !== \"object\") {\n\t\t\t\t\t\toptions = {parser:defaults}; //to make backwards compatible with older versions of BezierPlugin and ThrowPropsPlugin\n\t\t\t\t\t}\n\t\t\t\t\tvar a = p.split(\",\"),\n\t\t\t\t\t\td = options.defaultValue,\n\t\t\t\t\t\ti, temp;\n\t\t\t\t\tdefaults = defaults || [d];\n\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\toptions.prefix = (i === 0 && options.prefix);\n\t\t\t\t\t\toptions.defaultValue = defaults[i] || d;\n\t\t\t\t\t\ttemp = new SpecialProp(a[i], options);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\n\t\t\t\t//creates a placeholder special prop for a plugin so that the property gets caught the first time a tween of it is attempted, and at that time it makes the plugin register itself, thus taking over for all future tweens of that property. This allows us to not mandate that things load in a particular order and it also allows us to log() an error that informs the user when they attempt to tween an external plugin-related property without loading its .js file.\n\t\t\t\t_registerPluginProp = _internals._registerPluginProp = function(p) {\n\t\t\t\t\tif (!_specialProps[p]) {\n\t\t\t\t\t\tvar pluginName = p.charAt(0).toUpperCase() + p.substr(1) + \"Plugin\";\n\t\t\t\t\t\t_registerComplexSpecialProp(p, {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\t\t\t\tvar pluginClass = _globals.com.greensock.plugins[pluginName];\n\t\t\t\t\t\t\tif (!pluginClass) {\n\t\t\t\t\t\t\t\t_log(\"Error: \" + pluginName + \" js file not loaded.\");\n\t\t\t\t\t\t\t\treturn pt;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpluginClass._cssRegister();\n\t\t\t\t\t\t\treturn _specialProps[p].parse(t, e, p, cssp, pt, plugin, vars);\n\t\t\t\t\t\t}});\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\n\t\t\tp = SpecialProp.prototype;\n\t\n\t\t\t/**\n\t\t\t * Alias for _parseComplex() that automatically plugs in certain values for this SpecialProp, like its property name, whether or not colors should be sensed, the default value, and priority. It also looks for any keyword that the SpecialProp defines (like \"inset\" for boxShadow) and ensures that the beginning and ending values have the same number of values for SpecialProps where multi is true (like boxShadow and textShadow can have a comma-delimited list)\n\t\t\t * @param {!Object} t target element\n\t\t\t * @param {(string|number|object)} b beginning value\n\t\t\t * @param {(string|number|object)} e ending (destination) value\n\t\t\t * @param {CSSPropTween=} pt next CSSPropTween in the linked list\n\t\t\t * @param {TweenPlugin=} plugin If another plugin will be tweening the complex value, that TweenPlugin instance goes here.\n\t\t\t * @param {function=} setRatio If a custom setRatio() method should be used to handle this complex value, that goes here.\n\t\t\t * @return {CSSPropTween=} First CSSPropTween in the linked list\n\t\t\t */\n\t\t\tp.parseComplex = function(t, b, e, pt, plugin, setRatio) {\n\t\t\t\tvar kwd = this.keyword,\n\t\t\t\t\ti, ba, ea, l, bi, ei;\n\t\t\t\t//if this SpecialProp's value can contain a comma-delimited list of values (like boxShadow or textShadow), we must parse them in a special way, and look for a keyword (like \"inset\" for boxShadow) and ensure that the beginning and ending BOTH have it if the end defines it as such. We also must ensure that there are an equal number of values specified (we can't tween 1 boxShadow to 3 for example)\n\t\t\t\tif (this.multi) if (_commasOutsideParenExp.test(e) || _commasOutsideParenExp.test(b)) {\n\t\t\t\t\tba = b.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\t\tea = e.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\t} else if (kwd) {\n\t\t\t\t\tba = [b];\n\t\t\t\t\tea = [e];\n\t\t\t\t}\n\t\t\t\tif (ea) {\n\t\t\t\t\tl = (ea.length > ba.length) ? ea.length : ba.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tb = ba[i] = ba[i] || this.dflt;\n\t\t\t\t\t\te = ea[i] = ea[i] || this.dflt;\n\t\t\t\t\t\tif (kwd) {\n\t\t\t\t\t\t\tbi = b.indexOf(kwd);\n\t\t\t\t\t\t\tei = e.indexOf(kwd);\n\t\t\t\t\t\t\tif (bi !== ei) {\n\t\t\t\t\t\t\t\tif (ei === -1) { //if the keyword isn't in the end value, remove it from the beginning one.\n\t\t\t\t\t\t\t\t\tba[i] = ba[i].split(kwd).join(\"\");\n\t\t\t\t\t\t\t\t} else if (bi === -1) { //if the keyword isn't in the beginning, add it.\n\t\t\t\t\t\t\t\t\tba[i] += \" \" + kwd;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tb = ba.join(\", \");\n\t\t\t\t\te = ea.join(\", \");\n\t\t\t\t}\n\t\t\t\treturn _parseComplex(t, this.p, b, e, this.clrs, this.dflt, pt, this.pr, plugin, setRatio);\n\t\t\t};\n\t\n\t\t\t/**\n\t\t\t * Accepts a target and end value and spits back a CSSPropTween that has been inserted into the CSSPlugin's linked list and conforms with all the conventions we use internally, like type:-1, 0, 1, or 2, setting up any extra property tweens, priority, etc. For example, if we have a boxShadow SpecialProp and call:\n\t\t\t * this._firstPT = sp.parse(element, \"5px 10px 20px rgb(2550,102,51)\", \"boxShadow\", this);\n\t\t\t * It should figure out the starting value of the element's boxShadow, compare it to the provided end value and create all the necessary CSSPropTweens of the appropriate types to tween the boxShadow. The CSSPropTween that gets spit back should already be inserted into the linked list (the 4th parameter is the current head, so prepend to that).\n\t\t\t * @param {!Object} t Target object whose property is being tweened\n\t\t\t * @param {Object} e End value as provided in the vars object (typically a string, but not always - like a throwProps would be an object).\n\t\t\t * @param {!string} p Property name\n\t\t\t * @param {!CSSPlugin} cssp The CSSPlugin instance that should be associated with this tween.\n\t\t\t * @param {?CSSPropTween} pt The CSSPropTween that is the current head of the linked list (we'll prepend to it)\n\t\t\t * @param {TweenPlugin=} plugin If a plugin will be used to tween the parsed value, this is the plugin instance.\n\t\t\t * @param {Object=} vars Original vars object that contains the data for parsing.\n\t\t\t * @return {CSSPropTween} The first CSSPropTween in the linked list which includes the new one(s) added by the parse() call.\n\t\t\t */\n\t\t\tp.parse = function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\treturn this.parseComplex(t.style, this.format(_getStyle(t, this.p, _cs, false, this.dflt)), this.format(e), pt, plugin);\n\t\t\t};\n\t\n\t\t\t/**\n\t\t\t * Registers a special property that should be intercepted from any \"css\" objects defined in tweens. This allows you to handle them however you want without CSSPlugin doing it for you. The 2nd parameter should be a function that accepts 3 parameters:\n\t\t\t *  1) Target object whose property should be tweened (typically a DOM element)\n\t\t\t *  2) The end/destination value (could be a string, number, object, or whatever you want)\n\t\t\t *  3) The tween instance (you probably don't need to worry about this, but it can be useful for looking up information like the duration)\n\t\t\t *\n\t\t\t * Then, your function should return a function which will be called each time the tween gets rendered, passing a numeric \"ratio\" parameter to your function that indicates the change factor (usually between 0 and 1). For example:\n\t\t\t *\n\t\t\t * CSSPlugin.registerSpecialProp(\"myCustomProp\", function(target, value, tween) {\n\t\t\t *      var start = target.style.width;\n\t\t\t *      return function(ratio) {\n\t\t\t *              target.style.width = (start + value * ratio) + \"px\";\n\t\t\t *              console.log(\"set width to \" + target.style.width);\n\t\t\t *          }\n\t\t\t * }, 0);\n\t\t\t *\n\t\t\t * Then, when I do this tween, it will trigger my special property:\n\t\t\t *\n\t\t\t * TweenLite.to(element, 1, {css:{myCustomProp:100}});\n\t\t\t *\n\t\t\t * In the example, of course, we're just changing the width, but you can do anything you want.\n\t\t\t *\n\t\t\t * @param {!string} name Property name (or comma-delimited list of property names) that should be intercepted and handled by your function. For example, if I define \"myCustomProp\", then it would handle that portion of the following tween: TweenLite.to(element, 1, {css:{myCustomProp:100}})\n\t\t\t * @param {!function(Object, Object, Object, string):function(number)} onInitTween The function that will be called when a tween of this special property is performed. The function will receive 4 parameters: 1) Target object that should be tweened, 2) Value that was passed to the tween, 3) The tween instance itself (rarely used), and 4) The property name that's being tweened. Your function should return a function that should be called on every update of the tween. That function will receive a single parameter that is a \"change factor\" value (typically between 0 and 1) indicating the amount of change as a ratio. You can use this to determine how to set the values appropriately in your function.\n\t\t\t * @param {number=} priority Priority that helps the engine determine the order in which to set the properties (default: 0). Higher priority properties will be updated before lower priority ones.\n\t\t\t */\n\t\t\tCSSPlugin.registerSpecialProp = function(name, onInitTween, priority) {\n\t\t\t\t_registerComplexSpecialProp(name, {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\t\tvar rv = new CSSPropTween(t, p, 0, 0, pt, 2, p, false, priority);\n\t\t\t\t\trv.plugin = plugin;\n\t\t\t\t\trv.setRatio = onInitTween(t, e, cssp._tween, p);\n\t\t\t\t\treturn rv;\n\t\t\t\t}, priority:priority});\n\t\t\t};\n\t\n\t\n\t\n\t\n\t\n\t\n\t\t\t//transform-related methods and properties\n\t\t\tCSSPlugin.useSVGTransformAttr = _isSafari || _isFirefox; //Safari and Firefox both have some rendering bugs when applying CSS transforms to SVG elements, so default to using the \"transform\" attribute instead (users can override this).\n\t\t\tvar _transformProps = (\"scaleX,scaleY,scaleZ,x,y,z,skewX,skewY,rotation,rotationX,rotationY,perspective,xPercent,yPercent\").split(\",\"),\n\t\t\t\t_transformProp = _checkPropPrefix(\"transform\"), //the Javascript (camelCase) transform property, like msTransform, WebkitTransform, MozTransform, or OTransform.\n\t\t\t\t_transformPropCSS = _prefixCSS + \"transform\",\n\t\t\t\t_transformOriginProp = _checkPropPrefix(\"transformOrigin\"),\n\t\t\t\t_supports3D = (_checkPropPrefix(\"perspective\") !== null),\n\t\t\t\tTransform = _internals.Transform = function() {\n\t\t\t\t\tthis.perspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0;\n\t\t\t\t\tthis.force3D = (CSSPlugin.defaultForce3D === false || !_supports3D) ? false : CSSPlugin.defaultForce3D || \"auto\";\n\t\t\t\t},\n\t\t\t\t_SVGElement = window.SVGElement,\n\t\t\t\t_useSVGTransformAttr,\n\t\t\t\t//Some browsers (like Firefox and IE) don't honor transform-origin properly in SVG elements, so we need to manually adjust the matrix accordingly. We feature detect here rather than always doing the conversion for certain browsers because they may fix the problem at some point in the future.\n\t\n\t\t\t\t_createSVG = function(type, container, attributes) {\n\t\t\t\t\tvar element = _doc.createElementNS(\"http://www.w3.org/2000/svg\", type),\n\t\t\t\t\t\treg = /([a-z])([A-Z])/g,\n\t\t\t\t\t\tp;\n\t\t\t\t\tfor (p in attributes) {\n\t\t\t\t\t\telement.setAttributeNS(null, p.replace(reg, \"$1-$2\").toLowerCase(), attributes[p]);\n\t\t\t\t\t}\n\t\t\t\t\tcontainer.appendChild(element);\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\t_docElement = _doc.documentElement,\n\t\t\t\t_forceSVGTransformAttr = (function() {\n\t\t\t\t\t//IE and Android stock don't support CSS transforms on SVG elements, so we must write them to the \"transform\" attribute. We populate this variable in the _parseTransform() method, and only if/when we come across an SVG element\n\t\t\t\t\tvar force = _ieVers || (/Android/i.test(_agent) && !window.chrome),\n\t\t\t\t\t\tsvg, rect, width;\n\t\t\t\t\tif (_doc.createElementNS && !force) { //IE8 and earlier doesn't support SVG anyway\n\t\t\t\t\t\tsvg = _createSVG(\"svg\", _docElement);\n\t\t\t\t\t\trect = _createSVG(\"rect\", svg, {width:100, height:50, x:100});\n\t\t\t\t\t\twidth = rect.getBoundingClientRect().width;\n\t\t\t\t\t\trect.style[_transformOriginProp] = \"50% 50%\";\n\t\t\t\t\t\trect.style[_transformProp] = \"scaleX(0.5)\";\n\t\t\t\t\t\tforce = (width === rect.getBoundingClientRect().width && !(_isFirefox && _supports3D)); //note: Firefox fails the test even though it does support CSS transforms in 3D. Since we can't push 3D stuff into the transform attribute, we force Firefox to pass the test here (as long as it does truly support 3D).\n\t\t\t\t\t\t_docElement.removeChild(svg);\n\t\t\t\t\t}\n\t\t\t\t\treturn force;\n\t\t\t\t})(),\n\t\t\t\t_parseSVGOrigin = function(e, local, decoratee, absolute, smoothOrigin, skipRecord) {\n\t\t\t\t\tvar tm = e._gsTransform,\n\t\t\t\t\t\tm = _getMatrix(e, true),\n\t\t\t\t\t\tv, x, y, xOrigin, yOrigin, a, b, c, d, tx, ty, determinant, xOriginOld, yOriginOld;\n\t\t\t\t\tif (tm) {\n\t\t\t\t\t\txOriginOld = tm.xOrigin; //record the original values before we alter them.\n\t\t\t\t\t\tyOriginOld = tm.yOrigin;\n\t\t\t\t\t}\n\t\t\t\t\tif (!absolute || (v = absolute.split(\" \")).length < 2) {\n\t\t\t\t\t\tb = e.getBBox();\n\t\t\t\t\t\tlocal = _parsePosition(local).split(\" \");\n\t\t\t\t\t\tv = [(local[0].indexOf(\"%\") !== -1 ? parseFloat(local[0]) / 100 * b.width : parseFloat(local[0])) + b.x,\n\t\t\t\t\t\t\t (local[1].indexOf(\"%\") !== -1 ? parseFloat(local[1]) / 100 * b.height : parseFloat(local[1])) + b.y];\n\t\t\t\t\t}\n\t\t\t\t\tdecoratee.xOrigin = xOrigin = parseFloat(v[0]);\n\t\t\t\t\tdecoratee.yOrigin = yOrigin = parseFloat(v[1]);\n\t\t\t\t\tif (absolute && m !== _identity2DMatrix) { //if svgOrigin is being set, we must invert the matrix and determine where the absolute point is, factoring in the current transforms. Otherwise, the svgOrigin would be based on the element's non-transformed position on the canvas.\n\t\t\t\t\t\ta = m[0];\n\t\t\t\t\t\tb = m[1];\n\t\t\t\t\t\tc = m[2];\n\t\t\t\t\t\td = m[3];\n\t\t\t\t\t\ttx = m[4];\n\t\t\t\t\t\tty = m[5];\n\t\t\t\t\t\tdeterminant = (a * d - b * c);\n\t\t\t\t\t\tx = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + ((c * ty - d * tx) / determinant);\n\t\t\t\t\t\ty = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - ((a * ty - b * tx) / determinant);\n\t\t\t\t\t\txOrigin = decoratee.xOrigin = v[0] = x;\n\t\t\t\t\t\tyOrigin = decoratee.yOrigin = v[1] = y;\n\t\t\t\t\t}\n\t\t\t\t\tif (tm) { //avoid jump when transformOrigin is changed - adjust the x/y values accordingly\n\t\t\t\t\t\tif (skipRecord) {\n\t\t\t\t\t\t\tdecoratee.xOffset = tm.xOffset;\n\t\t\t\t\t\t\tdecoratee.yOffset = tm.yOffset;\n\t\t\t\t\t\t\ttm = decoratee;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (smoothOrigin || (smoothOrigin !== false && CSSPlugin.defaultSmoothOrigin !== false)) {\n\t\t\t\t\t\t\tx = xOrigin - xOriginOld;\n\t\t\t\t\t\t\ty = yOrigin - yOriginOld;\n\t\t\t\t\t\t\t//originally, we simply adjusted the x and y values, but that would cause problems if, for example, you created a rotational tween part-way through an x/y tween. Managing the offset in a separate variable gives us ultimate flexibility.\n\t\t\t\t\t\t\t//tm.x -= x - (x * m[0] + y * m[2]);\n\t\t\t\t\t\t\t//tm.y -= y - (x * m[1] + y * m[3]);\n\t\t\t\t\t\t\ttm.xOffset += (x * m[0] + y * m[2]) - x;\n\t\t\t\t\t\t\ttm.yOffset += (x * m[1] + y * m[3]) - y;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttm.xOffset = tm.yOffset = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!skipRecord) {\n\t\t\t\t\t\te.setAttribute(\"data-svg-origin\", v.join(\" \"));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_canGetBBox = function(e) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn e.getBBox(); //Firefox throws errors if you try calling getBBox() on an SVG element that's not rendered (like in a <symbol> or <defs>). https://bugzilla.mozilla.org/show_bug.cgi?id=612118\n\t\t\t\t\t} catch (e) {}\n\t\t\t\t},\n\t\t\t\t_isSVG = function(e) { //reports if the element is an SVG on which getBBox() actually works\n\t\t\t\t\treturn !!(_SVGElement && e.getBBox && e.getCTM && _canGetBBox(e) && (!e.parentNode || (e.parentNode.getBBox && e.parentNode.getCTM)));\n\t\t\t\t},\n\t\t\t\t_identity2DMatrix = [1,0,0,1,0,0],\n\t\t\t\t_getMatrix = function(e, force2D) {\n\t\t\t\t\tvar tm = e._gsTransform || new Transform(),\n\t\t\t\t\t\trnd = 100000,\n\t\t\t\t\t\tstyle = e.style,\n\t\t\t\t\t\tisDefault, s, m, n, dec, none;\n\t\t\t\t\tif (_transformProp) {\n\t\t\t\t\t\ts = _getStyle(e, _transformPropCSS, null, true);\n\t\t\t\t\t} else if (e.currentStyle) {\n\t\t\t\t\t\t//for older versions of IE, we need to interpret the filter portion that is in the format: progid:DXImageTransform.Microsoft.Matrix(M11=6.123233995736766e-17, M12=-1, M21=1, M22=6.123233995736766e-17, sizingMethod='auto expand') Notice that we need to swap b and c compared to a normal matrix.\n\t\t\t\t\t\ts = e.currentStyle.filter.match(_ieGetMatrixExp);\n\t\t\t\t\t\ts = (s && s.length === 4) ? [s[0].substr(4), Number(s[2].substr(4)), Number(s[1].substr(4)), s[3].substr(4), (tm.x || 0), (tm.y || 0)].join(\",\") : \"\";\n\t\t\t\t\t}\n\t\t\t\t\tisDefault = (!s || s === \"none\" || s === \"matrix(1, 0, 0, 1, 0, 0)\");\n\t\t\t\t\tif (isDefault && _transformProp && ((none = (_getComputedStyle(e).display === \"none\")) || !e.parentNode)) {\n\t\t\t\t\t\tif (none) { //browsers don't report transforms accurately unless the element is in the DOM and has a display value that's not \"none\".\n\t\t\t\t\t\t\tn = style.display;\n\t\t\t\t\t\t\tstyle.display = \"block\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!e.parentNode) {\n\t\t\t\t\t\t\tdec = 1; //flag\n\t\t\t\t\t\t\t_docElement.appendChild(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts = _getStyle(e, _transformPropCSS, null, true);\n\t\t\t\t\t\tisDefault = (!s || s === \"none\" || s === \"matrix(1, 0, 0, 1, 0, 0)\");\n\t\t\t\t\t\tif (n) {\n\t\t\t\t\t\t\tstyle.display = n;\n\t\t\t\t\t\t} else if (none) {\n\t\t\t\t\t\t\t_removeProp(style, \"display\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (dec) {\n\t\t\t\t\t\t\t_docElement.removeChild(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (tm.svg || (e.getBBox && _isSVG(e))) {\n\t\t\t\t\t\tif (isDefault && (style[_transformProp] + \"\").indexOf(\"matrix\") !== -1) { //some browsers (like Chrome 40) don't correctly report transforms that are applied inline on an SVG element (they don't get included in the computed style), so we double-check here and accept matrix values\n\t\t\t\t\t\t\ts = style[_transformProp];\n\t\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tm = e.getAttribute(\"transform\");\n\t\t\t\t\t\tif (isDefault && m) {\n\t\t\t\t\t\t\tif (m.indexOf(\"matrix\") !== -1) { //just in case there's a \"transform\" value specified as an attribute instead of CSS style. Accept either a matrix() or simple translate() value though.\n\t\t\t\t\t\t\t\ts = m;\n\t\t\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t\t\t} else if (m.indexOf(\"translate\") !== -1) {\n\t\t\t\t\t\t\t\ts = \"matrix(1,0,0,1,\" + m.match(/(?:\\-|\\b)[\\d\\-\\.e]+\\b/gi).join(\",\") + \")\";\n\t\t\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (isDefault) {\n\t\t\t\t\t\treturn _identity2DMatrix;\n\t\t\t\t\t}\n\t\t\t\t\t//split the matrix values out into an array (m for matrix)\n\t\t\t\t\tm = (s || \"\").match(_numExp) || [];\n\t\t\t\t\ti = m.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tn = Number(m[i]);\n\t\t\t\t\t\tm[i] = (dec = n - (n |= 0)) ? ((dec * rnd + (dec < 0 ? -0.5 : 0.5)) | 0) / rnd + n : n; //convert strings to Numbers and round to 5 decimal places to avoid issues with tiny numbers. Roughly 20x faster than Number.toFixed(). We also must make sure to round before dividing so that values like 0.9999999999 become 1 to avoid glitches in browser rendering and interpretation of flipped/rotated 3D matrices. And don't just multiply the number by rnd, floor it, and then divide by rnd because the bitwise operations max out at a 32-bit signed integer, thus it could get clipped at a relatively low value (like 22,000.00000 for example).\n\t\t\t\t\t}\n\t\t\t\t\treturn (force2D && m.length > 6) ? [m[0], m[1], m[4], m[5], m[12], m[13]] : m;\n\t\t\t\t},\n\t\n\t\t\t\t/**\n\t\t\t\t * Parses the transform values for an element, returning an object with x, y, z, scaleX, scaleY, scaleZ, rotation, rotationX, rotationY, skewX, and skewY properties. Note: by default (for performance reasons), all skewing is combined into skewX and rotation but skewY still has a place in the transform object so that we can record how much of the skew is attributed to skewX vs skewY. Remember, a skewY of 10 looks the same as a rotation of 10 and skewX of -10.\n\t\t\t\t * @param {!Object} t target element\n\t\t\t\t * @param {Object=} cs computed style object (optional)\n\t\t\t\t * @param {boolean=} rec if true, the transform values will be recorded to the target element's _gsTransform object, like target._gsTransform = {x:0, y:0, z:0, scaleX:1...}\n\t\t\t\t * @param {boolean=} parse if true, we'll ignore any _gsTransform values that already exist on the element, and force a reparsing of the css (calculated style)\n\t\t\t\t * @return {object} object containing all of the transform properties/values like {x:0, y:0, z:0, scaleX:1...}\n\t\t\t\t */\n\t\t\t\t_getTransform = _internals.getTransform = function(t, cs, rec, parse) {\n\t\t\t\t\tif (t._gsTransform && rec && !parse) {\n\t\t\t\t\t\treturn t._gsTransform; //if the element already has a _gsTransform, use that. Note: some browsers don't accurately return the calculated style for the transform (particularly for SVG), so it's almost always safest to just use the values we've already applied rather than re-parsing things.\n\t\t\t\t\t}\n\t\t\t\t\tvar tm = rec ? t._gsTransform || new Transform() : new Transform(),\n\t\t\t\t\t\tinvX = (tm.scaleX < 0), //in order to interpret things properly, we need to know if the user applied a negative scaleX previously so that we can adjust the rotation and skewX accordingly. Otherwise, if we always interpret a flipped matrix as affecting scaleY and the user only wants to tween the scaleX on multiple sequential tweens, it would keep the negative scaleY without that being the user's intent.\n\t\t\t\t\t\tmin = 0.00002,\n\t\t\t\t\t\trnd = 100000,\n\t\t\t\t\t\tzOrigin = _supports3D ? parseFloat(_getStyle(t, _transformOriginProp, cs, false, \"0 0 0\").split(\" \")[2]) || tm.zOrigin  || 0 : 0,\n\t\t\t\t\t\tdefaultTransformPerspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0,\n\t\t\t\t\t\tm, i, scaleX, scaleY, rotation, skewX;\n\t\n\t\t\t\t\ttm.svg = !!(t.getBBox && _isSVG(t));\n\t\t\t\t\tif (tm.svg) {\n\t\t\t\t\t\t_parseSVGOrigin(t, _getStyle(t, _transformOriginProp, cs, false, \"50% 50%\") + \"\", tm, t.getAttribute(\"data-svg-origin\"));\n\t\t\t\t\t\t_useSVGTransformAttr = CSSPlugin.useSVGTransformAttr || _forceSVGTransformAttr;\n\t\t\t\t\t}\n\t\t\t\t\tm = _getMatrix(t);\n\t\t\t\t\tif (m !== _identity2DMatrix) {\n\t\n\t\t\t\t\t\tif (m.length === 16) {\n\t\t\t\t\t\t\t//we'll only look at these position-related 6 variables first because if x/y/z all match, it's relatively safe to assume we don't need to re-parse everything which risks losing important rotational information (like rotationX:180 plus rotationY:180 would look the same as rotation:180 - there's no way to know for sure which direction was taken based solely on the matrix3d() values)\n\t\t\t\t\t\t\tvar a11 = m[0], a21 = m[1], a31 = m[2], a41 = m[3],\n\t\t\t\t\t\t\t\ta12 = m[4], a22 = m[5], a32 = m[6], a42 = m[7],\n\t\t\t\t\t\t\t\ta13 = m[8], a23 = m[9], a33 = m[10],\n\t\t\t\t\t\t\t\ta14 = m[12], a24 = m[13], a34 = m[14],\n\t\t\t\t\t\t\t\ta43 = m[11],\n\t\t\t\t\t\t\t\tangle = Math.atan2(a32, a33),\n\t\t\t\t\t\t\t\tt1, t2, t3, t4, cos, sin;\n\t\n\t\t\t\t\t\t\t//we manually compensate for non-zero z component of transformOrigin to work around bugs in Safari\n\t\t\t\t\t\t\tif (tm.zOrigin) {\n\t\t\t\t\t\t\t\ta34 = -tm.zOrigin;\n\t\t\t\t\t\t\t\ta14 = a13*a34-m[12];\n\t\t\t\t\t\t\t\ta24 = a23*a34-m[13];\n\t\t\t\t\t\t\t\ta34 = a33*a34+tm.zOrigin-m[14];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttm.rotationX = angle * _RAD2DEG;\n\t\t\t\t\t\t\t//rotationX\n\t\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\t\tt1 = a12*cos+a13*sin;\n\t\t\t\t\t\t\t\tt2 = a22*cos+a23*sin;\n\t\t\t\t\t\t\t\tt3 = a32*cos+a33*sin;\n\t\t\t\t\t\t\t\ta13 = a12*-sin+a13*cos;\n\t\t\t\t\t\t\t\ta23 = a22*-sin+a23*cos;\n\t\t\t\t\t\t\t\ta33 = a32*-sin+a33*cos;\n\t\t\t\t\t\t\t\ta43 = a42*-sin+a43*cos;\n\t\t\t\t\t\t\t\ta12 = t1;\n\t\t\t\t\t\t\t\ta22 = t2;\n\t\t\t\t\t\t\t\ta32 = t3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//rotationY\n\t\t\t\t\t\t\tangle = Math.atan2(-a31, a33);\n\t\t\t\t\t\t\ttm.rotationY = angle * _RAD2DEG;\n\t\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\t\tt1 = a11*cos-a13*sin;\n\t\t\t\t\t\t\t\tt2 = a21*cos-a23*sin;\n\t\t\t\t\t\t\t\tt3 = a31*cos-a33*sin;\n\t\t\t\t\t\t\t\ta23 = a21*sin+a23*cos;\n\t\t\t\t\t\t\t\ta33 = a31*sin+a33*cos;\n\t\t\t\t\t\t\t\ta43 = a41*sin+a43*cos;\n\t\t\t\t\t\t\t\ta11 = t1;\n\t\t\t\t\t\t\t\ta21 = t2;\n\t\t\t\t\t\t\t\ta31 = t3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//rotationZ\n\t\t\t\t\t\t\tangle = Math.atan2(a21, a11);\n\t\t\t\t\t\t\ttm.rotation = angle * _RAD2DEG;\n\t\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\t\ta11 = a11*cos+a12*sin;\n\t\t\t\t\t\t\t\tt2 = a21*cos+a22*sin;\n\t\t\t\t\t\t\t\ta22 = a21*-sin+a22*cos;\n\t\t\t\t\t\t\t\ta32 = a31*-sin+a32*cos;\n\t\t\t\t\t\t\t\ta21 = t2;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif (tm.rotationX && Math.abs(tm.rotationX) + Math.abs(tm.rotation) > 359.9) { //when rotationY is set, it will often be parsed as 180 degrees different than it should be, and rotationX and rotation both being 180 (it looks the same), so we adjust for that here.\n\t\t\t\t\t\t\t\ttm.rotationX = tm.rotation = 0;\n\t\t\t\t\t\t\t\ttm.rotationY = 180 - tm.rotationY;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\ttm.scaleX = ((Math.sqrt(a11 * a11 + a21 * a21) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\t\ttm.scaleY = ((Math.sqrt(a22 * a22 + a23 * a23) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\t\ttm.scaleZ = ((Math.sqrt(a32 * a32 + a33 * a33) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\t\tif (tm.rotationX || tm.rotationY) {\n\t\t\t\t\t\t\t\ttm.skewX = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttm.skewX = (a12 || a22) ? Math.atan2(a12, a22) * _RAD2DEG + tm.rotation : tm.skewX || 0;\n\t\t\t\t\t\t\t\tif (Math.abs(tm.skewX) > 90 && Math.abs(tm.skewX) < 270) {\n\t\t\t\t\t\t\t\t\tif (invX) {\n\t\t\t\t\t\t\t\t\t\ttm.scaleX *= -1;\n\t\t\t\t\t\t\t\t\t\ttm.skewX += (tm.rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t\t\ttm.rotation += (tm.rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ttm.scaleY *= -1;\n\t\t\t\t\t\t\t\t\t\ttm.skewX += (tm.skewX <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttm.perspective = a43 ? 1 / ((a43 < 0) ? -a43 : a43) : 0;\n\t\t\t\t\t\t\ttm.x = a14;\n\t\t\t\t\t\t\ttm.y = a24;\n\t\t\t\t\t\t\ttm.z = a34;\n\t\t\t\t\t\t\tif (tm.svg) {\n\t\t\t\t\t\t\t\ttm.x -= tm.xOrigin - (tm.xOrigin * a11 - tm.yOrigin * a12);\n\t\t\t\t\t\t\t\ttm.y -= tm.yOrigin - (tm.yOrigin * a21 - tm.xOrigin * a22);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t} else if ((!_supports3D || parse || !m.length || tm.x !== m[4] || tm.y !== m[5] || (!tm.rotationX && !tm.rotationY))) { //sometimes a 6-element matrix is returned even when we performed 3D transforms, like if rotationX and rotationY are 180. In cases like this, we still need to honor the 3D transforms. If we just rely on the 2D info, it could affect how the data is interpreted, like scaleY might get set to -1 or rotation could get offset by 180 degrees. For example, do a TweenLite.to(element, 1, {css:{rotationX:180, rotationY:180}}) and then later, TweenLite.to(element, 1, {css:{rotationX:0}}) and without this conditional logic in place, it'd jump to a state of being unrotated when the 2nd tween starts. Then again, we need to honor the fact that the user COULD alter the transforms outside of CSSPlugin, like by manually applying new css, so we try to sense that by looking at x and y because if those changed, we know the changes were made outside CSSPlugin and we force a reinterpretation of the matrix values. Also, in Webkit browsers, if the element's \"display\" is \"none\", its calculated style value will always return empty, so if we've already recorded the values in the _gsTransform object, we'll just rely on those.\n\t\t\t\t\t\t\tvar k = (m.length >= 6),\n\t\t\t\t\t\t\t\ta = k ? m[0] : 1,\n\t\t\t\t\t\t\t\tb = m[1] || 0,\n\t\t\t\t\t\t\t\tc = m[2] || 0,\n\t\t\t\t\t\t\t\td = k ? m[3] : 1;\n\t\t\t\t\t\t\ttm.x = m[4] || 0;\n\t\t\t\t\t\t\ttm.y = m[5] || 0;\n\t\t\t\t\t\t\tscaleX = Math.sqrt(a * a + b * b);\n\t\t\t\t\t\t\tscaleY = Math.sqrt(d * d + c * c);\n\t\t\t\t\t\t\trotation = (a || b) ? Math.atan2(b, a) * _RAD2DEG : tm.rotation || 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).\n\t\t\t\t\t\t\tskewX = (c || d) ? Math.atan2(c, d) * _RAD2DEG + rotation : tm.skewX || 0;\n\t\t\t\t\t\t\tif (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {\n\t\t\t\t\t\t\t\tif (invX) {\n\t\t\t\t\t\t\t\t\tscaleX *= -1;\n\t\t\t\t\t\t\t\t\tskewX += (rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t\trotation += (rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tscaleY *= -1;\n\t\t\t\t\t\t\t\t\tskewX += (skewX <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttm.scaleX = scaleX;\n\t\t\t\t\t\t\ttm.scaleY = scaleY;\n\t\t\t\t\t\t\ttm.rotation = rotation;\n\t\t\t\t\t\t\ttm.skewX = skewX;\n\t\t\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\t\t\ttm.rotationX = tm.rotationY = tm.z = 0;\n\t\t\t\t\t\t\t\ttm.perspective = defaultTransformPerspective;\n\t\t\t\t\t\t\t\ttm.scaleZ = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (tm.svg) {\n\t\t\t\t\t\t\t\ttm.x -= tm.xOrigin - (tm.xOrigin * a + tm.yOrigin * c);\n\t\t\t\t\t\t\t\ttm.y -= tm.yOrigin - (tm.xOrigin * b + tm.yOrigin * d);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttm.zOrigin = zOrigin;\n\t\t\t\t\t\t//some browsers have a hard time with very small values like 2.4492935982947064e-16 (notice the \"e-\" towards the end) and would render the object slightly off. So we round to 0 in these cases. The conditional logic here is faster than calling Math.abs(). Also, browsers tend to render a SLIGHTLY rotated object in a fuzzy way, so we need to snap to exactly 0 when appropriate.\n\t\t\t\t\t\tfor (i in tm) {\n\t\t\t\t\t\t\tif (tm[i] < min) if (tm[i] > -min) {\n\t\t\t\t\t\t\t\ttm[i] = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//DEBUG: _log(\"parsed rotation of \" + t.getAttribute(\"id\")+\": \"+(tm.rotationX)+\", \"+(tm.rotationY)+\", \"+(tm.rotation)+\", scale: \"+tm.scaleX+\", \"+tm.scaleY+\", \"+tm.scaleZ+\", position: \"+tm.x+\", \"+tm.y+\", \"+tm.z+\", perspective: \"+tm.perspective+ \", origin: \"+ tm.xOrigin+ \",\"+ tm.yOrigin);\n\t\t\t\t\tif (rec) {\n\t\t\t\t\t\tt._gsTransform = tm; //record to the object's _gsTransform which we use so that tweens can control individual properties independently (we need all the properties to accurately recompose the matrix in the setRatio() method)\n\t\t\t\t\t\tif (tm.svg) { //if we're supposed to apply transforms to the SVG element's \"transform\" attribute, make sure there aren't any CSS transforms applied or they'll override the attribute ones. Also clear the transform attribute if we're using CSS, just to be clean.\n\t\t\t\t\t\t\tif (_useSVGTransformAttr && t.style[_transformProp]) {\n\t\t\t\t\t\t\t\tTweenLite.delayedCall(0.001, function(){ //if we apply this right away (before anything has rendered), we risk there being no transforms for a brief moment and it also interferes with adjusting the transformOrigin in a tween with immediateRender:true (it'd try reading the matrix and it wouldn't have the appropriate data in place because we just removed it).\n\t\t\t\t\t\t\t\t\t_removeProp(t.style, _transformProp);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else if (!_useSVGTransformAttr && t.getAttribute(\"transform\")) {\n\t\t\t\t\t\t\t\tTweenLite.delayedCall(0.001, function(){\n\t\t\t\t\t\t\t\t\tt.removeAttribute(\"transform\");\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn tm;\n\t\t\t\t},\n\t\n\t\t\t\t//for setting 2D transforms in IE6, IE7, and IE8 (must use a \"filter\" to emulate the behavior of modern day browser transforms)\n\t\t\t\t_setIETransformRatio = function(v) {\n\t\t\t\t\tvar t = this.data, //refers to the element's _gsTransform object\n\t\t\t\t\t\tang = -t.rotation * _DEG2RAD,\n\t\t\t\t\t\tskew = ang + t.skewX * _DEG2RAD,\n\t\t\t\t\t\trnd = 100000,\n\t\t\t\t\t\ta = ((Math.cos(ang) * t.scaleX * rnd) | 0) / rnd,\n\t\t\t\t\t\tb = ((Math.sin(ang) * t.scaleX * rnd) | 0) / rnd,\n\t\t\t\t\t\tc = ((Math.sin(skew) * -t.scaleY * rnd) | 0) / rnd,\n\t\t\t\t\t\td = ((Math.cos(skew) * t.scaleY * rnd) | 0) / rnd,\n\t\t\t\t\t\tstyle = this.t.style,\n\t\t\t\t\t\tcs = this.t.currentStyle,\n\t\t\t\t\t\tfilters, val;\n\t\t\t\t\tif (!cs) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tval = b; //just for swapping the variables an inverting them (reused \"val\" to avoid creating another variable in memory). IE's filter matrix uses a non-standard matrix configuration (angle goes the opposite way, and b and c are reversed and inverted)\n\t\t\t\t\tb = -c;\n\t\t\t\t\tc = -val;\n\t\t\t\t\tfilters = cs.filter;\n\t\t\t\t\tstyle.filter = \"\"; //remove filters so that we can accurately measure offsetWidth/offsetHeight\n\t\t\t\t\tvar w = this.t.offsetWidth,\n\t\t\t\t\t\th = this.t.offsetHeight,\n\t\t\t\t\t\tclip = (cs.position !== \"absolute\"),\n\t\t\t\t\t\tm = \"progid:DXImageTransform.Microsoft.Matrix(M11=\" + a + \", M12=\" + b + \", M21=\" + c + \", M22=\" + d,\n\t\t\t\t\t\tox = t.x + (w * t.xPercent / 100),\n\t\t\t\t\t\toy = t.y + (h * t.yPercent / 100),\n\t\t\t\t\t\tdx, dy;\n\t\n\t\t\t\t\t//if transformOrigin is being used, adjust the offset x and y\n\t\t\t\t\tif (t.ox != null) {\n\t\t\t\t\t\tdx = ((t.oxp) ? w * t.ox * 0.01 : t.ox) - w / 2;\n\t\t\t\t\t\tdy = ((t.oyp) ? h * t.oy * 0.01 : t.oy) - h / 2;\n\t\t\t\t\t\tox += dx - (dx * a + dy * b);\n\t\t\t\t\t\toy += dy - (dx * c + dy * d);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (!clip) {\n\t\t\t\t\t\tm += \", sizingMethod='auto expand')\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdx = (w / 2);\n\t\t\t\t\t\tdy = (h / 2);\n\t\t\t\t\t\t//translate to ensure that transformations occur around the correct origin (default is center).\n\t\t\t\t\t\tm += \", Dx=\" + (dx - (dx * a + dy * b) + ox) + \", Dy=\" + (dy - (dx * c + dy * d) + oy) + \")\";\n\t\t\t\t\t}\n\t\t\t\t\tif (filters.indexOf(\"DXImageTransform.Microsoft.Matrix(\") !== -1) {\n\t\t\t\t\t\tstyle.filter = filters.replace(_ieSetMatrixExp, m);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle.filter = m + \" \" + filters; //we must always put the transform/matrix FIRST (before alpha(opacity=xx)) to avoid an IE bug that slices part of the object when rotation is applied with alpha.\n\t\t\t\t\t}\n\t\n\t\t\t\t\t//at the end or beginning of the tween, if the matrix is normal (1, 0, 0, 1) and opacity is 100 (or doesn't exist), remove the filter to improve browser performance.\n\t\t\t\t\tif (v === 0 || v === 1) if (a === 1) if (b === 0) if (c === 0) if (d === 1) if (!clip || m.indexOf(\"Dx=0, Dy=0\") !== -1) if (!_opacityExp.test(filters) || parseFloat(RegExp.$1) === 100) if (filters.indexOf(\"gradient(\" && filters.indexOf(\"Alpha\")) === -1) {\n\t\t\t\t\t\tstyle.removeAttribute(\"filter\");\n\t\t\t\t\t}\n\t\n\t\t\t\t\t//we must set the margins AFTER applying the filter in order to avoid some bugs in IE8 that could (in rare scenarios) cause them to be ignored intermittently (vibration).\n\t\t\t\t\tif (!clip) {\n\t\t\t\t\t\tvar mult = (_ieVers < 8) ? 1 : -1, //in Internet Explorer 7 and before, the box model is broken, causing the browser to treat the width/height of the actual rotated filtered image as the width/height of the box itself, but Microsoft corrected that in IE8. We must use a negative offset in IE8 on the right/bottom\n\t\t\t\t\t\t\tmarg, prop, dif;\n\t\t\t\t\t\tdx = t.ieOffsetX || 0;\n\t\t\t\t\t\tdy = t.ieOffsetY || 0;\n\t\t\t\t\t\tt.ieOffsetX = Math.round((w - ((a < 0 ? -a : a) * w + (b < 0 ? -b : b) * h)) / 2 + ox);\n\t\t\t\t\t\tt.ieOffsetY = Math.round((h - ((d < 0 ? -d : d) * h + (c < 0 ? -c : c) * w)) / 2 + oy);\n\t\t\t\t\t\tfor (i = 0; i < 4; i++) {\n\t\t\t\t\t\t\tprop = _margins[i];\n\t\t\t\t\t\t\tmarg = cs[prop];\n\t\t\t\t\t\t\t//we need to get the current margin in case it is being tweened separately (we want to respect that tween's changes)\n\t\t\t\t\t\t\tval = (marg.indexOf(\"px\") !== -1) ? parseFloat(marg) : _convertToPixels(this.t, prop, parseFloat(marg), marg.replace(_suffixExp, \"\")) || 0;\n\t\t\t\t\t\t\tif (val !== t[prop]) {\n\t\t\t\t\t\t\t\tdif = (i < 2) ? -t.ieOffsetX : -t.ieOffsetY; //if another tween is controlling a margin, we cannot only apply the difference in the ieOffsets, so we essentially zero-out the dx and dy here in that case. We record the margin(s) later so that we can keep comparing them, making this code very flexible.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdif = (i < 2) ? dx - t.ieOffsetX : dy - t.ieOffsetY;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyle[prop] = (t[prop] = Math.round( val - dif * ((i === 0 || i === 2) ? 1 : mult) )) + \"px\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\n\t\t\t\t/* translates a super small decimal to a string WITHOUT scientific notation\n\t\t\t\t_safeDecimal = function(n) {\n\t\t\t\t\tvar s = (n < 0 ? -n : n) + \"\",\n\t\t\t\t\t\ta = s.split(\"e-\");\n\t\t\t\t\treturn (n < 0 ? \"-0.\" : \"0.\") + new Array(parseInt(a[1], 10) || 0).join(\"0\") + a[0].split(\".\").join(\"\");\n\t\t\t\t},\n\t\t\t\t*/\n\t\n\t\t\t\t_setTransformRatio = _internals.set3DTransformRatio = _internals.setTransformRatio = function(v) {\n\t\t\t\t\tvar t = this.data, //refers to the element's _gsTransform object\n\t\t\t\t\t\tstyle = this.t.style,\n\t\t\t\t\t\tangle = t.rotation,\n\t\t\t\t\t\trotationX = t.rotationX,\n\t\t\t\t\t\trotationY = t.rotationY,\n\t\t\t\t\t\tsx = t.scaleX,\n\t\t\t\t\t\tsy = t.scaleY,\n\t\t\t\t\t\tsz = t.scaleZ,\n\t\t\t\t\t\tx = t.x,\n\t\t\t\t\t\ty = t.y,\n\t\t\t\t\t\tz = t.z,\n\t\t\t\t\t\tisSVG = t.svg,\n\t\t\t\t\t\tperspective = t.perspective,\n\t\t\t\t\t\tforce3D = t.force3D,\n\t\t\t\t\t\ta11, a12, a13, a21, a22, a23, a31, a32, a33, a41, a42, a43,\n\t\t\t\t\t\tzOrigin, min, cos, sin, t1, t2, transform, comma, zero, skew, rnd;\n\t\t\t\t\t//check to see if we should render as 2D (and SVGs must use 2D when _useSVGTransformAttr is true)\n\t\t\t\t\tif (((((v === 1 || v === 0) && force3D === \"auto\" && (this.tween._totalTime === this.tween._totalDuration || !this.tween._totalTime)) || !force3D) && !z && !perspective && !rotationY && !rotationX && sz === 1) || (_useSVGTransformAttr && isSVG) || !_supports3D) { //on the final render (which could be 0 for a from tween), if there are no 3D aspects, render in 2D to free up memory and improve performance especially on mobile devices. Check the tween's totalTime/totalDuration too in order to make sure it doesn't happen between repeats if it's a repeating tween.\n\t\n\t\t\t\t\t\t//2D\n\t\t\t\t\t\tif (angle || t.skewX || isSVG) {\n\t\t\t\t\t\t\tangle *= _DEG2RAD;\n\t\t\t\t\t\t\tskew = t.skewX * _DEG2RAD;\n\t\t\t\t\t\t\trnd = 100000;\n\t\t\t\t\t\t\ta11 = Math.cos(angle) * sx;\n\t\t\t\t\t\t\ta21 = Math.sin(angle) * sx;\n\t\t\t\t\t\t\ta12 = Math.sin(angle - skew) * -sy;\n\t\t\t\t\t\t\ta22 = Math.cos(angle - skew) * sy;\n\t\t\t\t\t\t\tif (skew && t.skewType === \"simple\") { //by default, we compensate skewing on the other axis to make it look more natural, but you can set the skewType to \"simple\" to use the uncompensated skewing that CSS does\n\t\t\t\t\t\t\t\tt1 = Math.tan(skew - t.skewY * _DEG2RAD);\n\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\ta12 *= t1;\n\t\t\t\t\t\t\t\ta22 *= t1;\n\t\t\t\t\t\t\t\tif (t.skewY) {\n\t\t\t\t\t\t\t\t\tt1 = Math.tan(t.skewY * _DEG2RAD);\n\t\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\t\ta11 *= t1;\n\t\t\t\t\t\t\t\t\ta21 *= t1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isSVG) {\n\t\t\t\t\t\t\t\tx += t.xOrigin - (t.xOrigin * a11 + t.yOrigin * a12) + t.xOffset;\n\t\t\t\t\t\t\t\ty += t.yOrigin - (t.xOrigin * a21 + t.yOrigin * a22) + t.yOffset;\n\t\t\t\t\t\t\t\tif (_useSVGTransformAttr && (t.xPercent || t.yPercent)) { //The SVG spec doesn't support percentage-based translation in the \"transform\" attribute, so we merge it into the matrix to simulate it.\n\t\t\t\t\t\t\t\t\tmin = this.t.getBBox();\n\t\t\t\t\t\t\t\t\tx += t.xPercent * 0.01 * min.width;\n\t\t\t\t\t\t\t\t\ty += t.yPercent * 0.01 * min.height;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tmin = 0.000001;\n\t\t\t\t\t\t\t\tif (x < min) if (x > -min) {\n\t\t\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (y < min) if (y > -min) {\n\t\t\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttransform = (((a11 * rnd) | 0) / rnd) + \",\" + (((a21 * rnd) | 0) / rnd) + \",\" + (((a12 * rnd) | 0) / rnd) + \",\" + (((a22 * rnd) | 0) / rnd) + \",\" + x + \",\" + y + \")\";\n\t\t\t\t\t\t\tif (isSVG && _useSVGTransformAttr) {\n\t\t\t\t\t\t\t\tthis.t.setAttribute(\"transform\", \"matrix(\" + transform);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t//some browsers have a hard time with very small values like 2.4492935982947064e-16 (notice the \"e-\" towards the end) and would render the object slightly off. So we round to 5 decimal places.\n\t\t\t\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix(\" : \"matrix(\") + transform;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix(\" : \"matrix(\") + sx + \",0,0,\" + sy + \",\" + x + \",\" + y + \")\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\n\t\t\t\t\t}\n\t\t\t\t\tif (_isFirefox) { //Firefox has a bug (at least in v25) that causes it to render the transparent part of 32-bit PNG images as black when displayed inside an iframe and the 3D scale is very small and doesn't change sufficiently enough between renders (like if you use a Power4.easeInOut to scale from 0 to 1 where the beginning values only change a tiny amount to begin the tween before accelerating). In this case, we force the scale to be 0.00002 instead which is visually the same but works around the Firefox issue.\n\t\t\t\t\t\tmin = 0.0001;\n\t\t\t\t\t\tif (sx < min && sx > -min) {\n\t\t\t\t\t\t\tsx = sz = 0.00002;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (sy < min && sy > -min) {\n\t\t\t\t\t\t\tsy = sz = 0.00002;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (perspective && !t.z && !t.rotationX && !t.rotationY) { //Firefox has a bug that causes elements to have an odd super-thin, broken/dotted black border on elements that have a perspective set but aren't utilizing 3D space (no rotationX, rotationY, or z).\n\t\t\t\t\t\t\tperspective = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (angle || t.skewX) {\n\t\t\t\t\t\tangle *= _DEG2RAD;\n\t\t\t\t\t\tcos = a11 = Math.cos(angle);\n\t\t\t\t\t\tsin = a21 = Math.sin(angle);\n\t\t\t\t\t\tif (t.skewX) {\n\t\t\t\t\t\t\tangle -= t.skewX * _DEG2RAD;\n\t\t\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\t\t\tif (t.skewType === \"simple\") { //by default, we compensate skewing on the other axis to make it look more natural, but you can set the skewType to \"simple\" to use the uncompensated skewing that CSS does\n\t\t\t\t\t\t\t\tt1 = Math.tan((t.skewX - t.skewY) * _DEG2RAD);\n\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\tcos *= t1;\n\t\t\t\t\t\t\t\tsin *= t1;\n\t\t\t\t\t\t\t\tif (t.skewY) {\n\t\t\t\t\t\t\t\t\tt1 = Math.tan(t.skewY * _DEG2RAD);\n\t\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\t\ta11 *= t1;\n\t\t\t\t\t\t\t\t\ta21 *= t1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ta12 = -sin;\n\t\t\t\t\t\ta22 = cos;\n\t\n\t\t\t\t\t} else if (!rotationY && !rotationX && sz === 1 && !perspective && !isSVG) { //if we're only translating and/or 2D scaling, this is faster...\n\t\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) translate3d(\" : \"translate3d(\") + x + \"px,\" + y + \"px,\" + z +\"px)\" + ((sx !== 1 || sy !== 1) ? \" scale(\" + sx + \",\" + sy + \")\" : \"\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta11 = a22 = 1;\n\t\t\t\t\t\ta12 = a21 = 0;\n\t\t\t\t\t}\n\t\t\t\t\t// KEY  INDEX   AFFECTS\n\t\t\t\t\t// a11  0       rotation, rotationY, scaleX\n\t\t\t\t\t// a21  1       rotation, rotationY, scaleX\n\t\t\t\t\t// a31  2       rotationY, scaleX\n\t\t\t\t\t// a41  3       rotationY, scaleX\n\t\t\t\t\t// a12  4       rotation, skewX, rotationX, scaleY\n\t\t\t\t\t// a22  5       rotation, skewX, rotationX, scaleY\n\t\t\t\t\t// a32  6       rotationX, scaleY\n\t\t\t\t\t// a42  7       rotationX, scaleY\n\t\t\t\t\t// a13  8       rotationY, rotationX, scaleZ\n\t\t\t\t\t// a23  9       rotationY, rotationX, scaleZ\n\t\t\t\t\t// a33  10      rotationY, rotationX, scaleZ\n\t\t\t\t\t// a43  11      rotationY, rotationX, perspective, scaleZ\n\t\t\t\t\t// a14  12      x, zOrigin, svgOrigin\n\t\t\t\t\t// a24  13      y, zOrigin, svgOrigin\n\t\t\t\t\t// a34  14      z, zOrigin\n\t\t\t\t\t// a44  15\n\t\t\t\t\t// rotation: Math.atan2(a21, a11)\n\t\t\t\t\t// rotationY: Math.atan2(a13, a33) (or Math.atan2(a13, a11))\n\t\t\t\t\t// rotationX: Math.atan2(a32, a33)\n\t\t\t\t\ta33 = 1;\n\t\t\t\t\ta13 = a23 = a31 = a32 = a41 = a42 = 0;\n\t\t\t\t\ta43 = (perspective) ? -1 / perspective : 0;\n\t\t\t\t\tzOrigin = t.zOrigin;\n\t\t\t\t\tmin = 0.000001; //threshold below which browsers use scientific notation which won't work.\n\t\t\t\t\tcomma = \",\";\n\t\t\t\t\tzero = \"0\";\n\t\t\t\t\tangle = rotationY * _DEG2RAD;\n\t\t\t\t\tif (angle) {\n\t\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\t\ta31 = -sin;\n\t\t\t\t\t\ta41 = a43*-sin;\n\t\t\t\t\t\ta13 = a11*sin;\n\t\t\t\t\t\ta23 = a21*sin;\n\t\t\t\t\t\ta33 = cos;\n\t\t\t\t\t\ta43 *= cos;\n\t\t\t\t\t\ta11 *= cos;\n\t\t\t\t\t\ta21 *= cos;\n\t\t\t\t\t}\n\t\t\t\t\tangle = rotationX * _DEG2RAD;\n\t\t\t\t\tif (angle) {\n\t\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\t\tt1 = a12*cos+a13*sin;\n\t\t\t\t\t\tt2 = a22*cos+a23*sin;\n\t\t\t\t\t\ta32 = a33*sin;\n\t\t\t\t\t\ta42 = a43*sin;\n\t\t\t\t\t\ta13 = a12*-sin+a13*cos;\n\t\t\t\t\t\ta23 = a22*-sin+a23*cos;\n\t\t\t\t\t\ta33 = a33*cos;\n\t\t\t\t\t\ta43 = a43*cos;\n\t\t\t\t\t\ta12 = t1;\n\t\t\t\t\t\ta22 = t2;\n\t\t\t\t\t}\n\t\t\t\t\tif (sz !== 1) {\n\t\t\t\t\t\ta13*=sz;\n\t\t\t\t\t\ta23*=sz;\n\t\t\t\t\t\ta33*=sz;\n\t\t\t\t\t\ta43*=sz;\n\t\t\t\t\t}\n\t\t\t\t\tif (sy !== 1) {\n\t\t\t\t\t\ta12*=sy;\n\t\t\t\t\t\ta22*=sy;\n\t\t\t\t\t\ta32*=sy;\n\t\t\t\t\t\ta42*=sy;\n\t\t\t\t\t}\n\t\t\t\t\tif (sx !== 1) {\n\t\t\t\t\t\ta11*=sx;\n\t\t\t\t\t\ta21*=sx;\n\t\t\t\t\t\ta31*=sx;\n\t\t\t\t\t\ta41*=sx;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (zOrigin || isSVG) {\n\t\t\t\t\t\tif (zOrigin) {\n\t\t\t\t\t\t\tx += a13*-zOrigin;\n\t\t\t\t\t\t\ty += a23*-zOrigin;\n\t\t\t\t\t\t\tz += a33*-zOrigin+zOrigin;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (isSVG) { //due to bugs in some browsers, we need to manage the transform-origin of SVG manually\n\t\t\t\t\t\t\tx += t.xOrigin - (t.xOrigin * a11 + t.yOrigin * a12) + t.xOffset;\n\t\t\t\t\t\t\ty += t.yOrigin - (t.xOrigin * a21 + t.yOrigin * a22) + t.yOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (x < min && x > -min) {\n\t\t\t\t\t\t\tx = zero;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (y < min && y > -min) {\n\t\t\t\t\t\t\ty = zero;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (z < min && z > -min) {\n\t\t\t\t\t\t\tz = 0; //don't use string because we calculate perspective later and need the number.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t//optimized way of concatenating all the values into a string. If we do it all in one shot, it's slower because of the way browsers have to create temp strings and the way it affects memory. If we do it piece-by-piece with +=, it's a bit slower too. We found that doing it in these sized chunks works best overall:\n\t\t\t\t\ttransform = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix3d(\" : \"matrix3d(\");\n\t\t\t\t\ttransform += ((a11 < min && a11 > -min) ? zero : a11) + comma + ((a21 < min && a21 > -min) ? zero : a21) + comma + ((a31 < min && a31 > -min) ? zero : a31);\n\t\t\t\t\ttransform += comma + ((a41 < min && a41 > -min) ? zero : a41) + comma + ((a12 < min && a12 > -min) ? zero : a12) + comma + ((a22 < min && a22 > -min) ? zero : a22);\n\t\t\t\t\tif (rotationX || rotationY || sz !== 1) { //performance optimization (often there's no rotationX or rotationY, so we can skip these calculations)\n\t\t\t\t\t\ttransform += comma + ((a32 < min && a32 > -min) ? zero : a32) + comma + ((a42 < min && a42 > -min) ? zero : a42) + comma + ((a13 < min && a13 > -min) ? zero : a13);\n\t\t\t\t\t\ttransform += comma + ((a23 < min && a23 > -min) ? zero : a23) + comma + ((a33 < min && a33 > -min) ? zero : a33) + comma + ((a43 < min && a43 > -min) ? zero : a43) + comma;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttransform += \",0,0,0,0,1,0,\";\n\t\t\t\t\t}\n\t\t\t\t\ttransform += x + comma + y + comma + z + comma + (perspective ? (1 + (-z / perspective)) : 1) + \")\";\n\t\n\t\t\t\t\tstyle[_transformProp] = transform;\n\t\t\t\t};\n\t\n\t\t\tp = Transform.prototype;\n\t\t\tp.x = p.y = p.z = p.skewX = p.skewY = p.rotation = p.rotationX = p.rotationY = p.zOrigin = p.xPercent = p.yPercent = p.xOffset = p.yOffset = 0;\n\t\t\tp.scaleX = p.scaleY = p.scaleZ = 1;\n\t\n\t\t\t_registerComplexSpecialProp(\"transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,svgOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType,xPercent,yPercent,smoothOrigin\", {parser:function(t, e, parsingProp, cssp, pt, plugin, vars) {\n\t\t\t\tif (cssp._lastParsedTransform === vars) { return pt; } //only need to parse the transform once, and only if the browser supports it.\n\t\t\t\tcssp._lastParsedTransform = vars;\n\t\t\t\tvar swapFunc;\n\t\t\t\tif (typeof(vars[parsingProp]) === \"function\") { //whatever property triggers the initial parsing might be a function-based value in which case it already got called in parse(), thus we don't want to call it again in here. The most efficient way to avoid this is to temporarily swap the value directly into the vars object, and then after we do all our parsing in this function, we'll swap it back again.\n\t\t\t\t\tswapFunc = vars[parsingProp];\n\t\t\t\t\tvars[parsingProp] = e;\n\t\t\t\t}\n\t\t\t\tvar originalGSTransform = t._gsTransform,\n\t\t\t\t\tstyle = t.style,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\ti = _transformProps.length,\n\t\t\t\t\tv = vars,\n\t\t\t\t\tendRotations = {},\n\t\t\t\t\ttransformOriginString = \"transformOrigin\",\n\t\t\t\t\tm1 = _getTransform(t, _cs, true, v.parseTransform),\n\t\t\t\t\torig = v.transform && ((typeof(v.transform) === \"function\") ? v.transform(_index, _target) : v.transform),\n\t\t\t\t\tm2, copy, has3D, hasChange, dr, x, y, matrix, p;\n\t\t\t\tcssp._transform = m1;\n\t\t\t\tif (orig && typeof(orig) === \"string\" && _transformProp) { //for values like transform:\"rotate(60deg) scale(0.5, 0.8)\"\n\t\t\t\t\tcopy = _tempDiv.style; //don't use the original target because it might be SVG in which case some browsers don't report computed style correctly.\n\t\t\t\t\tcopy[_transformProp] = orig;\n\t\t\t\t\tcopy.display = \"block\"; //if display is \"none\", the browser often refuses to report the transform properties correctly.\n\t\t\t\t\tcopy.position = \"absolute\";\n\t\t\t\t\t_doc.body.appendChild(_tempDiv);\n\t\t\t\t\tm2 = _getTransform(_tempDiv, null, false);\n\t\t\t\t\tif (m1.svg) { //if it's an SVG element, x/y part of the matrix will be affected by whatever we use as the origin and the offsets, so compensate here...\n\t\t\t\t\t\tx = m1.xOrigin;\n\t\t\t\t\t\ty = m1.yOrigin;\n\t\t\t\t\t\tm2.x -= m1.xOffset;\n\t\t\t\t\t\tm2.y -= m1.yOffset;\n\t\t\t\t\t\tif (v.transformOrigin || v.svgOrigin) { //if this tween is altering the origin, we must factor that in here. The actual work of recording the transformOrigin values and setting up the PropTween is done later (still inside this function) so we cannot leave the changes intact here - we only want to update the x/y accordingly.\n\t\t\t\t\t\t\torig = {};\n\t\t\t\t\t\t\t_parseSVGOrigin(t, _parsePosition(v.transformOrigin), orig, v.svgOrigin, v.smoothOrigin, true);\n\t\t\t\t\t\t\tx = orig.xOrigin;\n\t\t\t\t\t\t\ty = orig.yOrigin;\n\t\t\t\t\t\t\tm2.x -= orig.xOffset - m1.xOffset;\n\t\t\t\t\t\t\tm2.y -= orig.yOffset - m1.yOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (x || y) {\n\t\t\t\t\t\t\tmatrix = _getMatrix(_tempDiv, true);\n\t\t\t\t\t\t\tm2.x -= x - (x * matrix[0] + y * matrix[2]);\n\t\t\t\t\t\t\tm2.y -= y - (x * matrix[1] + y * matrix[3]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t_doc.body.removeChild(_tempDiv);\n\t\t\t\t\tif (!m2.perspective) {\n\t\t\t\t\t\tm2.perspective = m1.perspective; //tweening to no perspective gives very unintuitive results - just keep the same perspective in that case.\n\t\t\t\t\t}\n\t\t\t\t\tif (v.xPercent != null) {\n\t\t\t\t\t\tm2.xPercent = _parseVal(v.xPercent, m1.xPercent);\n\t\t\t\t\t}\n\t\t\t\t\tif (v.yPercent != null) {\n\t\t\t\t\t\tm2.yPercent = _parseVal(v.yPercent, m1.yPercent);\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof(v) === \"object\") { //for values like scaleX, scaleY, rotation, x, y, skewX, and skewY or transform:{...} (object)\n\t\t\t\t\tm2 = {scaleX:_parseVal((v.scaleX != null) ? v.scaleX : v.scale, m1.scaleX),\n\t\t\t\t\t\tscaleY:_parseVal((v.scaleY != null) ? v.scaleY : v.scale, m1.scaleY),\n\t\t\t\t\t\tscaleZ:_parseVal(v.scaleZ, m1.scaleZ),\n\t\t\t\t\t\tx:_parseVal(v.x, m1.x),\n\t\t\t\t\t\ty:_parseVal(v.y, m1.y),\n\t\t\t\t\t\tz:_parseVal(v.z, m1.z),\n\t\t\t\t\t\txPercent:_parseVal(v.xPercent, m1.xPercent),\n\t\t\t\t\t\tyPercent:_parseVal(v.yPercent, m1.yPercent),\n\t\t\t\t\t\tperspective:_parseVal(v.transformPerspective, m1.perspective)};\n\t\t\t\t\tdr = v.directionalRotation;\n\t\t\t\t\tif (dr != null) {\n\t\t\t\t\t\tif (typeof(dr) === \"object\") {\n\t\t\t\t\t\t\tfor (copy in dr) {\n\t\t\t\t\t\t\t\tv[copy] = dr[copy];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tv.rotation = dr;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof(v.x) === \"string\" && v.x.indexOf(\"%\") !== -1) {\n\t\t\t\t\t\tm2.x = 0;\n\t\t\t\t\t\tm2.xPercent = _parseVal(v.x, m1.xPercent);\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof(v.y) === \"string\" && v.y.indexOf(\"%\") !== -1) {\n\t\t\t\t\t\tm2.y = 0;\n\t\t\t\t\t\tm2.yPercent = _parseVal(v.y, m1.yPercent);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tm2.rotation = _parseAngle((\"rotation\" in v) ? v.rotation : (\"shortRotation\" in v) ? v.shortRotation + \"_short\" : (\"rotationZ\" in v) ? v.rotationZ : m1.rotation - m1.skewY, m1.rotation - m1.skewY, \"rotation\", endRotations); //see notes below about skewY for why we subtract it from rotation here\n\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\tm2.rotationX = _parseAngle((\"rotationX\" in v) ? v.rotationX : (\"shortRotationX\" in v) ? v.shortRotationX + \"_short\" : m1.rotationX || 0, m1.rotationX, \"rotationX\", endRotations);\n\t\t\t\t\t\tm2.rotationY = _parseAngle((\"rotationY\" in v) ? v.rotationY : (\"shortRotationY\" in v) ? v.shortRotationY + \"_short\" : m1.rotationY || 0, m1.rotationY, \"rotationY\", endRotations);\n\t\t\t\t\t}\n\t\t\t\t\tm2.skewX = _parseAngle(v.skewX, m1.skewX - m1.skewY); //see notes below about skewY and why we subtract it from skewX here\n\t\n\t\t\t\t\t//note: for performance reasons, we combine all skewing into the skewX and rotation values, ignoring skewY but we must still record it so that we can discern how much of the overall skew is attributed to skewX vs. skewY. Otherwise, if the skewY would always act relative (tween skewY to 10deg, for example, multiple times and if we always combine things into skewX, we can't remember that skewY was 10 from last time). Remember, a skewY of 10 degrees looks the same as a rotation of 10 degrees plus a skewX of -10 degrees.\n\t\t\t\t\tif ((m2.skewY = _parseAngle(v.skewY, m1.skewY))) {\n\t\t\t\t\t\tm2.skewX += m2.skewY;\n\t\t\t\t\t\tm2.rotation += m2.skewY;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (_supports3D && v.force3D != null) {\n\t\t\t\t\tm1.force3D = v.force3D;\n\t\t\t\t\thasChange = true;\n\t\t\t\t}\n\t\n\t\t\t\tm1.skewType = v.skewType || m1.skewType || CSSPlugin.defaultSkewType;\n\t\n\t\t\t\thas3D = (m1.force3D || m1.z || m1.rotationX || m1.rotationY || m2.z || m2.rotationX || m2.rotationY || m2.perspective);\n\t\t\t\tif (!has3D && v.scale != null) {\n\t\t\t\t\tm2.scaleZ = 1; //no need to tween scaleZ.\n\t\t\t\t}\n\t\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tp = _transformProps[i];\n\t\t\t\t\torig = m2[p] - m1[p];\n\t\t\t\t\tif (orig > min || orig < -min || v[p] != null || _forcePT[p] != null) {\n\t\t\t\t\t\thasChange = true;\n\t\t\t\t\t\tpt = new CSSPropTween(m1, p, m1[p], orig, pt);\n\t\t\t\t\t\tif (p in endRotations) {\n\t\t\t\t\t\t\tpt.e = endRotations[p]; //directional rotations typically have compensated values during the tween, but we need to make sure they end at exactly what the user requested\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt.xs0 = 0; //ensures the value stays numeric in setRatio()\n\t\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\t\tcssp._overwriteProps.push(pt.n);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\torig = v.transformOrigin;\n\t\t\t\tif (m1.svg && (orig || v.svgOrigin)) {\n\t\t\t\t\tx = m1.xOffset; //when we change the origin, in order to prevent things from jumping we adjust the x/y so we must record those here so that we can create PropTweens for them and flip them at the same time as the origin\n\t\t\t\t\ty = m1.yOffset;\n\t\t\t\t\t_parseSVGOrigin(t, _parsePosition(orig), m2, v.svgOrigin, v.smoothOrigin);\n\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"xOrigin\", (originalGSTransform ? m1 : m2).xOrigin, m2.xOrigin, pt, transformOriginString); //note: if there wasn't a transformOrigin defined yet, just start with the destination one; it's wasteful otherwise, and it causes problems with fromTo() tweens. For example, TweenLite.to(\"#wheel\", 3, {rotation:180, transformOrigin:\"50% 50%\", delay:1}); TweenLite.fromTo(\"#wheel\", 3, {scale:0.5, transformOrigin:\"50% 50%\"}, {scale:1, delay:2}); would cause a jump when the from values revert at the beginning of the 2nd tween.\n\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"yOrigin\", (originalGSTransform ? m1 : m2).yOrigin, m2.yOrigin, pt, transformOriginString);\n\t\t\t\t\tif (x !== m1.xOffset || y !== m1.yOffset) {\n\t\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"xOffset\", (originalGSTransform ? x : m1.xOffset), m1.xOffset, pt, transformOriginString);\n\t\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"yOffset\", (originalGSTransform ? y : m1.yOffset), m1.yOffset, pt, transformOriginString);\n\t\t\t\t\t}\n\t\t\t\t\torig = _useSVGTransformAttr ? null : \"0px 0px\"; //certain browsers (like firefox) completely botch transform-origin, so we must remove it to prevent it from contaminating transforms. We manage it ourselves with xOrigin and yOrigin\n\t\t\t\t}\n\t\t\t\tif (orig || (_supports3D && has3D && m1.zOrigin)) { //if anything 3D is happening and there's a transformOrigin with a z component that's non-zero, we must ensure that the transformOrigin's z-component is set to 0 so that we can manually do those calculations to get around Safari bugs. Even if the user didn't specifically define a \"transformOrigin\" in this particular tween (maybe they did it via css directly).\n\t\t\t\t\tif (_transformProp) {\n\t\t\t\t\t\thasChange = true;\n\t\t\t\t\t\tp = _transformOriginProp;\n\t\t\t\t\t\torig = (orig || _getStyle(t, p, _cs, false, \"50% 50%\")) + \"\"; //cast as string to avoid errors\n\t\t\t\t\t\tpt = new CSSPropTween(style, p, 0, 0, pt, -1, transformOriginString);\n\t\t\t\t\t\tpt.b = style[p];\n\t\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\t\tcopy = m1.zOrigin;\n\t\t\t\t\t\t\torig = orig.split(\" \");\n\t\t\t\t\t\t\tm1.zOrigin = ((orig.length > 2 && !(copy !== 0 && orig[2] === \"0px\")) ? parseFloat(orig[2]) : copy) || 0; //Safari doesn't handle the z part of transformOrigin correctly, so we'll manually handle it in the _set3DTransformRatio() method.\n\t\t\t\t\t\t\tpt.xs0 = pt.e = orig[0] + \" \" + (orig[1] || \"50%\") + \" 0px\"; //we must define a z value of 0px specifically otherwise iOS 5 Safari will stick with the old one (if one was defined)!\n\t\t\t\t\t\t\tpt = new CSSPropTween(m1, \"zOrigin\", 0, 0, pt, -1, pt.n); //we must create a CSSPropTween for the _gsTransform.zOrigin so that it gets reset properly at the beginning if the tween runs backward (as opposed to just setting m1.zOrigin here)\n\t\t\t\t\t\t\tpt.b = copy;\n\t\t\t\t\t\t\tpt.xs0 = pt.e = m1.zOrigin;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.xs0 = pt.e = orig;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t//for older versions of IE (6-8), we need to manually calculate things inside the setRatio() function. We record origin x and y (ox and oy) and whether or not the values are percentages (oxp and oyp).\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_parsePosition(orig + \"\", m1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (hasChange) {\n\t\t\t\t\tcssp._transformType = (!(m1.svg && _useSVGTransformAttr) && (has3D || this._transformType === 3)) ? 3 : 2; //quicker than calling cssp._enableTransforms();\n\t\t\t\t}\n\t\t\t\tif (swapFunc) {\n\t\t\t\t\tvars[parsingProp] = swapFunc;\n\t\t\t\t}\n\t\t\t\treturn pt;\n\t\t\t}, prefix:true});\n\t\n\t\t\t_registerComplexSpecialProp(\"boxShadow\", {defaultValue:\"0px 0px 0px 0px #999\", prefix:true, color:true, multi:true, keyword:\"inset\"});\n\t\n\t\t\t_registerComplexSpecialProp(\"borderRadius\", {defaultValue:\"0px\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\t\te = this.format(e);\n\t\t\t\tvar props = [\"borderTopLeftRadius\",\"borderTopRightRadius\",\"borderBottomRightRadius\",\"borderBottomLeftRadius\"],\n\t\t\t\t\tstyle = t.style,\n\t\t\t\t\tea1, i, es2, bs2, bs, es, bn, en, w, h, esfx, bsfx, rel, hn, vn, em;\n\t\t\t\tw = parseFloat(t.offsetWidth);\n\t\t\t\th = parseFloat(t.offsetHeight);\n\t\t\t\tea1 = e.split(\" \");\n\t\t\t\tfor (i = 0; i < props.length; i++) { //if we're dealing with percentages, we must convert things separately for the horizontal and vertical axis!\n\t\t\t\t\tif (this.p.indexOf(\"border\")) { //older browsers used a prefix\n\t\t\t\t\t\tprops[i] = _checkPropPrefix(props[i]);\n\t\t\t\t\t}\n\t\t\t\t\tbs = bs2 = _getStyle(t, props[i], _cs, false, \"0px\");\n\t\t\t\t\tif (bs.indexOf(\" \") !== -1) {\n\t\t\t\t\t\tbs2 = bs.split(\" \");\n\t\t\t\t\t\tbs = bs2[0];\n\t\t\t\t\t\tbs2 = bs2[1];\n\t\t\t\t\t}\n\t\t\t\t\tes = es2 = ea1[i];\n\t\t\t\t\tbn = parseFloat(bs);\n\t\t\t\t\tbsfx = bs.substr((bn + \"\").length);\n\t\t\t\t\trel = (es.charAt(1) === \"=\");\n\t\t\t\t\tif (rel) {\n\t\t\t\t\t\ten = parseInt(es.charAt(0)+\"1\", 10);\n\t\t\t\t\t\tes = es.substr(2);\n\t\t\t\t\t\ten *= parseFloat(es);\n\t\t\t\t\t\tesfx = es.substr((en + \"\").length - (en < 0 ? 1 : 0)) || \"\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\ten = parseFloat(es);\n\t\t\t\t\t\tesfx = es.substr((en + \"\").length);\n\t\t\t\t\t}\n\t\t\t\t\tif (esfx === \"\") {\n\t\t\t\t\t\tesfx = _suffixMap[p] || bsfx;\n\t\t\t\t\t}\n\t\t\t\t\tif (esfx !== bsfx) {\n\t\t\t\t\t\thn = _convertToPixels(t, \"borderLeft\", bn, bsfx); //horizontal number (we use a bogus \"borderLeft\" property just because the _convertToPixels() method searches for the keywords \"Left\", \"Right\", \"Top\", and \"Bottom\" to determine of it's a horizontal or vertical property, and we need \"border\" in the name so that it knows it should measure relative to the element itself, not its parent.\n\t\t\t\t\t\tvn = _convertToPixels(t, \"borderTop\", bn, bsfx); //vertical number\n\t\t\t\t\t\tif (esfx === \"%\") {\n\t\t\t\t\t\t\tbs = (hn / w * 100) + \"%\";\n\t\t\t\t\t\t\tbs2 = (vn / h * 100) + \"%\";\n\t\t\t\t\t\t} else if (esfx === \"em\") {\n\t\t\t\t\t\t\tem = _convertToPixels(t, \"borderLeft\", 1, \"em\");\n\t\t\t\t\t\t\tbs = (hn / em) + \"em\";\n\t\t\t\t\t\t\tbs2 = (vn / em) + \"em\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbs = hn + \"px\";\n\t\t\t\t\t\t\tbs2 = vn + \"px\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (rel) {\n\t\t\t\t\t\t\tes = (parseFloat(bs) + en) + esfx;\n\t\t\t\t\t\t\tes2 = (parseFloat(bs2) + en) + esfx;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt = _parseComplex(style, props[i], bs + \" \" + bs2, es + \" \" + es2, false, \"0px\", pt);\n\t\t\t\t}\n\t\t\t\treturn pt;\n\t\t\t}, prefix:true, formatter:_getFormatter(\"0px 0px 0px 0px\", false, true)});\n\t\t\t_registerComplexSpecialProp(\"borderBottomLeftRadius,borderBottomRightRadius,borderTopLeftRadius,borderTopRightRadius\", {defaultValue:\"0px\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\t\treturn _parseComplex(t.style, p, this.format(_getStyle(t, p, _cs, false, \"0px 0px\")), this.format(e), false, \"0px\", pt);\n\t\t\t}, prefix:true, formatter:_getFormatter(\"0px 0px\", false, true)});\n\t\t\t_registerComplexSpecialProp(\"backgroundPosition\", {defaultValue:\"0 0\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\t\tvar bp = \"background-position\",\n\t\t\t\t\tcs = (_cs || _getComputedStyle(t, null)),\n\t\t\t\t\tbs = this.format( ((cs) ? _ieVers ? cs.getPropertyValue(bp + \"-x\") + \" \" + cs.getPropertyValue(bp + \"-y\") : cs.getPropertyValue(bp) : t.currentStyle.backgroundPositionX + \" \" + t.currentStyle.backgroundPositionY) || \"0 0\"), //Internet Explorer doesn't report background-position correctly - we must query background-position-x and background-position-y and combine them (even in IE10). Before IE9, we must do the same with the currentStyle object and use camelCase\n\t\t\t\t\tes = this.format(e),\n\t\t\t\t\tba, ea, i, pct, overlap, src;\n\t\t\t\tif ((bs.indexOf(\"%\") !== -1) !== (es.indexOf(\"%\") !== -1) && es.split(\",\").length < 2) {\n\t\t\t\t\tsrc = _getStyle(t, \"backgroundImage\").replace(_urlExp, \"\");\n\t\t\t\t\tif (src && src !== \"none\") {\n\t\t\t\t\t\tba = bs.split(\" \");\n\t\t\t\t\t\tea = es.split(\" \");\n\t\t\t\t\t\t_tempImg.setAttribute(\"src\", src); //set the temp IMG's src to the background-image so that we can measure its width/height\n\t\t\t\t\t\ti = 2;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tbs = ba[i];\n\t\t\t\t\t\t\tpct = (bs.indexOf(\"%\") !== -1);\n\t\t\t\t\t\t\tif (pct !== (ea[i].indexOf(\"%\") !== -1)) {\n\t\t\t\t\t\t\t\toverlap = (i === 0) ? t.offsetWidth - _tempImg.width : t.offsetHeight - _tempImg.height;\n\t\t\t\t\t\t\t\tba[i] = pct ? (parseFloat(bs) / 100 * overlap) + \"px\" : (parseFloat(bs) / overlap * 100) + \"%\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbs = ba.join(\" \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this.parseComplex(t.style, bs, es, pt, plugin);\n\t\t\t}, formatter:_parsePosition});\n\t\t\t_registerComplexSpecialProp(\"backgroundSize\", {defaultValue:\"0 0\", formatter:function(v) {\n\t\t\t\tv += \"\"; //ensure it's a string\n\t\t\t\treturn _parsePosition(v.indexOf(\" \") === -1 ? v + \" \" + v : v); //if set to something like \"100% 100%\", Safari typically reports the computed style as just \"100%\" (no 2nd value), but we should ensure that there are two values, so copy the first one. Otherwise, it'd be interpreted as \"100% 0\" (wrong).\n\t\t\t}});\n\t\t\t_registerComplexSpecialProp(\"perspective\", {defaultValue:\"0px\", prefix:true});\n\t\t\t_registerComplexSpecialProp(\"perspectiveOrigin\", {defaultValue:\"50% 50%\", prefix:true});\n\t\t\t_registerComplexSpecialProp(\"transformStyle\", {prefix:true});\n\t\t\t_registerComplexSpecialProp(\"backfaceVisibility\", {prefix:true});\n\t\t\t_registerComplexSpecialProp(\"userSelect\", {prefix:true});\n\t\t\t_registerComplexSpecialProp(\"margin\", {parser:_getEdgeParser(\"marginTop,marginRight,marginBottom,marginLeft\")});\n\t\t\t_registerComplexSpecialProp(\"padding\", {parser:_getEdgeParser(\"paddingTop,paddingRight,paddingBottom,paddingLeft\")});\n\t\t\t_registerComplexSpecialProp(\"clip\", {defaultValue:\"rect(0px,0px,0px,0px)\", parser:function(t, e, p, cssp, pt, plugin){\n\t\t\t\tvar b, cs, delim;\n\t\t\t\tif (_ieVers < 9) { //IE8 and earlier don't report a \"clip\" value in the currentStyle - instead, the values are split apart into clipTop, clipRight, clipBottom, and clipLeft. Also, in IE7 and earlier, the values inside rect() are space-delimited, not comma-delimited.\n\t\t\t\t\tcs = t.currentStyle;\n\t\t\t\t\tdelim = _ieVers < 8 ? \" \" : \",\";\n\t\t\t\t\tb = \"rect(\" + cs.clipTop + delim + cs.clipRight + delim + cs.clipBottom + delim + cs.clipLeft + \")\";\n\t\t\t\t\te = this.format(e).split(\",\").join(delim);\n\t\t\t\t} else {\n\t\t\t\t\tb = this.format(_getStyle(t, this.p, _cs, false, this.dflt));\n\t\t\t\t\te = this.format(e);\n\t\t\t\t}\n\t\t\t\treturn this.parseComplex(t.style, b, e, pt, plugin);\n\t\t\t}});\n\t\t\t_registerComplexSpecialProp(\"textShadow\", {defaultValue:\"0px 0px 0px #999\", color:true, multi:true});\n\t\t\t_registerComplexSpecialProp(\"autoRound,strictUnits\", {parser:function(t, e, p, cssp, pt) {return pt;}}); //just so that we can ignore these properties (not tween them)\n\t\t\t_registerComplexSpecialProp(\"border\", {defaultValue:\"0px solid #000\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\t\tvar bw = _getStyle(t, \"borderTopWidth\", _cs, false, \"0px\"),\n\t\t\t\t\tend = this.format(e).split(\" \"),\n\t\t\t\t\tesfx = end[0].replace(_suffixExp, \"\");\n\t\t\t\tif (esfx !== \"px\") { //if we're animating to a non-px value, we need to convert the beginning width to that unit.\n\t\t\t\t\tbw = (parseFloat(bw) / _convertToPixels(t, \"borderTopWidth\", 1, esfx)) + esfx;\n\t\t\t\t}\n\t\t\t\treturn this.parseComplex(t.style, this.format(bw + \" \" + _getStyle(t, \"borderTopStyle\", _cs, false, \"solid\") + \" \" + _getStyle(t, \"borderTopColor\", _cs, false, \"#000\")), end.join(\" \"), pt, plugin);\n\t\t\t\t}, color:true, formatter:function(v) {\n\t\t\t\t\tvar a = v.split(\" \");\n\t\t\t\t\treturn a[0] + \" \" + (a[1] || \"solid\") + \" \" + (v.match(_colorExp) || [\"#000\"])[0];\n\t\t\t\t}});\n\t\t\t_registerComplexSpecialProp(\"borderWidth\", {parser:_getEdgeParser(\"borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth\")}); //Firefox doesn't pick up on borderWidth set in style sheets (only inline).\n\t\t\t_registerComplexSpecialProp(\"float,cssFloat,styleFloat\", {parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\t\tvar s = t.style,\n\t\t\t\t\tprop = (\"cssFloat\" in s) ? \"cssFloat\" : \"styleFloat\";\n\t\t\t\treturn new CSSPropTween(s, prop, 0, 0, pt, -1, p, false, 0, s[prop], e);\n\t\t\t}});\n\t\n\t\t\t//opacity-related\n\t\t\tvar _setIEOpacityRatio = function(v) {\n\t\t\t\t\tvar t = this.t, //refers to the element's style property\n\t\t\t\t\t\tfilters = t.filter || _getStyle(this.data, \"filter\") || \"\",\n\t\t\t\t\t\tval = (this.s + this.c * v) | 0,\n\t\t\t\t\t\tskip;\n\t\t\t\t\tif (val === 100) { //for older versions of IE that need to use a filter to apply opacity, we should remove the filter if opacity hits 1 in order to improve performance, but make sure there isn't a transform (matrix) or gradient in the filters.\n\t\t\t\t\t\tif (filters.indexOf(\"atrix(\") === -1 && filters.indexOf(\"radient(\") === -1 && filters.indexOf(\"oader(\") === -1) {\n\t\t\t\t\t\t\tt.removeAttribute(\"filter\");\n\t\t\t\t\t\t\tskip = (!_getStyle(this.data, \"filter\")); //if a class is applied that has an alpha filter, it will take effect (we don't want that), so re-apply our alpha filter in that case. We must first remove it and then check.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt.filter = filters.replace(_alphaFilterExp, \"\");\n\t\t\t\t\t\t\tskip = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!skip) {\n\t\t\t\t\t\tif (this.xn1) {\n\t\t\t\t\t\t\tt.filter = filters = filters || (\"alpha(opacity=\" + val + \")\"); //works around bug in IE7/8 that prevents changes to \"visibility\" from being applied properly if the filter is changed to a different alpha on the same frame.\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (filters.indexOf(\"pacity\") === -1) { //only used if browser doesn't support the standard opacity style property (IE 7 and 8). We omit the \"O\" to avoid case-sensitivity issues\n\t\t\t\t\t\t\tif (val !== 0 || !this.xn1) { //bugs in IE7/8 won't render the filter properly if opacity is ADDED on the same frame/render as \"visibility\" changes (this.xn1 is 1 if this tween is an \"autoAlpha\" tween)\n\t\t\t\t\t\t\t\tt.filter = filters + \" alpha(opacity=\" + val + \")\"; //we round the value because otherwise, bugs in IE7/8 can prevent \"visibility\" changes from being applied properly.\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt.filter = filters.replace(_opacityExp, \"opacity=\" + val);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t_registerComplexSpecialProp(\"opacity,alpha,autoAlpha\", {defaultValue:\"1\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\t\tvar b = parseFloat(_getStyle(t, \"opacity\", _cs, false, \"1\")),\n\t\t\t\t\tstyle = t.style,\n\t\t\t\t\tisAutoAlpha = (p === \"autoAlpha\");\n\t\t\t\tif (typeof(e) === \"string\" && e.charAt(1) === \"=\") {\n\t\t\t\t\te = ((e.charAt(0) === \"-\") ? -1 : 1) * parseFloat(e.substr(2)) + b;\n\t\t\t\t}\n\t\t\t\tif (isAutoAlpha && b === 1 && _getStyle(t, \"visibility\", _cs) === \"hidden\" && e !== 0) { //if visibility is initially set to \"hidden\", we should interpret that as intent to make opacity 0 (a convenience)\n\t\t\t\t\tb = 0;\n\t\t\t\t}\n\t\t\t\tif (_supportsOpacity) {\n\t\t\t\t\tpt = new CSSPropTween(style, \"opacity\", b, e - b, pt);\n\t\t\t\t} else {\n\t\t\t\t\tpt = new CSSPropTween(style, \"opacity\", b * 100, (e - b) * 100, pt);\n\t\t\t\t\tpt.xn1 = isAutoAlpha ? 1 : 0; //we need to record whether or not this is an autoAlpha so that in the setRatio(), we know to duplicate the setting of the alpha in order to work around a bug in IE7 and IE8 that prevents changes to \"visibility\" from taking effect if the filter is changed to a different alpha(opacity) at the same time. Setting it to the SAME value first, then the new value works around the IE7/8 bug.\n\t\t\t\t\tstyle.zoom = 1; //helps correct an IE issue.\n\t\t\t\t\tpt.type = 2;\n\t\t\t\t\tpt.b = \"alpha(opacity=\" + pt.s + \")\";\n\t\t\t\t\tpt.e = \"alpha(opacity=\" + (pt.s + pt.c) + \")\";\n\t\t\t\t\tpt.data = t;\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\tpt.setRatio = _setIEOpacityRatio;\n\t\t\t\t}\n\t\t\t\tif (isAutoAlpha) { //we have to create the \"visibility\" PropTween after the opacity one in the linked list so that they run in the order that works properly in IE8 and earlier\n\t\t\t\t\tpt = new CSSPropTween(style, \"visibility\", 0, 0, pt, -1, null, false, 0, ((b !== 0) ? \"inherit\" : \"hidden\"), ((e === 0) ? \"hidden\" : \"inherit\"));\n\t\t\t\t\tpt.xs0 = \"inherit\";\n\t\t\t\t\tcssp._overwriteProps.push(pt.n);\n\t\t\t\t\tcssp._overwriteProps.push(p);\n\t\t\t\t}\n\t\t\t\treturn pt;\n\t\t\t}});\n\t\n\t\n\t\t\tvar _removeProp = function(s, p) {\n\t\t\t\t\tif (p) {\n\t\t\t\t\t\tif (s.removeProperty) {\n\t\t\t\t\t\t\tif (p.substr(0,2) === \"ms\" || p.substr(0,6) === \"webkit\") { //Microsoft and some Webkit browsers don't conform to the standard of capitalizing the first prefix character, so we adjust so that when we prefix the caps with a dash, it's correct (otherwise it'd be \"ms-transform\" instead of \"-ms-transform\" for IE9, for example)\n\t\t\t\t\t\t\t\tp = \"-\" + p;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ts.removeProperty(p.replace(_capsExp, \"-$1\").toLowerCase());\n\t\t\t\t\t\t} else { //note: old versions of IE use \"removeAttribute()\" instead of \"removeProperty()\"\n\t\t\t\t\t\t\ts.removeAttribute(p);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_setClassNameRatio = function(v) {\n\t\t\t\t\tthis.t._gsClassPT = this;\n\t\t\t\t\tif (v === 1 || v === 0) {\n\t\t\t\t\t\tthis.t.setAttribute(\"class\", (v === 0) ? this.b : this.e);\n\t\t\t\t\t\tvar mpt = this.data, //first MiniPropTween\n\t\t\t\t\t\t\ts = this.t.style;\n\t\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\t\tif (!mpt.v) {\n\t\t\t\t\t\t\t\t_removeProp(s, mpt.p);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ts[mpt.p] = mpt.v;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v === 1 && this.t._gsClassPT === this) {\n\t\t\t\t\t\t\tthis.t._gsClassPT = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this.t.getAttribute(\"class\") !== this.e) {\n\t\t\t\t\t\tthis.t.setAttribute(\"class\", this.e);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t_registerComplexSpecialProp(\"className\", {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\tvar b = t.getAttribute(\"class\") || \"\", //don't use t.className because it doesn't work consistently on SVG elements; getAttribute(\"class\") and setAttribute(\"class\", value\") is more reliable.\n\t\t\t\t\tcssText = t.style.cssText,\n\t\t\t\t\tdifData, bs, cnpt, cnptLookup, mpt;\n\t\t\t\tpt = cssp._classNamePT = new CSSPropTween(t, p, 0, 0, pt, 2);\n\t\t\t\tpt.setRatio = _setClassNameRatio;\n\t\t\t\tpt.pr = -11;\n\t\t\t\t_hasPriority = true;\n\t\t\t\tpt.b = b;\n\t\t\t\tbs = _getAllStyles(t, _cs);\n\t\t\t\t//if there's a className tween already operating on the target, force it to its end so that the necessary inline styles are removed and the class name is applied before we determine the end state (we don't want inline styles interfering that were there just for class-specific values)\n\t\t\t\tcnpt = t._gsClassPT;\n\t\t\t\tif (cnpt) {\n\t\t\t\t\tcnptLookup = {};\n\t\t\t\t\tmpt = cnpt.data; //first MiniPropTween which stores the inline styles - we need to force these so that the inline styles don't contaminate things. Otherwise, there's a small chance that a tween could start and the inline values match the destination values and they never get cleaned.\n\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\tcnptLookup[mpt.p] = 1;\n\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t}\n\t\t\t\t\tcnpt.setRatio(1);\n\t\t\t\t}\n\t\t\t\tt._gsClassPT = pt;\n\t\t\t\tpt.e = (e.charAt(1) !== \"=\") ? e : b.replace(new RegExp(\"(?:\\\\s|^)\" + e.substr(2) + \"(?![\\\\w-])\"), \"\") + ((e.charAt(0) === \"+\") ? \" \" + e.substr(2) : \"\");\n\t\t\t\tt.setAttribute(\"class\", pt.e);\n\t\t\t\tdifData = _cssDif(t, bs, _getAllStyles(t), vars, cnptLookup);\n\t\t\t\tt.setAttribute(\"class\", b);\n\t\t\t\tpt.data = difData.firstMPT;\n\t\t\t\tt.style.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity).\n\t\t\t\tpt = pt.xfirst = cssp.parse(t, difData.difs, pt, plugin); //we record the CSSPropTween as the xfirst so that we can handle overwriting propertly (if \"className\" gets overwritten, we must kill all the properties associated with the className part of the tween, so we can loop through from xfirst to the pt itself)\n\t\t\t\treturn pt;\n\t\t\t}});\n\t\n\t\n\t\t\tvar _setClearPropsRatio = function(v) {\n\t\t\t\tif (v === 1 || v === 0) if (this.data._totalTime === this.data._totalDuration && this.data.data !== \"isFromStart\") { //this.data refers to the tween. Only clear at the END of the tween (remember, from() tweens make the ratio go from 1 to 0, so we can't just check that and if the tween is the zero-duration one that's created internally to render the starting values in a from() tween, ignore that because otherwise, for example, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in).\n\t\t\t\t\tvar s = this.t.style,\n\t\t\t\t\t\ttransformParse = _specialProps.transform.parse,\n\t\t\t\t\t\ta, p, i, clearTransform, transform;\n\t\t\t\t\tif (this.e === \"all\") {\n\t\t\t\t\t\ts.cssText = \"\";\n\t\t\t\t\t\tclearTransform = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta = this.e.split(\" \").join(\"\").split(\",\");\n\t\t\t\t\t\ti = a.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = a[i];\n\t\t\t\t\t\t\tif (_specialProps[p]) {\n\t\t\t\t\t\t\t\tif (_specialProps[p].parse === transformParse) {\n\t\t\t\t\t\t\t\t\tclearTransform = true;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tp = (p === \"transformOrigin\") ? _transformOriginProp : _specialProps[p].p; //ensures that special properties use the proper browser-specific property name, like \"scaleX\" might be \"-webkit-transform\" or \"boxShadow\" might be \"-moz-box-shadow\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t_removeProp(s, p);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (clearTransform) {\n\t\t\t\t\t\t_removeProp(s, _transformProp);\n\t\t\t\t\t\ttransform = this.t._gsTransform;\n\t\t\t\t\t\tif (transform) {\n\t\t\t\t\t\t\tif (transform.svg) {\n\t\t\t\t\t\t\t\tthis.t.removeAttribute(\"data-svg-origin\");\n\t\t\t\t\t\t\t\tthis.t.removeAttribute(\"transform\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete this.t._gsTransform;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t}\n\t\t\t};\n\t\t\t_registerComplexSpecialProp(\"clearProps\", {parser:function(t, e, p, cssp, pt) {\n\t\t\t\tpt = new CSSPropTween(t, p, 0, 0, pt, 2);\n\t\t\t\tpt.setRatio = _setClearPropsRatio;\n\t\t\t\tpt.e = e;\n\t\t\t\tpt.pr = -10;\n\t\t\t\tpt.data = cssp._tween;\n\t\t\t\t_hasPriority = true;\n\t\t\t\treturn pt;\n\t\t\t}});\n\t\n\t\t\tp = \"bezier,throwProps,physicsProps,physics2D\".split(\",\");\n\t\t\ti = p.length;\n\t\t\twhile (i--) {\n\t\t\t\t_registerPluginProp(p[i]);\n\t\t\t}\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\t\tp = CSSPlugin.prototype;\n\t\t\tp._firstPT = p._lastParsedTransform = p._transform = null;\n\t\n\t\t\t//gets called when the tween renders for the first time. This kicks everything off, recording start/end values, etc.\n\t\t\tp._onInitTween = function(target, vars, tween, index) {\n\t\t\t\tif (!target.nodeType) { //css is only for dom elements\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tthis._target = _target = target;\n\t\t\t\tthis._tween = tween;\n\t\t\t\tthis._vars = vars;\n\t\t\t\t_index = index;\n\t\t\t\t_autoRound = vars.autoRound;\n\t\t\t\t_hasPriority = false;\n\t\t\t\t_suffixMap = vars.suffixMap || CSSPlugin.suffixMap;\n\t\t\t\t_cs = _getComputedStyle(target, \"\");\n\t\t\t\t_overwriteProps = this._overwriteProps;\n\t\t\t\tvar style = target.style,\n\t\t\t\t\tv, pt, pt2, first, last, next, zIndex, tpt, threeD;\n\t\t\t\tif (_reqSafariFix) if (style.zIndex === \"\") {\n\t\t\t\t\tv = _getStyle(target, \"zIndex\", _cs);\n\t\t\t\t\tif (v === \"auto\" || v === \"\") {\n\t\t\t\t\t\t//corrects a bug in [non-Android] Safari that prevents it from repainting elements in their new positions if they don't have a zIndex set. We also can't just apply this inside _parseTransform() because anything that's moved in any way (like using \"left\" or \"top\" instead of transforms like \"x\" and \"y\") can be affected, so it is best to ensure that anything that's tweening has a z-index. Setting \"WebkitPerspective\" to a non-zero value worked too except that on iOS Safari things would flicker randomly. Plus zIndex is less memory-intensive.\n\t\t\t\t\t\tthis._addLazySet(style, \"zIndex\", 0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (typeof(vars) === \"string\") {\n\t\t\t\t\tfirst = style.cssText;\n\t\t\t\t\tv = _getAllStyles(target, _cs);\n\t\t\t\t\tstyle.cssText = first + \";\" + vars;\n\t\t\t\t\tv = _cssDif(target, v, _getAllStyles(target)).difs;\n\t\t\t\t\tif (!_supportsOpacity && _opacityValExp.test(vars)) {\n\t\t\t\t\t\tv.opacity = parseFloat( RegExp.$1 );\n\t\t\t\t\t}\n\t\t\t\t\tvars = v;\n\t\t\t\t\tstyle.cssText = first;\n\t\t\t\t}\n\t\n\t\t\t\tif (vars.className) { //className tweens will combine any differences they find in the css with the vars that are passed in, so {className:\"myClass\", scale:0.5, left:20} would work.\n\t\t\t\t\tthis._firstPT = pt = _specialProps.className.parse(target, vars.className, \"className\", this, null, null, vars);\n\t\t\t\t} else {\n\t\t\t\t\tthis._firstPT = pt = this.parse(target, vars, null);\n\t\t\t\t}\n\t\n\t\t\t\tif (this._transformType) {\n\t\t\t\t\tthreeD = (this._transformType === 3);\n\t\t\t\t\tif (!_transformProp) {\n\t\t\t\t\t\tstyle.zoom = 1; //helps correct an IE issue.\n\t\t\t\t\t} else if (_isSafari) {\n\t\t\t\t\t\t_reqSafariFix = true;\n\t\t\t\t\t\t//if zIndex isn't set, iOS Safari doesn't repaint things correctly sometimes (seemingly at random).\n\t\t\t\t\t\tif (style.zIndex === \"\") {\n\t\t\t\t\t\t\tzIndex = _getStyle(target, \"zIndex\", _cs);\n\t\t\t\t\t\t\tif (zIndex === \"auto\" || zIndex === \"\") {\n\t\t\t\t\t\t\t\tthis._addLazySet(style, \"zIndex\", 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//Setting WebkitBackfaceVisibility corrects 3 bugs:\n\t\t\t\t\t\t// 1) [non-Android] Safari skips rendering changes to \"top\" and \"left\" that are made on the same frame/render as a transform update.\n\t\t\t\t\t\t// 2) iOS Safari sometimes neglects to repaint elements in their new positions. Setting \"WebkitPerspective\" to a non-zero value worked too except that on iOS Safari things would flicker randomly.\n\t\t\t\t\t\t// 3) Safari sometimes displayed odd artifacts when tweening the transform (or WebkitTransform) property, like ghosts of the edges of the element remained. Definitely a browser bug.\n\t\t\t\t\t\t//Note: we allow the user to override the auto-setting by defining WebkitBackfaceVisibility in the vars of the tween.\n\t\t\t\t\t\tif (_isSafariLT6) {\n\t\t\t\t\t\t\tthis._addLazySet(style, \"WebkitBackfaceVisibility\", this._vars.WebkitBackfaceVisibility || (threeD ? \"visible\" : \"hidden\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt2 = pt;\n\t\t\t\t\twhile (pt2 && pt2._next) {\n\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t}\n\t\t\t\t\ttpt = new CSSPropTween(target, \"transform\", 0, 0, null, 2);\n\t\t\t\t\tthis._linkCSSP(tpt, null, pt2);\n\t\t\t\t\ttpt.setRatio = _transformProp ? _setTransformRatio : _setIETransformRatio;\n\t\t\t\t\ttpt.data = this._transform || _getTransform(target, _cs, true);\n\t\t\t\t\ttpt.tween = tween;\n\t\t\t\t\ttpt.pr = -1; //ensures that the transforms get applied after the components are updated.\n\t\t\t\t\t_overwriteProps.pop(); //we don't want to force the overwrite of all \"transform\" tweens of the target - we only care about individual transform properties like scaleX, rotation, etc. The CSSPropTween constructor automatically adds the property to _overwriteProps which is why we need to pop() here.\n\t\t\t\t}\n\t\n\t\t\t\tif (_hasPriority) {\n\t\t\t\t\t//reorders the linked list in order of pr (priority)\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tnext = pt._next;\n\t\t\t\t\t\tpt2 = first;\n\t\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = next;\n\t\t\t\t\t}\n\t\t\t\t\tthis._firstPT = first;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t};\n\t\n\t\n\t\t\tp.parse = function(target, vars, pt, plugin) {\n\t\t\t\tvar style = target.style,\n\t\t\t\t\tp, sp, bn, en, bs, es, bsfx, esfx, isStr, rel;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tes = vars[p]; //ending value string\n\t\t\t\t\tif (typeof(es) === \"function\") {\n\t\t\t\t\t\tes = es(_index, _target);\n\t\t\t\t\t}\n\t\t\t\t\tsp = _specialProps[p]; //SpecialProp lookup.\n\t\t\t\t\tif (sp) {\n\t\t\t\t\t\tpt = sp.parse(target, es, p, this, pt, plugin, vars);\n\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbs = _getStyle(target, p, _cs) + \"\";\n\t\t\t\t\t\tisStr = (typeof(es) === \"string\");\n\t\t\t\t\t\tif (p === \"color\" || p === \"fill\" || p === \"stroke\" || p.indexOf(\"Color\") !== -1 || (isStr && _rgbhslExp.test(es))) { //Opera uses background: to define color sometimes in addition to backgroundColor:\n\t\t\t\t\t\t\tif (!isStr) {\n\t\t\t\t\t\t\t\tes = _parseColor(es);\n\t\t\t\t\t\t\t\tes = ((es.length > 3) ? \"rgba(\" : \"rgb(\") + es.join(\",\") + \")\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt = _parseComplex(style, p, bs, es, true, \"transparent\", pt, 0, plugin);\n\t\n\t\t\t\t\t\t} else if (isStr && _complexExp.test(es)) {\n\t\t\t\t\t\t\tpt = _parseComplex(style, p, bs, es, true, null, pt, 0, plugin);\n\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbn = parseFloat(bs);\n\t\t\t\t\t\t\tbsfx = (bn || bn === 0) ? bs.substr((bn + \"\").length) : \"\"; //remember, bs could be non-numeric like \"normal\" for fontWeight, so we should default to a blank suffix in that case.\n\t\n\t\t\t\t\t\t\tif (bs === \"\" || bs === \"auto\") {\n\t\t\t\t\t\t\t\tif (p === \"width\" || p === \"height\") {\n\t\t\t\t\t\t\t\t\tbn = _getDimension(target, p, _cs);\n\t\t\t\t\t\t\t\t\tbsfx = \"px\";\n\t\t\t\t\t\t\t\t} else if (p === \"left\" || p === \"top\") {\n\t\t\t\t\t\t\t\t\tbn = _calculateOffset(target, p, _cs);\n\t\t\t\t\t\t\t\t\tbsfx = \"px\";\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbn = (p !== \"opacity\") ? 0 : 1;\n\t\t\t\t\t\t\t\t\tbsfx = \"\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\trel = (isStr && es.charAt(1) === \"=\");\n\t\t\t\t\t\t\tif (rel) {\n\t\t\t\t\t\t\t\ten = parseInt(es.charAt(0) + \"1\", 10);\n\t\t\t\t\t\t\t\tes = es.substr(2);\n\t\t\t\t\t\t\t\ten *= parseFloat(es);\n\t\t\t\t\t\t\t\tesfx = es.replace(_suffixExp, \"\");\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ten = parseFloat(es);\n\t\t\t\t\t\t\t\tesfx = isStr ? es.replace(_suffixExp, \"\") : \"\";\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif (esfx === \"\") {\n\t\t\t\t\t\t\t\tesfx = (p in _suffixMap) ? _suffixMap[p] : bsfx; //populate the end suffix, prioritizing the map, then if none is found, use the beginning suffix.\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tes = (en || en === 0) ? (rel ? en + bn : en) + esfx : vars[p]; //ensures that any += or -= prefixes are taken care of. Record the end value before normalizing the suffix because we always want to end the tween on exactly what they intended even if it doesn't match the beginning value's suffix.\n\t\n\t\t\t\t\t\t\t//if the beginning/ending suffixes don't match, normalize them...\n\t\t\t\t\t\t\tif (bsfx !== esfx) if (esfx !== \"\") if (en || en === 0) if (bn) { //note: if the beginning value (bn) is 0, we don't need to convert units!\n\t\t\t\t\t\t\t\tbn = _convertToPixels(target, p, bn, bsfx);\n\t\t\t\t\t\t\t\tif (esfx === \"%\") {\n\t\t\t\t\t\t\t\t\tbn /= _convertToPixels(target, p, 100, \"%\") / 100;\n\t\t\t\t\t\t\t\t\tif (vars.strictUnits !== true) { //some browsers report only \"px\" values instead of allowing \"%\" with getComputedStyle(), so we assume that if we're tweening to a %, we should start there too unless strictUnits:true is defined. This approach is particularly useful for responsive designs that use from() tweens.\n\t\t\t\t\t\t\t\t\t\tbs = bn + \"%\";\n\t\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\t} else if (esfx === \"em\" || esfx === \"rem\" || esfx === \"vw\" || esfx === \"vh\") {\n\t\t\t\t\t\t\t\t\tbn /= _convertToPixels(target, p, 1, esfx);\n\t\n\t\t\t\t\t\t\t\t//otherwise convert to pixels.\n\t\t\t\t\t\t\t\t} else if (esfx !== \"px\") {\n\t\t\t\t\t\t\t\t\ten = _convertToPixels(target, p, en, esfx);\n\t\t\t\t\t\t\t\t\tesfx = \"px\"; //we don't use bsfx after this, so we don't need to set it to px too.\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (rel) if (en || en === 0) {\n\t\t\t\t\t\t\t\t\tes = (en + bn) + esfx; //the changes we made affect relative calculations, so adjust the end value here.\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif (rel) {\n\t\t\t\t\t\t\t\ten += bn;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif ((bn || bn === 0) && (en || en === 0)) { //faster than isNaN(). Also, previously we required en !== bn but that doesn't really gain much performance and it prevents _parseToProxy() from working properly if beginning and ending values match but need to get tweened by an external plugin anyway. For example, a bezier tween where the target starts at left:0 and has these points: [{left:50},{left:0}] wouldn't work properly because when parsing the last point, it'd match the first (current) one and a non-tweening CSSPropTween would be recorded when we actually need a normal tween (type:0) so that things get updated during the tween properly.\n\t\t\t\t\t\t\t\tpt = new CSSPropTween(style, p, bn, en - bn, pt, 0, p, (_autoRound !== false && (esfx === \"px\" || p === \"zIndex\")), 0, bs, es);\n\t\t\t\t\t\t\t\tpt.xs0 = esfx;\n\t\t\t\t\t\t\t\t//DEBUG: _log(\"tween \"+p+\" from \"+pt.b+\" (\"+bn+esfx+\") to \"+pt.e+\" with suffix: \"+pt.xs0);\n\t\t\t\t\t\t\t} else if (style[p] === undefined || !es && (es + \"\" === \"NaN\" || es == null)) {\n\t\t\t\t\t\t\t\t_log(\"invalid \" + p + \" tween value: \" + vars[p]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpt = new CSSPropTween(style, p, en || bn || 0, 0, pt, -1, p, false, 0, bs, es);\n\t\t\t\t\t\t\t\tpt.xs0 = (es === \"none\" && (p === \"display\" || p.indexOf(\"Style\") !== -1)) ? bs : es; //intermediate value should typically be set immediately (end value) except for \"display\" or things like borderTopStyle, borderBottomStyle, etc. which should use the beginning value during the tween.\n\t\t\t\t\t\t\t\t//DEBUG: _log(\"non-tweening value \"+p+\": \"+pt.xs0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin) if (pt && !pt.plugin) {\n\t\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn pt;\n\t\t\t};\n\t\n\t\n\t\t\t//gets called every time the tween updates, passing the new ratio (typically a value between 0 and 1, but not always (for example, if an Elastic.easeOut is used, the value can jump above 1 mid-tween). It will always start and 0 and end at 1.\n\t\t\tp.setRatio = function(v) {\n\t\t\t\tvar pt = this._firstPT,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tval, str, i;\n\t\t\t\t//at the end of the tween, we set the values to exactly what we received in order to make sure non-tweening values (like \"position\" or \"float\" or whatever) are set and so that if the beginning/ending suffixes (units) didn't match and we normalized to px, the value that the user passed in is used here. We check to see if the tween is at its beginning in case it's a from() tween in which case the ratio will actually go from 1 to 0 over the course of the tween (backwards).\n\t\t\t\tif (v === 1 && (this._tween._time === this._tween._duration || this._tween._time === 0)) {\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tif (pt.type !== 2) {\n\t\t\t\t\t\t\tif (pt.r && pt.type !== -1) {\n\t\t\t\t\t\t\t\tval = Math.round(pt.s + pt.c);\n\t\t\t\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p] = val + pt.xs0;\n\t\t\t\t\t\t\t\t} else if (pt.type === 1) { //complex value (one that typically has multiple numbers inside a string, like \"rect(5px,10px,20px,25px)\"\n\t\t\t\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\t\t\t\tstr = pt.xs0 + val + pt.xs1;\n\t\t\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tpt.t[pt.p] = str;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.e;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\n\t\t\t\t} else if (v || !(this._tween._time === this._tween._duration || this._tween._time === 0) || this._tween._rawPrevTime === -0.000001) {\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tval = pt.c * v + pt.s;\n\t\t\t\t\t\tif (pt.r) {\n\t\t\t\t\t\t\tval = Math.round(val);\n\t\t\t\t\t\t} else if (val < min) if (val > -min) {\n\t\t\t\t\t\t\tval = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\t\tpt.t[pt.p] = val + pt.xs0;\n\t\t\t\t\t\t} else if (pt.type === 1) { //complex value (one that typically has multiple numbers inside a string, like \"rect(5px,10px,20px,25px)\"\n\t\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\t\tif (i === 2) {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2;\n\t\t\t\t\t\t\t} else if (i === 3) {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3;\n\t\t\t\t\t\t\t} else if (i === 4) {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3 + pt.xn3 + pt.xs4;\n\t\t\t\t\t\t\t} else if (i === 5) {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3 + pt.xn3 + pt.xs4 + pt.xn4 + pt.xs5;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tstr = pt.xs0 + val + pt.xs1;\n\t\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt.t[pt.p] = str;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t} else if (pt.type === -1) { //non-tweening value\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0;\n\t\n\t\t\t\t\t\t} else if (pt.setRatio) { //custom setRatio() for things like SpecialProps, external plugins, etc.\n\t\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\n\t\t\t\t//if the tween is reversed all the way back to the beginning, we need to restore the original values which may have different units (like % instead of px or em or whatever).\n\t\t\t\t} else {\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tif (pt.type !== 2) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.b;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t/**\n\t\t\t * @private\n\t\t\t * Forces rendering of the target's transforms (rotation, scale, etc.) whenever the CSSPlugin's setRatio() is called.\n\t\t\t * Basically, this tells the CSSPlugin to create a CSSPropTween (type 2) after instantiation that runs last in the linked\n\t\t\t * list and calls the appropriate (3D or 2D) rendering function. We separate this into its own method so that we can call\n\t\t\t * it from other plugins like BezierPlugin if, for example, it needs to apply an autoRotation and this CSSPlugin\n\t\t\t * doesn't have any transform-related properties of its own. You can call this method as many times as you\n\t\t\t * want and it won't create duplicate CSSPropTweens.\n\t\t\t *\n\t\t\t * @param {boolean} threeD if true, it should apply 3D tweens (otherwise, just 2D ones are fine and typically faster)\n\t\t\t */\n\t\t\tp._enableTransforms = function(threeD) {\n\t\t\t\tthis._transform = this._transform || _getTransform(this._target, _cs, true); //ensures that the element has a _gsTransform property with the appropriate values.\n\t\t\t\tthis._transformType = (!(this._transform.svg && _useSVGTransformAttr) && (threeD || this._transformType === 3)) ? 3 : 2;\n\t\t\t};\n\t\n\t\t\tvar lazySet = function(v) {\n\t\t\t\tthis.t[this.p] = this.e;\n\t\t\t\tthis.data._linkCSSP(this, this._next, null, true); //we purposefully keep this._next even though it'd make sense to null it, but this is a performance optimization, as this happens during the while (pt) {} loop in setRatio() at the bottom of which it sets pt = pt._next, so if we null it, the linked list will be broken in that loop.\n\t\t\t};\n\t\t\t/** @private Gives us a way to set a value on the first render (and only the first render). **/\n\t\t\tp._addLazySet = function(t, p, v) {\n\t\t\t\tvar pt = this._firstPT = new CSSPropTween(t, p, 0, 0, this._firstPT, 2);\n\t\t\t\tpt.e = v;\n\t\t\t\tpt.setRatio = lazySet;\n\t\t\t\tpt.data = this;\n\t\t\t};\n\t\n\t\t\t/** @private **/\n\t\t\tp._linkCSSP = function(pt, next, prev, remove) {\n\t\t\t\tif (pt) {\n\t\t\t\t\tif (next) {\n\t\t\t\t\t\tnext._prev = pt;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t\tremove = true; //just to prevent resetting this._firstPT 5 lines down in case pt._next is null. (optimized for speed)\n\t\t\t\t\t}\n\t\t\t\t\tif (prev) {\n\t\t\t\t\t\tprev._next = pt;\n\t\t\t\t\t} else if (!remove && this._firstPT === null) {\n\t\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t\t}\n\t\t\t\t\tpt._next = next;\n\t\t\t\t\tpt._prev = prev;\n\t\t\t\t}\n\t\t\t\treturn pt;\n\t\t\t};\n\t\n\t\t\tp._mod = function(lookup) {\n\t\t\t\tvar pt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (typeof(lookup[pt.p]) === \"function\" && lookup[pt.p] === Math.round) { //only gets called by RoundPropsPlugin (ModifyPlugin manages all the rendering internally for CSSPlugin properties that need modification). Remember, we handle rounding a bit differently in this plugin for performance reasons, leveraging \"r\" as an indicator that the value should be rounded internally..\n\t\t\t\t\t\tpt.r = 1;\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t//we need to make sure that if alpha or autoAlpha is killed, opacity is too. And autoAlpha affects the \"visibility\" property.\n\t\t\tp._kill = function(lookup) {\n\t\t\t\tvar copy = lookup,\n\t\t\t\t\tpt, p, xfirst;\n\t\t\t\tif (lookup.autoAlpha || lookup.alpha) {\n\t\t\t\t\tcopy = {};\n\t\t\t\t\tfor (p in lookup) { //copy the lookup so that we're not changing the original which may be passed elsewhere.\n\t\t\t\t\t\tcopy[p] = lookup[p];\n\t\t\t\t\t}\n\t\t\t\t\tcopy.opacity = 1;\n\t\t\t\t\tif (copy.autoAlpha) {\n\t\t\t\t\t\tcopy.visibility = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (lookup.className && (pt = this._classNamePT)) { //for className tweens, we need to kill any associated CSSPropTweens too; a linked list starts at the className's \"xfirst\".\n\t\t\t\t\txfirst = pt.xfirst;\n\t\t\t\t\tif (xfirst && xfirst._prev) {\n\t\t\t\t\t\tthis._linkCSSP(xfirst._prev, pt._next, xfirst._prev._prev); //break off the prev\n\t\t\t\t\t} else if (xfirst === this._firstPT) {\n\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tthis._linkCSSP(pt._next, pt._next._next, xfirst._prev);\n\t\t\t\t\t}\n\t\t\t\t\tthis._classNamePT = null;\n\t\t\t\t}\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.plugin && pt.plugin !== p && pt.plugin._kill) { //for plugins that are registered with CSSPlugin, we should notify them of the kill.\n\t\t\t\t\t\tpt.plugin._kill(lookup);\n\t\t\t\t\t\tp = pt.plugin;\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t\treturn TweenPlugin.prototype._kill.call(this, copy);\n\t\t\t};\n\t\n\t\n\t\n\t\t\t//used by cascadeTo() for gathering all the style properties of each child element into an array for comparison.\n\t\t\tvar _getChildStyles = function(e, props, targets) {\n\t\t\t\t\tvar children, i, child, type;\n\t\t\t\t\tif (e.slice) {\n\t\t\t\t\t\ti = e.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t_getChildStyles(e[i], props, targets);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tchildren = e.childNodes;\n\t\t\t\t\ti = children.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tchild = children[i];\n\t\t\t\t\t\ttype = child.type;\n\t\t\t\t\t\tif (child.style) {\n\t\t\t\t\t\t\tprops.push(_getAllStyles(child));\n\t\t\t\t\t\t\tif (targets) {\n\t\t\t\t\t\t\t\ttargets.push(child);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((type === 1 || type === 9 || type === 11) && child.childNodes.length) {\n\t\t\t\t\t\t\t_getChildStyles(child, props, targets);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\t/**\n\t\t\t * Typically only useful for className tweens that may affect child elements, this method creates a TweenLite\n\t\t\t * and then compares the style properties of all the target's child elements at the tween's start and end, and\n\t\t\t * if any are different, it also creates tweens for those and returns an array containing ALL of the resulting\n\t\t\t * tweens (so that you can easily add() them to a TimelineLite, for example). The reason this functionality is\n\t\t\t * wrapped into a separate static method of CSSPlugin instead of being integrated into all regular className tweens\n\t\t\t * is because it creates entirely new tweens that may have completely different targets than the original tween,\n\t\t\t * so if they were all lumped into the original tween instance, it would be inconsistent with the rest of the API\n\t\t\t * and it would create other problems. For example:\n\t\t\t *  - If I create a tween of elementA, that tween instance may suddenly change its target to include 50 other elements (unintuitive if I specifically defined the target I wanted)\n\t\t\t *  - We can't just create new independent tweens because otherwise, what happens if the original/parent tween is reversed or pause or dropped into a TimelineLite for tight control? You'd expect that tween's behavior to affect all the others.\n\t\t\t *  - Analyzing every style property of every child before and after the tween is an expensive operation when there are many children, so this behavior shouldn't be imposed on all className tweens by default, especially since it's probably rare that this extra functionality is needed.\n\t\t\t *\n\t\t\t * @param {Object} target object to be tweened\n\t\t\t * @param {number} Duration in seconds (or frames for frames-based tweens)\n\t\t\t * @param {Object} Object containing the end values, like {className:\"newClass\", ease:Linear.easeNone}\n\t\t\t * @return {Array} An array of TweenLite instances\n\t\t\t */\n\t\t\tCSSPlugin.cascadeTo = function(target, duration, vars) {\n\t\t\t\tvar tween = TweenLite.to(target, duration, vars),\n\t\t\t\t\tresults = [tween],\n\t\t\t\t\tb = [],\n\t\t\t\t\te = [],\n\t\t\t\t\ttargets = [],\n\t\t\t\t\t_reservedProps = TweenLite._internals.reservedProps,\n\t\t\t\t\ti, difs, p, from;\n\t\t\t\ttarget = tween._targets || tween.target;\n\t\t\t\t_getChildStyles(target, b, targets);\n\t\t\t\ttween.render(duration, true, true);\n\t\t\t\t_getChildStyles(target, e);\n\t\t\t\ttween.render(0, true, true);\n\t\t\t\ttween._enabled(true);\n\t\t\t\ti = targets.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tdifs = _cssDif(targets[i], b[i], e[i]);\n\t\t\t\t\tif (difs.firstMPT) {\n\t\t\t\t\t\tdifs = difs.difs;\n\t\t\t\t\t\tfor (p in vars) {\n\t\t\t\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\t\t\t\tdifs[p] = vars[p];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfrom = {};\n\t\t\t\t\t\tfor (p in difs) {\n\t\t\t\t\t\t\tfrom[p] = b[i][p];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresults.push(TweenLite.fromTo(targets[i], duration, from, difs));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn results;\n\t\t\t};\n\t\n\t\t\tTweenPlugin.activate([CSSPlugin]);\n\t\t\treturn CSSPlugin;\n\t\n\t\t}, true);\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * RoundPropsPlugin\n\t * ----------------------------------------------------------------\n\t */\n\t\t(function() {\n\t\n\t\t\tvar RoundPropsPlugin = _gsScope._gsDefine.plugin({\n\t\t\t\t\tpropName: \"roundProps\",\n\t\t\t\t\tversion: \"1.6.0\",\n\t\t\t\t\tpriority: -1,\n\t\t\t\t\tAPI: 2,\n\t\n\t\t\t\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\t\tinit: function(target, value, tween) {\n\t\t\t\t\t\tthis._tween = tween;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\n\t\t\t\t}),\n\t\t\t\t_roundLinkedList = function(node) {\n\t\t\t\t\twhile (node) {\n\t\t\t\t\t\tif (!node.f && !node.blob) {\n\t\t\t\t\t\t\tnode.m = Math.round;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode = node._next;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tp = RoundPropsPlugin.prototype;\n\t\n\t\t\tp._onInitAllProps = function() {\n\t\t\t\tvar tween = this._tween,\n\t\t\t\t\trp = (tween.vars.roundProps.join) ? tween.vars.roundProps : tween.vars.roundProps.split(\",\"),\n\t\t\t\t\ti = rp.length,\n\t\t\t\t\tlookup = {},\n\t\t\t\t\trpt = tween._propLookup.roundProps,\n\t\t\t\t\tprop, pt, next;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tlookup[rp[i]] = Math.round;\n\t\t\t\t}\n\t\t\t\ti = rp.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tprop = rp[i];\n\t\t\t\t\tpt = tween._firstPT;\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tnext = pt._next; //record here, because it may get removed\n\t\t\t\t\t\tif (pt.pg) {\n\t\t\t\t\t\t\tpt.t._mod(lookup);\n\t\t\t\t\t\t} else if (pt.n === prop) {\n\t\t\t\t\t\t\tif (pt.f === 2 && pt.t) { //a blob (text containing multiple numeric values)\n\t\t\t\t\t\t\t\t_roundLinkedList(pt.t._firstPT);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._add(pt.t, prop, pt.s, pt.c);\n\t\t\t\t\t\t\t\t//remove from linked list\n\t\t\t\t\t\t\t\tif (next) {\n\t\t\t\t\t\t\t\t\tnext._prev = pt._prev;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\t\tpt._prev._next = next;\n\t\t\t\t\t\t\t\t} else if (tween._firstPT === pt) {\n\t\t\t\t\t\t\t\t\ttween._firstPT = next;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\t\ttween._propLookup[prop] = rpt;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\n\t\t\tp._add = function(target, p, s, c) {\n\t\t\t\tthis._addTween(target, p, s, s + c, p, Math.round);\n\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t};\n\t\n\t\t}());\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * AttrPlugin\n\t * ----------------------------------------------------------------\n\t */\n\t\n\t\t(function() {\n\t\n\t\t\t_gsScope._gsDefine.plugin({\n\t\t\t\tpropName: \"attr\",\n\t\t\t\tAPI: 2,\n\t\t\t\tversion: \"0.6.0\",\n\t\n\t\t\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\tinit: function(target, value, tween, index) {\n\t\t\t\t\tvar p, end;\n\t\t\t\t\tif (typeof(target.setAttribute) !== \"function\") {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tfor (p in value) {\n\t\t\t\t\t\tend = value[p];\n\t\t\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\t\t\tend = end(index, target);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._addTween(target, \"setAttribute\", target.getAttribute(p) + \"\", end + \"\", p, false, p);\n\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\n\t\t\t});\n\t\n\t\t}());\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * DirectionalRotationPlugin\n\t * ----------------------------------------------------------------\n\t */\n\t\t_gsScope._gsDefine.plugin({\n\t\t\tpropName: \"directionalRotation\",\n\t\t\tversion: \"0.3.0\",\n\t\t\tAPI: 2,\n\t\n\t\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\tinit: function(target, value, tween, index) {\n\t\t\t\tif (typeof(value) !== \"object\") {\n\t\t\t\t\tvalue = {rotation:value};\n\t\t\t\t}\n\t\t\t\tthis.finals = {};\n\t\t\t\tvar cap = (value.useRadians === true) ? Math.PI * 2 : 360,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tp, v, start, end, dif, split;\n\t\t\t\tfor (p in value) {\n\t\t\t\t\tif (p !== \"useRadians\") {\n\t\t\t\t\t\tend = value[p];\n\t\t\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\t\t\tend = end(index, target);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsplit = (end + \"\").split(\"_\");\n\t\t\t\t\t\tv = split[0];\n\t\t\t\t\t\tstart = parseFloat( (typeof(target[p]) !== \"function\") ? target[p] : target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ]() );\n\t\t\t\t\t\tend = this.finals[p] = (typeof(v) === \"string\" && v.charAt(1) === \"=\") ? start + parseInt(v.charAt(0) + \"1\", 10) * Number(v.substr(2)) : Number(v) || 0;\n\t\t\t\t\t\tdif = end - start;\n\t\t\t\t\t\tif (split.length) {\n\t\t\t\t\t\t\tv = split.join(\"_\");\n\t\t\t\t\t\t\tif (v.indexOf(\"short\") !== -1) {\n\t\t\t\t\t\t\t\tdif = dif % cap;\n\t\t\t\t\t\t\t\tif (dif !== dif % (cap / 2)) {\n\t\t\t\t\t\t\t\t\tdif = (dif < 0) ? dif + cap : dif - cap;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (v.indexOf(\"_cw\") !== -1 && dif < 0) {\n\t\t\t\t\t\t\t\tdif = ((dif + cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t\t} else if (v.indexOf(\"ccw\") !== -1 && dif > 0) {\n\t\t\t\t\t\t\t\tdif = ((dif - cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (dif > min || dif < -min) {\n\t\t\t\t\t\t\tthis._addTween(target, p, start, start + dif, p);\n\t\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t},\n\t\n\t\t\t//called each time the values should be updated, and the ratio gets passed as the only parameter (typically it's a value between 0 and 1, but it can exceed those when using an ease like Elastic.easeOut or Back.easeOut, etc.)\n\t\t\tset: function(ratio) {\n\t\t\t\tvar pt;\n\t\t\t\tif (ratio !== 1) {\n\t\t\t\t\tthis._super.setRatio.call(this, ratio);\n\t\t\t\t} else {\n\t\t\t\t\tpt = this._firstPT;\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\t\tpt.t[pt.p](this.finals[pt.p]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.t[pt.p] = this.finals[pt.p];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t})._autoCSS = true;\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * EasePack\n\t * ----------------------------------------------------------------\n\t */\n\t\t_gsScope._gsDefine(\"easing.Back\", [\"easing.Ease\"], function(Ease) {\n\t\t\t\n\t\t\tvar w = (_gsScope.GreenSockGlobals || _gsScope),\n\t\t\t\tgs = w.com.greensock,\n\t\t\t\t_2PI = Math.PI * 2,\n\t\t\t\t_HALF_PI = Math.PI / 2,\n\t\t\t\t_class = gs._class,\n\t\t\t\t_create = function(n, f) {\n\t\t\t\t\tvar C = _class(\"easing.\" + n, function(){}, true),\n\t\t\t\t\t\tp = C.prototype = new Ease();\n\t\t\t\t\tp.constructor = C;\n\t\t\t\t\tp.getRatio = f;\n\t\t\t\t\treturn C;\n\t\t\t\t},\n\t\t\t\t_easeReg = Ease.register || function(){}, //put an empty function in place just as a safety measure in case someone loads an OLD version of TweenLite.js where Ease.register doesn't exist.\n\t\t\t\t_wrap = function(name, EaseOut, EaseIn, EaseInOut, aliases) {\n\t\t\t\t\tvar C = _class(\"easing.\"+name, {\n\t\t\t\t\t\teaseOut:new EaseOut(),\n\t\t\t\t\t\teaseIn:new EaseIn(),\n\t\t\t\t\t\teaseInOut:new EaseInOut()\n\t\t\t\t\t}, true);\n\t\t\t\t\t_easeReg(C, name);\n\t\t\t\t\treturn C;\n\t\t\t\t},\n\t\t\t\tEasePoint = function(time, value, next) {\n\t\t\t\t\tthis.t = time;\n\t\t\t\t\tthis.v = value;\n\t\t\t\t\tif (next) {\n\t\t\t\t\t\tthis.next = next;\n\t\t\t\t\t\tnext.prev = this;\n\t\t\t\t\t\tthis.c = next.v - value;\n\t\t\t\t\t\tthis.gap = next.t - time;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\n\t\t\t\t//Back\n\t\t\t\t_createBack = function(n, f) {\n\t\t\t\t\tvar C = _class(\"easing.\" + n, function(overshoot) {\n\t\t\t\t\t\t\tthis._p1 = (overshoot || overshoot === 0) ? overshoot : 1.70158;\n\t\t\t\t\t\t\tthis._p2 = this._p1 * 1.525;\n\t\t\t\t\t\t}, true),\n\t\t\t\t\t\tp = C.prototype = new Ease();\n\t\t\t\t\tp.constructor = C;\n\t\t\t\t\tp.getRatio = f;\n\t\t\t\t\tp.config = function(overshoot) {\n\t\t\t\t\t\treturn new C(overshoot);\n\t\t\t\t\t};\n\t\t\t\t\treturn C;\n\t\t\t\t},\n\t\n\t\t\t\tBack = _wrap(\"Back\",\n\t\t\t\t\t_createBack(\"BackOut\", function(p) {\n\t\t\t\t\t\treturn ((p = p - 1) * p * ((this._p1 + 1) * p + this._p1) + 1);\n\t\t\t\t\t}),\n\t\t\t\t\t_createBack(\"BackIn\", function(p) {\n\t\t\t\t\t\treturn p * p * ((this._p1 + 1) * p - this._p1);\n\t\t\t\t\t}),\n\t\t\t\t\t_createBack(\"BackInOut\", function(p) {\n\t\t\t\t\t\treturn ((p *= 2) < 1) ? 0.5 * p * p * ((this._p2 + 1) * p - this._p2) : 0.5 * ((p -= 2) * p * ((this._p2 + 1) * p + this._p2) + 2);\n\t\t\t\t\t})\n\t\t\t\t),\n\t\n\t\n\t\t\t\t//SlowMo\n\t\t\t\tSlowMo = _class(\"easing.SlowMo\", function(linearRatio, power, yoyoMode) {\n\t\t\t\t\tpower = (power || power === 0) ? power : 0.7;\n\t\t\t\t\tif (linearRatio == null) {\n\t\t\t\t\t\tlinearRatio = 0.7;\n\t\t\t\t\t} else if (linearRatio > 1) {\n\t\t\t\t\t\tlinearRatio = 1;\n\t\t\t\t\t}\n\t\t\t\t\tthis._p = (linearRatio !== 1) ? power : 0;\n\t\t\t\t\tthis._p1 = (1 - linearRatio) / 2;\n\t\t\t\t\tthis._p2 = linearRatio;\n\t\t\t\t\tthis._p3 = this._p1 + this._p2;\n\t\t\t\t\tthis._calcEnd = (yoyoMode === true);\n\t\t\t\t}, true),\n\t\t\t\tp = SlowMo.prototype = new Ease(),\n\t\t\t\tSteppedEase, RoughEase, _createElastic;\n\t\n\t\t\tp.constructor = SlowMo;\n\t\t\tp.getRatio = function(p) {\n\t\t\t\tvar r = p + (0.5 - p) * this._p;\n\t\t\t\tif (p < this._p1) {\n\t\t\t\t\treturn this._calcEnd ? 1 - ((p = 1 - (p / this._p1)) * p) : r - ((p = 1 - (p / this._p1)) * p * p * p * r);\n\t\t\t\t} else if (p > this._p3) {\n\t\t\t\t\treturn this._calcEnd ? 1 - (p = (p - this._p3) / this._p1) * p : r + ((p - r) * (p = (p - this._p3) / this._p1) * p * p * p);\n\t\t\t\t}\n\t\t\t\treturn this._calcEnd ? 1 : r;\n\t\t\t};\n\t\t\tSlowMo.ease = new SlowMo(0.7, 0.7);\n\t\n\t\t\tp.config = SlowMo.config = function(linearRatio, power, yoyoMode) {\n\t\t\t\treturn new SlowMo(linearRatio, power, yoyoMode);\n\t\t\t};\n\t\n\t\n\t\t\t//SteppedEase\n\t\t\tSteppedEase = _class(\"easing.SteppedEase\", function(steps) {\n\t\t\t\t\tsteps = steps || 1;\n\t\t\t\t\tthis._p1 = 1 / steps;\n\t\t\t\t\tthis._p2 = steps + 1;\n\t\t\t\t}, true);\n\t\t\tp = SteppedEase.prototype = new Ease();\n\t\t\tp.constructor = SteppedEase;\n\t\t\tp.getRatio = function(p) {\n\t\t\t\tif (p < 0) {\n\t\t\t\t\tp = 0;\n\t\t\t\t} else if (p >= 1) {\n\t\t\t\t\tp = 0.999999999;\n\t\t\t\t}\n\t\t\t\treturn ((this._p2 * p) >> 0) * this._p1;\n\t\t\t};\n\t\t\tp.config = SteppedEase.config = function(steps) {\n\t\t\t\treturn new SteppedEase(steps);\n\t\t\t};\n\t\n\t\n\t\t\t//RoughEase\n\t\t\tRoughEase = _class(\"easing.RoughEase\", function(vars) {\n\t\t\t\tvars = vars || {};\n\t\t\t\tvar taper = vars.taper || \"none\",\n\t\t\t\t\ta = [],\n\t\t\t\t\tcnt = 0,\n\t\t\t\t\tpoints = (vars.points || 20) | 0,\n\t\t\t\t\ti = points,\n\t\t\t\t\trandomize = (vars.randomize !== false),\n\t\t\t\t\tclamp = (vars.clamp === true),\n\t\t\t\t\ttemplate = (vars.template instanceof Ease) ? vars.template : null,\n\t\t\t\t\tstrength = (typeof(vars.strength) === \"number\") ? vars.strength * 0.4 : 0.4,\n\t\t\t\t\tx, y, bump, invX, obj, pnt;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tx = randomize ? Math.random() : (1 / points) * i;\n\t\t\t\t\ty = template ? template.getRatio(x) : x;\n\t\t\t\t\tif (taper === \"none\") {\n\t\t\t\t\t\tbump = strength;\n\t\t\t\t\t} else if (taper === \"out\") {\n\t\t\t\t\t\tinvX = 1 - x;\n\t\t\t\t\t\tbump = invX * invX * strength;\n\t\t\t\t\t} else if (taper === \"in\") {\n\t\t\t\t\t\tbump = x * x * strength;\n\t\t\t\t\t} else if (x < 0.5) {  //\"both\" (start)\n\t\t\t\t\t\tinvX = x * 2;\n\t\t\t\t\t\tbump = invX * invX * 0.5 * strength;\n\t\t\t\t\t} else {\t\t\t\t//\"both\" (end)\n\t\t\t\t\t\tinvX = (1 - x) * 2;\n\t\t\t\t\t\tbump = invX * invX * 0.5 * strength;\n\t\t\t\t\t}\n\t\t\t\t\tif (randomize) {\n\t\t\t\t\t\ty += (Math.random() * bump) - (bump * 0.5);\n\t\t\t\t\t} else if (i % 2) {\n\t\t\t\t\t\ty += bump * 0.5;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ty -= bump * 0.5;\n\t\t\t\t\t}\n\t\t\t\t\tif (clamp) {\n\t\t\t\t\t\tif (y > 1) {\n\t\t\t\t\t\t\ty = 1;\n\t\t\t\t\t\t} else if (y < 0) {\n\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ta[cnt++] = {x:x, y:y};\n\t\t\t\t}\n\t\t\t\ta.sort(function(a, b) {\n\t\t\t\t\treturn a.x - b.x;\n\t\t\t\t});\n\t\n\t\t\t\tpnt = new EasePoint(1, 1, null);\n\t\t\t\ti = points;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tobj = a[i];\n\t\t\t\t\tpnt = new EasePoint(obj.x, obj.y, pnt);\n\t\t\t\t}\n\t\n\t\t\t\tthis._prev = new EasePoint(0, 0, (pnt.t !== 0) ? pnt : pnt.next);\n\t\t\t}, true);\n\t\t\tp = RoughEase.prototype = new Ease();\n\t\t\tp.constructor = RoughEase;\n\t\t\tp.getRatio = function(p) {\n\t\t\t\tvar pnt = this._prev;\n\t\t\t\tif (p > pnt.t) {\n\t\t\t\t\twhile (pnt.next && p >= pnt.t) {\n\t\t\t\t\t\tpnt = pnt.next;\n\t\t\t\t\t}\n\t\t\t\t\tpnt = pnt.prev;\n\t\t\t\t} else {\n\t\t\t\t\twhile (pnt.prev && p <= pnt.t) {\n\t\t\t\t\t\tpnt = pnt.prev;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._prev = pnt;\n\t\t\t\treturn (pnt.v + ((p - pnt.t) / pnt.gap) * pnt.c);\n\t\t\t};\n\t\t\tp.config = function(vars) {\n\t\t\t\treturn new RoughEase(vars);\n\t\t\t};\n\t\t\tRoughEase.ease = new RoughEase();\n\t\n\t\n\t\t\t//Bounce\n\t\t\t_wrap(\"Bounce\",\n\t\t\t\t_create(\"BounceOut\", function(p) {\n\t\t\t\t\tif (p < 1 / 2.75) {\n\t\t\t\t\t\treturn 7.5625 * p * p;\n\t\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\t\treturn 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n\t\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\t\treturn 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n\t\t\t\t\t}\n\t\t\t\t\treturn 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n\t\t\t\t}),\n\t\t\t\t_create(\"BounceIn\", function(p) {\n\t\t\t\t\tif ((p = 1 - p) < 1 / 2.75) {\n\t\t\t\t\t\treturn 1 - (7.5625 * p * p);\n\t\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\t\treturn 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\n\t\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\t\treturn 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\n\t\t\t\t\t}\n\t\t\t\t\treturn 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\n\t\t\t\t}),\n\t\t\t\t_create(\"BounceInOut\", function(p) {\n\t\t\t\t\tvar invert = (p < 0.5);\n\t\t\t\t\tif (invert) {\n\t\t\t\t\t\tp = 1 - (p * 2);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tp = (p * 2) - 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (p < 1 / 2.75) {\n\t\t\t\t\t\tp = 7.5625 * p * p;\n\t\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\t\tp = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n\t\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\t\tp = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tp = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n\t\t\t\t\t}\n\t\t\t\t\treturn invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\n\t\t\t\t})\n\t\t\t);\n\t\n\t\n\t\t\t//CIRC\n\t\t\t_wrap(\"Circ\",\n\t\t\t\t_create(\"CircOut\", function(p) {\n\t\t\t\t\treturn Math.sqrt(1 - (p = p - 1) * p);\n\t\t\t\t}),\n\t\t\t\t_create(\"CircIn\", function(p) {\n\t\t\t\t\treturn -(Math.sqrt(1 - (p * p)) - 1);\n\t\t\t\t}),\n\t\t\t\t_create(\"CircInOut\", function(p) {\n\t\t\t\t\treturn ((p*=2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\n\t\t\t\t})\n\t\t\t);\n\t\n\t\n\t\t\t//Elastic\n\t\t\t_createElastic = function(n, f, def) {\n\t\t\t\tvar C = _class(\"easing.\" + n, function(amplitude, period) {\n\t\t\t\t\t\tthis._p1 = (amplitude >= 1) ? amplitude : 1; //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1.\n\t\t\t\t\t\tthis._p2 = (period || def) / (amplitude < 1 ? amplitude : 1);\n\t\t\t\t\t\tthis._p3 = this._p2 / _2PI * (Math.asin(1 / this._p1) || 0);\n\t\t\t\t\t\tthis._p2 = _2PI / this._p2; //precalculate to optimize\n\t\t\t\t\t}, true),\n\t\t\t\t\tp = C.prototype = new Ease();\n\t\t\t\tp.constructor = C;\n\t\t\t\tp.getRatio = f;\n\t\t\t\tp.config = function(amplitude, period) {\n\t\t\t\t\treturn new C(amplitude, period);\n\t\t\t\t};\n\t\t\t\treturn C;\n\t\t\t};\n\t\t\t_wrap(\"Elastic\",\n\t\t\t\t_createElastic(\"ElasticOut\", function(p) {\n\t\t\t\t\treturn this._p1 * Math.pow(2, -10 * p) * Math.sin( (p - this._p3) * this._p2 ) + 1;\n\t\t\t\t}, 0.3),\n\t\t\t\t_createElastic(\"ElasticIn\", function(p) {\n\t\t\t\t\treturn -(this._p1 * Math.pow(2, 10 * (p -= 1)) * Math.sin( (p - this._p3) * this._p2 ));\n\t\t\t\t}, 0.3),\n\t\t\t\t_createElastic(\"ElasticInOut\", function(p) {\n\t\t\t\t\treturn ((p *= 2) < 1) ? -0.5 * (this._p1 * Math.pow(2, 10 * (p -= 1)) * Math.sin( (p - this._p3) * this._p2)) : this._p1 * Math.pow(2, -10 *(p -= 1)) * Math.sin( (p - this._p3) * this._p2 ) * 0.5 + 1;\n\t\t\t\t}, 0.45)\n\t\t\t);\n\t\n\t\n\t\t\t//Expo\n\t\t\t_wrap(\"Expo\",\n\t\t\t\t_create(\"ExpoOut\", function(p) {\n\t\t\t\t\treturn 1 - Math.pow(2, -10 * p);\n\t\t\t\t}),\n\t\t\t\t_create(\"ExpoIn\", function(p) {\n\t\t\t\t\treturn Math.pow(2, 10 * (p - 1)) - 0.001;\n\t\t\t\t}),\n\t\t\t\t_create(\"ExpoInOut\", function(p) {\n\t\t\t\t\treturn ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\t\t\t\t})\n\t\t\t);\n\t\n\t\n\t\t\t//Sine\n\t\t\t_wrap(\"Sine\",\n\t\t\t\t_create(\"SineOut\", function(p) {\n\t\t\t\t\treturn Math.sin(p * _HALF_PI);\n\t\t\t\t}),\n\t\t\t\t_create(\"SineIn\", function(p) {\n\t\t\t\t\treturn -Math.cos(p * _HALF_PI) + 1;\n\t\t\t\t}),\n\t\t\t\t_create(\"SineInOut\", function(p) {\n\t\t\t\t\treturn -0.5 * (Math.cos(Math.PI * p) - 1);\n\t\t\t\t})\n\t\t\t);\n\t\n\t\t\t_class(\"easing.EaseLookup\", {\n\t\t\t\t\tfind:function(s) {\n\t\t\t\t\t\treturn Ease.map[s];\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\n\t\t\t//register the non-standard eases\n\t\t\t_easeReg(w.SlowMo, \"SlowMo\", \"ease,\");\n\t\t\t_easeReg(RoughEase, \"RoughEase\", \"ease,\");\n\t\t\t_easeReg(SteppedEase, \"SteppedEase\", \"ease,\");\n\t\n\t\t\treturn Back;\n\t\t\t\n\t\t}, true);\n\t\n\t\n\t});\n\t\n\tif (_gsScope._gsDefine) { _gsScope._gsQueue.pop()(); } //necessary in case TweenLite was already loaded separately.\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * Base classes like TweenLite, SimpleTimeline, Ease, Ticker, etc.\n\t * ----------------------------------------------------------------\n\t */\n\t(function(window, moduleName) {\n\t\n\t\t\t\"use strict\";\n\t\t\tvar _exports = {},\n\t\t\t\t_globals = window.GreenSockGlobals = window.GreenSockGlobals || window;\n\t\t\tif (_globals.TweenLite) {\n\t\t\t\treturn; //in case the core set of classes is already loaded, don't instantiate twice.\n\t\t\t}\n\t\t\tvar _namespace = function(ns) {\n\t\t\t\t\tvar a = ns.split(\".\"),\n\t\t\t\t\t\tp = _globals, i;\n\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\tp[a[i]] = p = p[a[i]] || {};\n\t\t\t\t\t}\n\t\t\t\t\treturn p;\n\t\t\t\t},\n\t\t\t\tgs = _namespace(\"com.greensock\"),\n\t\t\t\t_tinyNum = 0.0000000001,\n\t\t\t\t_slice = function(a) { //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\tvar b = [],\n\t\t\t\t\t\tl = a.length,\n\t\t\t\t\t\ti;\n\t\t\t\t\tfor (i = 0; i !== l; b.push(a[i++])) {}\n\t\t\t\t\treturn b;\n\t\t\t\t},\n\t\t\t\t_emptyFunc = function() {},\n\t\t\t\t_isArray = (function() { //works around issues in iframe environments where the Array global isn't shared, thus if the object originates in a different window/iframe, \"(obj instanceof Array)\" will evaluate false. We added some speed optimizations to avoid Object.prototype.toString.call() unless it's absolutely necessary because it's VERY slow (like 20x slower)\n\t\t\t\t\tvar toString = Object.prototype.toString,\n\t\t\t\t\t\tarray = toString.call([]);\n\t\t\t\t\treturn function(obj) {\n\t\t\t\t\t\treturn obj != null && (obj instanceof Array || (typeof(obj) === \"object\" && !!obj.push && toString.call(obj) === array));\n\t\t\t\t\t};\n\t\t\t\t}()),\n\t\t\t\ta, i, p, _ticker, _tickerActive,\n\t\t\t\t_defLookup = {},\n\t\n\t\t\t\t/**\n\t\t\t\t * @constructor\n\t\t\t\t * Defines a GreenSock class, optionally with an array of dependencies that must be instantiated first and passed into the definition.\n\t\t\t\t * This allows users to load GreenSock JS files in any order even if they have interdependencies (like CSSPlugin extends TweenPlugin which is\n\t\t\t\t * inside TweenLite.js, but if CSSPlugin is loaded first, it should wait to run its code until TweenLite.js loads and instantiates TweenPlugin\n\t\t\t\t * and then pass TweenPlugin to CSSPlugin's definition). This is all done automatically and internally.\n\t\t\t\t *\n\t\t\t\t * Every definition will be added to a \"com.greensock\" global object (typically window, but if a window.GreenSockGlobals object is found,\n\t\t\t\t * it will go there as of v1.7). For example, TweenLite will be found at window.com.greensock.TweenLite and since it's a global class that should be available anywhere,\n\t\t\t\t * it is ALSO referenced at window.TweenLite. However some classes aren't considered global, like the base com.greensock.core.Animation class, so\n\t\t\t\t * those will only be at the package like window.com.greensock.core.Animation. Again, if you define a GreenSockGlobals object on the window, everything\n\t\t\t\t * gets tucked neatly inside there instead of on the window directly. This allows you to do advanced things like load multiple versions of GreenSock\n\t\t\t\t * files and put them into distinct objects (imagine a banner ad uses a newer version but the main site uses an older one). In that case, you could\n\t\t\t\t * sandbox the banner one like:\n\t\t\t\t *\n\t\t\t\t * <script>\n\t\t\t\t *     var gs = window.GreenSockGlobals = {}; //the newer version we're about to load could now be referenced in a \"gs\" object, like gs.TweenLite.to(...). Use whatever alias you want as long as it's unique, \"gs\" or \"banner\" or whatever.\n\t\t\t\t * </script>\n\t\t\t\t * <script src=\"js/greensock/v1.7/TweenMax.js\"></script>\n\t\t\t\t * <script>\n\t\t\t\t *     window.GreenSockGlobals = window._gsQueue = window._gsDefine = null; //reset it back to null (along with the special _gsQueue variable) so that the next load of TweenMax affects the window and we can reference things directly like TweenLite.to(...)\n\t\t\t\t * </script>\n\t\t\t\t * <script src=\"js/greensock/v1.6/TweenMax.js\"></script>\n\t\t\t\t * <script>\n\t\t\t\t *     gs.TweenLite.to(...); //would use v1.7\n\t\t\t\t *     TweenLite.to(...); //would use v1.6\n\t\t\t\t * </script>\n\t\t\t\t *\n\t\t\t\t * @param {!string} ns The namespace of the class definition, leaving off \"com.greensock.\" as that's assumed. For example, \"TweenLite\" or \"plugins.CSSPlugin\" or \"easing.Back\".\n\t\t\t\t * @param {!Array.<string>} dependencies An array of dependencies (described as their namespaces minus \"com.greensock.\" prefix). For example [\"TweenLite\",\"plugins.TweenPlugin\",\"core.Animation\"]\n\t\t\t\t * @param {!function():Object} func The function that should be called and passed the resolved dependencies which will return the actual class for this definition.\n\t\t\t\t * @param {boolean=} global If true, the class will be added to the global scope (typically window unless you define a window.GreenSockGlobals object)\n\t\t\t\t */\n\t\t\t\tDefinition = function(ns, dependencies, func, global) {\n\t\t\t\t\tthis.sc = (_defLookup[ns]) ? _defLookup[ns].sc : []; //subclasses\n\t\t\t\t\t_defLookup[ns] = this;\n\t\t\t\t\tthis.gsClass = null;\n\t\t\t\t\tthis.func = func;\n\t\t\t\t\tvar _classes = [];\n\t\t\t\t\tthis.check = function(init) {\n\t\t\t\t\t\tvar i = dependencies.length,\n\t\t\t\t\t\t\tmissing = i,\n\t\t\t\t\t\t\tcur, a, n, cl, hasModule;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif ((cur = _defLookup[dependencies[i]] || new Definition(dependencies[i], [])).gsClass) {\n\t\t\t\t\t\t\t\t_classes[i] = cur.gsClass;\n\t\t\t\t\t\t\t\tmissing--;\n\t\t\t\t\t\t\t} else if (init) {\n\t\t\t\t\t\t\t\tcur.sc.push(this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (missing === 0 && func) {\n\t\t\t\t\t\t\ta = (\"com.greensock.\" + ns).split(\".\");\n\t\t\t\t\t\t\tn = a.pop();\n\t\t\t\t\t\t\tcl = _namespace(a.join(\".\"))[n] = this.gsClass = func.apply(func, _classes);\n\t\n\t\t\t\t\t\t\t//exports to multiple environments\n\t\t\t\t\t\t\tif (global) {\n\t\t\t\t\t\t\t\t_globals[n] = _exports[n] = cl; //provides a way to avoid global namespace pollution. By default, the main classes like TweenLite, Power1, Strong, etc. are added to window unless a GreenSockGlobals is defined. So if you want to have things added to a custom object instead, just do something like window.GreenSockGlobals = {} before loading any GreenSock files. You can even set up an alias like window.GreenSockGlobals = windows.gs = {} so that you can access everything like gs.TweenLite. Also remember that ALL classes are added to the window.com.greensock object (in their respective packages, like com.greensock.easing.Power1, com.greensock.TweenLite, etc.)\n\t\t\t\t\t\t\t\thasModule = (typeof(module) !== \"undefined\" && module.exports);\n\t\t\t\t\t\t\t\tif (!hasModule && \"function\" === \"function\" && __webpack_require__(17)){ //AMD\n\t\t\t\t\t\t\t\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { return cl; }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\t\t\t\t\t\t\t} else if (hasModule){ //node\n\t\t\t\t\t\t\t\t\tif (ns === moduleName) {\n\t\t\t\t\t\t\t\t\t\tmodule.exports = _exports[moduleName] = cl;\n\t\t\t\t\t\t\t\t\t\tfor (i in _exports) {\n\t\t\t\t\t\t\t\t\t\t\tcl[i] = _exports[i];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else if (_exports[moduleName]) {\n\t\t\t\t\t\t\t\t\t\t_exports[moduleName][n] = cl;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor (i = 0; i < this.sc.length; i++) {\n\t\t\t\t\t\t\t\tthis.sc[i].check();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tthis.check(true);\n\t\t\t\t},\n\t\n\t\t\t\t//used to create Definition instances (which basically registers a class that has dependencies).\n\t\t\t\t_gsDefine = window._gsDefine = function(ns, dependencies, func, global) {\n\t\t\t\t\treturn new Definition(ns, dependencies, func, global);\n\t\t\t\t},\n\t\n\t\t\t\t//a quick way to create a class that doesn't have any dependencies. Returns the class, but first registers it in the GreenSock namespace so that other classes can grab it (other classes might be dependent on the class).\n\t\t\t\t_class = gs._class = function(ns, func, global) {\n\t\t\t\t\tfunc = func || function() {};\n\t\t\t\t\t_gsDefine(ns, [], function(){ return func; }, global);\n\t\t\t\t\treturn func;\n\t\t\t\t};\n\t\n\t\t\t_gsDefine.globals = _globals;\n\t\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * Ease\n\t * ----------------------------------------------------------------\n\t */\n\t\t\tvar _baseParams = [0, 0, 1, 1],\n\t\t\t\t_blankArray = [],\n\t\t\t\tEase = _class(\"easing.Ease\", function(func, extraParams, type, power) {\n\t\t\t\t\tthis._func = func;\n\t\t\t\t\tthis._type = type || 0;\n\t\t\t\t\tthis._power = power || 0;\n\t\t\t\t\tthis._params = extraParams ? _baseParams.concat(extraParams) : _baseParams;\n\t\t\t\t}, true),\n\t\t\t\t_easeMap = Ease.map = {},\n\t\t\t\t_easeReg = Ease.register = function(ease, names, types, create) {\n\t\t\t\t\tvar na = names.split(\",\"),\n\t\t\t\t\t\ti = na.length,\n\t\t\t\t\t\tta = (types || \"easeIn,easeOut,easeInOut\").split(\",\"),\n\t\t\t\t\t\te, name, j, type;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tname = na[i];\n\t\t\t\t\t\te = create ? _class(\"easing.\"+name, null, true) : gs.easing[name] || {};\n\t\t\t\t\t\tj = ta.length;\n\t\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\t\ttype = ta[j];\n\t\t\t\t\t\t\t_easeMap[name + \".\" + type] = _easeMap[type + name] = e[type] = ease.getRatio ? ease : ease[type] || new ease();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\tp = Ease.prototype;\n\t\t\tp._calcEnd = false;\n\t\t\tp.getRatio = function(p) {\n\t\t\t\tif (this._func) {\n\t\t\t\t\tthis._params[0] = p;\n\t\t\t\t\treturn this._func.apply(null, this._params);\n\t\t\t\t}\n\t\t\t\tvar t = this._type,\n\t\t\t\t\tpw = this._power,\n\t\t\t\t\tr = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n\t\t\t\tif (pw === 1) {\n\t\t\t\t\tr *= r;\n\t\t\t\t} else if (pw === 2) {\n\t\t\t\t\tr *= r * r;\n\t\t\t\t} else if (pw === 3) {\n\t\t\t\t\tr *= r * r * r;\n\t\t\t\t} else if (pw === 4) {\n\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t}\n\t\t\t\treturn (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t\t};\n\t\n\t\t\t//create all the standard eases like Linear, Quad, Cubic, Quart, Quint, Strong, Power0, Power1, Power2, Power3, and Power4 (each with easeIn, easeOut, and easeInOut)\n\t\t\ta = [\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"];\n\t\t\ti = a.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tp = a[i]+\",Power\"+i;\n\t\t\t\t_easeReg(new Ease(null,null,1,i), p, \"easeOut\", true);\n\t\t\t\t_easeReg(new Ease(null,null,2,i), p, \"easeIn\" + ((i === 0) ? \",easeNone\" : \"\"));\n\t\t\t\t_easeReg(new Ease(null,null,3,i), p, \"easeInOut\");\n\t\t\t}\n\t\t\t_easeMap.linear = gs.easing.Linear.easeIn;\n\t\t\t_easeMap.swing = gs.easing.Quad.easeInOut; //for jQuery folks\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * EventDispatcher\n\t * ----------------------------------------------------------------\n\t */\n\t\t\tvar EventDispatcher = _class(\"events.EventDispatcher\", function(target) {\n\t\t\t\tthis._listeners = {};\n\t\t\t\tthis._eventTarget = target || this;\n\t\t\t});\n\t\t\tp = EventDispatcher.prototype;\n\t\n\t\t\tp.addEventListener = function(type, callback, scope, useParam, priority) {\n\t\t\t\tpriority = priority || 0;\n\t\t\t\tvar list = this._listeners[type],\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlistener, i;\n\t\t\t\tif (this === _ticker && !_tickerActive) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tif (list == null) {\n\t\t\t\t\tthis._listeners[type] = list = [];\n\t\t\t\t}\n\t\t\t\ti = list.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tlistener = list[i];\n\t\t\t\t\tif (listener.c === callback && listener.s === scope) {\n\t\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t\t} else if (index === 0 && listener.pr < priority) {\n\t\t\t\t\t\tindex = i + 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlist.splice(index, 0, {c:callback, s:scope, up:useParam, pr:priority});\n\t\t\t};\n\t\n\t\t\tp.removeEventListener = function(type, callback) {\n\t\t\t\tvar list = this._listeners[type], i;\n\t\t\t\tif (list) {\n\t\t\t\t\ti = list.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (list[i].c === callback) {\n\t\t\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tp.dispatchEvent = function(type) {\n\t\t\t\tvar list = this._listeners[type],\n\t\t\t\t\ti, t, listener;\n\t\t\t\tif (list) {\n\t\t\t\t\ti = list.length;\n\t\t\t\t\tif (i > 1) {\n\t\t\t\t\t\tlist = list.slice(0); //in case addEventListener() is called from within a listener/callback (otherwise the index could change, resulting in a skip)\n\t\t\t\t\t}\n\t\t\t\t\tt = this._eventTarget;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tlistener = list[i];\n\t\t\t\t\t\tif (listener) {\n\t\t\t\t\t\t\tif (listener.up) {\n\t\t\t\t\t\t\t\tlistener.c.call(listener.s || t, {type:type, target:t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlistener.c.call(listener.s || t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * Ticker\n\t * ----------------------------------------------------------------\n\t */\n\t \t\tvar _reqAnimFrame = window.requestAnimationFrame,\n\t\t\t\t_cancelAnimFrame = window.cancelAnimationFrame,\n\t\t\t\t_getTime = Date.now || function() {return new Date().getTime();},\n\t\t\t\t_lastUpdate = _getTime();\n\t\n\t\t\t//now try to determine the requestAnimationFrame and cancelAnimationFrame functions and if none are found, we'll use a setTimeout()/clearTimeout() polyfill.\n\t\t\ta = [\"ms\",\"moz\",\"webkit\",\"o\"];\n\t\t\ti = a.length;\n\t\t\twhile (--i > -1 && !_reqAnimFrame) {\n\t\t\t\t_reqAnimFrame = window[a[i] + \"RequestAnimationFrame\"];\n\t\t\t\t_cancelAnimFrame = window[a[i] + \"CancelAnimationFrame\"] || window[a[i] + \"CancelRequestAnimationFrame\"];\n\t\t\t}\n\t\n\t\t\t_class(\"Ticker\", function(fps, useRAF) {\n\t\t\t\tvar _self = this,\n\t\t\t\t\t_startTime = _getTime(),\n\t\t\t\t\t_useRAF = (useRAF !== false && _reqAnimFrame) ? \"auto\" : false,\n\t\t\t\t\t_lagThreshold = 500,\n\t\t\t\t\t_adjustedLag = 33,\n\t\t\t\t\t_tickWord = \"tick\", //helps reduce gc burden\n\t\t\t\t\t_fps, _req, _id, _gap, _nextTime,\n\t\t\t\t\t_tick = function(manual) {\n\t\t\t\t\t\tvar elapsed = _getTime() - _lastUpdate,\n\t\t\t\t\t\t\toverlap, dispatch;\n\t\t\t\t\t\tif (elapsed > _lagThreshold) {\n\t\t\t\t\t\t\t_startTime += elapsed - _adjustedLag;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_lastUpdate += elapsed;\n\t\t\t\t\t\t_self.time = (_lastUpdate - _startTime) / 1000;\n\t\t\t\t\t\toverlap = _self.time - _nextTime;\n\t\t\t\t\t\tif (!_fps || overlap > 0 || manual === true) {\n\t\t\t\t\t\t\t_self.frame++;\n\t\t\t\t\t\t\t_nextTime += overlap + (overlap >= _gap ? 0.004 : _gap - overlap);\n\t\t\t\t\t\t\tdispatch = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (manual !== true) { //make sure the request is made before we dispatch the \"tick\" event so that timing is maintained. Otherwise, if processing the \"tick\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\n\t\t\t\t\t\t\t_id = _req(_tick);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (dispatch) {\n\t\t\t\t\t\t\t_self.dispatchEvent(_tickWord);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\n\t\t\t\tEventDispatcher.call(_self);\n\t\t\t\t_self.time = _self.frame = 0;\n\t\t\t\t_self.tick = function() {\n\t\t\t\t\t_tick(true);\n\t\t\t\t};\n\t\n\t\t\t\t_self.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t\t\t_lagThreshold = threshold || (1 / _tinyNum); //zero should be interpreted as basically unlimited\n\t\t\t\t\t_adjustedLag = Math.min(adjustedLag, _lagThreshold, 0);\n\t\t\t\t};\n\t\n\t\t\t\t_self.sleep = function() {\n\t\t\t\t\tif (_id == null) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!_useRAF || !_cancelAnimFrame) {\n\t\t\t\t\t\tclearTimeout(_id);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_cancelAnimFrame(_id);\n\t\t\t\t\t}\n\t\t\t\t\t_req = _emptyFunc;\n\t\t\t\t\t_id = null;\n\t\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t\t_tickerActive = false;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\t\t_self.wake = function(seamless) {\n\t\t\t\t\tif (_id !== null) {\n\t\t\t\t\t\t_self.sleep();\n\t\t\t\t\t} else if (seamless) {\n\t\t\t\t\t\t_startTime += -_lastUpdate + (_lastUpdate = _getTime());\n\t\t\t\t\t} else if (_self.frame > 10) { //don't trigger lagSmoothing if we're just waking up, and make sure that at least 10 frames have elapsed because of the iOS bug that we work around below with the 1.5-second setTimout().\n\t\t\t\t\t\t_lastUpdate = _getTime() - _lagThreshold + 5;\n\t\t\t\t\t}\n\t\t\t\t\t_req = (_fps === 0) ? _emptyFunc : (!_useRAF || !_reqAnimFrame) ? function(f) { return setTimeout(f, ((_nextTime - _self.time) * 1000 + 1) | 0); } : _reqAnimFrame;\n\t\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t\t_tickerActive = true;\n\t\t\t\t\t}\n\t\t\t\t\t_tick(2);\n\t\t\t\t};\n\t\n\t\t\t\t_self.fps = function(value) {\n\t\t\t\t\tif (!arguments.length) {\n\t\t\t\t\t\treturn _fps;\n\t\t\t\t\t}\n\t\t\t\t\t_fps = value;\n\t\t\t\t\t_gap = 1 / (_fps || 60);\n\t\t\t\t\t_nextTime = this.time + _gap;\n\t\t\t\t\t_self.wake();\n\t\t\t\t};\n\t\n\t\t\t\t_self.useRAF = function(value) {\n\t\t\t\t\tif (!arguments.length) {\n\t\t\t\t\t\treturn _useRAF;\n\t\t\t\t\t}\n\t\t\t\t\t_self.sleep();\n\t\t\t\t\t_useRAF = value;\n\t\t\t\t\t_self.fps(_fps);\n\t\t\t\t};\n\t\t\t\t_self.fps(fps);\n\t\n\t\t\t\t//a bug in iOS 6 Safari occasionally prevents the requestAnimationFrame from working initially, so we use a 1.5-second timeout that automatically falls back to setTimeout() if it senses this condition.\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif (_useRAF === \"auto\" && _self.frame < 5 && document.visibilityState !== \"hidden\") {\n\t\t\t\t\t\t_self.useRAF(false);\n\t\t\t\t\t}\n\t\t\t\t}, 1500);\n\t\t\t});\n\t\n\t\t\tp = gs.Ticker.prototype = new gs.events.EventDispatcher();\n\t\t\tp.constructor = gs.Ticker;\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * Animation\n\t * ----------------------------------------------------------------\n\t */\n\t\t\tvar Animation = _class(\"core.Animation\", function(duration, vars) {\n\t\t\t\t\tthis.vars = vars = vars || {};\n\t\t\t\t\tthis._duration = this._totalDuration = duration || 0;\n\t\t\t\t\tthis._delay = Number(vars.delay) || 0;\n\t\t\t\t\tthis._timeScale = 1;\n\t\t\t\t\tthis._active = (vars.immediateRender === true);\n\t\t\t\t\tthis.data = vars.data;\n\t\t\t\t\tthis._reversed = (vars.reversed === true);\n\t\n\t\t\t\t\tif (!_rootTimeline) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!_tickerActive) { //some browsers (like iOS 6 Safari) shut down JavaScript execution when the tab is disabled and they [occasionally] neglect to start up requestAnimationFrame again when returning - this code ensures that the engine starts up again properly.\n\t\t\t\t\t\t_ticker.wake();\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar tl = this.vars.useFrames ? _rootFramesTimeline : _rootTimeline;\n\t\t\t\t\ttl.add(this, tl._time);\n\t\n\t\t\t\t\tif (this.vars.paused) {\n\t\t\t\t\t\tthis.paused(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\n\t\t\t_ticker = Animation.ticker = new gs.Ticker();\n\t\t\tp = Animation.prototype;\n\t\t\tp._dirty = p._gc = p._initted = p._paused = false;\n\t\t\tp._totalTime = p._time = 0;\n\t\t\tp._rawPrevTime = -1;\n\t\t\tp._next = p._last = p._onUpdate = p._timeline = p.timeline = null;\n\t\t\tp._paused = false;\n\t\n\t\n\t\t\t//some browsers (like iOS) occasionally drop the requestAnimationFrame event when the user switches to a different tab and then comes back again, so we use a 2-second setTimeout() to sense if/when that condition occurs and then wake() the ticker.\n\t\t\tvar _checkTimeout = function() {\n\t\t\t\t\tif (_tickerActive && _getTime() - _lastUpdate > 2000) {\n\t\t\t\t\t\t_ticker.wake();\n\t\t\t\t\t}\n\t\t\t\t\tsetTimeout(_checkTimeout, 2000);\n\t\t\t\t};\n\t\t\t_checkTimeout();\n\t\n\t\n\t\t\tp.play = function(from, suppressEvents) {\n\t\t\t\tif (from != null) {\n\t\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t\t}\n\t\t\t\treturn this.reversed(false).paused(false);\n\t\t\t};\n\t\n\t\t\tp.pause = function(atTime, suppressEvents) {\n\t\t\t\tif (atTime != null) {\n\t\t\t\t\tthis.seek(atTime, suppressEvents);\n\t\t\t\t}\n\t\t\t\treturn this.paused(true);\n\t\t\t};\n\t\n\t\t\tp.resume = function(from, suppressEvents) {\n\t\t\t\tif (from != null) {\n\t\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t\t}\n\t\t\t\treturn this.paused(false);\n\t\t\t};\n\t\n\t\t\tp.seek = function(time, suppressEvents) {\n\t\t\t\treturn this.totalTime(Number(time), suppressEvents !== false);\n\t\t\t};\n\t\n\t\t\tp.restart = function(includeDelay, suppressEvents) {\n\t\t\t\treturn this.reversed(false).paused(false).totalTime(includeDelay ? -this._delay : 0, (suppressEvents !== false), true);\n\t\t\t};\n\t\n\t\t\tp.reverse = function(from, suppressEvents) {\n\t\t\t\tif (from != null) {\n\t\t\t\t\tthis.seek((from || this.totalDuration()), suppressEvents);\n\t\t\t\t}\n\t\t\t\treturn this.reversed(true).paused(false);\n\t\t\t};\n\t\n\t\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t\t//stub - we override this method in subclasses.\n\t\t\t};\n\t\n\t\t\tp.invalidate = function() {\n\t\t\t\tthis._time = this._totalTime = 0;\n\t\t\t\tthis._initted = this._gc = false;\n\t\t\t\tthis._rawPrevTime = -1;\n\t\t\t\tif (this._gc || !this.timeline) {\n\t\t\t\t\tthis._enabled(true);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.isActive = function() {\n\t\t\t\tvar tl = this._timeline, //the 2 root timelines won't have a _timeline; they're always active.\n\t\t\t\t\tstartTime = this._startTime,\n\t\t\t\t\trawTime;\n\t\t\t\treturn (!tl || (!this._gc && !this._paused && tl.isActive() && (rawTime = tl.rawTime()) >= startTime && rawTime < startTime + this.totalDuration() / this._timeScale));\n\t\t\t};\n\t\n\t\t\tp._enabled = function (enabled, ignoreTimeline) {\n\t\t\t\tif (!_tickerActive) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tthis._gc = !enabled;\n\t\t\t\tthis._active = this.isActive();\n\t\t\t\tif (ignoreTimeline !== true) {\n\t\t\t\t\tif (enabled && !this.timeline) {\n\t\t\t\t\t\tthis._timeline.add(this, this._startTime - this._delay);\n\t\t\t\t\t} else if (!enabled && this.timeline) {\n\t\t\t\t\t\tthis._timeline._remove(this, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\n\t\n\t\t\tp._kill = function(vars, target) {\n\t\t\t\treturn this._enabled(false, false);\n\t\t\t};\n\t\n\t\t\tp.kill = function(vars, target) {\n\t\t\t\tthis._kill(vars, target);\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp._uncache = function(includeSelf) {\n\t\t\t\tvar tween = includeSelf ? this : this.timeline;\n\t\t\t\twhile (tween) {\n\t\t\t\t\ttween._dirty = true;\n\t\t\t\t\ttween = tween.timeline;\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp._swapSelfInParams = function(params) {\n\t\t\t\tvar i = params.length,\n\t\t\t\t\tcopy = params.concat();\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (params[i] === \"{self}\") {\n\t\t\t\t\t\tcopy[i] = this;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn copy;\n\t\t\t};\n\t\n\t\t\tp._callback = function(type) {\n\t\t\t\tvar v = this.vars,\n\t\t\t\t\tcallback = v[type],\n\t\t\t\t\tparams = v[type + \"Params\"],\n\t\t\t\t\tscope = v[type + \"Scope\"] || v.callbackScope || this,\n\t\t\t\t\tl = params ? params.length : 0;\n\t\t\t\tswitch (l) { //speed optimization; call() is faster than apply() so use it when there are only a few parameters (which is by far most common). Previously we simply did var v = this.vars; v[type].apply(v[type + \"Scope\"] || v.callbackScope || this, v[type + \"Params\"] || _blankArray);\n\t\t\t\t\tcase 0: callback.call(scope); break;\n\t\t\t\t\tcase 1: callback.call(scope, params[0]); break;\n\t\t\t\t\tcase 2: callback.call(scope, params[0], params[1]); break;\n\t\t\t\t\tdefault: callback.apply(scope, params);\n\t\t\t\t}\n\t\t\t};\n\t\n\t//----Animation getters/setters --------------------------------------------------------\n\t\n\t\t\tp.eventCallback = function(type, callback, params, scope) {\n\t\t\t\tif ((type || \"\").substr(0,2) === \"on\") {\n\t\t\t\t\tvar v = this.vars;\n\t\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\t\treturn v[type];\n\t\t\t\t\t}\n\t\t\t\t\tif (callback == null) {\n\t\t\t\t\t\tdelete v[type];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv[type] = callback;\n\t\t\t\t\t\tv[type + \"Params\"] = (_isArray(params) && params.join(\"\").indexOf(\"{self}\") !== -1) ? this._swapSelfInParams(params) : params;\n\t\t\t\t\t\tv[type + \"Scope\"] = scope;\n\t\t\t\t\t}\n\t\t\t\t\tif (type === \"onUpdate\") {\n\t\t\t\t\t\tthis._onUpdate = callback;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.delay = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._delay;\n\t\t\t\t}\n\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\tthis.startTime( this._startTime + value - this._delay );\n\t\t\t\t}\n\t\t\t\tthis._delay = value;\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.duration = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\tthis._dirty = false;\n\t\t\t\t\treturn this._duration;\n\t\t\t\t}\n\t\t\t\tthis._duration = this._totalDuration = value;\n\t\t\t\tthis._uncache(true); //true in case it's a TweenMax or TimelineMax that has a repeat - we'll need to refresh the totalDuration.\n\t\t\t\tif (this._timeline.smoothChildTiming) if (this._time > 0) if (this._time < this._duration) if (value !== 0) {\n\t\t\t\t\tthis.totalTime(this._totalTime * (value / this._duration), true);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.totalDuration = function(value) {\n\t\t\t\tthis._dirty = false;\n\t\t\t\treturn (!arguments.length) ? this._totalDuration : this.duration(value);\n\t\t\t};\n\t\n\t\t\tp.time = function(value, suppressEvents) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._time;\n\t\t\t\t}\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tthis.totalDuration();\n\t\t\t\t}\n\t\t\t\treturn this.totalTime((value > this._duration) ? this._duration : value, suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\t\tif (!_tickerActive) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._totalTime;\n\t\t\t\t}\n\t\t\t\tif (this._timeline) {\n\t\t\t\t\tif (time < 0 && !uncapped) {\n\t\t\t\t\t\ttime += this.totalDuration();\n\t\t\t\t\t}\n\t\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\t\tthis.totalDuration();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar totalDuration = this._totalDuration,\n\t\t\t\t\t\t\ttl = this._timeline;\n\t\t\t\t\t\tif (time > totalDuration && !uncapped) {\n\t\t\t\t\t\t\ttime = totalDuration;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._startTime = (this._paused ? this._pauseTime : tl._time) - ((!this._reversed ? time : totalDuration - time) / this._timeScale);\n\t\t\t\t\t\tif (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\n\t\t\t\t\t\t\tthis._uncache(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The startTime of that child would get pushed out, but one of the ancestors may have completed.\n\t\t\t\t\t\tif (tl._timeline) {\n\t\t\t\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\t\t\t\tif (tl._timeline._time !== (tl._startTime + tl._totalTime) / tl._timeScale) {\n\t\t\t\t\t\t\t\t\ttl.totalTime(tl._totalTime, true);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this._gc) {\n\t\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (this._totalTime !== time || this._duration === 0) {\n\t\t\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.render(time, suppressEvents, false);\n\t\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\n\t\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.progress = p.totalProgress = function(value, suppressEvents) {\n\t\t\t\tvar duration = this.duration();\n\t\t\t\treturn (!arguments.length) ? (duration ? this._time / duration : this.ratio) : this.totalTime(duration * value, suppressEvents);\n\t\t\t};\n\t\n\t\t\tp.startTime = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._startTime;\n\t\t\t\t}\n\t\t\t\tif (value !== this._startTime) {\n\t\t\t\t\tthis._startTime = value;\n\t\t\t\t\tif (this.timeline) if (this.timeline._sortChildren) {\n\t\t\t\t\t\tthis.timeline.add(this, value - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.endTime = function(includeRepeats) {\n\t\t\t\treturn this._startTime + ((includeRepeats != false) ? this.totalDuration() : this.duration()) / this._timeScale;\n\t\t\t};\n\t\n\t\t\tp.timeScale = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._timeScale;\n\t\t\t\t}\n\t\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\t\tif (this._timeline && this._timeline.smoothChildTiming) {\n\t\t\t\t\tvar pauseTime = this._pauseTime,\n\t\t\t\t\t\tt = (pauseTime || pauseTime === 0) ? pauseTime : this._timeline.totalTime();\n\t\t\t\t\tthis._startTime = t - ((t - this._startTime) * this._timeScale / value);\n\t\t\t\t}\n\t\t\t\tthis._timeScale = value;\n\t\t\t\treturn this._uncache(false);\n\t\t\t};\n\t\n\t\t\tp.reversed = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._reversed;\n\t\t\t\t}\n\t\t\t\tif (value != this._reversed) {\n\t\t\t\t\tthis._reversed = value;\n\t\t\t\t\tthis.totalTime(((this._timeline && !this._timeline.smoothChildTiming) ? this.totalDuration() - this._totalTime : this._totalTime), true);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.paused = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn this._paused;\n\t\t\t\t}\n\t\t\t\tvar tl = this._timeline,\n\t\t\t\t\traw, elapsed;\n\t\t\t\tif (value != this._paused) if (tl) {\n\t\t\t\t\tif (!_tickerActive && !value) {\n\t\t\t\t\t\t_ticker.wake();\n\t\t\t\t\t}\n\t\t\t\t\traw = tl.rawTime();\n\t\t\t\t\telapsed = raw - this._pauseTime;\n\t\t\t\t\tif (!value && tl.smoothChildTiming) {\n\t\t\t\t\t\tthis._startTime += elapsed;\n\t\t\t\t\t\tthis._uncache(false);\n\t\t\t\t\t}\n\t\t\t\t\tthis._pauseTime = value ? raw : null;\n\t\t\t\t\tthis._paused = value;\n\t\t\t\t\tthis._active = this.isActive();\n\t\t\t\t\tif (!value && elapsed !== 0 && this._initted && this.duration()) {\n\t\t\t\t\t\traw = tl.smoothChildTiming ? this._totalTime : (raw - this._startTime) / this._timeScale;\n\t\t\t\t\t\tthis.render(raw, (raw === this._totalTime), true); //in case the target's properties changed via some other tween or manual update by the user, we should force a render.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._gc && !value) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * SimpleTimeline\n\t * ----------------------------------------------------------------\n\t */\n\t\t\tvar SimpleTimeline = _class(\"core.SimpleTimeline\", function(vars) {\n\t\t\t\tAnimation.call(this, 0, vars);\n\t\t\t\tthis.autoRemoveChildren = this.smoothChildTiming = true;\n\t\t\t});\n\t\n\t\t\tp = SimpleTimeline.prototype = new Animation();\n\t\t\tp.constructor = SimpleTimeline;\n\t\t\tp.kill()._gc = false;\n\t\t\tp._first = p._last = p._recent = null;\n\t\t\tp._sortChildren = false;\n\t\n\t\t\tp.add = p.insert = function(child, position, align, stagger) {\n\t\t\t\tvar prevTween, st;\n\t\t\t\tchild._startTime = Number(position || 0) + child._delay;\n\t\t\t\tif (child._paused) if (this !== child._timeline) { //we only adjust the _pauseTime if it wasn't in this timeline already. Remember, sometimes a tween will be inserted again into the same timeline when its startTime is changed so that the tweens in the TimelineLite/Max are re-ordered properly in the linked list (so everything renders in the proper order).\n\t\t\t\t\tchild._pauseTime = child._startTime + ((this.rawTime() - child._startTime) / child._timeScale);\n\t\t\t\t}\n\t\t\t\tif (child.timeline) {\n\t\t\t\t\tchild.timeline._remove(child, true); //removes from existing timeline so that it can be properly added to this one.\n\t\t\t\t}\n\t\t\t\tchild.timeline = child._timeline = this;\n\t\t\t\tif (child._gc) {\n\t\t\t\t\tchild._enabled(true, true);\n\t\t\t\t}\n\t\t\t\tprevTween = this._last;\n\t\t\t\tif (this._sortChildren) {\n\t\t\t\t\tst = child._startTime;\n\t\t\t\t\twhile (prevTween && prevTween._startTime > st) {\n\t\t\t\t\t\tprevTween = prevTween._prev;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (prevTween) {\n\t\t\t\t\tchild._next = prevTween._next;\n\t\t\t\t\tprevTween._next = child;\n\t\t\t\t} else {\n\t\t\t\t\tchild._next = this._first;\n\t\t\t\t\tthis._first = child;\n\t\t\t\t}\n\t\t\t\tif (child._next) {\n\t\t\t\t\tchild._next._prev = child;\n\t\t\t\t} else {\n\t\t\t\t\tthis._last = child;\n\t\t\t\t}\n\t\t\t\tchild._prev = prevTween;\n\t\t\t\tthis._recent = child;\n\t\t\t\tif (this._timeline) {\n\t\t\t\t\tthis._uncache(true);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp._remove = function(tween, skipDisable) {\n\t\t\t\tif (tween.timeline === this) {\n\t\t\t\t\tif (!skipDisable) {\n\t\t\t\t\t\ttween._enabled(false, true);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (tween._prev) {\n\t\t\t\t\t\ttween._prev._next = tween._next;\n\t\t\t\t\t} else if (this._first === tween) {\n\t\t\t\t\t\tthis._first = tween._next;\n\t\t\t\t\t}\n\t\t\t\t\tif (tween._next) {\n\t\t\t\t\t\ttween._next._prev = tween._prev;\n\t\t\t\t\t} else if (this._last === tween) {\n\t\t\t\t\t\tthis._last = tween._prev;\n\t\t\t\t\t}\n\t\t\t\t\ttween._next = tween._prev = tween.timeline = null;\n\t\t\t\t\tif (tween === this._recent) {\n\t\t\t\t\t\tthis._recent = this._last;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this._timeline) {\n\t\t\t\t\t\tthis._uncache(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t\tvar tween = this._first,\n\t\t\t\t\tnext;\n\t\t\t\tthis._totalTime = this._time = this._rawPrevTime = time;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\t\tif (tween._active || (time >= tween._startTime && !tween._paused)) {\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tp.rawTime = function() {\n\t\t\t\tif (!_tickerActive) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\treturn this._totalTime;\n\t\t\t};\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * TweenLite\n\t * ----------------------------------------------------------------\n\t */\n\t\t\tvar TweenLite = _class(\"TweenLite\", function(target, duration, vars) {\n\t\t\t\t\tAnimation.call(this, duration, vars);\n\t\t\t\t\tthis.render = TweenLite.prototype.render; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\t\n\t\t\t\t\tif (target == null) {\n\t\t\t\t\t\tthrow \"Cannot tween a null target.\";\n\t\t\t\t\t}\n\t\n\t\t\t\t\tthis.target = target = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\t\n\t\t\t\t\tvar isSelector = (target.jquery || (target.length && target !== window && target[0] && (target[0] === window || (target[0].nodeType && target[0].style && !target.nodeType)))),\n\t\t\t\t\t\toverwrite = this.vars.overwrite,\n\t\t\t\t\t\ti, targ, targets;\n\t\n\t\t\t\t\tthis._overwrite = overwrite = (overwrite == null) ? _overwriteLookup[TweenLite.defaultOverwrite] : (typeof(overwrite) === \"number\") ? overwrite >> 0 : _overwriteLookup[overwrite];\n\t\n\t\t\t\t\tif ((isSelector || target instanceof Array || (target.push && _isArray(target))) && typeof(target[0]) !== \"number\") {\n\t\t\t\t\t\tthis._targets = targets = _slice(target);  //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\t\tthis._propLookup = [];\n\t\t\t\t\t\tthis._siblings = [];\n\t\t\t\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\t\t\t\ttarg = targets[i];\n\t\t\t\t\t\t\tif (!targ) {\n\t\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else if (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\t\ttarg = targets[i--] = TweenLite.selector(targ); //in case it's an array of strings\n\t\t\t\t\t\t\t\tif (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\t\t\ttargets.splice(i+1, 1); //to avoid an endless loop (can't imagine why the selector would return a string, but just in case)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else if (targ.length && targ !== window && targ[0] && (targ[0] === window || (targ[0].nodeType && targ[0].style && !targ.nodeType))) { //in case the user is passing in an array of selector objects (like jQuery objects), we need to check one more level and pull things out if necessary. Also note that <select> elements pass all the criteria regarding length and the first child having style, so we must also check to ensure the target isn't an HTML node itself.\n\t\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\t\tthis._targets = targets = targets.concat(_slice(targ));\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._siblings[i] = _register(targ, this, false);\n\t\t\t\t\t\t\tif (overwrite === 1) if (this._siblings[i].length > 1) {\n\t\t\t\t\t\t\t\t_applyOverwrite(targ, this, null, 1, this._siblings[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._propLookup = {};\n\t\t\t\t\t\tthis._siblings = _register(target, this, false);\n\t\t\t\t\t\tif (overwrite === 1) if (this._siblings.length > 1) {\n\t\t\t\t\t\t\t_applyOverwrite(target, this, null, 1, this._siblings);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this.vars.immediateRender || (duration === 0 && this._delay === 0 && this.vars.immediateRender !== false)) {\n\t\t\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\t\t\tthis.render(Math.min(0, -this._delay)); //in case delay is negative\n\t\t\t\t\t}\n\t\t\t\t}, true),\n\t\t\t\t_isSelector = function(v) {\n\t\t\t\t\treturn (v && v.length && v !== window && v[0] && (v[0] === window || (v[0].nodeType && v[0].style && !v.nodeType))); //we cannot check \"nodeType\" if the target is window from within an iframe, otherwise it will trigger a security error in some browsers like Firefox.\n\t\t\t\t},\n\t\t\t\t_autoCSS = function(vars, target) {\n\t\t\t\t\tvar css = {},\n\t\t\t\t\t\tp;\n\t\t\t\t\tfor (p in vars) {\n\t\t\t\t\t\tif (!_reservedProps[p] && (!(p in target) || p === \"transform\" || p === \"x\" || p === \"y\" || p === \"width\" || p === \"height\" || p === \"className\" || p === \"border\") && (!_plugins[p] || (_plugins[p] && _plugins[p]._autoCSS))) { //note: <img> elements contain read-only \"x\" and \"y\" properties. We should also prioritize editing css width/height rather than the element's properties.\n\t\t\t\t\t\t\tcss[p] = vars[p];\n\t\t\t\t\t\t\tdelete vars[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvars.css = css;\n\t\t\t\t};\n\t\n\t\t\tp = TweenLite.prototype = new Animation();\n\t\t\tp.constructor = TweenLite;\n\t\t\tp.kill()._gc = false;\n\t\n\t//----TweenLite defaults, overwrite management, and root updates ----------------------------------------------------\n\t\n\t\t\tp.ratio = 0;\n\t\t\tp._firstPT = p._targets = p._overwrittenProps = p._startAt = null;\n\t\t\tp._notifyPluginsOfEnabled = p._lazy = false;\n\t\n\t\t\tTweenLite.version = \"1.19.0\";\n\t\t\tTweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1);\n\t\t\tTweenLite.defaultOverwrite = \"auto\";\n\t\t\tTweenLite.ticker = _ticker;\n\t\t\tTweenLite.autoSleep = 120;\n\t\t\tTweenLite.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t\t_ticker.lagSmoothing(threshold, adjustedLag);\n\t\t\t};\n\t\n\t\t\tTweenLite.selector = window.$ || window.jQuery || function(e) {\n\t\t\t\tvar selector = window.$ || window.jQuery;\n\t\t\t\tif (selector) {\n\t\t\t\t\tTweenLite.selector = selector;\n\t\t\t\t\treturn selector(e);\n\t\t\t\t}\n\t\t\t\treturn (typeof(document) === \"undefined\") ? e : (document.querySelectorAll ? document.querySelectorAll(e) : document.getElementById((e.charAt(0) === \"#\") ? e.substr(1) : e));\n\t\t\t};\n\t\n\t\t\tvar _lazyTweens = [],\n\t\t\t\t_lazyLookup = {},\n\t\t\t\t_numbersExp = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/ig,\n\t\t\t\t//_nonNumbersExp = /(?:([\\-+](?!(\\d|=)))|[^\\d\\-+=e]|(e(?![\\-+][\\d])))+/ig,\n\t\t\t\t_setRatio = function(v) {\n\t\t\t\t\tvar pt = this._firstPT,\n\t\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\t\tval;\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tval = !pt.blob ? pt.c * v + pt.s : v ? this.join(\"\") : this.start;\n\t\t\t\t\t\tif (pt.m) {\n\t\t\t\t\t\t\tval = pt.m(val, this._target || pt.t);\n\t\t\t\t\t\t} else if (val < min) if (val > -min) { //prevents issues with converting very small numbers to strings in the browser\n\t\t\t\t\t\t\tval = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!pt.f) {\n\t\t\t\t\t\t\tpt.t[pt.p] = val;\n\t\t\t\t\t\t} else if (pt.fp) {\n\t\t\t\t\t\t\tpt.t[pt.p](pt.fp, val);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.t[pt.p](val);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t//compares two strings (start/end), finds the numbers that are different and spits back an array representing the whole value but with the changing values isolated as elements. For example, \"rgb(0,0,0)\" and \"rgb(100,50,0)\" would become [\"rgb(\", 0, \",\", 50, \",0)\"]. Notice it merges the parts that are identical (performance optimization). The array also has a linked list of PropTweens attached starting with _firstPT that contain the tweening data (t, p, s, c, f, etc.). It also stores the starting value as a \"start\" property so that we can revert to it if/when necessary, like when a tween rewinds fully. If the quantity of numbers differs between the start and end, it will always prioritize the end value(s). The pt parameter is optional - it's for a PropTween that will be appended to the end of the linked list and is typically for actually setting the value after all of the elements have been updated (with array.join(\"\")).\n\t\t\t\t_blobDif = function(start, end, filter, pt) {\n\t\t\t\t\tvar a = [start, end],\n\t\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\t\ts = \"\",\n\t\t\t\t\t\tcolor = 0,\n\t\t\t\t\t\tstartNums, endNums, num, i, l, nonNumbers, currentNum;\n\t\t\t\t\ta.start = start;\n\t\t\t\t\tif (filter) {\n\t\t\t\t\t\tfilter(a); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\n\t\t\t\t\t\tstart = a[0];\n\t\t\t\t\t\tend = a[1];\n\t\t\t\t\t}\n\t\t\t\t\ta.length = 0;\n\t\t\t\t\tstartNums = start.match(_numbersExp) || [];\n\t\t\t\t\tendNums = end.match(_numbersExp) || [];\n\t\t\t\t\tif (pt) {\n\t\t\t\t\t\tpt._next = null;\n\t\t\t\t\t\tpt.blob = 1;\n\t\t\t\t\t\ta._firstPT = a._applyPT = pt; //apply last in the linked list (which means inserting it first)\n\t\t\t\t\t}\n\t\t\t\t\tl = endNums.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tcurrentNum = endNums[i];\n\t\t\t\t\t\tnonNumbers = end.substr(charIndex, end.indexOf(currentNum, charIndex)-charIndex);\n\t\t\t\t\t\ts += (nonNumbers || !i) ? nonNumbers : \",\"; //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n\t\t\t\t\t\tcharIndex += nonNumbers.length;\n\t\t\t\t\t\tif (color) { //sense rgba() values and round them.\n\t\t\t\t\t\t\tcolor = (color + 1) % 5;\n\t\t\t\t\t\t} else if (nonNumbers.substr(-5) === \"rgba(\") {\n\t\t\t\t\t\t\tcolor = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (currentNum === startNums[i] || startNums.length <= i) {\n\t\t\t\t\t\t\ts += currentNum;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (s) {\n\t\t\t\t\t\t\t\ta.push(s);\n\t\t\t\t\t\t\t\ts = \"\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnum = parseFloat(startNums[i]);\n\t\t\t\t\t\t\ta.push(num);\n\t\t\t\t\t\t\ta._firstPT = {_next: a._firstPT, t:a, p: a.length-1, s:num, c:((currentNum.charAt(1) === \"=\") ? parseInt(currentNum.charAt(0) + \"1\", 10) * parseFloat(currentNum.substr(2)) : (parseFloat(currentNum) - num)) || 0, f:0, m:(color && color < 4) ? Math.round : 0};\n\t\t\t\t\t\t\t//note: we don't set _prev because we'll never need to remove individual PropTweens from this list.\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcharIndex += currentNum.length;\n\t\t\t\t\t}\n\t\t\t\t\ts += end.substr(charIndex);\n\t\t\t\t\tif (s) {\n\t\t\t\t\t\ta.push(s);\n\t\t\t\t\t}\n\t\t\t\t\ta.setRatio = _setRatio;\n\t\t\t\t\treturn a;\n\t\t\t\t},\n\t\t\t\t//note: \"funcParam\" is only necessary for function-based getters/setters that require an extra parameter like getAttribute(\"width\") and setAttribute(\"width\", value). In this example, funcParam would be \"width\". Used by AttrPlugin for example.\n\t\t\t\t_addPropTween = function(target, prop, start, end, overwriteProp, mod, funcParam, stringFilter, index) {\n\t\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\t\tend = end(index || 0, target);\n\t\t\t\t\t}\n\t\t\t\t\tvar s = (start === \"get\") ? target[prop] : start,\n\t\t\t\t\t\ttype = typeof(target[prop]),\n\t\t\t\t\t\tisRelative = (typeof(end) === \"string\" && end.charAt(1) === \"=\"),\n\t\t\t\t\t\tpt = {t:target, p:prop, s:s, f:(type === \"function\"), pg:0, n:overwriteProp || prop, m:(!mod ? 0 : (typeof(mod) === \"function\") ? mod : Math.round), pr:0, c:isRelative ? parseInt(end.charAt(0) + \"1\", 10) * parseFloat(end.substr(2)) : (parseFloat(end) - s) || 0},\n\t\t\t\t\t\tblob, getterName;\n\t\t\t\t\tif (type !== \"number\") {\n\t\t\t\t\t\tif (type === \"function\" && start === \"get\") {\n\t\t\t\t\t\t\tgetterName = ((prop.indexOf(\"set\") || typeof(target[\"get\" + prop.substr(3)]) !== \"function\") ? prop : \"get\" + prop.substr(3));\n\t\t\t\t\t\t\tpt.s = s = funcParam ? target[getterName](funcParam) : target[getterName]();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof(s) === \"string\" && (funcParam || isNaN(s))) {\n\t\t\t\t\t\t\t//a blob (string that has multiple numbers in it)\n\t\t\t\t\t\t\tpt.fp = funcParam;\n\t\t\t\t\t\t\tblob = _blobDif(s, end, stringFilter || TweenLite.defaultStringFilter, pt);\n\t\t\t\t\t\t\tpt = {t:blob, p:\"setRatio\", s:0, c:1, f:2, pg:0, n:overwriteProp || prop, pr:0, m:0}; //\"2\" indicates it's a Blob property tween. Needed for RoundPropsPlugin for example.\n\t\t\t\t\t\t} else if (!isRelative) {\n\t\t\t\t\t\t\tpt.s = parseFloat(s);\n\t\t\t\t\t\t\tpt.c = (parseFloat(end) - pt.s) || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (pt.c) { //only add it to the linked list if there's a change.\n\t\t\t\t\t\tif ((pt._next = this._firstPT)) {\n\t\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t\t\treturn pt;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_internals = TweenLite._internals = {isArray:_isArray, isSelector:_isSelector, lazyTweens:_lazyTweens, blobDif:_blobDif}, //gives us a way to expose certain private values to other GreenSock classes without contaminating tha main TweenLite object.\n\t\t\t\t_plugins = TweenLite._plugins = {},\n\t\t\t\t_tweenLookup = _internals.tweenLookup = {},\n\t\t\t\t_tweenLookupNum = 0,\n\t\t\t\t_reservedProps = _internals.reservedProps = {ease:1, delay:1, overwrite:1, onComplete:1, onCompleteParams:1, onCompleteScope:1, useFrames:1, runBackwards:1, startAt:1, onUpdate:1, onUpdateParams:1, onUpdateScope:1, onStart:1, onStartParams:1, onStartScope:1, onReverseComplete:1, onReverseCompleteParams:1, onReverseCompleteScope:1, onRepeat:1, onRepeatParams:1, onRepeatScope:1, easeParams:1, yoyo:1, immediateRender:1, repeat:1, repeatDelay:1, data:1, paused:1, reversed:1, autoCSS:1, lazy:1, onOverwrite:1, callbackScope:1, stringFilter:1, id:1},\n\t\t\t\t_overwriteLookup = {none:0, all:1, auto:2, concurrent:3, allOnStart:4, preexisting:5, \"true\":1, \"false\":0},\n\t\t\t\t_rootFramesTimeline = Animation._rootFramesTimeline = new SimpleTimeline(),\n\t\t\t\t_rootTimeline = Animation._rootTimeline = new SimpleTimeline(),\n\t\t\t\t_nextGCFrame = 30,\n\t\t\t\t_lazyRender = _internals.lazyRender = function() {\n\t\t\t\t\tvar i = _lazyTweens.length,\n\t\t\t\t\t\ttween;\n\t\t\t\t\t_lazyLookup = {};\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\ttween = _lazyTweens[i];\n\t\t\t\t\t\tif (tween && tween._lazy !== false) {\n\t\t\t\t\t\t\ttween.render(tween._lazy[0], tween._lazy[1], true);\n\t\t\t\t\t\t\ttween._lazy = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t_lazyTweens.length = 0;\n\t\t\t\t};\n\t\n\t\t\t_rootTimeline._startTime = _ticker.time;\n\t\t\t_rootFramesTimeline._startTime = _ticker.frame;\n\t\t\t_rootTimeline._active = _rootFramesTimeline._active = true;\n\t\t\tsetTimeout(_lazyRender, 1); //on some mobile devices, there isn't a \"tick\" before code runs which means any lazy renders wouldn't run before the next official \"tick\".\n\t\n\t\t\tAnimation._updateRoot = TweenLite.render = function() {\n\t\t\t\t\tvar i, a, p;\n\t\t\t\t\tif (_lazyTweens.length) { //if code is run outside of the requestAnimationFrame loop, there may be tweens queued AFTER the engine refreshed, so we need to ensure any pending renders occur before we refresh again.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\t_rootTimeline.render((_ticker.time - _rootTimeline._startTime) * _rootTimeline._timeScale, false, false);\n\t\t\t\t\t_rootFramesTimeline.render((_ticker.frame - _rootFramesTimeline._startTime) * _rootFramesTimeline._timeScale, false, false);\n\t\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tif (_ticker.frame >= _nextGCFrame) { //dump garbage every 120 frames or whatever the user sets TweenLite.autoSleep to\n\t\t\t\t\t\t_nextGCFrame = _ticker.frame + (parseInt(TweenLite.autoSleep, 10) || 120);\n\t\t\t\t\t\tfor (p in _tweenLookup) {\n\t\t\t\t\t\t\ta = _tweenLookup[p].tweens;\n\t\t\t\t\t\t\ti = a.length;\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tif (a[i]._gc) {\n\t\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (a.length === 0) {\n\t\t\t\t\t\t\t\tdelete _tweenLookup[p];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//if there are no more tweens in the root timelines, or if they're all paused, make the _timer sleep to reduce load on the CPU slightly\n\t\t\t\t\t\tp = _rootTimeline._first;\n\t\t\t\t\t\tif (!p || p._paused) if (TweenLite.autoSleep && !_rootFramesTimeline._first && _ticker._listeners.tick.length === 1) {\n\t\t\t\t\t\t\twhile (p && p._paused) {\n\t\t\t\t\t\t\t\tp = p._next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!p) {\n\t\t\t\t\t\t\t\t_ticker.sleep();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\t_ticker.addEventListener(\"tick\", Animation._updateRoot);\n\t\n\t\t\tvar _register = function(target, tween, scrub) {\n\t\t\t\t\tvar id = target._gsTweenID, a, i;\n\t\t\t\t\tif (!_tweenLookup[id || (target._gsTweenID = id = \"t\" + (_tweenLookupNum++))]) {\n\t\t\t\t\t\t_tweenLookup[id] = {target:target, tweens:[]};\n\t\t\t\t\t}\n\t\t\t\t\tif (tween) {\n\t\t\t\t\t\ta = _tweenLookup[id].tweens;\n\t\t\t\t\t\ta[(i = a.length)] = tween;\n\t\t\t\t\t\tif (scrub) {\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tif (a[i] === tween) {\n\t\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn _tweenLookup[id].tweens;\n\t\t\t\t},\n\t\t\t\t_onOverwrite = function(overwrittenTween, overwritingTween, target, killedProps) {\n\t\t\t\t\tvar func = overwrittenTween.vars.onOverwrite, r1, r2;\n\t\t\t\t\tif (func) {\n\t\t\t\t\t\tr1 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t\t}\n\t\t\t\t\tfunc = TweenLite.onOverwrite;\n\t\t\t\t\tif (func) {\n\t\t\t\t\t\tr2 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t\t}\n\t\t\t\t\treturn (r1 !== false && r2 !== false);\n\t\t\t\t},\n\t\t\t\t_applyOverwrite = function(target, tween, props, mode, siblings) {\n\t\t\t\t\tvar i, changed, curTween, l;\n\t\t\t\t\tif (mode === 1 || mode >= 4) {\n\t\t\t\t\t\tl = siblings.length;\n\t\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\t\tif ((curTween = siblings[i]) !== tween) {\n\t\t\t\t\t\t\t\tif (!curTween._gc) {\n\t\t\t\t\t\t\t\t\tif (curTween._kill(null, target, tween)) {\n\t\t\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (mode === 5) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn changed;\n\t\t\t\t\t}\n\t\t\t\t\t//NOTE: Add 0.0000000001 to overcome floating point errors that can cause the startTime to be VERY slightly off (when a tween's time() is set for example)\n\t\t\t\t\tvar startTime = tween._startTime + _tinyNum,\n\t\t\t\t\t\toverlaps = [],\n\t\t\t\t\t\toCount = 0,\n\t\t\t\t\t\tzeroDur = (tween._duration === 0),\n\t\t\t\t\t\tglobalStart;\n\t\t\t\t\ti = siblings.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif ((curTween = siblings[i]) === tween || curTween._gc || curTween._paused) {\n\t\t\t\t\t\t\t//ignore\n\t\t\t\t\t\t} else if (curTween._timeline !== tween._timeline) {\n\t\t\t\t\t\t\tglobalStart = globalStart || _checkOverlap(tween, 0, zeroDur);\n\t\t\t\t\t\t\tif (_checkOverlap(curTween, globalStart, zeroDur) === 0) {\n\t\t\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (curTween._startTime <= startTime) if (curTween._startTime + curTween.totalDuration() / curTween._timeScale > startTime) if (!((zeroDur || !curTween._initted) && startTime - curTween._startTime <= 0.0000000002)) {\n\t\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\ti = oCount;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tcurTween = overlaps[i];\n\t\t\t\t\t\tif (mode === 2) if (curTween._kill(props, target, tween)) {\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (mode !== 2 || (!curTween._firstPT && curTween._initted)) {\n\t\t\t\t\t\t\tif (mode !== 2 && !_onOverwrite(curTween, tween)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (curTween._enabled(false, false)) { //if all property tweens have been overwritten, kill the tween.\n\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn changed;\n\t\t\t\t},\n\t\t\t\t_checkOverlap = function(tween, reference, zeroDur) {\n\t\t\t\t\tvar tl = tween._timeline,\n\t\t\t\t\t\tts = tl._timeScale,\n\t\t\t\t\t\tt = tween._startTime;\n\t\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\t\tt += tl._startTime;\n\t\t\t\t\t\tts *= tl._timeScale;\n\t\t\t\t\t\tif (tl._paused) {\n\t\t\t\t\t\t\treturn -100;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t\t}\n\t\t\t\t\tt /= ts;\n\t\t\t\t\treturn (t > reference) ? t - reference : ((zeroDur && t === reference) || (!tween._initted && t - reference < 2 * _tinyNum)) ? _tinyNum : ((t += tween.totalDuration() / tween._timeScale / ts) > reference + _tinyNum) ? 0 : t - reference - _tinyNum;\n\t\t\t\t};\n\t\n\t\n\t//---- TweenLite instance methods -----------------------------------------------------------------------------\n\t\n\t\t\tp._init = function() {\n\t\t\t\tvar v = this.vars,\n\t\t\t\t\top = this._overwrittenProps,\n\t\t\t\t\tdur = this._duration,\n\t\t\t\t\timmediate = !!v.immediateRender,\n\t\t\t\t\tease = v.ease,\n\t\t\t\t\ti, initPlugins, pt, p, startVars, l;\n\t\t\t\tif (v.startAt) {\n\t\t\t\t\tif (this._startAt) {\n\t\t\t\t\t\tthis._startAt.render(-1, true); //if we've run a startAt previously (when the tween instantiated), we should revert it so that the values re-instantiate correctly particularly for relative tweens. Without this, a TweenLite.fromTo(obj, 1, {x:\"+=100\"}, {x:\"-=100\"}), for example, would actually jump to +=200 because the startAt would run twice, doubling the relative change.\n\t\t\t\t\t\tthis._startAt.kill();\n\t\t\t\t\t}\n\t\t\t\t\tstartVars = {};\n\t\t\t\t\tfor (p in v.startAt) { //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, 1, from, to).fromTo(e, 1, to, from);\n\t\t\t\t\t\tstartVars[p] = v.startAt[p];\n\t\t\t\t\t}\n\t\t\t\t\tstartVars.overwrite = false;\n\t\t\t\t\tstartVars.immediateRender = true;\n\t\t\t\t\tstartVars.lazy = (immediate && v.lazy !== false);\n\t\t\t\t\tstartVars.startAt = startVars.delay = null; //no nesting of startAt objects allowed (otherwise it could cause an infinite loop).\n\t\t\t\t\tthis._startAt = TweenLite.to(this.target, 0, startVars);\n\t\t\t\t\tif (immediate) {\n\t\t\t\t\t\tif (this._time > 0) {\n\t\t\t\t\t\t\tthis._startAt = null; //tweens that render immediately (like most from() and fromTo() tweens) shouldn't revert when their parent timeline's playhead goes backward past the startTime because the initial render could have happened anytime and it shouldn't be directly correlated to this tween's startTime. Imagine setting up a complex animation where the beginning states of various objects are rendered immediately but the tween doesn't happen for quite some time - if we revert to the starting values as soon as the playhead goes backward past the tween's startTime, it will throw things off visually. Reversion should only happen in TimelineLite/Max instances where immediateRender was false (which is the default in the convenience methods like from()).\n\t\t\t\t\t\t} else if (dur !== 0) {\n\t\t\t\t\t\t\treturn; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a TimelineLite or TimelineMax, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (v.runBackwards && dur !== 0) {\n\t\t\t\t\t//from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\n\t\t\t\t\tif (this._startAt) {\n\t\t\t\t\t\tthis._startAt.render(-1, true);\n\t\t\t\t\t\tthis._startAt.kill();\n\t\t\t\t\t\tthis._startAt = null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (this._time !== 0) { //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\n\t\t\t\t\t\t\timmediate = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = {};\n\t\t\t\t\t\tfor (p in v) { //copy props into a new object and skip any reserved props, otherwise onComplete or onUpdate or onStart could fire. We should, however, permit autoCSS to go through.\n\t\t\t\t\t\t\tif (!_reservedProps[p] || p === \"autoCSS\") {\n\t\t\t\t\t\t\t\tpt[p] = v[p];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt.overwrite = 0;\n\t\t\t\t\t\tpt.data = \"isFromStart\"; //we tag the tween with as \"isFromStart\" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \"from()\" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\n\t\t\t\t\t\tpt.lazy = (immediate && v.lazy !== false);\n\t\t\t\t\t\tpt.immediateRender = immediate; //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\n\t\t\t\t\t\tthis._startAt = TweenLite.to(this.target, 0, pt);\n\t\t\t\t\t\tif (!immediate) {\n\t\t\t\t\t\t\tthis._startAt._init(); //ensures that the initial values are recorded\n\t\t\t\t\t\t\tthis._startAt._enabled(false); //no need to have the tween render on the next cycle. Disable it because we'll always manually control the renders of the _startAt tween.\n\t\t\t\t\t\t\tif (this.vars.immediateRender) {\n\t\t\t\t\t\t\t\tthis._startAt = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (this._time === 0) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._ease = ease = (!ease) ? TweenLite.defaultEase : (ease instanceof Ease) ? ease : (typeof(ease) === \"function\") ? new Ease(ease, v.easeParams) : _easeMap[ease] || TweenLite.defaultEase;\n\t\t\t\tif (v.easeParams instanceof Array && ease.config) {\n\t\t\t\t\tthis._ease = ease.config.apply(ease, v.easeParams);\n\t\t\t\t}\n\t\t\t\tthis._easeType = this._ease._type;\n\t\t\t\tthis._easePower = this._ease._power;\n\t\t\t\tthis._firstPT = null;\n\t\n\t\t\t\tif (this._targets) {\n\t\t\t\t\tl = this._targets.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tif ( this._initProps( this._targets[i], (this._propLookup[i] = {}), this._siblings[i], (op ? op[i] : null), i) ) {\n\t\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tinitPlugins = this._initProps(this.target, this._propLookup, this._siblings, op, 0);\n\t\t\t\t}\n\t\n\t\t\t\tif (initPlugins) {\n\t\t\t\t\tTweenLite._onPluginEvent(\"_onInitAllProps\", this); //reorders the array in order of priority. Uses a static TweenPlugin method in order to minimize file size in TweenLite\n\t\t\t\t}\n\t\t\t\tif (op) if (!this._firstPT) if (typeof(this.target) !== \"function\") { //if all tweening properties have been overwritten, kill the tween. If the target is a function, it's probably a delayedCall so let it live.\n\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t}\n\t\t\t\tif (v.runBackwards) {\n\t\t\t\t\tpt = this._firstPT;\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tpt.s += pt.c;\n\t\t\t\t\t\tpt.c = -pt.c;\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._onUpdate = v.onUpdate;\n\t\t\t\tthis._initted = true;\n\t\t\t};\n\t\n\t\t\tp._initProps = function(target, propLookup, siblings, overwrittenProps, index) {\n\t\t\t\tvar p, i, initPlugins, plugin, pt, v;\n\t\t\t\tif (target == null) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\n\t\t\t\tif (_lazyLookup[target._gsTweenID]) {\n\t\t\t\t\t_lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\n\t\t\t\t}\n\t\n\t\t\t\tif (!this.vars.css) if (target.style) if (target !== window && target.nodeType) if (_plugins.css) if (this.vars.autoCSS !== false) { //it's so common to use TweenLite/Max to animate the css of DOM elements, we assume that if the target is a DOM element, that's what is intended (a convenience so that users don't have to wrap things in css:{}, although we still recommend it for a slight performance boost and better specificity). Note: we cannot check \"nodeType\" on the window inside an iframe.\n\t\t\t\t\t_autoCSS(this.vars, target);\n\t\t\t\t}\n\t\t\t\tfor (p in this.vars) {\n\t\t\t\t\tv = this.vars[p];\n\t\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\t\tif (v) if ((v instanceof Array) || (v.push && _isArray(v))) if (v.join(\"\").indexOf(\"{self}\") !== -1) {\n\t\t\t\t\t\t\tthis.vars[p] = v = this._swapSelfInParams(v, this);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t} else if (_plugins[p] && (plugin = new _plugins[p]())._onInitTween(target, this.vars[p], this, index)) {\n\t\n\t\t\t\t\t\t//t - target \t\t[object]\n\t\t\t\t\t\t//p - property \t\t[string]\n\t\t\t\t\t\t//s - start\t\t\t[number]\n\t\t\t\t\t\t//c - change\t\t[number]\n\t\t\t\t\t\t//f - isFunction\t[boolean]\n\t\t\t\t\t\t//n - name\t\t\t[string]\n\t\t\t\t\t\t//pg - isPlugin \t[boolean]\n\t\t\t\t\t\t//pr - priority\t\t[number]\n\t\t\t\t\t\t//m - mod           [function | 0]\n\t\t\t\t\t\tthis._firstPT = pt = {_next:this._firstPT, t:plugin, p:\"setRatio\", s:0, c:1, f:1, n:p, pg:1, pr:plugin._priority, m:0};\n\t\t\t\t\t\ti = plugin._overwriteProps.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tpropLookup[plugin._overwriteProps[i]] = this._firstPT;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (plugin._priority || plugin._onInitAllProps) {\n\t\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (plugin._onDisable || plugin._onEnable) {\n\t\t\t\t\t\t\tthis._notifyPluginsOfEnabled = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpropLookup[p] = _addPropTween.call(this, target, p, \"get\", v, p, 0, null, this.vars.stringFilter, index);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (overwrittenProps) if (this._kill(overwrittenProps, target)) { //another tween may have tried to overwrite properties of this tween before init() was called (like if two tweens start at the same time, the one created second will run first)\n\t\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t\t}\n\t\t\t\tif (this._overwrite > 1) if (this._firstPT) if (siblings.length > 1) if (_applyOverwrite(target, this, propLookup, this._overwrite, siblings)) {\n\t\t\t\t\tthis._kill(propLookup, target);\n\t\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t\t}\n\t\t\t\tif (this._firstPT) if ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration)) { //zero duration tweens don't lazy render by default; everything else does.\n\t\t\t\t\t_lazyLookup[target._gsTweenID] = true;\n\t\t\t\t}\n\t\t\t\treturn initPlugins;\n\t\t\t};\n\t\n\t\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t\tvar prevTime = this._time,\n\t\t\t\t\tduration = this._duration,\n\t\t\t\t\tprevRawPrevTime = this._rawPrevTime,\n\t\t\t\t\tisComplete, callback, pt, rawPrevTime;\n\t\t\t\tif (time >= duration - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\t\tthis._totalTime = this._time = duration;\n\t\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1;\n\t\t\t\t\tif (!this._reversed ) {\n\t\t\t\t\t\tisComplete = true;\n\t\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\t\tforce = (force || this._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\t}\n\t\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (this._startTime === this._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -0.0000001) || (prevRawPrevTime === _tinyNum && this.data !== \"isPause\")) if (prevRawPrevTime !== time) { //note: when this.data is \"isPause\", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\n\t\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\t\tthis._totalTime = this._time = 0;\n\t\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;\n\t\t\t\t\tif (prevTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t\t}\n\t\t\t\t\tif (time < 0) {\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\t\tif (prevRawPrevTime >= 0 && !(prevRawPrevTime === _tinyNum && this.data === \"isPause\")) {\n\t\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._initted) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._totalTime = this._time = time;\n\t\n\t\t\t\t\tif (this._easeType) {\n\t\t\t\t\t\tvar r = time / duration, type = this._easeType, pow = this._easePower;\n\t\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\t\tr *= r;\n\t\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (type === 1) {\n\t\t\t\t\t\t\tthis.ratio = 1 - r;\n\t\t\t\t\t\t} else if (type === 2) {\n\t\t\t\t\t\t\tthis.ratio = r;\n\t\t\t\t\t\t} else if (time / duration < 0.5) {\n\t\t\t\t\t\t\tthis.ratio = r / 2;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.ratio = 1 - (r / 2);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.ratio = this._ease.getRatio(time / duration);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (this._time === prevTime && !force) {\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!this._initted) {\n\t\t\t\t\tthis._init();\n\t\t\t\t\tif (!this._initted || this._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else if (!force && this._firstPT && ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration))) {\n\t\t\t\t\t\tthis._time = this._totalTime = prevTime;\n\t\t\t\t\t\tthis._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\t\t_lazyTweens.push(this);\n\t\t\t\t\t\tthis._lazy = [time, suppressEvents];\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\t\tif (this._time && !isComplete) {\n\t\t\t\t\t\tthis.ratio = this._ease.getRatio(this._time / duration);\n\t\t\t\t\t} else if (isComplete && this._ease._calcEnd) {\n\t\t\t\t\t\tthis.ratio = this._ease.getRatio((this._time === 0) ? 0 : 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._lazy !== false) { //in case a lazy render is pending, we should flush it because the new render is occurring now (imagine a lazy tween instantiating and then immediately the user calls tween.seek(tween.duration()), skipping to the end - the end render would be forced, and then if we didn't flush the lazy render, it'd fire AFTER the seek(), rendering it at the wrong time.\n\t\t\t\t\tthis._lazy = false;\n\t\t\t\t}\n\t\t\t\tif (!this._active) if (!this._paused && this._time !== prevTime && time >= 0) {\n\t\t\t\t\tthis._active = true;  //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t\t}\n\t\t\t\tif (prevTime === 0) {\n\t\t\t\t\tif (this._startAt) {\n\t\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\t\tcallback = \"_dummyGS\"; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this.vars.onStart) if (this._time !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\t\tthis._callback(\"onStart\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\tpt.t[pt.p](pt.c * this.ratio + pt.s);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p] = pt.c * this.ratio + pt.s;\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\n\t\t\t\tif (this._onUpdate) {\n\t\t\t\t\tif (time < 0) if (this._startAt && time !== -0.0001) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t\t}\n\t\t\t\t\tif (!suppressEvents) if (this._time !== prevTime || isComplete || force) {\n\t\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (callback) if (!this._gc || force) { //check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\t\tif (time < 0 && this._startAt && !this._onUpdate && time !== -0.0001) { //-0.0001 is a special value that we use when looping back to the beginning of a repeated TimelineMax, in which case we shouldn't render the _startAt values.\n\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t\t}\n\t\t\t\t\tif (isComplete) {\n\t\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._active = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\t\tthis._callback(callback);\n\t\t\t\t\t}\n\t\t\t\t\tif (duration === 0 && this._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \"time\" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\t\tthis._rawPrevTime = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tp._kill = function(vars, target, overwritingTween) {\n\t\t\t\tif (vars === \"all\") {\n\t\t\t\t\tvars = null;\n\t\t\t\t}\n\t\t\t\tif (vars == null) if (target == null || target === this.target) {\n\t\t\t\t\tthis._lazy = false;\n\t\t\t\t\treturn this._enabled(false, false);\n\t\t\t\t}\n\t\t\t\ttarget = (typeof(target) !== \"string\") ? (target || this._targets || this.target) : TweenLite.selector(target) || target;\n\t\t\t\tvar simultaneousOverwrite = (overwritingTween && this._time && overwritingTween._startTime === this._startTime && this._timeline === overwritingTween._timeline),\n\t\t\t\t\ti, overwrittenProps, p, pt, propLookup, changed, killProps, record, killed;\n\t\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\t\ti = target.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (this._kill(vars, target[i], overwritingTween)) {\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (this._targets) {\n\t\t\t\t\t\ti = this._targets.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (target === this._targets[i]) {\n\t\t\t\t\t\t\t\tpropLookup = this._propLookup[i] || {};\n\t\t\t\t\t\t\t\tthis._overwrittenProps = this._overwrittenProps || [];\n\t\t\t\t\t\t\t\toverwrittenProps = this._overwrittenProps[i] = vars ? this._overwrittenProps[i] || {} : \"all\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (target !== this.target) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpropLookup = this._propLookup;\n\t\t\t\t\t\toverwrittenProps = this._overwrittenProps = vars ? this._overwrittenProps || {} : \"all\";\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (propLookup) {\n\t\t\t\t\t\tkillProps = vars || propLookup;\n\t\t\t\t\t\trecord = (vars !== overwrittenProps && overwrittenProps !== \"all\" && vars !== propLookup && (typeof(vars) !== \"object\" || !vars._tempKill)); //_tempKill is a super-secret way to delete a particular tweening property but NOT have it remembered as an official overwritten property (like in BezierPlugin)\n\t\t\t\t\t\tif (overwritingTween && (TweenLite.onOverwrite || this.vars.onOverwrite)) {\n\t\t\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\t\t\tif (propLookup[p]) {\n\t\t\t\t\t\t\t\t\tif (!killed) {\n\t\t\t\t\t\t\t\t\t\tkilled = [];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tkilled.push(p);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ((killed || !vars) && !_onOverwrite(this, overwritingTween, target, killed)) { //if the onOverwrite returned false, that means the user wants to override the overwriting (cancel it).\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\t\tif ((pt = propLookup[p])) {\n\t\t\t\t\t\t\t\tif (simultaneousOverwrite) { //if another tween overwrites this one and they both start at exactly the same time, yet this tween has already rendered once (for example, at 0.001) because it's first in the queue, we should revert the values to where they were at 0 so that the starting values aren't contaminated on the overwriting tween.\n\t\t\t\t\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\t\t\t\t\tpt.t[pt.p](pt.s);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.s;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (pt.pg && pt.t._kill(killProps)) {\n\t\t\t\t\t\t\t\t\tchanged = true; //some plugins need to be notified so they can perform cleanup tasks first\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!pt.pg || pt.t._overwriteProps.length === 0) {\n\t\t\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\t\t\t\t} else if (pt === this._firstPT) {\n\t\t\t\t\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdelete propLookup[p];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (record) {\n\t\t\t\t\t\t\t\toverwrittenProps[p] = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!this._firstPT && this._initted) { //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\n\t\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn changed;\n\t\t\t};\n\t\n\t\t\tp.invalidate = function() {\n\t\t\t\tif (this._notifyPluginsOfEnabled) {\n\t\t\t\t\tTweenLite._onPluginEvent(\"_onDisable\", this);\n\t\t\t\t}\n\t\t\t\tthis._firstPT = this._overwrittenProps = this._startAt = this._onUpdate = null;\n\t\t\t\tthis._notifyPluginsOfEnabled = this._active = this._lazy = false;\n\t\t\t\tthis._propLookup = (this._targets) ? {} : [];\n\t\t\t\tAnimation.prototype.invalidate.call(this);\n\t\t\t\tif (this.vars.immediateRender) {\n\t\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\t\tthis.render(Math.min(0, -this._delay)); //in case delay is negative.\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\n\t\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\t\tif (!_tickerActive) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tif (enabled && this._gc) {\n\t\t\t\t\tvar targets = this._targets,\n\t\t\t\t\t\ti;\n\t\t\t\t\tif (targets) {\n\t\t\t\t\t\ti = targets.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tthis._siblings[i] = _register(targets[i], this, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._siblings = _register(this.target, this, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tAnimation.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t\t\tif (this._notifyPluginsOfEnabled) if (this._firstPT) {\n\t\t\t\t\treturn TweenLite._onPluginEvent((enabled ? \"_onEnable\" : \"_onDisable\"), this);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\n\t\n\t//----TweenLite static methods -----------------------------------------------------\n\t\n\t\t\tTweenLite.to = function(target, duration, vars) {\n\t\t\t\treturn new TweenLite(target, duration, vars);\n\t\t\t};\n\t\n\t\t\tTweenLite.from = function(target, duration, vars) {\n\t\t\t\tvars.runBackwards = true;\n\t\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\t\treturn new TweenLite(target, duration, vars);\n\t\t\t};\n\t\n\t\t\tTweenLite.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\t\ttoVars.startAt = fromVars;\n\t\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\t\treturn new TweenLite(target, duration, toVars);\n\t\t\t};\n\t\n\t\t\tTweenLite.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\t\treturn new TweenLite(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, lazy:false, useFrames:useFrames, overwrite:0});\n\t\t\t};\n\t\n\t\t\tTweenLite.set = function(target, vars) {\n\t\t\t\treturn new TweenLite(target, 0, vars);\n\t\t\t};\n\t\n\t\t\tTweenLite.getTweensOf = function(target, onlyActive) {\n\t\t\t\tif (target == null) { return []; }\n\t\t\t\ttarget = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\t\t\t\tvar i, a, j, t;\n\t\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\t\ti = target.length;\n\t\t\t\t\ta = [];\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\ta = a.concat(TweenLite.getTweensOf(target[i], onlyActive));\n\t\t\t\t\t}\n\t\t\t\t\ti = a.length;\n\t\t\t\t\t//now get rid of any duplicates (tweens of arrays of objects could cause duplicates)\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tt = a[i];\n\t\t\t\t\t\tj = i;\n\t\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\t\tif (t === a[j]) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ta = _register(target).concat();\n\t\t\t\t\ti = a.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (a[i]._gc || (onlyActive && !a[i].isActive())) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t};\n\t\n\t\t\tTweenLite.killTweensOf = TweenLite.killDelayedCallsTo = function(target, onlyActive, vars) {\n\t\t\t\tif (typeof(onlyActive) === \"object\") {\n\t\t\t\t\tvars = onlyActive; //for backwards compatibility (before \"onlyActive\" parameter was inserted)\n\t\t\t\t\tonlyActive = false;\n\t\t\t\t}\n\t\t\t\tvar a = TweenLite.getTweensOf(target, onlyActive),\n\t\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ta[i]._kill(vars, target);\n\t\t\t\t}\n\t\t\t};\n\t\n\t\n\t\n\t/*\n\t * ----------------------------------------------------------------\n\t * TweenPlugin   (could easily be split out as a separate file/class, but included for ease of use (so that people don't need to include another script call before loading plugins which is easy to forget)\n\t * ----------------------------------------------------------------\n\t */\n\t\t\tvar TweenPlugin = _class(\"plugins.TweenPlugin\", function(props, priority) {\n\t\t\t\t\t\tthis._overwriteProps = (props || \"\").split(\",\");\n\t\t\t\t\t\tthis._propName = this._overwriteProps[0];\n\t\t\t\t\t\tthis._priority = priority || 0;\n\t\t\t\t\t\tthis._super = TweenPlugin.prototype;\n\t\t\t\t\t}, true);\n\t\n\t\t\tp = TweenPlugin.prototype;\n\t\t\tTweenPlugin.version = \"1.19.0\";\n\t\t\tTweenPlugin.API = 2;\n\t\t\tp._firstPT = null;\n\t\t\tp._addTween = _addPropTween;\n\t\t\tp.setRatio = _setRatio;\n\t\n\t\t\tp._kill = function(lookup) {\n\t\t\t\tvar a = this._overwriteProps,\n\t\t\t\t\tpt = this._firstPT,\n\t\t\t\t\ti;\n\t\t\t\tif (lookup[this._propName] != null) {\n\t\t\t\t\tthis._overwriteProps = [];\n\t\t\t\t} else {\n\t\t\t\t\ti = a.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (lookup[a[i]] != null) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (lookup[pt.n] != null) {\n\t\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\t\tpt._prev = null;\n\t\t\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\n\t\t\tp._mod = p._roundProps = function(lookup) {\n\t\t\t\tvar pt = this._firstPT,\n\t\t\t\t\tval;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tval = lookup[this._propName] || (pt.n != null && lookup[ pt.n.split(this._propName + \"_\").join(\"\") ]);\n\t\t\t\t\tif (val && typeof(val) === \"function\") { //some properties that are very plugin-specific add a prefix named after the _propName plus an underscore, so we need to ignore that extra stuff here.\n\t\t\t\t\t\tif (pt.f === 2) {\n\t\t\t\t\t\t\tpt.t._applyPT.m = val;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.m = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tTweenLite._onPluginEvent = function(type, tween) {\n\t\t\t\tvar pt = tween._firstPT,\n\t\t\t\t\tchanged, pt2, first, last, next;\n\t\t\t\tif (type === \"_onInitAllProps\") {\n\t\t\t\t\t//sorts the PropTween linked list in order of priority because some plugins need to render earlier/later than others, like MotionBlurPlugin applies its effects after all x/y/alpha tweens have rendered on each frame.\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tnext = pt._next;\n\t\t\t\t\t\tpt2 = first;\n\t\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = next;\n\t\t\t\t\t}\n\t\t\t\t\tpt = tween._firstPT = first;\n\t\t\t\t}\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.pg) if (typeof(pt.t[type]) === \"function\") if (pt.t[type]()) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t\treturn changed;\n\t\t\t};\n\t\n\t\t\tTweenPlugin.activate = function(plugins) {\n\t\t\t\tvar i = plugins.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (plugins[i].API === TweenPlugin.API) {\n\t\t\t\t\t\t_plugins[(new plugins[i]())._propName] = plugins[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t};\n\t\n\t\t\t//provides a more concise way to define plugins that have no dependencies besides TweenPlugin and TweenLite, wrapping common boilerplate stuff into one function (added in 1.9.0). You don't NEED to use this to define a plugin - the old way still works and can be useful in certain (rare) situations.\n\t\t\t_gsDefine.plugin = function(config) {\n\t\t\t\tif (!config || !config.propName || !config.init || !config.API) { throw \"illegal plugin definition.\"; }\n\t\t\t\tvar propName = config.propName,\n\t\t\t\t\tpriority = config.priority || 0,\n\t\t\t\t\toverwriteProps = config.overwriteProps,\n\t\t\t\t\tmap = {init:\"_onInitTween\", set:\"setRatio\", kill:\"_kill\", round:\"_mod\", mod:\"_mod\", initAll:\"_onInitAllProps\"},\n\t\t\t\t\tPlugin = _class(\"plugins.\" + propName.charAt(0).toUpperCase() + propName.substr(1) + \"Plugin\",\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tTweenPlugin.call(this, propName, priority);\n\t\t\t\t\t\t\tthis._overwriteProps = overwriteProps || [];\n\t\t\t\t\t\t}, (config.global === true)),\n\t\t\t\t\tp = Plugin.prototype = new TweenPlugin(propName),\n\t\t\t\t\tprop;\n\t\t\t\tp.constructor = Plugin;\n\t\t\t\tPlugin.API = config.API;\n\t\t\t\tfor (prop in map) {\n\t\t\t\t\tif (typeof(config[prop]) === \"function\") {\n\t\t\t\t\t\tp[map[prop]] = config[prop];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tPlugin.version = config.version;\n\t\t\t\tTweenPlugin.activate([Plugin]);\n\t\t\t\treturn Plugin;\n\t\t\t};\n\t\n\t\n\t\t\t//now run through all the dependencies discovered and if any are missing, log that to the console as a warning. This is why it's best to have TweenLite load last - it can check all the dependencies for you.\n\t\t\ta = window._gsQueue;\n\t\t\tif (a) {\n\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\ta[i]();\n\t\t\t\t}\n\t\t\t\tfor (p in _defLookup) {\n\t\t\t\t\tif (!_defLookup[p].func) {\n\t\t\t\t\t\twindow.console.log(\"GSAP encountered missing dependency: \" + p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t_tickerActive = false; //ensures that the first official animation forces a ticker.tick() to update the time when it is instantiated\n\t\n\t})((typeof(module) !== \"undefined\" && module.exports && typeof(global) !== \"undefined\") ? global : this || window, \"TweenMax\");\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__;\r\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, {}))\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar StyleManager = (function () {\r\n\t    function StyleManager() {\r\n\t    }\r\n\t    StyleManager.cleanup = function () {\r\n\t        StyleManager.HtmlStyles = null;\r\n\t    };\r\n\t    StyleManager.log = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"StyleManager\", data);\r\n\t        }\r\n\t    };\r\n\t    StyleManager.parseElements = function (startNode) {\r\n\t        if (!startNode) {\r\n\t            return;\r\n\t        }\r\n\t        var nodes = StyleManager.getNodesList(startNode.firstElementChild)\r\n\t            .reverse()\r\n\t            .filter(function (node) { return node.hasAttribute(\"Class\") && node.getAttribute(\"Class\") !== \"\"; });\r\n\t        nodes\r\n\t            .filter(function (node) {\r\n\t            return neo_common_1.EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes_1.ComponentTypes.Style);\r\n\t        })\r\n\t            .forEach(function (node) {\r\n\t            var style = neo_common_1.EngineComponentFactory.get(node.getAttribute(\"Class\"));\r\n\t            style.create(node);\r\n\t            StyleManager.Styles[node.nodeName] = style;\r\n\t        });\r\n\t        nodes\r\n\t            .filter(function (node) {\r\n\t            return neo_common_1.EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes_1.ComponentTypes.HtmlStyle);\r\n\t        })\r\n\t            .forEach(function (node) {\r\n\t            var style = neo_common_1.EngineComponentFactory.get(node.getAttribute(\"Class\"));\r\n\t            style.create(node);\r\n\t            StyleManager.HtmlStyles[node.nodeName] = style;\r\n\t        });\r\n\t    };\r\n\t    StyleManager.getNodesList = function (node, nodeList) {\r\n\t        if (nodeList === void 0) { nodeList = []; }\r\n\t        if (!node) {\r\n\t            return nodeList;\r\n\t        }\r\n\t        if (node.nextElementSibling) {\r\n\t            nodeList = StyleManager.getNodesList(node.nextElementSibling, nodeList);\r\n\t        }\r\n\t        return nodeList.concat(node);\r\n\t    };\r\n\t    StyleManager.Styles = {};\r\n\t    StyleManager.HtmlStyles = {};\r\n\t    return StyleManager;\r\n\t}());\r\n\texports.StyleManager = StyleManager;\r\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Attributes = (function () {\r\n\t    function Attributes() {\r\n\t    }\r\n\t    Attributes.assignIntAttribute = function (node, attribute, defaultValue, radix) {\r\n\t        if (!node.hasAttribute(attribute)) {\r\n\t            return defaultValue;\r\n\t        }\r\n\t        return parseInt(node.getAttribute(attribute), radix);\r\n\t    };\r\n\t    Attributes.assignFloatAttribute = function (node, attribute, defaultValue) {\r\n\t        if (!node.hasAttribute(attribute)) {\r\n\t            return defaultValue;\r\n\t        }\r\n\t        return parseFloat(node.getAttribute(attribute));\r\n\t    };\r\n\t    Attributes.assignBooleanAttribute = function (node, attribute, defaultValue) {\r\n\t        if (!node.hasAttribute(attribute)) {\r\n\t            return defaultValue;\r\n\t        }\r\n\t        return neo_common_1.StringUtils.parseBoolean(node.getAttribute(attribute));\r\n\t    };\r\n\t    Attributes.assignStringAttribute = function (node, attribute, defaultValue) {\r\n\t        if (!node.hasAttribute(attribute)) {\r\n\t            return defaultValue;\r\n\t        }\r\n\t        return node.getAttribute(attribute);\r\n\t    };\r\n\t    return Attributes;\r\n\t}());\r\n\texports.Attributes = Attributes;\r\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar CustomUtils = (function () {\r\n\t    function CustomUtils() {\r\n\t    }\r\n\t    CustomUtils.getBlendMode = function (blendMode) {\r\n\t        if (Scaling_1.Scaling.IsIOs) {\r\n\t            if (blendMode == 1) {\r\n\t                blendMode = 3;\r\n\t            }\r\n\t        }\r\n\t        return blendMode;\r\n\t    };\r\n\t    CustomUtils.updateSpineData = function (spineData) {\r\n\t        if (Scaling_1.Scaling.IsIOs) {\r\n\t            if (spineData != null) {\r\n\t                var spineTextData = JSON.stringify(spineData);\r\n\t                spineTextData = spineTextData.split('\"blend\":\"additive\"').join('\"blend\":\"screen\"');\r\n\t                spineData = JSON.parse(spineTextData);\r\n\t            }\r\n\t        }\r\n\t        return spineData;\r\n\t    };\r\n\t    return CustomUtils;\r\n\t}());\r\n\texports.CustomUtils = CustomUtils;\r\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar AnimationFramePool = (function () {\r\n\t    function AnimationFramePool() {\r\n\t    }\r\n\t    AnimationFramePool.registerFrame = function (frame) {\r\n\t        var pool = AnimationFramePool.framesPool;\r\n\t        for (var i = 0; i < pool.length; i++) {\r\n\t            if (pool[i].frame_uid === frame.frame_uid) {\r\n\t                return false;\r\n\t            }\r\n\t        }\r\n\t        pool.push(frame);\r\n\t        return true;\r\n\t    };\r\n\t    AnimationFramePool.unregisterFrame = function (frame) {\r\n\t        var pool = AnimationFramePool.framesPool;\r\n\t        var idx = -1;\r\n\t        for (var i = 0; i < pool.length; i++) {\r\n\t            if (pool[i].frame_uid === frame.frame_uid) {\r\n\t                idx = i;\r\n\t                break;\r\n\t            }\r\n\t        }\r\n\t        var result = idx > -1;\r\n\t        if (result) {\r\n\t            if (pool[idx].frame_uid === frame.frame_uid) {\r\n\t                pool.splice(idx, 1);\r\n\t            }\r\n\t            else {\r\n\t                result = false;\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    AnimationFramePool.draw = function () {\r\n\t        var pool = AnimationFramePool.framesPool;\r\n\t        for (var i = 0; i < pool.length; i++) {\r\n\t            var frame = pool[i];\r\n\t            frame.frame_draw();\r\n\t        }\r\n\t    };\r\n\t    AnimationFramePool.framesPool = [];\r\n\t    return AnimationFramePool;\r\n\t}());\r\n\texports.AnimationFramePool = AnimationFramePool;\r\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar FrameTimerPool = (function () {\r\n\t    function FrameTimerPool() {\r\n\t    }\r\n\t    FrameTimerPool.add = function (key, item) {\r\n\t        FrameTimerPool.pool[key] = item;\r\n\t    };\r\n\t    FrameTimerPool.remove = function (key) {\r\n\t        delete FrameTimerPool.pool[key];\r\n\t    };\r\n\t    FrameTimerPool.pause = function (force) {\r\n\t        if (force === void 0) { force = false; }\r\n\t        if (FrameTimerPool.paused && !force) {\r\n\t            return;\r\n\t        }\r\n\t        for (var key in FrameTimerPool.pool) {\r\n\t            if (FrameTimerPool.pool[key] instanceof FrameTimer_1.FrameTimer) {\r\n\t                FrameTimerPool.pool[key].pause();\r\n\t            }\r\n\t        }\r\n\t        FrameTimerPool.paused = true;\r\n\t    };\r\n\t    FrameTimerPool.unpause = function (force) {\r\n\t        if (force === void 0) { force = false; }\r\n\t        if (!FrameTimerPool.paused && !force) {\r\n\t            return;\r\n\t        }\r\n\t        for (var key in FrameTimerPool.pool) {\r\n\t            if (FrameTimerPool.pool[key] instanceof FrameTimer_1.FrameTimer) {\r\n\t                FrameTimerPool.pool[key].unpause();\r\n\t            }\r\n\t        }\r\n\t        FrameTimerPool.paused = false;\r\n\t    };\r\n\t    FrameTimerPool.pool = {};\r\n\t    FrameTimerPool.paused = false;\r\n\t    return FrameTimerPool;\r\n\t}());\r\n\texports.FrameTimerPool = FrameTimerPool;\r\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar JackpotCounter_1 = __webpack_require__(24);\r\n\tvar JackpotHistoryDialog_1 = __webpack_require__(26);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar JackpotGame_1 = __webpack_require__(59);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Jackpot = (function () {\r\n\t    function Jackpot() {\r\n\t    }\r\n\t    Jackpot.initialize = function () {\r\n\t        if (AppContext_1.AppContext && AppContext_1.AppContext.gameConfiguration.ProgressiveBonusId > -1) {\r\n\t            document.body.classList.add(\"jpt-on\");\r\n\t            Jackpot.WidgetRoot = document.getElementById(\"jackpotWidget\");\r\n\t            Jackpot.GameRoot = document.getElementById(\"jackpotGame\");\r\n\t            Jackpot.BonusId = AppContext_1.AppContext.gameConfiguration.ProgressiveBonusId;\r\n\t            Jackpot.createCounters();\r\n\t            Jackpot.createHistoryDialogs();\r\n\t            Jackpot.bindElements();\r\n\t            Jackpot.getBonusInfo(Jackpot.initJackpotDataReceived);\r\n\t            if (GameManager_1.GameManager.gameClient) {\r\n\t                GameManager_1.GameManager.gameClient.setBonusId(Jackpot.BonusId);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            Jackpot.clearJackpot();\r\n\t        }\r\n\t    };\r\n\t    Jackpot.reinitialize = function () {\r\n\t        if (Jackpot.Offline) {\r\n\t            Jackpot.Offline = false;\r\n\t            Jackpot.refreshBonusInfo();\r\n\t            Jackpot.refreshCounters();\r\n\t        }\r\n\t    };\r\n\t    Jackpot.show = function () {\r\n\t        if (Jackpot.WidgetRoot) {\r\n\t            if (Jackpot.Counters.length > 0) {\r\n\t                for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                    Jackpot.Counters[i].createCurrency(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t                    Jackpot.HistoryDialogs[i].updateDataWithCurrency();\r\n\t                }\r\n\t                Jackpot.Height = Jackpot.Counters[0].getHeight();\r\n\t                Scaling_1.Scaling.PortraitMobileRatio = 0.76;\r\n\t                Scaling_1.Scaling.resizeRoot();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Jackpot.clearJackpot = function () {\r\n\t        var jackpotWidget = document.getElementById(\"jackpotWidget\");\r\n\t        var jackpotGame = document.getElementById(\"jackpotGame\");\r\n\t        if (jackpotWidget && jackpotWidget.parentNode && jackpotGame && jackpotGame.parentNode) {\r\n\t            jackpotWidget.parentNode.removeChild(jackpotWidget);\r\n\t            jackpotGame.parentNode.removeChild(jackpotGame);\r\n\t        }\r\n\t    };\r\n\t    Jackpot.createCounters = function () {\r\n\t        if (Jackpot.WidgetRoot) {\r\n\t            Jackpot.getCustomContent(\"jackpotLogo.jpg\", Jackpot.createLogo, Jackpot.createLogo);\r\n\t            Jackpot.createElement(\"div\", \"jackpotCountersBg\", Jackpot.WidgetRoot);\r\n\t            var holder = Jackpot.createElement(\"div\", \"jackpotCounters\", Jackpot.WidgetRoot);\r\n\t            holder.id = \"jackpotCounters\";\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                var counter = new JackpotCounter_1.JackpotCounter(i + 1, holder, Jackpot.refreshCounters);\r\n\t                Jackpot.Counters.push(counter);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Jackpot.createLogo = function (contentUrl) {\r\n\t        if (contentUrl === void 0) { contentUrl = \"\"; }\r\n\t        var logo = Jackpot.createElement(\"div\", \"jackpotLogo\", Jackpot.WidgetRoot);\r\n\t        logo = Jackpot.createElement(\"div\", \"\", logo);\r\n\t        logo.id = \"jackpotLogo\";\r\n\t        if (contentUrl != \"\") {\r\n\t            logo.style.background = \"url(\" + contentUrl + \")\";\r\n\t        }\r\n\t    };\r\n\t    Jackpot.createHistoryDialogs = function () {\r\n\t        if (Jackpot.WidgetRoot) {\r\n\t            var holder = Jackpot.createElement(\"div\", \"jackpotHistory\", Jackpot.WidgetRoot);\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                var dialog = new JackpotHistoryDialog_1.JackpotHistoryDialog(i + 1, holder);\r\n\t                Jackpot.HistoryDialogs.push(dialog);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Jackpot.createBonusGame = function () {\r\n\t        if (Jackpot.GameRoot) {\r\n\t            var holder = Jackpot.createElement(\"div\", \"jackpotGameHolder\", Jackpot.GameRoot);\r\n\t            Jackpot.Game = new JackpotGame_1.JackpotGame(holder);\r\n\t        }\r\n\t    };\r\n\t    Jackpot.refreshCounters = function () {\r\n\t        for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t            Jackpot.Counters[i].refreshWithReset();\r\n\t        }\r\n\t    };\r\n\t    Jackpot.showError = function (useResetAnim) {\r\n\t        if (useResetAnim === void 0) { useResetAnim = false; }\r\n\t        clearTimeout(this.RefreshTimerId);\r\n\t        if (Jackpot.WidgetRoot) {\r\n\t            if (Jackpot.Counters && Jackpot.HistoryDialogs) {\r\n\t                Jackpot.Offline = true;\r\n\t                for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                    Jackpot.Counters[i].error(useResetAnim);\r\n\t                    Jackpot.HistoryDialogs[i].error(useResetAnim);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Jackpot.refreshBonusInfo = function () {\r\n\t        clearTimeout(this.RefreshTimerId);\r\n\t        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive);\r\n\t    };\r\n\t    Jackpot.refreshBonusInfoInMiniGame = function (overrideLevelData) {\r\n\t        clearTimeout(this.RefreshTimerId);\r\n\t        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive, { overrideLeveldata: overrideLevelData, priority: true });\r\n\t    };\r\n\t    Jackpot.refreshBonusInfoWithWinValue = function (overrideLevelData) {\r\n\t        clearTimeout(this.RefreshTimerId);\r\n\t        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive, {\r\n\t            overrideLeveldata: overrideLevelData,\r\n\t            priority: true,\r\n\t            fromMiniGame: overrideLevelData.code,\r\n\t        });\r\n\t    };\r\n\t    Jackpot.refreshBonusInfoBeforeSpin = function (spinCallback) {\r\n\t        clearTimeout(this.RefreshTimerId);\r\n\t        Jackpot.getBonusInfoBeforeSpin(spinCallback, { priority: true });\r\n\t    };\r\n\t    Jackpot.getBonusInfo = function (callback, customData) {\r\n\t        if (GameManager_1.GameManager.gameClient) {\r\n\t            GameManager_1.GameManager.gameClient\r\n\t                .sendProgressiveBonusGetInfoRequest(Jackpot.BonusId)\r\n\t                .then(function (response) {\r\n\t                callback(response, customData);\r\n\t                return null;\r\n\t            })\r\n\t                .catch(function (error) {\r\n\t                Jackpot.showError(true);\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    Jackpot.getBonusInfoBeforeSpin = function (callback, customData) {\r\n\t        if (GameManager_1.GameManager.gameClient) {\r\n\t            GameManager_1.GameManager.gameClient\r\n\t                .sendProgressiveBonusGetInfoRequest(Jackpot.BonusId)\r\n\t                .then(function (response) {\r\n\t                Jackpot.jackpotDataReceive(response, customData);\r\n\t                callback();\r\n\t                return null;\r\n\t            })\r\n\t                .catch(function (error) {\r\n\t                Jackpot.showError(true);\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    Jackpot.initJackpotDataReceived = function (response, customData) {\r\n\t        if (response != null) {\r\n\t            Jackpot.RefreshInterval = response.refreshInterval;\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                Jackpot.Counters[i].initialize(response.levels[i], response.timestamp);\r\n\t                Jackpot.HistoryDialogs[i].initialize(response.levels[i]);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                Jackpot.Counters[i].error();\r\n\t                Jackpot.HistoryDialogs[i].error();\r\n\t            }\r\n\t        }\r\n\t        Jackpot.RefreshTimerId = setTimeout(Jackpot.refreshBonusInfo, Jackpot.RefreshInterval * 1000);\r\n\t    };\r\n\t    Jackpot.jackpotDataReceive = function (response, customData) {\r\n\t        if (response != null) {\r\n\t            Jackpot.RefreshInterval = response.refreshInterval;\r\n\t            var winOverride = customData != null && customData[\"overrideLeveldata\"] != null;\r\n\t            var priority = customData != null && customData[\"priority\"] != null;\r\n\t            var fromMiniGame = customData != null && customData[\"fromMiniGame\"] != null ? customData[\"fromMiniGame\"] : \"\";\r\n\t            if (winOverride) {\r\n\t                response = Jackpot.updateReponseData(response, customData[\"overrideLeveldata\"]);\r\n\t            }\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                Jackpot.Counters[i].assign(response.levels[i], response.timestamp, priority, response.levels[i][\"overridedLastWinAmount\"], fromMiniGame == response.levels[i].code);\r\n\t                Jackpot.HistoryDialogs[i].assign(response.levels[i]);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                Jackpot.Counters[i].error();\r\n\t                Jackpot.HistoryDialogs[i].error();\r\n\t            }\r\n\t        }\r\n\t        Jackpot.RefreshTimerId = setTimeout(Jackpot.refreshBonusInfo, Jackpot.RefreshInterval * 1000);\r\n\t    };\r\n\t    Jackpot.updateReponseData = function (response, overrideLevelData) {\r\n\t        if (overrideLevelData != null) {\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                if (response.levels[i].code == overrideLevelData.code) {\r\n\t                    if (overrideLevelData.lastWinAmount != null) {\r\n\t                        response.levels[i][\"overridedLastWinAmount\"] = overrideLevelData.lastWinAmount;\r\n\t                    }\r\n\t                    else {\r\n\t                        response.levels[i] = overrideLevelData;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return response;\r\n\t    };\r\n\t    Jackpot.bindElements = function () {\r\n\t        var _loop_1 = function(i) {\r\n\t            if (window[\"CHANNEL\"] === \"mobile\") {\r\n\t                Jackpot.Counters[i]\r\n\t                    .getRoot()\r\n\t                    .addEventListener(\"click\", function (event) { return Jackpot.toggleHistoryDialog(event, i); });\r\n\t                for (var i_1 = 0; i_1 < Jackpot.HistoryDialogs.length; i_1++) {\r\n\t                    Jackpot.HistoryDialogs[i_1]\r\n\t                        .getRoot()\r\n\t                        .addEventListener(\"click\", function (event) { return Jackpot.preventDefault(event); });\r\n\t                    Jackpot.HistoryDialogs[i_1]\r\n\t                        .getRoot()\r\n\t                        .addEventListener(\"touchstart\", function (event) { return Jackpot.preventDefault(event); });\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                Jackpot.Counters[i].getRoot().addEventListener(\"click\", Jackpot.showHistoryDialog.bind(this_1, i));\r\n\t                Jackpot.Counters[i].getRoot().addEventListener(\"mouseover\", Jackpot.showHistoryDialog.bind(this_1, i));\r\n\t                Jackpot.Counters[i].getRoot().addEventListener(\"mouseout\", Jackpot.hideHistoryDialog.bind(this_1, i));\r\n\t            }\r\n\t        };\r\n\t        var this_1 = this;\r\n\t        for (var i = 0; i < Jackpot.Counters.length; i++) {\r\n\t            _loop_1(i);\r\n\t        }\r\n\t    };\r\n\t    Jackpot.closeAllHistoryDialogs = function () {\r\n\t        if (Jackpot.WidgetRoot) {\r\n\t            Jackpot.WidgetRoot.removeEventListener(\"click\", Jackpot.closeAllHistoryDialogs);\r\n\t            for (var i = 0; i < Jackpot.HistoryDialogs.length; i++) {\r\n\t                Jackpot.HistoryDialogs[i].closeDialog();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Jackpot.showHistoryDialog = function (index) {\r\n\t        this.closeAllHistoryDialogs();\r\n\t        if (Jackpot.HistoryDialogs[index]) {\r\n\t            if (window[\"CHANNEL\"] === \"mobile\") {\r\n\t                HtmlController_1.HtmlController.dispatchAction(\"\");\r\n\t                Jackpot.WidgetRoot.addEventListener(\"click\", Jackpot.closeAllHistoryDialogs);\r\n\t            }\r\n\t            Jackpot.TouchEvent = Jackpot.hideHistoryDialog.bind(this, index);\r\n\t            document.addEventListener(\"touchstart\", Jackpot.TouchEvent);\r\n\t            Jackpot.HistoryDialogs[index].openDialog();\r\n\t        }\r\n\t    };\r\n\t    Jackpot.toggleHistoryDialog = function (event, index) {\r\n\t        event.preventDefault();\r\n\t        event.stopPropagation();\r\n\t        if (Jackpot.HistoryDialogs[index] && !Jackpot.HistoryDialogs[index].isOpen()) {\r\n\t            this.showHistoryDialog(index);\r\n\t        }\r\n\t        else {\r\n\t            this.closeAllHistoryDialogs();\r\n\t        }\r\n\t    };\r\n\t    Jackpot.hideHistoryDialog = function (index) {\r\n\t        if (Jackpot.HistoryDialogs[index]) {\r\n\t            Jackpot.HistoryDialogs[index].closeDialog();\r\n\t            document.removeEventListener(\"touchstart\", Jackpot.TouchEvent);\r\n\t        }\r\n\t    };\r\n\t    Jackpot.preventDefault = function (event) {\r\n\t        event.preventDefault();\r\n\t        event.stopPropagation();\r\n\t    };\r\n\t    Jackpot.initMiniGame = function (autostart, callback) {\r\n\t        if (!Jackpot.Game) {\r\n\t            Jackpot.createBonusGame();\r\n\t        }\r\n\t        Jackpot.Game.init(autostart, callback);\r\n\t    };\r\n\t    Jackpot.startMiniGame = function () {\r\n\t        if (!Jackpot.Game.hasStartedGame()) {\r\n\t            Jackpot.Game.start();\r\n\t        }\r\n\t    };\r\n\t    Jackpot.hasActiveGame = function () {\r\n\t        if (!Jackpot.Game) {\r\n\t            return false;\r\n\t        }\r\n\t        return Jackpot.Game.hasStartedGame();\r\n\t    };\r\n\t    Jackpot.hasInitializedGame = function () {\r\n\t        return Jackpot.Game && Jackpot.Game.hasInitializedGame();\r\n\t    };\r\n\t    Jackpot.hasMiniGame = function () {\r\n\t        if (Jackpot.Game && Jackpot.Game.hasStartedGame()) {\r\n\t            return true;\r\n\t        }\r\n\t        if (Jackpot.countersInError()) {\r\n\t            return false;\r\n\t        }\r\n\t        if (Jackpot.Game && Jackpot.Game.hasInitializedGame()) {\r\n\t            return true;\r\n\t        }\r\n\t        return GameManager_1.GameManager.gameResponse[\"progressiveBonus\"] && GameManager_1.GameManager.gameResponse[\"progressiveBonus\"].ticket;\r\n\t    };\r\n\t    Jackpot.disableMiniGameAutostart = function () {\r\n\t        if (Jackpot.Game) {\r\n\t            Jackpot.Game.disableAutostart();\r\n\t        }\r\n\t    };\r\n\t    Jackpot.waitForMiniGameInitialization = function () {\r\n\t        return (AppContext_1.AppContext &&\r\n\t            (AppContext_1.AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"WithinGameRound\" ||\r\n\t                AppContext_1.AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"AfterGameRound\"));\r\n\t    };\r\n\t    Jackpot.createElement = function (tag, className, rootElem) {\r\n\t        var elem = document.createElement(tag);\r\n\t        elem.setAttribute(\"class\", className);\r\n\t        if (rootElem) {\r\n\t            rootElem.appendChild(elem);\r\n\t        }\r\n\t        return elem;\r\n\t    };\r\n\t    Jackpot.countersInError = function () {\r\n\t        if (Jackpot.Counters && Jackpot.Counters.length > 0) {\r\n\t            for (var i = 0; i < Jackpot.CountersCount; i++) {\r\n\t                if (Jackpot.Counters[i].hasError()) {\r\n\t                    return true;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    Jackpot.getCustomContent = function (name, success, error) {\r\n\t        if (AppContext_1.AppContext.gameConfiguration == null) {\r\n\t            if (error)\r\n\t                error();\r\n\t            return;\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.StaticContentUrl == \"\") {\r\n\t            if (error)\r\n\t                error();\r\n\t            return;\r\n\t        }\r\n\t        var theme = AppContext_1.AppContext.gameConfiguration.ProgressiveBonusTheme;\r\n\t        if (theme == \"\") {\r\n\t            if (AppContext_1.AppContext.gameConfiguration.UseJackpotLocalization) {\r\n\t                theme = Jackpot.JackpotTheme;\r\n\t            }\r\n\t            else {\r\n\t                if (error)\r\n\t                    error();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        var staticContentUrl = AppContext_1.AppContext.gameConfiguration.StaticContentUrl;\r\n\t        var spbFolder = \"SynotProgressiveBonus\";\r\n\t        var url = \"\" + staticContentUrl + spbFolder + \"/\" + theme + \"/\" + window[\"QUALITY\"] + \"/\" + name;\r\n\t        var img = document.createElement(\"img\");\r\n\t        img.setAttribute(\"src\", url);\r\n\t        img.addEventListener(\"load\", function (ev) {\r\n\t            if (success)\r\n\t                success(url);\r\n\t        });\r\n\t        img.addEventListener(\"error\", function (ev) {\r\n\t            if (error)\r\n\t                error();\r\n\t        });\r\n\t    };\r\n\t    Jackpot.JackpotTheme = \"SPJackpot\";\r\n\t    Jackpot.Height = 0;\r\n\t    Jackpot.BonusId = -1;\r\n\t    Jackpot.CountersCount = 4;\r\n\t    Jackpot.Counters = [];\r\n\t    Jackpot.HistoryDialogs = [];\r\n\t    Jackpot.RefreshInterval = 15;\r\n\t    Jackpot.Offline = false;\r\n\t    return Jackpot;\r\n\t}());\r\n\texports.Jackpot = Jackpot;\r\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar gsap_1 = __webpack_require__(16);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar JackpotCounter = (function () {\r\n\t    function JackpotCounter(index, holder, resetCallback) {\r\n\t        if (AppContext_1.AppContext.gameConfiguration != null) {\r\n\t            JackpotCounter.DecimalPlaces = AppContext_1.AppContext.gameConfiguration.ShowDecimalPlaces;\r\n\t        }\r\n\t        this.root = this.createBaseLayout(index);\r\n\t        holder.appendChild(this.root);\r\n\t        this.createDigits();\r\n\t        this.createDecimalPoint();\r\n\t        this.currentCounterValue = 0;\r\n\t        this.previousCounterValue = 0;\r\n\t        this.lastWinValue = -1;\r\n\t        this.lastWinCount = -1;\r\n\t        this.overridedLastWinValue = -1;\r\n\t        this.winAnimationDelay = FrameTimer_1.CreateFrameTimer(\"winAnimationDelayTimer\");\r\n\t        this.winAnimationDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.winAnimationFinished.bind(this));\r\n\t        this.mainTween = null;\r\n\t        this.digitTween = null;\r\n\t        this.winFromMinigame = false;\r\n\t        this.lastUpdateTime = Date.now();\r\n\t        this.resetCallback = resetCallback;\r\n\t        this.reset();\r\n\t    }\r\n\t    JackpotCounter.prototype.createBaseLayout = function (index) {\r\n\t        var root = this.createElement(\"div\", \"jackpotCounter l-\" + index);\r\n\t        this.createElement(\"div\", \"jackpotFrame\", root);\r\n\t        var level = this.createElement(\"div\", \"jackpotLevel\", root);\r\n\t        this.createElement(\"div\", \"jackpotIconError\", level);\r\n\t        this.createElement(\"div\", \"jackpotDigitsHolder\", root);\r\n\t        this.createElement(\"div\", \"jackpotGradient\", root);\r\n\t        var currency = this.createElement(\"div\", \"jackpotCurrency\", root);\r\n\t        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\r\n\t        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\r\n\t        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\r\n\t        return root;\r\n\t    };\r\n\t    JackpotCounter.prototype.createCurrency = function (currency) {\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(currency)) {\r\n\t            var jackpotCurrencyLetters = this.root.getElementsByClassName(\"jackpotCurrencyLetter\");\r\n\t            for (var i = 0; i < jackpotCurrencyLetters.length; i++) {\r\n\t                if (currency.length > i) {\r\n\t                    jackpotCurrencyLetters[i].textContent = currency.charAt(i);\r\n\t                }\r\n\t            }\r\n\t            jackpotCurrencyLetters[0].parentElement.classList.add(\"ln-\" + currency.length);\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.createDigits = function () {\r\n\t        var digitsHolder = this.root.getElementsByClassName(\"jackpotDigitsHolder\")[0];\r\n\t        var digitsArray = [];\r\n\t        this.digits = [];\r\n\t        var digit;\r\n\t        for (var i = 0; i < JackpotCounter.Length; i++) {\r\n\t            var className = i == JackpotCounter.Length - JackpotCounter.DecimalPlaces ? \"digits decimalOffset\" : \"digits\";\r\n\t            digit = this.createElement(\"div\", className, digitsHolder);\r\n\t            var from = this.createElement(\"div\", \"digit\", digit);\r\n\t            var to = this.createElement(\"div\", \"digit\", digit);\r\n\t            digitsArray.push(digit);\r\n\t            this.digits.push({ from: from, to: to });\r\n\t        }\r\n\t        if (JackpotCounter.UseThousandsSeparator) {\r\n\t            digitsHolder.classList.add(\"thousandsFormat\");\r\n\t            for (var i = 0; i < digitsArray.length; i++) {\r\n\t                var index = digitsArray.length - 1 - i;\r\n\t                var hasThousandsOffset = index > 0 && i > JackpotCounter.DecimalPlaces && (i + 1 - JackpotCounter.DecimalPlaces) % 3 == 0;\r\n\t                if (hasThousandsOffset && digitsArray[index] != null) {\r\n\t                    digitsArray[index].classList.add(\"thousandsOffset\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.settings = {\r\n\t            width: parseInt(window.getComputedStyle(digit).width),\r\n\t            height: parseInt(window.getComputedStyle(digit).height),\r\n\t        };\r\n\t    };\r\n\t    JackpotCounter.prototype.createDecimalPoint = function () {\r\n\t        var digitsHolder = this.root.getElementsByClassName(\"jackpotDigitsHolder\")[0];\r\n\t        if (JackpotCounter.DecimalPlaces > 0) {\r\n\t            this.decimalDot = this.createElement(\"div\", \"digit nDot\", digitsHolder);\r\n\t            this.decimalDot.style.right = JackpotCounter.DecimalPlaces * this.settings.width + \"px\";\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.initialize = function (data, serverTimestamp) {\r\n\t        this.assign(data, serverTimestamp);\r\n\t    };\r\n\t    JackpotCounter.prototype.assign = function (data, serverTimestamp, priority, overridedLastWinValue, winFromMinigame) {\r\n\t        if (priority === void 0) { priority = false; }\r\n\t        if (overridedLastWinValue === void 0) { overridedLastWinValue = -1; }\r\n\t        if (winFromMinigame === void 0) { winFromMinigame = false; }\r\n\t        this.currentData = data;\r\n\t        this.nextValue = this.normalizeValue(data.nextValue);\r\n\t        this.nextDate = Date.now() + (new Date(data.nextTimestamp).getTime() - new Date(serverTimestamp).getTime());\r\n\t        this.previousValue = this.normalizeValue(data.previousValue);\r\n\t        this.winFromMinigame = winFromMinigame;\r\n\t        var oldValuesReset = Date.now() - this.lastUpdateTime > JackpotCounter.MaxNextTimeDiff * 1000;\r\n\t        if (overridedLastWinValue > -1) {\r\n\t            this.overridedLastWinValue = this.normalizeValue(overridedLastWinValue);\r\n\t        }\r\n\t        if (oldValuesReset && this.resetCallback != null) {\r\n\t            this.resetCallback();\r\n\t            return;\r\n\t        }\r\n\t        if (this.inError) {\r\n\t            this.removeError();\r\n\t            this.reset();\r\n\t            return;\r\n\t        }\r\n\t        if (!this.isCounting || priority) {\r\n\t            this.refresh();\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.error = function (useResetAnim) {\r\n\t        if (useResetAnim === void 0) { useResetAnim = false; }\r\n\t        if (!this.inError) {\r\n\t            this.inError = true;\r\n\t            this.isCounting = false;\r\n\t            if (useResetAnim) {\r\n\t                this.resetMainTween();\r\n\t                this.resetDigitTween(true);\r\n\t                this.errorResetAnim();\r\n\t                return;\r\n\t            }\r\n\t            if (this.decimalDot) {\r\n\t                this.decimalDot.style.display = \"none\";\r\n\t            }\r\n\t            this.root.classList.add(\"jackpotError\");\r\n\t            var oldValue = this.formatValue(this.previousCounterValue > 0 ? this.previousCounterValue.toString() : \"\", true);\r\n\t            var newValue = this.formatValue(\"OFFLINE\", true);\r\n\t            this.resetDigitTween(true);\r\n\t            this.animateDigits(oldValue, newValue, false, false, JackpotCounter.DigitAnimDuration * 2, 0, \"linear\", false, null);\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.errorResetAnim = function () {\r\n\t        this.root.classList.add(\"jackpotExpired\");\r\n\t    };\r\n\t    JackpotCounter.prototype.checkError = function () {\r\n\t        if (this.inError) {\r\n\t            this.resetMainTween();\r\n\t            this.resetDigitTween();\r\n\t            this.isCounting = false;\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    JackpotCounter.prototype.removeError = function () {\r\n\t        if (this.inError) {\r\n\t            this.inError = false;\r\n\t            this.root.classList.remove(\"jackpotError\");\r\n\t            if (this.decimalDot) {\r\n\t                this.decimalDot.style.display = \"block\";\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.hasError = function () {\r\n\t        return this.inError;\r\n\t    };\r\n\t    JackpotCounter.prototype.refreshWithReset = function () {\r\n\t        this.hasWin();\r\n\t        this.root.classList.remove(\"jackpotWin\");\r\n\t        this.winAnimationDelay.stop();\r\n\t        this.resetMainTween();\r\n\t        this.resetDigitTween();\r\n\t        this.resetDigitsTween();\r\n\t        this.isCounting = false;\r\n\t        this.removeError();\r\n\t        this.reset(JackpotCounter.MinResetAnimCount - 3);\r\n\t    };\r\n\t    JackpotCounter.prototype.resetDigitsTween = function () {\r\n\t        for (var i = 0; i < this.digits.length; i++) {\r\n\t            gsap_1.TweenLite.killTweensOf(this.digits[i].to);\r\n\t            gsap_1.TweenLite.killTweensOf(this.digits[i].from);\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.animateDigits = function (oldValue, newValue, useBitmap, checkFirstDiff, duration, delay, ease, shuffle, callback) {\r\n\t        var firstDigitIndex = 0;\r\n\t        if (checkFirstDiff) {\r\n\t            for (var i = 0; i < JackpotCounter.Length; i++) {\r\n\t                var oldDigit = oldValue.charAt(i);\r\n\t                var newDigit = newValue.charAt(i);\r\n\t                if (oldDigit !== newDigit) {\r\n\t                    firstDigitIndex = i;\r\n\t                    break;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        for (var i = firstDigitIndex; i < JackpotCounter.Length; i++) {\r\n\t            var oldDigit = oldValue.charAt(i);\r\n\t            var newDigit = newValue.charAt(i);\r\n\t            this.animateDigit(i, oldDigit, newDigit, duration, delay, ease, useBitmap, shuffle ? (i % 2 === 0 ? 1 : -1) : 1, i === JackpotCounter.Length - 1 ? callback : null);\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.animateDigit = function (index, fromValue, toValue, duration, delay, ease, useBitmap, direction, callback) {\r\n\t        var from = this.digits[index].from;\r\n\t        this.setTransformY(from, 0, delay);\r\n\t        this.setDigitValue(from, fromValue, useBitmap, true);\r\n\t        gsap_1.TweenLite.fromTo(from, duration, { y: 0 }, { y: this.settings.height * direction * -1, ease: ease, delay: delay });\r\n\t        var to = this.digits[index].to;\r\n\t        this.setTransformY(to, this.settings.height * direction, delay);\r\n\t        this.setDigitValue(to, toValue, useBitmap);\r\n\t        gsap_1.TweenLite.killTweensOf(to);\r\n\t        var tween = gsap_1.TweenLite.fromTo(to, duration, { y: this.settings.height * direction }, { y: 0, ease: ease, delay: delay });\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(callback)) {\r\n\t            this.digitTween = tween;\r\n\t            this.digitTween.eventCallback(\"onComplete\", callback, [], this);\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.setDigitValue = function (elem, value, useBitmap, fromValue) {\r\n\t        if (fromValue === void 0) { fromValue = false; }\r\n\t        if (fromValue) {\r\n\t            if (useBitmap && elem.classList.contains(\"letter\")) {\r\n\t                useBitmap = false;\r\n\t            }\r\n\t            else if (!useBitmap && !elem.classList.contains(\"letter\")) {\r\n\t                useBitmap = true;\r\n\t            }\r\n\t        }\r\n\t        if (value == null || value === JackpotCounter.LeadingZeroLetter) {\r\n\t            elem.className = \"digit leadingZero\";\r\n\t        }\r\n\t        else {\r\n\t            if (!useBitmap) {\r\n\t                elem.textContent = value;\r\n\t                elem.className = \"digit letter\";\r\n\t            }\r\n\t            else {\r\n\t                elem.textContent = \"\";\r\n\t                elem.className = \"digit n\" + value;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.setTransformY = function (elem, y, delay) {\r\n\t        if (delay > 0) {\r\n\t            elem.style.transform = \"transform3d(0, \" + y + \"px, 0)\";\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.refresh = function () {\r\n\t        if (this.checkError()) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.hasWin()) {\r\n\t            this.isCounting = true;\r\n\t            this.initWinAnimation();\r\n\t            return;\r\n\t        }\r\n\t        if (this.currentCounterValue == this.nextValue) {\r\n\t            this.resetDigitTween();\r\n\t            this.resetDigitsToBasePosition();\r\n\t            this.lastUpdateTime = Date.now();\r\n\t            var availableTime_1 = (this.nextDate - Date.now()) * 0.001;\r\n\t            if (availableTime_1 > 0) {\r\n\t                this.resetMainTween();\r\n\t                this.mainTween = gsap_1.TweenLite.fromTo(this, availableTime_1, { idleValue: 0 }, { idleValue: 100, ease: \"linear\" });\r\n\t                this.mainTween.eventCallback(\"onComplete\", this.refresh, [], this);\r\n\t            }\r\n\t            else {\r\n\t                this.isCounting = false;\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (this.currentCounterValue > this.nextValue) {\r\n\t            this.isCounting = false;\r\n\t            return;\r\n\t        }\r\n\t        var availableTime = (this.nextDate - Date.now()) * 0.001;\r\n\t        this.resetMainTween();\r\n\t        this.mainTween = gsap_1.TweenLite.fromTo(this, availableTime, { currentCounterValue: this.currentCounterValue }, { currentCounterValue: this.nextValue, ease: \"linear\", roundProps: \"currentCounterValue\" });\r\n\t        this.mainTween.eventCallback(\"onComplete\", this.refresh, [], this);\r\n\t        this.mainTween.eventCallback(\"onUpdate\", this.onRefreshTweenUpdate, [], this);\r\n\t        this.isCounting = true;\r\n\t    };\r\n\t    JackpotCounter.prototype.onRefreshTweenUpdate = function () {\r\n\t        if (this.digitTween == null) {\r\n\t            this.refreshCounter();\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.refreshCounter = function () {\r\n\t        if (this.inError) {\r\n\t            this.resetDigitTween();\r\n\t            return;\r\n\t        }\r\n\t        if (this.previousCounterValue == this.currentCounterValue) {\r\n\t            this.resetDigitTween();\r\n\t            return;\r\n\t        }\r\n\t        var oldValue = this.formatValue(this.previousCounterValue.toString(), true);\r\n\t        var newValue = this.formatValue(this.currentCounterValue.toString(), true);\r\n\t        this.lastUpdateTime = Date.now();\r\n\t        this.animateDigits(oldValue, newValue, true, true, JackpotCounter.DigitAnimDuration * 2, 0, \"linear\", false, this.refreshCounter);\r\n\t        this.previousCounterValue = this.currentCounterValue;\r\n\t    };\r\n\t    JackpotCounter.prototype.reset = function (resetAnimCount) {\r\n\t        if (resetAnimCount === void 0) { resetAnimCount = 0; }\r\n\t        this.resetAnimCount = resetAnimCount;\r\n\t        this.isCounting = true;\r\n\t        this.resetCounter();\r\n\t    };\r\n\t    JackpotCounter.prototype.resetCounter = function () {\r\n\t        if (this.checkError()) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.resetAnimCount >= JackpotCounter.MinResetAnimCount - 1 && this.currentData != null) {\r\n\t            if (this.hasWin()) {\r\n\t                this.resetDigitTween();\r\n\t                this.isCounting = true;\r\n\t                this.initWinAnimation();\r\n\t                return;\r\n\t            }\r\n\t            var oldValue = this.formatValue(this.currentCounterValue.toString(), false);\r\n\t            var newValue = this.formatValue(this.previousValue.toString(), true);\r\n\t            this.currentCounterValue = this.previousValue;\r\n\t            this.previousCounterValue = this.previousValue;\r\n\t            this.animateDigits(oldValue, newValue, true, false, JackpotCounter.DigitAnimDuration * 10, 0, \"Back.easeOut\", true, this.resetFinished);\r\n\t        }\r\n\t        else {\r\n\t            this.resetAnimCount++;\r\n\t            var random = Math.random();\r\n\t            var length_1 = Math.pow(10, JackpotCounter.Length);\r\n\t            var value = Math.round(random * length_1);\r\n\t            var oldValue = this.formatValue(this.currentCounterValue > 0 ? this.currentCounterValue.toString() : \"\", false);\r\n\t            var newValue = this.formatValue(value.toString(), false);\r\n\t            this.animateDigits(oldValue, newValue, true, false, JackpotCounter.DigitAnimDuration, 0, \"linear\", true, this.resetCounter);\r\n\t            this.currentCounterValue = value;\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.resetFinished = function () {\r\n\t        this.lastUpdateTime = Date.now();\r\n\t        this.resetDigitTween();\r\n\t        this.isCounting = false;\r\n\t        this.refresh();\r\n\t    };\r\n\t    JackpotCounter.prototype.hasWin = function () {\r\n\t        var result = false;\r\n\t        if (this.currentData != null && this.currentData.lastWinAmount != null) {\r\n\t            var currentLastWin = this.overridedLastWinValue > -1\r\n\t                ? this.overridedLastWinValue\r\n\t                : this.normalizeValue(this.currentData.lastWinAmount);\r\n\t            var currentWinCount = this.currentData.winCount;\r\n\t            if (this.lastWinValue > -1) {\r\n\t                result = this.lastWinValue != currentLastWin;\r\n\t                if (!result && this.lastWinCount > -1 && currentWinCount > -1 && !this.winFromMinigame) {\r\n\t                    result = this.lastWinCount != currentWinCount;\r\n\t                }\r\n\t            }\r\n\t            this.lastWinCount = currentWinCount;\r\n\t            this.lastWinValue = currentLastWin;\r\n\t            this.overridedLastWinValue = -1;\r\n\t        }\r\n\t        return result || this.winFromMinigame;\r\n\t    };\r\n\t    JackpotCounter.prototype.initWinAnimation = function () {\r\n\t        this.resetMainTween();\r\n\t        if (this.digitTween != null) {\r\n\t            this.digitTween.eventCallback(\"onComplete\", this.startWinAnimation, [], this);\r\n\t        }\r\n\t        else {\r\n\t            this.startWinAnimation();\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.startWinAnimation = function () {\r\n\t        if (this.currentCounterValue != this.lastWinValue) {\r\n\t            var oldValue = this.formatValue(this.currentCounterValue.toString(), true);\r\n\t            var newValue = this.formatValue(this.lastWinValue.toString(), true);\r\n\t            this.animateDigits(oldValue, newValue, true, true, JackpotCounter.DigitAnimDuration * 2, 0, \"linear\", false, this.showWinAnimation);\r\n\t            this.previousCounterValue = this.currentCounterValue;\r\n\t        }\r\n\t        else {\r\n\t            this.showWinAnimation();\r\n\t        }\r\n\t        this.winAnimationDelay.start(this.winFromMinigame ? JackpotCounter.WinFromMinigameAnimDuration : JackpotCounter.WinAnimDuration);\r\n\t    };\r\n\t    JackpotCounter.prototype.showWinAnimation = function () {\r\n\t        this.forceWinValue();\r\n\t        this.root.classList.add(\"jackpotWin\");\r\n\t        if (this.winFromMinigame) {\r\n\t            this.root.classList.add(\"fromMinigame\");\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.winAnimationFinished = function () {\r\n\t        this.winFromMinigame = false;\r\n\t        this.root.classList.remove(\"jackpotWin\", \"fromMinigame\");\r\n\t        this.reset();\r\n\t    };\r\n\t    JackpotCounter.prototype.getRoot = function () {\r\n\t        return this.root;\r\n\t    };\r\n\t    JackpotCounter.prototype.getHeight = function () {\r\n\t        if (this.root.parentElement != null) {\r\n\t            this.root.parentElement.classList.add(\"baseCounterHeight\");\r\n\t            this.root.parentElement.offsetWidth;\r\n\t            var height = parseInt(window.getComputedStyle(this.root.parentElement).height);\r\n\t            this.root.parentElement.classList.remove(\"baseCounterHeight\");\r\n\t            return height;\r\n\t        }\r\n\t        return 0;\r\n\t    };\r\n\t    JackpotCounter.prototype.createElement = function (tag, className, rootElem) {\r\n\t        var elem = document.createElement(tag);\r\n\t        elem.setAttribute(\"class\", className);\r\n\t        if (rootElem) {\r\n\t            rootElem.appendChild(elem);\r\n\t        }\r\n\t        return elem;\r\n\t    };\r\n\t    JackpotCounter.prototype.normalizeValue = function (value) {\r\n\t        var formattedValue = Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, value.toString());\r\n\t        formattedValue = formattedValue.replace(\".\", \"\");\r\n\t        value = parseInt(formattedValue);\r\n\t        if (value >= Math.pow(10, JackpotCounter.Length)) {\r\n\t            var normalizedValue = \"\";\r\n\t            for (var i = 0; i < JackpotCounter.Length; i++) {\r\n\t                normalizedValue = \"9\" + normalizedValue;\r\n\t            }\r\n\t            return parseInt(normalizedValue);\r\n\t        }\r\n\t        return value;\r\n\t    };\r\n\t    JackpotCounter.prototype.formatValue = function (formattedValue, leading) {\r\n\t        if (formattedValue.length > JackpotCounter.Length) {\r\n\t            formattedValue = formattedValue.substr(formattedValue.length - JackpotCounter.Length);\r\n\t        }\r\n\t        else {\r\n\t            while (formattedValue.length < JackpotCounter.DecimalPlaces + 1) {\r\n\t                formattedValue = \"0\" + formattedValue;\r\n\t            }\r\n\t            while (formattedValue.length < JackpotCounter.Length) {\r\n\t                formattedValue = \"\" + (leading ? JackpotCounter.LeadingZeroLetter : \"0\") + formattedValue;\r\n\t            }\r\n\t        }\r\n\t        return formattedValue;\r\n\t    };\r\n\t    JackpotCounter.prototype.resetMainTween = function () {\r\n\t        if (this.mainTween != null) {\r\n\t            this.mainTween.kill();\r\n\t            this.mainTween.eventCallback(\"onComplete\", null);\r\n\t            this.mainTween.eventCallback(\"onUpdate\", null);\r\n\t            this.mainTween = null;\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.resetDigitTween = function (onlyCallback) {\r\n\t        if (onlyCallback === void 0) { onlyCallback = false; }\r\n\t        if (this.digitTween != null) {\r\n\t            this.digitTween.eventCallback(\"onComplete\", null);\r\n\t            if (!onlyCallback) {\r\n\t                this.digitTween.kill();\r\n\t            }\r\n\t            this.digitTween = null;\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.resetDigitsToBasePosition = function () {\r\n\t        var currentValue = this.formatValue(this.currentCounterValue.toString(), true);\r\n\t        for (var i = 0; i < this.digits.length; i++) {\r\n\t            this.setDigitValue(this.digits[i].to, currentValue.charAt(i), true);\r\n\t            this.digits[i].from.setAttribute(\"style\", \"transform: matrix(1, 0, 0, 1, 0, \" + this.settings.height * -1 + \");\");\r\n\t            this.digits[i].to.setAttribute(\"style\", \"transform: matrix(1, 0, 0, 1, 0, 0);\");\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.prototype.forceWinValue = function () {\r\n\t        var currentValue = this.formatValue(this.lastWinValue.toString(), true);\r\n\t        for (var i = 0; i < this.digits.length; i++) {\r\n\t            this.setDigitValue(this.digits[i].to, currentValue.charAt(i), true);\r\n\t            this.digits[i].from.setAttribute(\"style\", \"transform: matrix(1, 0, 0, 1, 0, \" + this.settings.height * -1 + \");\");\r\n\t            this.digits[i].to.setAttribute(\"style\", \"transform: matrix(1, 0, 0, 1, 0, 0);\");\r\n\t        }\r\n\t    };\r\n\t    JackpotCounter.LeadingZeroLetter = \" \";\r\n\t    JackpotCounter.WinAnimDuration = 240;\r\n\t    JackpotCounter.WinFromMinigameAnimDuration = 540;\r\n\t    JackpotCounter.Length = 10;\r\n\t    JackpotCounter.DecimalPlaces = 2;\r\n\t    JackpotCounter.DigitAnimDuration = 0.1;\r\n\t    JackpotCounter.MinResetAnimCount = 15;\r\n\t    JackpotCounter.UseThousandsSeparator = true;\r\n\t    JackpotCounter.MaxNextTimeDiff = 2 * 60;\r\n\t    return JackpotCounter;\r\n\t}());\r\n\texports.JackpotCounter = JackpotCounter;\r\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Strings_1 = __webpack_require__(4);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar Languages = (function () {\r\n\t    function Languages() {\r\n\t    }\r\n\t    Languages.getRid = function (rid) {\r\n\t        var value = [];\r\n\t        for (var _i = 1; _i < arguments.length; _i++) {\r\n\t            value[_i - 1] = arguments[_i];\r\n\t        }\r\n\t        if (value != null && value.length > 0) {\r\n\t            return Strings_1.Strings.getWithValues.apply(Strings_1.Strings, [rid].concat(value));\r\n\t        }\r\n\t        else {\r\n\t            return Strings_1.Strings.get(rid);\r\n\t        }\r\n\t    };\r\n\t    Languages.formatText = function (ridType, text) {\r\n\t        switch (ridType) {\r\n\t            case this.FormatMoney:\r\n\t                return neo_common_1.NumberUtils.valueToNumber(text, AppContext_1.AppContext.gameConfiguration.ShowDecimalPlaces);\r\n\t            default:\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING unknow RidType: \" + ridType);\r\n\t                }\r\n\t        }\r\n\t        return text;\r\n\t    };\r\n\t    Languages.filterText = function (ridFilter, text) {\r\n\t        switch (ridFilter) {\r\n\t            case this.FilterNoZero:\r\n\t                if (parseFloat(text) <= 0) {\r\n\t                    return \"\";\r\n\t                }\r\n\t                else {\r\n\t                    return text;\r\n\t                }\r\n\t            default:\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING unknow RidFilter: \" + ridFilter);\r\n\t                }\r\n\t        }\r\n\t        return text;\r\n\t    };\r\n\t    Languages.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Languages\", s);\r\n\t        }\r\n\t    };\r\n\t    Languages.FormatMoney = \"MONEY\";\r\n\t    Languages.FilterNoZero = \"NO_ZERO\";\r\n\t    return Languages;\r\n\t}());\r\n\texports.Languages = Languages;\r\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar JackpotData_1 = __webpack_require__(27);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar JackpotHistoryDialog = (function () {\r\n\t    function JackpotHistoryDialog(index, holder) {\r\n\t        this.root = this.createBaseLayout(index);\r\n\t        this.currency = \"\";\r\n\t        this.historyDataElements = {};\r\n\t        holder.appendChild(this.root);\r\n\t    }\r\n\t    JackpotHistoryDialog.prototype.initialize = function (initData) {\r\n\t        this.createDataSections();\r\n\t        this.initialized = true;\r\n\t        if (initData) {\r\n\t            this.assign(initData);\r\n\t        }\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.createBaseLayout = function (index) {\r\n\t        return this.createElement(\"div\", \"jackpotHistoryDialog _disabled l-\" + index);\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.createDataSections = function () {\r\n\t        if (this.root) {\r\n\t            var section = void 0;\r\n\t            var dataHolder = void 0;\r\n\t            var closeBtn = this.createElement(\"div\", \"jackpotCloseBtn\", this.root);\r\n\t            closeBtn.addEventListener(\"touchstart\", function (e) {\r\n\t                e.preventDefault();\r\n\t                e.stopPropagation();\r\n\t                Jackpot_1.Jackpot.closeAllHistoryDialogs();\r\n\t            });\r\n\t            closeBtn.addEventListener(\"click\", function () {\r\n\t                Jackpot_1.Jackpot.closeAllHistoryDialogs();\r\n\t            });\r\n\t            section = this.createElement(\"div\", \"jackpotHistorySection\", this.root);\r\n\t            this.createElement(\"div\", \"jackpotLevel\", section);\r\n\t            this.createDataElement(\"div\", \"jackpotTitle\", JackpotData_1.JackpotData.DataCode, section);\r\n\t            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\r\n\t            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\r\n\t            this.createTextElement(\"div\", \"jackpotHistoryDataLabel\", Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_HIGHEST_WIN\"), dataHolder);\r\n\t            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData_1.JackpotData.DataHighestWinDate, dataHolder);\r\n\t            this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData_1.JackpotData.DataHighestWinAmount, section);\r\n\t            this.assingData(JackpotData_1.JackpotData.DataHighestWinDate, \"-\");\r\n\t            this.assingData(JackpotData_1.JackpotData.DataHighestWinAmount, Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n\t            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\r\n\t            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\r\n\t            this.createTextElement(\"div\", \"jackpotHistoryDataLabel\", Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_NUM_WINS\"), dataHolder);\r\n\t            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData_1.JackpotData.DataWinCount, dataHolder);\r\n\t            this.assingData(JackpotData_1.JackpotData.DataWinCount, \"-\");\r\n\t            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\r\n\t            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\r\n\t            this.createTextElement(\"div\", \"jackpotHistoryDataLabel\", Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_LAST_WIN\"), dataHolder);\r\n\t            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData_1.JackpotData.DataLastWinDate, dataHolder);\r\n\t            this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData_1.JackpotData.DataLastWinAmount, section);\r\n\t            this.assingData(JackpotData_1.JackpotData.DataLastWinDate, \"-\");\r\n\t            this.assingData(JackpotData_1.JackpotData.DataLastWinAmount, Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n\t            this.showWins(false);\r\n\t        }\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.updateDataWithCurrency = function () {\r\n\t        if (this.lastData != null) {\r\n\t            this.assign(this.lastData);\r\n\t        }\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.error = function (useResetAnim) {\r\n\t        if (useResetAnim === void 0) { useResetAnim = false; }\r\n\t        if (useResetAnim) {\r\n\t            this.root.classList.add(\"jackpotExpired\");\r\n\t        }\r\n\t        else {\r\n\t            if (this.initialized) {\r\n\t                this.showWins(false);\r\n\t                this.assingData(JackpotData_1.JackpotData.DataLastWinAmount, Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n\t                this.assingData(JackpotData_1.JackpotData.DataLastWinDate, \"-\");\r\n\t                this.assingData(JackpotData_1.JackpotData.DataHighestWinAmount, Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n\t                this.assingData(JackpotData_1.JackpotData.DataHighestWinDate, \"-\");\r\n\t                this.assingData(JackpotData_1.JackpotData.DataWinCount, \"-\");\r\n\t            }\r\n\t            else {\r\n\t                this.initialize(null);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.assign = function (data) {\r\n\t        this.lastData = data;\r\n\t        if (this.initialized) {\r\n\t            this.assingData(JackpotData_1.JackpotData.DataCode, data.code);\r\n\t            this.assingData(JackpotData_1.JackpotData.DataLastWinAmount, data.lastWinAmount ? Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, data.lastWinAmount.toString()) : null, \"money\");\r\n\t            this.assingData(JackpotData_1.JackpotData.DataLastWinDate, data.lastWinDate, \"date\");\r\n\t            this.assingData(JackpotData_1.JackpotData.DataHighestWinAmount, data.highestWinAmount\r\n\t                ? Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, data.highestWinAmount.toString())\r\n\t                : null, \"money\");\r\n\t            this.assingData(JackpotData_1.JackpotData.DataHighestWinDate, data.highestWinDate, \"date\");\r\n\t            this.assingData(JackpotData_1.JackpotData.DataWinCount, data.winCount ? data.winCount.toString() : null);\r\n\t            this.showWins();\r\n\t        }\r\n\t        else {\r\n\t            this.initialize(data);\r\n\t        }\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.assingData = function (dataId, value, format) {\r\n\t        if (format === void 0) { format = \"\"; }\r\n\t        if (this.historyDataElements && this.historyDataElements[dataId] && !neo_common_1.StringUtils.isNullOrEmpty(value)) {\r\n\t            if (format != \"\") {\r\n\t                switch (format) {\r\n\t                    case \"money\":\r\n\t                        value = value + \" \" + DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency);\r\n\t                        break;\r\n\t                    case \"date\":\r\n\t                        var date = new Date(value);\r\n\t                        value =\r\n\t                            this.zerosPad(date.getDate(), 2) +\r\n\t                                \". \" +\r\n\t                                this.zerosPad(date.getMonth() + 1, 2) +\r\n\t                                \". \" +\r\n\t                                date.getFullYear();\r\n\t                }\r\n\t            }\r\n\t            this.historyDataElements[dataId].textContent = value;\r\n\t        }\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.zerosPad = function (num, size) {\r\n\t        var s = num + \"\";\r\n\t        while (s.length < size)\r\n\t            s = \"0\" + s;\r\n\t        return s;\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.openDialog = function () {\r\n\t        this.root.classList.remove(\"_disabled\");\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.closeDialog = function () {\r\n\t        this.root.classList.add(\"_disabled\");\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.isOpen = function () {\r\n\t        return !this.root.classList.contains(\"_disabled\");\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.getRoot = function () {\r\n\t        return this.root;\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.showWins = function (enabled) {\r\n\t        if (enabled === void 0) { enabled = true; }\r\n\t        var winSections = this.root.getElementsByClassName(\"jackpotHistoryData\");\r\n\t        for (var i = 0; i < winSections.length; i++) {\r\n\t            var elem = winSections[i];\r\n\t            elem.style.display = enabled ? \"\" : \"none\";\r\n\t        }\r\n\t        var titleSections = this.root.getElementsByClassName(\"jackpotTitle\");\r\n\t        for (var i = 0; i < titleSections.length; i++) {\r\n\t            var elem = titleSections[i];\r\n\t            elem.style.display = enabled ? (elem.textContent == \"\" ? \"none\" : \"\") : \"none\";\r\n\t        }\r\n\t        var noWinSections = this.root.getElementsByClassName(\"jackpotHistoryNoWins\");\r\n\t        if (enabled) {\r\n\t            for (var i = 0; i < noWinSections.length; i++) {\r\n\t                noWinSections[i].parentNode.removeChild(noWinSections[i]);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (noWinSections.length == 0) {\r\n\t                var section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryNoWins\", this.root);\r\n\t                this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData_1.JackpotData.DataNoWins, section);\r\n\t                this.assingData(JackpotData_1.JackpotData.DataNoWins, Languages_1.Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.createElement = function (tag, className, rootElem) {\r\n\t        var elem = document.createElement(tag);\r\n\t        elem.setAttribute(\"class\", className);\r\n\t        if (rootElem) {\r\n\t            rootElem.appendChild(elem);\r\n\t        }\r\n\t        return elem;\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.createTextElement = function (tag, className, text, rootElem) {\r\n\t        var elem = this.createElement(tag, className, rootElem);\r\n\t        elem.textContent = text;\r\n\t        return elem;\r\n\t    };\r\n\t    JackpotHistoryDialog.prototype.createDataElement = function (tag, className, dataId, rootElem) {\r\n\t        var elem = this.createElement(tag, className, rootElem);\r\n\t        if (this.historyDataElements) {\r\n\t            this.historyDataElements[dataId] = elem;\r\n\t        }\r\n\t        return elem;\r\n\t    };\r\n\t    return JackpotHistoryDialog;\r\n\t}());\r\n\texports.JackpotHistoryDialog = JackpotHistoryDialog;\r\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar JackpotData = (function () {\r\n\t    function JackpotData() {\r\n\t    }\r\n\t    JackpotData.DataCode = \"code\";\r\n\t    JackpotData.DataHighestWinDate = \"highestWinDate\";\r\n\t    JackpotData.DataHighestWinAmount = \"highestWinAmount\";\r\n\t    JackpotData.DataWinCount = \"winCount\";\r\n\t    JackpotData.DataLastWinDate = \"lastWinDate\";\r\n\t    JackpotData.DataLastWinAmount = \"lastWinAmount\";\r\n\t    JackpotData.DataNoWins = \"noWins\";\r\n\t    return JackpotData;\r\n\t}());\r\n\texports.JackpotData = JackpotData;\r\n\n\n/***/ },\n/* 28 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar GameData = (function () {\r\n\t    function GameData() {\r\n\t    }\r\n\t    GameData.DataTicker = \"TICKER\";\r\n\t    GameData.DataRoundId = \"ROUND_ID\";\r\n\t    GameData.DataBuildVersion = \"BUILD_VERSION\";\r\n\t    GameData.DataBalanceReal = \"BALANCE_REAL\";\r\n\t    GameData.DataBalanceBonus = \"BALANCE_BONUS\";\r\n\t    GameData.DataBalanceTotal = \"BALANCE_TOTAL\";\r\n\t    GameData.DataBalanceRealDenom = \"BALANCE_REAL_DENOM\";\r\n\t    GameData.DataBalanceBonusDenom = \"BALANCE_BONUS_DENOM\";\r\n\t    GameData.DataBalanceTotalDenom = \"BALANCE_TOTAL_DENOM\";\r\n\t    GameData.DataCurrency = \"CURRENCY\";\r\n\t    GameData.DataDenomination = \"DENOMINATION\";\r\n\t    GameData.DataCurrentWin = \"CURRENT_WIN\";\r\n\t    GameData.DataTotalWin = \"TOTAL_WIN\";\r\n\t    GameData.DataTotalWinDenom = \"TOTAL_WIN_DENOM\";\r\n\t    GameData.DataCoinSize = \"COIN_SIZE\";\r\n\t    GameData.DataCointCount = \"COIN_COUNT\";\r\n\t    GameData.DataPaylineCount = \"PAYLINE_COUNT\";\r\n\t    GameData.DataBet = \"BET\";\r\n\t    GameData.DataBetPosition = \"BET_POSITION\";\r\n\t    GameData.DataGambleCurrentWin = \"GAMBLE_WIN\";\r\n\t    GameData.DataGambleColorWin = \"GAMBLE_COLOR_WIN\";\r\n\t    GameData.DataGambleCurrentWinDenom = \"GAMBLE_WIN_DENOM\";\r\n\t    GameData.DataGambleColorWinDenom = \"GAMBLE_COLOR_WIN_DENOM\";\r\n\t    GameData.DataAutoplayCount = \"AUTOPLAY_COUNT\";\r\n\t    GameData.DataFreeSpinTotalWin = \"FREESPIN_TOTAL_WIN\";\r\n\t    GameData.DataFreeSpinTotalWinDenom = \"FREESPIN_TOTAL_WIN_DENOM\";\r\n\t    GameData.DataFreeSpinsCount = \"FREESPINS_COUNT\";\r\n\t    GameData.DataFreeSpinsCountMultiplier = \"FREESPINS_COUNT_MULTIPLIER\";\r\n\t    GameData.DataFreeSpinsRemainingCount = \"FREESPINS_REMAINING_COUNT\";\r\n\t    GameData.DataFreeSpinsWonCount = \"FREESPINS_WON_COUNT\";\r\n\t    GameData.DataFreeSpinsMultiplier = \"FREESPINS_MULTIPLIER\";\r\n\t    GameData.DataGambleAttempts = \"GAMBLE_ATTEMPTS\";\r\n\t    GameData.DataHelpGameLimit = \"HELP_GAME_LIMIT\";\r\n\t    GameData.DataHelpGambleLimit = \"HELP_GAMBLE_LIMIT\";\r\n\t    GameData.DataHelpGambleCountLimit = \"HELP_GAMBLE_COUNT_LIMIT\";\r\n\t    GameData.DataHelpRTP = \"HELP_RTP\";\r\n\t    GameData.DataHelpMaxPayoutProbability = \"HELP_MAX_PAYOUT_PROBABILITY\";\r\n\t    GameData.DataHelpMaxPayoutFrequency = \"HELP_MAX_PAYOUT_FREQUENCY\";\r\n\t    GameData.DataHelpMinBet = \"HELP_MIN_BET\";\r\n\t    GameData.DataHelpMaxBet = \"HELP_MAX_BET\";\r\n\t    GameData.DataHelpVersion = \"HELP_VERSION\";\r\n\t    GameData.DataExpirationResolveHours = \"EXPIRATION_RESOLVE_HOURS\";\r\n\t    GameData.DataFrbRemainginCount = \"FRB_REMAINING_COUNT\";\r\n\t    GameData.DataFrbAssignedCount = \"FRB_ASSIGNED_COUNT\";\r\n\t    GameData.DataFrbRulesLink = \"FRB_RULES_LINK\";\r\n\t    GameData.DataFrbValidTo = \"FRB_VALID_TO\";\r\n\t    GameData.DataFrbExpiryTime = \"FRB_EXPIRY_TIME\";\r\n\t    GameData.DataFrbWin = \"FRB_WIN\";\r\n\t    GameData.DataGameTitle = \"GAME_TITLE\";\r\n\t    GameData.DataHelpJackpotVisibleLimit = \"HELP_JACKPOT_VISIBLE_LIMIT\";\r\n\t    GameData.DataHelpJackpotQualifyingBetsMin = \"HELP_JACKPOT_QUALIFYING_BETS_MIN\";\r\n\t    GameData.DataHelpJackpotQualifyingBetsMax = \"HELP_JACKPOT_QUALIFYING_BETS_MAX\";\r\n\t    return GameData;\r\n\t}());\r\n\texports.GameData = GameData;\r\n\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar UserAction_1 = __webpack_require__(48);\r\n\tvar QuickspinDialog_1 = __webpack_require__(49);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar GameEvents = neo_games_1.ClientHost.GameEvents;\r\n\tvar DataManager = (function () {\r\n\t    function DataManager() {\r\n\t    }\r\n\t    Object.defineProperty(DataManager, \"Autoplay\", {\r\n\t        get: function () {\r\n\t            return DataManager._autoplay;\r\n\t        },\r\n\t        set: function (value) {\r\n\t            if (DataManager._autoplay != value) {\r\n\t                if (value) {\r\n\t                    DataManager.AutoplayStarted = true;\r\n\t                    neo_games_1.Platforms.Platforms.autoplayStarted();\r\n\t                }\r\n\t                else {\r\n\t                    neo_games_1.Platforms.Platforms.autoplayFinished({\r\n\t                        autoplayCount: this.AutoplayCount,\r\n\t                        autoplayLossLimit: this.AutoplayLossLimit,\r\n\t                        autoplayWinLimit: this.AutoplayWinLimit,\r\n\t                    });\r\n\t                }\r\n\t                DataManager._autoplay = value;\r\n\t            }\r\n\t            else {\r\n\t                DataManager.AutoplayStarted = false;\r\n\t            }\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    DataManager.controlAutoplay = function () {\r\n\t        if (GameApp_1.GameApp.gameClient != null) {\r\n\t            GameApp_1.GameApp.gameClient.setAutoplay(DataManager.Autoplay);\r\n\t        }\r\n\t    };\r\n\t    DataManager.autoplayEnabled = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled && DataManager.AutoplayEnabled) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    DataManager.quickspinEnabled = function () {\r\n\t        return DataManager.gameEnableQuickSpin() && DataManager.QuickspinEnabled;\r\n\t    };\r\n\t    DataManager.gameEnableQuickSpin = function () {\r\n\t        return (AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop &&\r\n\t            AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration == 0 &&\r\n\t            AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan == 0 &&\r\n\t            AppContext_1.AppContext.gameConfiguration.GameEnableQuickSpin);\r\n\t    };\r\n\t    DataManager.quickspinSet = function (toValue) {\r\n\t        if (DataManager.gameEnableQuickSpin()) {\r\n\t            if (typeof toValue === \"boolean\") {\r\n\t                DataManager.QuickspinEnabled = toValue;\r\n\t                HtmlController_1.HtmlController.updateDataElement(UserAction_1.UserAction.ActionQuickspinToggle, toValue ? \"true\" : \"false\");\r\n\t            }\r\n\t            else {\r\n\t                DataManager.QuickspinEnabled = !DataManager.QuickspinEnabled;\r\n\t                HtmlController_1.HtmlController.updateDataElement(UserAction_1.UserAction.ActionQuickspinToggle, DataManager.QuickspinEnabled ? \"true\" : \"false\");\r\n\t            }\r\n\t            if (false) {\r\n\t                this.log(\"Quickspin \" + (DataManager.QuickspinEnabled ? \"on\" : \"off\"));\r\n\t            }\r\n\t        }\r\n\t        neo_games_1.Platforms.Platforms.quickSpinEnabled(DataManager.QuickspinEnabled);\r\n\t        return DataManager.QuickspinEnabled;\r\n\t    };\r\n\t    DataManager.quickspinStopped = function () {\r\n\t        if (DataManager._quickstopTimes != null) {\r\n\t            DataManager._quickstopTimes.push(Date.now() * 0.001);\r\n\t            if (DataManager._quickstopTimes.length == AppContext_1.AppContext.gameConfiguration.QuickSpinDialogCount) {\r\n\t                var timeDiff = DataManager._quickstopTimes[DataManager._quickstopTimes.length - 1] -\r\n\t                    DataManager._quickstopTimes[0];\r\n\t                if (timeDiff < AppContext_1.AppContext.gameConfiguration.QuickSpinDecayDelay) {\r\n\t                    if (DataManager.gameEnableQuickSpin() && !DataManager.QuickspinEnabled) {\r\n\t                        QuickspinDialog_1.QuickspinDialog.openDialog();\r\n\t                        DataManager._quickstopTimes = null;\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    DataManager._quickstopTimes.shift();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.vibrationSet = function (toValue) {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.GameEnableVibration) {\r\n\t            if (typeof toValue === \"boolean\") {\r\n\t                DataManager.VibrationEnabled = toValue;\r\n\t                HtmlController_1.HtmlController.updateDataElement(UserAction_1.UserAction.ActionVibrationToggle, toValue ? \"true\" : \"false\");\r\n\t            }\r\n\t            else {\r\n\t                DataManager.VibrationEnabled = !DataManager.VibrationEnabled;\r\n\t                HtmlController_1.HtmlController.updateDataElement(UserAction_1.UserAction.ActionVibrationToggle, DataManager.VibrationEnabled ? \"true\" : \"false\");\r\n\t            }\r\n\t            if (false) {\r\n\t                this.log(\"Vibration \" + (DataManager.VibrationEnabled ? \"on\" : \"off\"));\r\n\t            }\r\n\t        }\r\n\t        return DataManager.VibrationEnabled;\r\n\t    };\r\n\t    DataManager.updateResponseData = function (init) {\r\n\t        DataManager.GameRoundClosed = false;\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(GameManager_1.GameManager.gameResponse)) {\r\n\t            var status_1 = GameManager_1.GameManager.gameResponse.status;\r\n\t            if (status_1 != null && status_1 === \"closed\") {\r\n\t                DataManager.GameRoundClosed = true;\r\n\t            }\r\n\t            if (GameManager_1.GameManager.gameResponse.limits != null) {\r\n\t                DataManager.GameLimit = true;\r\n\t            }\r\n\t            else {\r\n\t                DataManager.GameLimit = false;\r\n\t            }\r\n\t            if (init || !(FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t                BalanceManager_1.BalanceManager.setBalance();\r\n\t            }\r\n\t            if (init) {\r\n\t                var initResponse = GameManager_1.GameManager.gameResponse;\r\n\t                if (initResponse.initData != null && initResponse.initData.currency != null) {\r\n\t                    DataManager.updateGameDataFromModule(GameData_1.GameData.DataCurrency, initResponse.initData.currency);\r\n\t                }\r\n\t                BetManager_1.BetManager.initializeBet();\r\n\t                DataManager.configureHelpData();\r\n\t                if (GameManager_1.GameManager.gameResponse.balance != null &&\r\n\t                    GameManager_1.GameManager.gameResponse.balance.bonus != null &&\r\n\t                    GameManager_1.GameManager.gameResponse.balance.bonus >= BetManager_1.BetManager.Bet) {\r\n\t                    ModuleManager_1.ModuleManager.changeBetColor(true);\r\n\t                }\r\n\t                DataManager.updateDataElements();\r\n\t            }\r\n\t            if (GameManager_1.GameManager.gameResponse.roundId != null) {\r\n\t                var elements = document.getElementsByClassName(\"roundId\");\r\n\t                for (var i = 0; i < elements.length; i++) {\r\n\t                    var element = elements[i];\r\n\t                    if (element != null) {\r\n\t                        if (!AppContext_1.AppContext.gameConfiguration.GameRoundIdVisible) {\r\n\t                            element.style.opacity = \"0\";\r\n\t                        }\r\n\t                        else if (GameManager_1.GameManager.gameResponse.roundId === -1) {\r\n\t                            element.style.opacity = \"1\";\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                DataManager.updateGameDataFromModule(GameData_1.GameData.DataRoundId, GameManager_1.GameManager.gameResponse.roundId === -1 ? \"DEMO\" : GameManager_1.GameManager.gameResponse.roundId.toString());\r\n\t            }\r\n\t            DataManager.updateTotalWin();\r\n\t        }\r\n\t        if (!Jackpot_1.Jackpot.hasMiniGame()) {\r\n\t            BalanceManager_1.BalanceManager.poolingBalance();\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gameResponse[\"progressiveBonus\"] &&\r\n\t            GameManager_1.GameManager.gameResponse[\"progressiveBonus\"].offline === true) {\r\n\t            Jackpot_1.Jackpot.showError();\r\n\t        }\r\n\t        else {\r\n\t            Jackpot_1.Jackpot.reinitialize();\r\n\t        }\r\n\t    };\r\n\t    DataManager.updateTotalWin = function () {\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (GameManager_1.GameManager.gameResponse[\"freeRounds\"] != null &&\r\n\t                GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\r\n\t                if (DataManager.GameRoundClosed) {\r\n\t                    var totalWin = GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\r\n\t                    DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWin, totalWin.toString());\r\n\t                    if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                        DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (GameManager_1.GameManager.gameResponse.totalWin != null) {\r\n\t                        var totalWin = neo_common_1.NumberUtils.add(GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"], GameManager_1.GameManager.gameResponse.totalWin);\r\n\t                        DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWin, totalWin.toString());\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                            DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else if (GameManager_1.GameManager.gameResponse.totalWin != null) {\r\n\t            DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWin, GameManager_1.GameManager.gameResponse.totalWin.toString());\r\n\t            if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gameResponse.totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.updateTotalGain = function (calculate, customWin) {\r\n\t        if (calculate === void 0) { calculate = false; }\r\n\t        if (customWin === void 0) { customWin = 0; }\r\n\t        if (GameManager_1.GameManager.gameResponse.totalGain != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration.StatusBar.indexOf(neo_games_1.Plugins.StatusBar.Types.TOTAL_GAIN) > -1) {\r\n\t            var totalGain = GameManager_1.GameManager.gameResponse.totalGain;\r\n\t            if (calculate) {\r\n\t                var bet = FreeRoundBonus_1.FreeRoundBonus.inFrb ? 0 : BetManager_1.BetManager.Bet;\r\n\t                totalGain = parseFloat(neo_common_1.NumberUtils.subtract(totalGain, bet));\r\n\t                if (GameManager_1.GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\r\n\t                    totalGain = parseFloat(neo_common_1.NumberUtils.add(totalGain, GameManager_1.GameManager.gameResponse.totalWin));\r\n\t                }\r\n\t            }\r\n\t            if (customWin > 0) {\r\n\t                totalGain = parseFloat(neo_common_1.NumberUtils.add(totalGain, customWin));\r\n\t            }\r\n\t            GameManager_1.GameManager.gameResponse.totalGain = totalGain;\r\n\t            var statusBar = neo_games_1.Plugins.StatusBar.getInstance();\r\n\t            var resize = !statusBar.hasActiveWidget();\r\n\t            statusBar.add(neo_games_1.Plugins.StatusBar.Types.TOTAL_GAIN, \"totalGain\", Languages_1.Languages.getRid(\"SB_INFO_TOTAL_GAIN\", Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, totalGain.toString())) +\r\n\t                \" \" +\r\n\t                DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t            if (resize) {\r\n\t                Scaling_1.Scaling.resizeRoot();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.updateGameDataFromModule = function (dataId, value) {\r\n\t        if (dataId === GameData_1.GameData.DataCurrency) {\r\n\t            if (neo_common_1.Utils.isNullOrUndefined(DataManager.DisplayCurrencies)) {\r\n\t                DataManager.DisplayCurrencies = {};\r\n\t                AppContext_1.AppContext.gameConfiguration.DisplayCurrencies.forEach(function (rawPair) {\r\n\t                    var parsedPair = neo_common_1.ArrayUtils.stringArray(rawPair);\r\n\t                    DataManager.DisplayCurrencies[parsedPair[0]] = parsedPair[1];\r\n\t                });\r\n\t            }\r\n\t            if (DataManager.DisplayCurrencies.hasOwnProperty(value)) {\r\n\t                DataManager._gameData[dataId] = DataManager.DisplayCurrencies[value];\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        DataManager._gameData[dataId] = value;\r\n\t    };\r\n\t    DataManager.getDataById = function (dataId) {\r\n\t        if (DataManager._gameData[dataId] != null) {\r\n\t            return DataManager._gameData[dataId];\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    DataManager.updateDataElement = function (dataId, customValue) {\r\n\t        if (customValue != null) {\r\n\t            HtmlController_1.HtmlController.updateDataElement(dataId, customValue);\r\n\t        }\r\n\t        else {\r\n\t            if (DataManager._gameData[dataId] != null) {\r\n\t                HtmlController_1.HtmlController.updateDataElement(dataId, DataManager._gameData[dataId]);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.updateDataElements = function () {\r\n\t        HtmlController_1.HtmlController.updateDataElements(DataManager._gameData);\r\n\t        DataManager.updateTotalGain();\r\n\t    };\r\n\t    DataManager.getServerTime = function () {\r\n\t        if (GameManager_1.GameManager.gameClient) {\r\n\t            GameManager_1.GameManager.gameClient.sendServerTimerRequest().then(function (response) {\r\n\t                DataManager.serverTimeReceived(response);\r\n\t                if (AppContext_1.AppContext.gameConfiguration.UseServerTime &&\r\n\t                    neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.ApplicationGatewayUrl)) {\r\n\t                    setTimeout(function () {\r\n\t                        DataManager.getServerTime();\r\n\t                    }, 30000);\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    DataManager.serverTimeReceived = function (response) {\r\n\t        if (response == null) {\r\n\t            return;\r\n\t        }\r\n\t        if (response.utcTime == null && response.time == null) {\r\n\t            return;\r\n\t        }\r\n\t        DataManager.utcTime = response.utcTime;\r\n\t        DataManager.time = response.time;\r\n\t        DataManager.serverTimeResponseTimestamp = Date.now();\r\n\t        if (DataManager.utcTime != null) {\r\n\t            if (DataManager.utcTime.indexOf(\"Z\") == -1) {\r\n\t                DataManager.utcTime = DataManager.utcTime + \"Z\";\r\n\t            }\r\n\t            neo_games_1.Platforms.Platforms.clockSync(Date.now() - Date.parse(DataManager.utcTime));\r\n\t        }\r\n\t        if (DataManager.serverTimeOffset === -1) {\r\n\t            var currentTime = new Date().getTime();\r\n\t            var serverTime = Date.parse(DataManager.utcTime ? DataManager.utcTime.replace(\"Z\", \"\") : DataManager.time);\r\n\t            DataManager.serverTimeOffset = serverTime - currentTime;\r\n\t        }\r\n\t    };\r\n\t    DataManager.getFormattedTime = function (time) {\r\n\t        if (time == null) {\r\n\t            return null;\r\n\t        }\r\n\t        var year = time.getFullYear();\r\n\t        var month = DataManager.zerosPad(time.getMonth() + 1, 2);\r\n\t        var day = DataManager.zerosPad(time.getDate(), 2);\r\n\t        var hours = DataManager.zerosPad(time.getHours(), 2);\r\n\t        var minutes = DataManager.zerosPad(time.getMinutes(), 2);\r\n\t        var seconds = DataManager.zerosPad(time.getSeconds(), 2);\r\n\t        var milliseconds = time.getMilliseconds();\r\n\t        return year + \"-\" + month + \"-\" + day + \"T\" + hours + \":\" + minutes + \":\" + seconds + \".\" + milliseconds;\r\n\t    };\r\n\t    DataManager.zerosPad = function (num, size) {\r\n\t        var s = num + \"\";\r\n\t        while (s.length < size)\r\n\t            s = \"0\" + s;\r\n\t        return s;\r\n\t    };\r\n\t    DataManager.getTimeData = function () {\r\n\t        var currentTime = new Date();\r\n\t        var utcTime = DataManager.getUTCTime();\r\n\t        var machineLocalTimeZone = currentTime.getTimezoneOffset() * -1;\r\n\t        return {\r\n\t            utcTime: utcTime,\r\n\t            machineLocalTimeZone: machineLocalTimeZone,\r\n\t        };\r\n\t    };\r\n\t    DataManager.getUTCTime = function () {\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(DataManager.utcTime)) {\r\n\t            var currentTime = new Date();\r\n\t            var utcResponseTimestamp = Date.parse(DataManager.utcTime);\r\n\t            var lastResponseDiff = currentTime.getTime() - DataManager.serverTimeResponseTimestamp;\r\n\t            return new Date(utcResponseTimestamp + lastResponseDiff).toISOString();\r\n\t        }\r\n\t        return new Date().toISOString();\r\n\t    };\r\n\t    DataManager.getGameTime = function (utcTime) {\r\n\t        if (utcTime.indexOf(\"Z\") == -1) {\r\n\t            utcTime = utcTime + \"Z\";\r\n\t        }\r\n\t        var utcTimestamp = Date.parse(utcTime.replace(\"Z\", \"\"));\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseServerTime) {\r\n\t            var offset = DataManager.utcTime ? DataManager.serverTimeOffset : 0;\r\n\t            return DataManager.getFormattedTime(new Date(utcTimestamp - offset));\r\n\t        }\r\n\t        return DataManager.getFormattedTime(new Date(utcTime));\r\n\t    };\r\n\t    DataManager.getNonUTCGameTime = function () {\r\n\t        if (!AppContext_1.AppContext.gameConfiguration.UseServerTime) {\r\n\t            return DataManager.getFormattedTime(new Date());\r\n\t        }\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(DataManager.time)) {\r\n\t            var currentTime = new Date();\r\n\t            var utcResponseTimestamp = Date.parse(DataManager.time);\r\n\t            var lastResponseDiff = currentTime.getTime() - DataManager.serverTimeResponseTimestamp;\r\n\t            return DataManager.getFormattedTime(new Date(utcResponseTimestamp + lastResponseDiff - DataManager.serverTimeOffset));\r\n\t        }\r\n\t        return DataManager.getFormattedTime(new Date());\r\n\t    };\r\n\t    DataManager.showTime = function () {\r\n\t        if (!AppContext_1.AppContext.gameConfiguration.UIShowTime) {\r\n\t            return;\r\n\t        }\r\n\t        var today = new Date(DataManager.getNonUTCGameTime());\r\n\t        if (DataManager.utcTime != null) {\r\n\t            var timeData = DataManager.getTimeData();\r\n\t            today = new Date(DataManager.getGameTime(timeData.utcTime));\r\n\t        }\r\n\t        var h = today.getHours();\r\n\t        var hFixed = h + \"\";\r\n\t        if (h < 10) {\r\n\t            hFixed = \"0\" + h;\r\n\t        }\r\n\t        var m = today.getMinutes();\r\n\t        var mFixed = m + \"\";\r\n\t        if (m < 10) {\r\n\t            mFixed = \"0\" + m;\r\n\t        }\r\n\t        DataManager.updateDataElement(\"TIME\", hFixed + \":\" + mFixed);\r\n\t        setTimeout(function () {\r\n\t            DataManager.showTime();\r\n\t        }, 1000);\r\n\t    };\r\n\t    DataManager.showSessionTime = function (time) {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.GUIShowSessionTime) {\r\n\t            if (time < 0) {\r\n\t                time = 0;\r\n\t            }\r\n\t            var sec_num = time;\r\n\t            var hours = Math.floor(sec_num / 3600);\r\n\t            var minutes = Math.floor((sec_num - hours * 3600) / 60);\r\n\t            var seconds = sec_num - hours * 3600 - minutes * 60;\r\n\t            var hoursS = hours.toString();\r\n\t            var minutesS = minutes.toString();\r\n\t            var secondsS = seconds.toString();\r\n\t            if (hours < 10) {\r\n\t                hoursS = \"0\" + hours;\r\n\t            }\r\n\t            if (minutes < 10) {\r\n\t                minutesS = \"0\" + minutes;\r\n\t            }\r\n\t            if (seconds < 10) {\r\n\t                secondsS = \"0\" + seconds;\r\n\t            }\r\n\t            var pre = AppContext_1.AppContext.gameConfiguration.UIShowTime ? \"&nbsp;|&nbsp;\" : \"\";\r\n\t            DataManager.updateDataElement(\"SESSION_TIME\", pre + hoursS + \":\" + minutesS + \":\" + secondsS);\r\n\t            time++;\r\n\t            setTimeout(function () {\r\n\t                DataManager.showSessionTime(time);\r\n\t            }, 1000);\r\n\t        }\r\n\t    };\r\n\t    DataManager.configureGameData = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.StatusBar.indexOf(neo_games_1.Plugins.StatusBar.Types.StatusBarMessage) > -1) {\r\n\t            if (AppContext_1.AppContext.gameConfiguration.StatusBarData != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration.StatusBarData[neo_games_1.Plugins.StatusBar.Types.StatusBarMessage] != null) {\r\n\t                var statusBar = neo_games_1.Plugins.StatusBar.getInstance();\r\n\t                statusBar.add(neo_games_1.Plugins.StatusBar.Types.StatusBarMessage, \"statusBarMessage\", AppContext_1.AppContext.gameConfiguration.StatusBarData[neo_games_1.Plugins.StatusBar.Types.StatusBarMessage]);\r\n\t                Scaling_1.Scaling.resizeRoot();\r\n\t            }\r\n\t        }\r\n\t        if (!DataManager.gameEnableQuickSpin()) {\r\n\t            DataManager.hideDataElements(\"quickSpinSettings\");\r\n\t        }\r\n\t        if (!AppContext_1.AppContext.gameConfiguration.GameEnableVibration) {\r\n\t            DataManager.hideDataElements(\"vibrationSettings\");\r\n\t        }\r\n\t        if (!DataManager.hasSettingsMenu()) {\r\n\t            DataManager.hideDataElements(\"helpGameSettings\");\r\n\t        }\r\n\t        var gameTitle = document.getElementById(\"gameTitle\");\r\n\t        if (gameTitle != null) {\r\n\t            DataManager.updateDataElement(GameData_1.GameData.DataGameTitle, gameTitle.innerHTML);\r\n\t            var gameHeadline = document.getElementById(\"gameHeadline\");\r\n\t            if (gameHeadline != null) {\r\n\t                gameHeadline.style.display = \"none\";\r\n\t            }\r\n\t        }\r\n\t        if (!AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop) {\r\n\t            DataManager.hideDataElements(\"GameEnableReelsStop\");\r\n\t        }\r\n\t        else {\r\n\t            DataManager.hideDataElements(\"GameDisableReelsStop\");\r\n\t        }\r\n\t    };\r\n\t    DataManager.hasSettingsMenu = function () {\r\n\t        if (DataManager.gameEnableQuickSpin()) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    DataManager.configureHelpData = function () {\r\n\t        DataManager.showDataElements(\"gambleAttempts\");\r\n\t        DataManager.showDataElements(\"helpGameLimit\");\r\n\t        DataManager.showDataElements(\"helpGambleLimit\");\r\n\t        DataManager.showDataElements(\"helpGambleCountLimit\");\r\n\t        DataManager.showDataElements(\"helpJoker\");\r\n\t        DataManager.showDataElements(\"helpRTP\");\r\n\t        DataManager.showDataElements(\"totalRTP\");\r\n\t        DataManager.hideDataElements(\"helpVersion\");\r\n\t        DataManager.showDataElements(\"helpJackpotVisibleLimit\");\r\n\t        DataManager.showDataElements(\"helpJackpotContributionAll\");\r\n\t        DataManager.showDataElements(\"helpJackpotQualifyingBetsAll\");\r\n\t        DataManager.showDataElements(\"helpJackpotQualifyingBetsMin\");\r\n\t        DataManager.showDataElements(\"helpJackpotQualifyingBetsMax\");\r\n\t        DataManager.hideDataElements(\"helpShowCumulativeWinLimit\");\r\n\t        DataManager.hideDataElements(\"helpMPP\");\r\n\t        DataManager.hideDataElements(\"helpMPF\");\r\n\t        if (AppContext_1.AppContext != null) {\r\n\t            if (GameManager_1.GameManager.gameResponse != null) {\r\n\t                if (GameManager_1.GameManager.gameResponse[\"helpData\"] == null) {\r\n\t                    DataManager.hideDataElements(\"gambleAttempts\");\r\n\t                    DataManager.hideDataElements(\"helpGameLimit\");\r\n\t                    DataManager.hideDataElements(\"helpGambleLimit\");\r\n\t                    DataManager.hideDataElements(\"helpGambleCountLimit\");\r\n\t                    DataManager.hideDataElements(\"helpJoker\");\r\n\t                    DataManager.hideDataElements(\"helpRTP\");\r\n\t                    DataManager.hideDataElements(\"totalRTP\");\r\n\t                    DataManager.hideDataElements(\"helpMPP\");\r\n\t                    DataManager.hideDataElements(\"helpMPF\");\r\n\t                }\r\n\t                else {\r\n\t                    if (GameManager_1.GameManager.gambleResponse == null) {\r\n\t                        DataManager.hideDataElements(\"hlpGambleSection\");\r\n\t                        DataManager.showDataElements(\"hlpNoGambleSection\", \"\");\r\n\t                    }\r\n\t                    else {\r\n\t                        DataManager.hideDataElements(\"hlpNoGambleSection\");\r\n\t                        DataManager.showDataElements(\"hlpGambleSection\", \"\");\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] == null) {\r\n\t                        DataManager.hideDataElements(\"gambleAttempts\");\r\n\t                    }\r\n\t                    else {\r\n\t                        if (GameManager_1.GameManager.gambleResponse != null &&\r\n\t                            GameManager_1.GameManager.gambleResponse[\"totalCount\"] != null &&\r\n\t                            GameManager_1.GameManager.gambleResponse[\"currentCount\"] != null) {\r\n\t                            DataManager.updateDataElement(GameData_1.GameData.DataGambleAttempts, (GameManager_1.GameManager.gambleResponse[\"totalCount\"] -\r\n\t                                GameManager_1.GameManager.gambleResponse[\"currentCount\"]).toString());\r\n\t                        }\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"gameLimit\"] != null) {\r\n\t                        DataManager.HelpDataGameLimit = GameManager_1.GameManager.gameResponse[\"helpData\"][\"gameLimit\"];\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                            DataManager.updateGameDataFromModule(GameData_1.GameData.DataHelpGameLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t                            DataManager.updateDataElement(GameData_1.GameData.DataHelpGameLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t                        }\r\n\t                        else {\r\n\t                            DataManager.updateGameDataFromModule(GameData_1.GameData.DataHelpGameLimit, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, GameManager_1.GameManager.gameResponse[\"helpData\"][\"gameLimit\"]) +\r\n\t                                \" \" +\r\n\t                                DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t                            DataManager.updateDataElement(GameData_1.GameData.DataHelpGameLimit, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, GameManager_1.GameManager.gameResponse[\"helpData\"][\"gameLimit\"]) +\r\n\t                                \" \" +\r\n\t                                DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t                        }\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"gameLimit\"] == null ||\r\n\t                        !AppContext_1.AppContext.gameConfiguration.HelpShowGameLimit) {\r\n\t                        DataManager.hideDataElements(\"helpGameLimit\");\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleLimit\"] != null) {\r\n\t                        DataManager.HelpDataGambleLimit = GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleLimit\"];\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                            DataManager.updateGameDataFromModule(GameData_1.GameData.DataHelpGambleLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t                            DataManager.updateDataElement(GameData_1.GameData.DataHelpGambleLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t                        }\r\n\t                        else {\r\n\t                            DataManager.updateGameDataFromModule(GameData_1.GameData.DataHelpGambleLimit, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleLimit\"]) +\r\n\t                                \" \" +\r\n\t                                DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t                            DataManager.updateDataElement(GameData_1.GameData.DataHelpGambleLimit, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleLimit\"]) +\r\n\t                                \" \" +\r\n\t                                DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        DataManager.hideDataElements(\"helpGambleLimit\");\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] == null) {\r\n\t                        DataManager.hideDataElements(\"helpGambleCountLimit\");\r\n\t                    }\r\n\t                    else {\r\n\t                        DataManager.updateDataElement(GameData_1.GameData.DataHelpGambleCountLimit, GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] + \" \");\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleWithJoker\"] == null ||\r\n\t                        !GameManager_1.GameManager.gameResponse[\"helpData\"][\"gambleWithJoker\"]) {\r\n\t                        DataManager.hideDataElements(\"helpJoker\");\r\n\t                    }\r\n\t                    var rtp = GameManager_1.GameManager.gameResponse[\"helpData\"][\"rtp\"];\r\n\t                    var totalRtp = GameManager_1.GameManager.gameResponse[\"helpData\"][\"totalRtp\"];\r\n\t                    var progressiveBonusRtp = GameManager_1.GameManager.gameResponse[\"helpData\"][\"progressiveBonusRtp\"];\r\n\t                    var ridTotalRTP = AppContext_1.AppContext.gameConfiguration.UseJackpotLocalization\r\n\t                        ? \"HLP_AD_INFO_TOTAL_RTP_J\"\r\n\t                        : \"HLP_AD_INFO_TOTAL_RTP\";\r\n\t                    var statusBarRtp = void 0;\r\n\t                    if (totalRtp != null &&\r\n\t                        progressiveBonusRtp != null &&\r\n\t                        rtp != null &&\r\n\t                        AppContext_1.AppContext.gameConfiguration.HelpShowRTP) {\r\n\t                        DataManager.hideDataElements(\"helpRTP\");\r\n\t                        DataManager.setDataElements(\"totalRTP\", Languages_1.Languages.getRid(ridTotalRTP, totalRtp.toString(), rtp.toString(), progressiveBonusRtp.toString()));\r\n\t                        statusBarRtp = totalRtp.toString();\r\n\t                    }\r\n\t                    else if (rtp != null && AppContext_1.AppContext.gameConfiguration.HelpShowRTP) {\r\n\t                        DataManager.hideDataElements(\"totalRTP\");\r\n\t                        DataManager.updateDataElement(GameData_1.GameData.DataHelpRTP, rtp.toString());\r\n\t                        statusBarRtp = rtp.toString();\r\n\t                    }\r\n\t                    else {\r\n\t                        DataManager.hideDataElements(\"helpRTP\");\r\n\t                        DataManager.hideDataElements(\"totalRTP\");\r\n\t                    }\r\n\t                    if (statusBarRtp != null &&\r\n\t                        AppContext_1.AppContext.gameConfiguration.StatusBar.indexOf(neo_games_1.Plugins.StatusBar.Types.RTP) > -1) {\r\n\t                        var statusBar = neo_games_1.Plugins.StatusBar.getInstance();\r\n\t                        statusBar.add(neo_games_1.Plugins.StatusBar.Types.RTP, \"rtp\", Languages_1.Languages.getRid(\"SB_INFO_RTP\", statusBarRtp.toString()));\r\n\t                        Scaling_1.Scaling.resizeRoot();\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"version\"] == null ||\r\n\t                        !AppContext_1.AppContext.gameConfiguration.HelpShowGameModuleVersion) {\r\n\t                        DataManager.hideDataElements(\"helpVersion\");\r\n\t                    }\r\n\t                    else {\r\n\t                        DataManager.updateDataElement(GameData_1.GameData.DataHelpVersion, GameManager_1.GameManager.gameResponse[\"helpData\"][\"version\"].toString());\r\n\t                        DataManager.showDataElements(\"helpVersion\");\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"] != null) {\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.StatusBar.indexOf(neo_games_1.Plugins.StatusBar.Types.MaxPayoutProbability) > -1) {\r\n\t                            var statusBar = neo_games_1.Plugins.StatusBar.getInstance();\r\n\t                            statusBar.add(neo_games_1.Plugins.StatusBar.Types.MaxPayoutProbability, \"maxPayoutProbability\", Languages_1.Languages.getRid(\"SB_INFO_MAX_PAYOUT_PROBABILITY\", GameManager_1.GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"]));\r\n\t                            Scaling_1.Scaling.resizeRoot();\r\n\t                        }\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.HelpShowMaxPayoutProbabilityFrequency &&\r\n\t                            GameManager_1.GameManager.gameResponse[\"helpData\"][\"maxTotalPayoutProbability\"] != null) {\r\n\t                            DataManager.setDataElements(\"helpMPF\", Languages_1.Languages.getRid(\"HLP_AD_INFO_MAX_PAYOUT_FREQUENCY\", GameManager_1.GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"].toString(), GameManager_1.GameManager.gameResponse[\"helpData\"][\"maxTotalPayoutProbability\"].toString()));\r\n\t                            DataManager.showDataElements(\"helpMPF\");\r\n\t                        }\r\n\t                        else if (AppContext_1.AppContext.gameConfiguration.HelpShowMaxPayoutProbability) {\r\n\t                            DataManager.updateDataElement(GameData_1.GameData.DataHelpMaxPayoutProbability, GameManager_1.GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"].toString());\r\n\t                            DataManager.showDataElements(\"helpMPP\");\r\n\t                        }\r\n\t                    }\r\n\t                    if (AppContext_1.AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"WithinGameRound\" &&\r\n\t                        AppContext_1.AppContext.gameConfiguration.ProgressiveBonusHelpShowCumulativeWinLimit &&\r\n\t                        GameManager_1.GameManager.gameResponse[\"helpData\"][\"gameLimit\"] != null) {\r\n\t                        DataManager.showDataElements(\"helpShowCumulativeWinLimit\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (BetManager_1.BetManager.TotalBets.length > 0) {\r\n\t                DataManager.updateDataElement(GameData_1.GameData.DataHelpMinBet, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, Math.min.apply(Math, BetManager_1.BetManager.TotalBets).toString()) +\r\n\t                    \" \" +\r\n\t                    DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t                DataManager.updateDataElement(GameData_1.GameData.DataHelpMaxBet, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, Math.max.apply(Math, BetManager_1.BetManager.TotalBets).toString()) +\r\n\t                    \" \" +\r\n\t                    DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t            }\r\n\t            else {\r\n\t                DataManager.hideDataElements(\"helpMinBet\");\r\n\t                DataManager.hideDataElements(\"helpMaxBet\");\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameConfiguration.ProgressiveBonusContributeOnlyQualified) {\r\n\t                DataManager.hideDataElements(\"helpJackpotContributionAll\");\r\n\t                DataManager.showDataElements(\"helpJackpotContributionQualifying\");\r\n\t            }\r\n\t            else {\r\n\t                DataManager.showDataElements(\"helpJackpotContributionAll\");\r\n\t                DataManager.hideDataElements(\"helpJackpotContributionQualifying\");\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameConfiguration.ProgressiveBonusVisibleMax > 0 &&\r\n\t                AppContext_1.AppContext.gameConfiguration.ProgressiveBonusHelpShowMaxVisibleLimit) {\r\n\t                DataManager.updateDataElement(GameData_1.GameData.DataHelpJackpotVisibleLimit, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, AppContext_1.AppContext.gameConfiguration.ProgressiveBonusVisibleMax.toString()) +\r\n\t                    \" \" +\r\n\t                    DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t            }\r\n\t            else {\r\n\t                DataManager.hideDataElements(\"helpJackpotVisibleLimit\");\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameConfiguration.ProgressiveBonusMinQualifyingBet > 0) {\r\n\t                DataManager.hideDataElements(\"helpJackpotQualifyingBetsAll\");\r\n\t                DataManager.updateDataElement(GameData_1.GameData.DataHelpJackpotQualifyingBetsMin, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, AppContext_1.AppContext.gameConfiguration.ProgressiveBonusMinQualifyingBet.toString()) +\r\n\t                    \" \" +\r\n\t                    DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t            }\r\n\t            else {\r\n\t                DataManager.hideDataElements(\"helpJackpotQualifyingBetsMin\");\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameConfiguration.ProgressiveBonusMaxQualifyingBet > 0) {\r\n\t                DataManager.hideDataElements(\"helpJackpotQualifyingBetsAll\");\r\n\t                DataManager.updateDataElement(GameData_1.GameData.DataHelpJackpotQualifyingBetsMax, Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, AppContext_1.AppContext.gameConfiguration.ProgressiveBonusMaxQualifyingBet.toString()) +\r\n\t                    \" \" +\r\n\t                    DataManager.getDataById(GameData_1.GameData.DataCurrency));\r\n\t            }\r\n\t            else {\r\n\t                DataManager.hideDataElements(\"helpJackpotQualifyingBetsMax\");\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameConfiguration.AutoplayMode === \"simple\") {\r\n\t                DataManager.hideDataElements(\"helpAutoplayBasic\");\r\n\t                DataManager.hideDataElements(\"helpAutoplayAdvanced\");\r\n\t            }\r\n\t            else if (AppContext_1.AppContext.gameConfiguration.AutoplayMode === \"advanced\") {\r\n\t                DataManager.hideDataElements(\"helpAutoplayBasic\");\r\n\t                DataManager.hideDataElements(\"helpAutoplaySimple\");\r\n\t            }\r\n\t            else {\r\n\t                DataManager.hideDataElements(\"helpAutoplaySimple\");\r\n\t                DataManager.hideDataElements(\"helpAutoplayAdvanced\");\r\n\t            }\r\n\t            if (!AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled) {\r\n\t                DataManager.hideDataElements(\"helpAutoplayEnabled\");\r\n\t            }\r\n\t            else {\r\n\t                DataManager.hideDataElements(\"helpAutoplayDisabled\");\r\n\t            }\r\n\t            if (!AppContext_1.AppContext.gameConfiguration.ShowHomeButton) {\r\n\t                DataManager.hideDataElements(\"gameHomeBtn\");\r\n\t            }\r\n\t            if (!AppContext_1.AppContext.gameConfiguration.ShowGameRoundsHistory) {\r\n\t                DataManager.hideDataElements(\"historyBtn\");\r\n\t                DataManager.hideDataElements(\"helpHistoryBtn\");\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameConfiguration.ExpirationResolveHours > 0) {\r\n\t                DataManager.updateDataElement(GameData_1.GameData.DataExpirationResolveHours, AppContext_1.AppContext.gameConfiguration.ExpirationResolveHours.toString());\r\n\t            }\r\n\t            else {\r\n\t                DataManager.hideDataElements(\"expirationResolveHours\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.setDataElements = function (cls, text) {\r\n\t        var elements = document.getElementsByClassName(cls);\r\n\t        for (var i = 0; i < elements.length; i++) {\r\n\t            var element = elements[i];\r\n\t            if (element != null) {\r\n\t                element.innerHTML = text;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.hideDataElements = function (cls) {\r\n\t        var elements = document.getElementsByClassName(cls);\r\n\t        for (var i = 0; i < elements.length; i++) {\r\n\t            var element = elements[i];\r\n\t            if (element != null) {\r\n\t                element.style.display = \"none\";\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.showDataElements = function (cls, display) {\r\n\t        if (display === void 0) { display = \"block\"; }\r\n\t        var elements = document.getElementsByClassName(cls);\r\n\t        for (var i = 0; i < elements.length; i++) {\r\n\t            var element = elements[i];\r\n\t            if (element != null) {\r\n\t                element.style.display = display;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.cleanUpElements = function () {\r\n\t        var elements;\r\n\t        if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration != null && AppContext_1.AppContext.gameConfiguration.UseCoins) {\r\n\t            elements = document.getElementsByClassName(\"useCoinsFalse\");\r\n\t        }\r\n\t        else {\r\n\t            elements = document.getElementsByClassName(\"useCoinsTrue\");\r\n\t        }\r\n\t        if (elements != null && elements.length > 0) {\r\n\t            while (elements.length > 0) {\r\n\t                elements[0].parentNode.removeChild(elements[0]);\r\n\t            }\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseJackpotLocalization) {\r\n\t            elements = document.getElementsByClassName(\"helpJackpotB\");\r\n\t        }\r\n\t        else {\r\n\t            elements = document.getElementsByClassName(\"helpJackpotJ\");\r\n\t        }\r\n\t        if (elements != null && elements.length > 0) {\r\n\t            while (elements.length > 0) {\r\n\t                elements[0].parentNode.removeChild(elements[0]);\r\n\t            }\r\n\t        }\r\n\t        elements = document.getElementsByClassName(\"settingTabItem\");\r\n\t        var hideSettingsButton = true;\r\n\t        for (var i = 0; i < elements.length; i++) {\r\n\t            if (elements[i].style.display != \"none\") {\r\n\t                hideSettingsButton = false;\r\n\t            }\r\n\t        }\r\n\t        if (hideSettingsButton) {\r\n\t            elements = document.getElementsByClassName(\"settingsBtn\");\r\n\t            if (elements != null && elements.length > 0) {\r\n\t                while (elements.length > 0) {\r\n\t                    elements[0].parentNode.removeChild(elements[0]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.addTrustedUserAction = function (actionId) {\r\n\t        if (DataManager.TrustedUserActions.indexOf(actionId) == -1) {\r\n\t            var groupActionId = DataManager.getGroupActionId(actionId);\r\n\t            DataManager.TrustedUserActions.push(groupActionId);\r\n\t        }\r\n\t    };\r\n\t    DataManager.getTrustedUserAction = function (groupActionId) {\r\n\t        var index = DataManager.TrustedUserActions.indexOf(groupActionId);\r\n\t        if (index == -1) {\r\n\t            return false;\r\n\t        }\r\n\t        else {\r\n\t            DataManager.TrustedUserActions.splice(index, 1);\r\n\t            return true;\r\n\t        }\r\n\t    };\r\n\t    DataManager.getGroupActionId = function (actionId) {\r\n\t        var result = actionId;\r\n\t        switch (actionId) {\r\n\t            case \"BET_PLUS\":\r\n\t            case \"BET_MINUS\":\r\n\t            case \"BET_CYCLE\":\r\n\t            case \"MAX_BET\":\r\n\t            case \"COIN_SIZE_PLUS\":\r\n\t            case \"COIN_SIZE_PLUS_CYCLE\":\r\n\t            case \"COIN_SIZE_MINUS\":\r\n\t            case \"PAYLINE_COUNT_PLUS\":\r\n\t            case \"PAYLINE_COUNT_PLUS_CYCLE\":\r\n\t            case \"PAYLINE_COUNT_MINUS\":\r\n\t                result = \"BET_CHANGE\";\r\n\t                break;\r\n\t            case \"SPIN\":\r\n\t                result = \"SPIN\";\r\n\t                break;\r\n\t            case \"SPIN_OR_STOP\":\r\n\t                if (HtmlController_1.HtmlController.ActionElements[\"SPIN_STOP\"] != null) {\r\n\t                    var btn = HtmlController_1.HtmlController.ActionElements[\"SPIN_STOP\"][0];\r\n\t                    if (btn != null && btn.instance.classList.contains(\"_disabled\")) {\r\n\t                        result = \"SPIN\";\r\n\t                    }\r\n\t                }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    DataManager.stopAutoplayIfLossLimit = function () {\r\n\t        if (DataManager.AutoplayLossLimit === \"∞\") {\r\n\t            return;\r\n\t        }\r\n\t        var lossLimit = parseFloat(DataManager.AutoplayLossLimit);\r\n\t        if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            lossLimit += GameManager_1.GameManager.baseResponse.totalWin;\r\n\t        }\r\n\t        if (lossLimit - BetManager_1.BetManager.Bet < 0) {\r\n\t            DataManager.Autoplay = false;\r\n\t        }\r\n\t    };\r\n\t    DataManager.updateLossLimit = function (win) {\r\n\t        if (win === void 0) { win = 0; }\r\n\t        if (DataManager.AutoplayLossLimit === \"∞\") {\r\n\t            return;\r\n\t        }\r\n\t        var lossLimit = parseFloat(DataManager.AutoplayLossLimit);\r\n\t        if (win > 0) {\r\n\t            lossLimit += win;\r\n\t        }\r\n\t        else {\r\n\t            if (BetManager_1.BetManager.Bet != null) {\r\n\t                lossLimit = neo_common_1.NumberUtils.toNumber(neo_common_1.NumberUtils.subtract(lossLimit, BetManager_1.BetManager.Bet));\r\n\t            }\r\n\t        }\r\n\t        DataManager.AutoplayLossLimit = lossLimit + \"\";\r\n\t    };\r\n\t    DataManager.stopAutoplayIfWinLimit = function () {\r\n\t        if (!DataManager.Autoplay) {\r\n\t            return false;\r\n\t        }\r\n\t        if (DataManager.AutoplayWinLimit == \"∞\") {\r\n\t            return false;\r\n\t        }\r\n\t        else {\r\n\t            if (GameManager_1.GameManager.gameResponse != null &&\r\n\t                GameManager_1.GameManager.gameResponse.totalWin > 0 &&\r\n\t                GameManager_1.GameManager.gameResponse.totalWin >= parseFloat(DataManager.AutoplayWinLimit)) {\r\n\t                DataManager.Autoplay = false;\r\n\t                return true;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.gameState = function (state) {\r\n\t        if (AppContext_1.AppContext.clientHost) {\r\n\t            var messageId = GameManager_1.GameManager.gameResponse.messageId;\r\n\t            var unpaidWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t            var gameRoundId = GameManager_1.GameManager.gameResponse.roundId;\r\n\t            var gameEvent = void 0;\r\n\t            switch (state) {\r\n\t                case \"PrimaryGameEscrow\":\r\n\t                    gameEvent = GameEvents.PrimaryGameEscrow(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"PrimaryGameStarted\":\r\n\t                    gameEvent = GameEvents.PrimaryGameStarted(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"PrimaryGameEnded\":\r\n\t                    gameEvent = GameEvents.PrimaryGameEnded(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"SecondaryGameEntered\":\r\n\t                    gameEvent = GameEvents.SecondaryGameEntered(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"SecondaryGameEscrow\":\r\n\t                    gameEvent = GameEvents.SecondaryGameEscrow(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"SecondaryGameStarted\":\r\n\t                    gameEvent = GameEvents.SecondaryGameStarted(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"GameCollectEscrow\":\r\n\t                    gameEvent = GameEvents.GameCollectEscrow(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"SecondaryGameCollectEscrow\":\r\n\t                    gameEvent = GameEvents.SecondaryGameCollectEscrow(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"SecondaryGameEnded\":\r\n\t                    gameEvent = GameEvents.SecondaryGameEnded(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"GameEnded\":\r\n\t                    gameEvent = GameEvents.GameEnded(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"SecondaryGameHalved\":\r\n\t                    gameEvent = GameEvents.SecondaryGameHalved(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"AutoPlayStarted\":\r\n\t                    gameEvent = GameEvents.AutoPlayStarted(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"AutoPlayEnded\":\r\n\t                    gameEvent = GameEvents.AutoPlayEnded(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"GamePlayDisabled\":\r\n\t                    gameEvent = GameEvents.GamePlayDisabled(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"GamePlayEnabled\":\r\n\t                    gameEvent = GameEvents.GamePlayEnabled(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"GameLoaded\":\r\n\t                    gameEvent = GameEvents.GameLoaded(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"BonusGameEnded\":\r\n\t                    gameEvent = GameEvents.BonusGameEnded(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"BonusGameEscrow\":\r\n\t                    gameEvent = GameEvents.BonusGameEscrow(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"BonusGameStarted\":\r\n\t                    gameEvent = GameEvents.BonusGameStarted(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t                case \"BonusGameTriggered\":\r\n\t                    gameEvent = GameEvents.BonusGameTriggered(messageId, unpaidWin, gameRoundId);\r\n\t                    break;\r\n\t            }\r\n\t            if (gameEvent != null) {\r\n\t                AppContext_1.AppContext.clientHost.notifyEventFromGame(gameEvent);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"DataManager\", s);\r\n\t        }\r\n\t    };\r\n\t    DataManager._gameData = {};\r\n\t    DataManager.DisplayCurrencies = null;\r\n\t    DataManager.serverTimeOffset = -1;\r\n\t    DataManager.time = \"\";\r\n\t    DataManager.utcTime = \"\";\r\n\t    DataManager.serverTimeResponseTimestamp = 0;\r\n\t    DataManager.TrustedUserActions = [];\r\n\t    DataManager.GameRoundClosed = false;\r\n\t    DataManager.Collectable = true;\r\n\t    DataManager.GameLimit = false;\r\n\t    DataManager.AutoplayCount = \"∞\";\r\n\t    DataManager.AutoplayLossLimit = \"∞\";\r\n\t    DataManager.AutoplayWinLimit = \"∞\";\r\n\t    DataManager._autoplay = false;\r\n\t    DataManager.AutoplayEnabled = true;\r\n\t    DataManager.AutoplayAfterGamble = false;\r\n\t    DataManager.QuickspinEnabled = false;\r\n\t    DataManager._quickstopTimes = [];\r\n\t    DataManager.VibrationEnabled = false;\r\n\t    DataManager.HelpDataGameLimit = 0;\r\n\t    DataManager.HelpDataGambleLimit = 0;\r\n\t    DataManager.BackSoundsPlayingFromGame = true;\r\n\t    DataManager.AutoplayStarted = false;\r\n\t    return DataManager;\r\n\t}());\r\n\texports.DataManager = DataManager;\r\n\n\n/***/ },\n/* 30 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar ResponsibleDialog1_1 = __webpack_require__(43);\r\n\tvar MessageManager_1 = __webpack_require__(44);\r\n\tvar SimilarGames_1 = __webpack_require__(53);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar LimitDialog_1 = __webpack_require__(54);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar NotificationManager_1 = __webpack_require__(55);\r\n\tvar Paytable_1 = __webpack_require__(51);\r\n\tvar SessionTimer_1 = __webpack_require__(58);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar RetentionPanel_1 = __webpack_require__(40);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar GameManager = (function () {\r\n\t    function GameManager() {\r\n\t    }\r\n\t    Object.defineProperty(GameManager, \"gameClient\", {\r\n\t        get: function () {\r\n\t            return GameManager._gameClient;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    GameManager.startGame = function (gameClient, app) {\r\n\t        if (false) {\r\n\t            GameManager.log(\"startGame\");\r\n\t        }\r\n\t        neo_common_1.ArgValidator.ensureIsNotNullOrUndefined(gameClient, \"gameClient\");\r\n\t        GameManager._gameClient = gameClient;\r\n\t        GameManager._gameClient.onErrorResponse = GameManager.errorReceived;\r\n\t        DataManager_1.DataManager.BackSoundsPlayingFromGame =\r\n\t            AppContext_1.AppContext.current.isBackgroundMusicEnabled && AppContext_1.AppContext.current.getBackgroundMusic();\r\n\t        NotificationManager_1.NotificationManager.initialize();\r\n\t        GameManager._app = app;\r\n\t        if (ModuleManager_1.ModuleManager.connectModules()) {\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.wasInitialized) {\r\n\t                GameManager.init();\r\n\t            }\r\n\t            else {\r\n\t                setTimeout(function () {\r\n\t                    GameManager.init();\r\n\t                }, 3000);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                GameManager.log(\"ERROR cant connect channel and game modules\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GameManager.showGame = function () {\r\n\t        if (false) {\r\n\t            GameManager.log(\"showGame\");\r\n\t        }\r\n\t        var loading = document.getElementById(\"loading\");\r\n\t        var canvas = document.getElementById(\"canvas\");\r\n\t        if (loading != null && canvas != null) {\r\n\t            Scaling_1.Scaling.onLoadComplete();\r\n\t            Jackpot_1.Jackpot.show();\r\n\t            RetentionPanel_1.RetentionPanel.show();\r\n\t            Paytable_1.Paytable.openAtStart();\r\n\t            if (DataManager_1.DataManager.GameRoundClosed && Jackpot_1.Jackpot.hasMiniGame() && !FreeRoundBonus_1.FreeRoundBonus.inFrb) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t            }\r\n\t            DataManager_1.DataManager.cleanUpElements();\r\n\t            loading.style.display = \"none\";\r\n\t            canvas.style.display = \"block\";\r\n\t            DataManager_1.DataManager.updateDataElements();\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                GameManager.log(\"ERROR loading or canvas doesnt exist\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GameManager.setupGame = function (response) {\r\n\t        if (false) {\r\n\t            GameManager.log(\"setupGame\");\r\n\t        }\r\n\t        GameManager.parseResponses(response);\r\n\t        DataManager_1.DataManager.updateResponseData(true);\r\n\t        ModuleManager_1.ModuleManager.initModules();\r\n\t        DataManager_1.DataManager.SimilarGames = new SimilarGames_1.SimilarGames();\r\n\t        DataManager_1.DataManager.SimilarGames.initialize();\r\n\t        FreeRoundBonus_1.FreeRoundBonus.showFreeRounds();\r\n\t    };\r\n\t    GameManager.init = function () {\r\n\t        if (false) {\r\n\t            GameManager.log(\"init\");\r\n\t        }\r\n\t        if (GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        else {\r\n\t            GameManager.requestSend = true;\r\n\t        }\r\n\t        DataManager_1.DataManager.getServerTime();\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        FreeRoundBonus_1.FreeRoundBonus.initializeFreeRounds();\r\n\t        Jackpot_1.Jackpot.initialize();\r\n\t        GameManager._gameClient.init().then(function (response) {\r\n\t            GameManager.initReceived(response);\r\n\t        });\r\n\t    };\r\n\t    GameManager.softInit = function () {\r\n\t        if (false) {\r\n\t            GameManager.log(\"soft init\");\r\n\t        }\r\n\t        if (GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        else {\r\n\t            GameManager.requestSend = true;\r\n\t        }\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        GameManager._gameClient.init().then(function (response) {\r\n\t            GameManager.softInitReceived(response);\r\n\t        });\r\n\t    };\r\n\t    GameManager.collect = function (module) {\r\n\t        if (false) {\r\n\t            GameManager.log(\"collect module: \" + module);\r\n\t        }\r\n\t        if (GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        else {\r\n\t            GameManager.requestSend = true;\r\n\t        }\r\n\t        if (!AppContext_1.AppContext.gameDefinition.Gamble) {\r\n\t            DataManager_1.DataManager.Collectable = true;\r\n\t        }\r\n\t        GameManager.canExit();\r\n\t        this._collectModule = module;\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\r\n\t            GameManager.gameClient.collect().then(GameManager.collectReceived);\r\n\t        }\r\n\t    };\r\n\t    GameManager.initReceived = function (response) {\r\n\t        if (false) {\r\n\t            GameManager.log(\"initReceived\");\r\n\t        }\r\n\t        if (neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            if (false) {\r\n\t                GameManager.log(\"initReceived NULL response (error in send?)\");\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        DataManager_1.DataManager.showTime();\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(AppContext_1.AppContext.gameConfiguration.GUIShowSessionTimeStartValue)) {\r\n\t            DataManager_1.DataManager.showSessionTime(AppContext_1.AppContext.gameConfiguration.GUIShowSessionTimeStartValue);\r\n\t        }\r\n\t        else {\r\n\t            DataManager_1.DataManager.showSessionTime(0);\r\n\t        }\r\n\t        MessageManager_1.MessageManager.postpone(GameManager.continueInitReceived, response);\r\n\t    };\r\n\t    GameManager.continueInitReceived = function (response) {\r\n\t        GameManager.setupGame(response);\r\n\t        GameManager.showGame();\r\n\t        neo_games_1.Platforms.Platforms.gameDataLoaded({\r\n\t            PlayerTokenId: AppContext_1.AppContext.gameConfiguration.PlayerTokenId,\r\n\t            HomeUrl: AppContext_1.AppContext.gameConfiguration.ExitUrl,\r\n\t            ClientToken: AppContext_1.AppContext.gameConfiguration.ClientToken,\r\n\t            GameName: GameApp_1.GameApp.key,\r\n\t            SessionData: {\r\n\t                SessionBalance: AppContext_1.AppContext.gameConfiguration.SessionBalance,\r\n\t                TotalWin: AppContext_1.AppContext.gameConfiguration.TotalWin,\r\n\t                TotalBet: AppContext_1.AppContext.gameConfiguration.TotalBet,\r\n\t            },\r\n\t            CurrencyCode: response.initData.currency != null ? response.initData.currency : \"\",\r\n\t            Balance: GameManager.gameResponse.balance.real,\r\n\t            Bet: BetManager_1.BetManager.Bet,\r\n\t        });\r\n\t        neo_games_1.Platforms.Platforms.rendererType(StageController_1.StageController.Renderer instanceof PIXI.CanvasRenderer ? \"canvas\" : \"webGL\");\r\n\t        DataManager_1.DataManager.gameState(\"GameLoaded\");\r\n\t        GameManager.requestSend = false;\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\r\n\t                if (!ModuleManager_1.ModuleManager.freespinsEnabled() &&\r\n\t                    !ModuleManager_1.ModuleManager.freespinsActive() &&\r\n\t                    !ModuleManager_1.ModuleManager.pickEnabled() &&\r\n\t                    !ModuleManager_1.ModuleManager.pickActive()) {\r\n\t                    ModuleManager_1.ModuleManager.collect(GameModules.Base);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GameManager.softInitReceived = function (response) {\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        GameManager.parseResponses(response);\r\n\t        DataManager_1.DataManager.updateResponseData(true);\r\n\t        GameManager.requestSend = false;\r\n\t        ModuleManager_1.ModuleManager.restoreGameRound(GameModules.Base);\r\n\t        FreeRoundBonus_1.FreeRoundBonus.openOther();\r\n\t    };\r\n\t    GameManager.collectReceived = function (response) {\r\n\t        if (false) {\r\n\t            GameManager.log(\"collectReceived\");\r\n\t        }\r\n\t        MessageManager_1.MessageManager.postpone(GameManager.continueCollectReceived, response);\r\n\t    };\r\n\t    GameManager.continueCollectReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            ModuleManager_1.ModuleManager.collectInModule(GameManager._collectModule);\r\n\t            GameManager.canExit();\r\n\t        }\r\n\t        GameManager.requestSend = false;\r\n\t    };\r\n\t    GameManager.errorReceived = function (apiError) {\r\n\t        var requestName = apiError.requestInfo.request.constructor.name;\r\n\t        if (requestName === \"FreeRoundsOffersRequest\") {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.wasInitialized = true;\r\n\t            return;\r\n\t        }\r\n\t        if (false) {\r\n\t            GameManager.log(\"errorReceived\");\r\n\t        }\r\n\t        window.onblur = null;\r\n\t        window.onfocus = null;\r\n\t        PIXI.sound.muteAll();\r\n\t        var localizedText = \"\";\r\n\t        var isError = true;\r\n\t        var code = apiError.httpStatusCode.toString();\r\n\t        var customData = {\r\n\t            special: false,\r\n\t            gameRoundId: neo_common_1.Utils.valueOrDefault(DataManager_1.DataManager.getDataById(\"ROUND_ID\"), \"0\"),\r\n\t            errorId: neo_common_1.Utils.isNullOrUndefined(apiError.error) ? \"\" : apiError.error.errorId,\r\n\t            actions: neo_common_1.Utils.isNullOrUndefined(apiError.error) ? [] : apiError.error[\"actions\"],\r\n\t        };\r\n\t        var ignoreShowDialog = false;\r\n\t        var hasMessages = false;\r\n\t        var callbackFnc = null;\r\n\t        var isFatalError = true;\r\n\t        if (apiError.error) {\r\n\t            var resource = \"ERROR_\" + apiError.httpStatusCode + \"_\" + apiError.error.code;\r\n\t            code = [apiError.httpStatusCode.toString(), apiError.error.code].join(\"-\");\r\n\t            localizedText = Languages_1.Languages.getRid(resource);\r\n\t            hasMessages = apiError.error.messages != null;\r\n\t            if (localizedText == null) {\r\n\t                resource = \"ERROR_\" + apiError.httpStatusCode;\r\n\t                code = apiError.httpStatusCode.toString();\r\n\t                localizedText = Languages_1.Languages.getRid(resource);\r\n\t            }\r\n\t            if ((apiError.httpStatusCode === 400 && apiError.error.code === 1009) ||\r\n\t                (apiError.httpStatusCode === 400 && apiError.error.code === 1011) ||\r\n\t                (apiError.httpStatusCode === 400 && apiError.error.code === 1012) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2005) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2013) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2014) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2016) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2017) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2018)) {\r\n\t                customData.special = true;\r\n\t                customData.errorId = \"\";\r\n\t                isError = false;\r\n\t            }\r\n\t            if ((apiError.httpStatusCode === 500 && apiError.error.code === 2001) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2002) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2012)) {\r\n\t                customData.ultraSpecial = true;\r\n\t            }\r\n\t            if ((apiError.httpStatusCode === 500 && apiError.error.code === 2015) ||\r\n\t                (apiError.httpStatusCode === 500 && apiError.error.code === 2016)) {\r\n\t                code = \"\";\r\n\t                localizedText = apiError.error.message;\r\n\t            }\r\n\t            if (apiError.httpStatusCode === 500 && apiError.error.code === 2017) {\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.collectPartial) {\r\n\t                    localizedText += Languages_1.Languages.getRid(\"FRB_COLLECT_PARTIAL_ALLOWED\");\r\n\t                }\r\n\t                else {\r\n\t                    localizedText += Languages_1.Languages.getRid(\"FRB_COLLECT_PARTIAL_NOT_ALLOWED\");\r\n\t                }\r\n\t            }\r\n\t            if (apiError.httpStatusCode === 500 && apiError.error.code === 2018) {\r\n\t                localizedText += Languages_1.Languages.getRid(\"FRB_COLLECT_PARTIAL_NOT_ALLOWED\");\r\n\t            }\r\n\t            if (apiError.httpStatusCode === 500 && apiError.error.code === 2019) {\r\n\t                if (!hasMessages) {\r\n\t                    ignoreShowDialog = true;\r\n\t                }\r\n\t                callbackFnc = MessageManager_1.MessageManager.callbackFnc;\r\n\t                isFatalError = false;\r\n\t            }\r\n\t            if ((apiError.httpStatusCode === 400 && apiError.error.code === 1011) ||\r\n\t                (apiError.httpStatusCode === 400 && apiError.error.code === 1012)) {\r\n\t                var spbSufix = AppContext_1.AppContext.gameConfiguration.UseJackpotLocalization ? \"_J\" : \"\";\r\n\t                localizedText = Languages_1.Languages.getRid(resource + spbSufix);\r\n\t            }\r\n\t            if (apiError.httpStatusCode === 500 && apiError.error.code === 2020) {\r\n\t                SessionTimer_1.SessionTimer.postpone(SessionTimer_1.SessionTimer.callbackFnc, SessionTimer_1.SessionTimer.prepareData(apiError.error));\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (apiError.httpStatusCode === 401) {\r\n\t                customData.ultraSpecial = true;\r\n\t            }\r\n\t            var resource = \"ERROR_\" + apiError.httpStatusCode.toString();\r\n\t            localizedText = Languages_1.Languages.getRid(resource);\r\n\t        }\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"GameManager\", \"[errorReceived] calling \" +\r\n\t                (\"AppContext.current.showDialog('\" + localizedText + \"', \" + isError + \", '\" + code + \"', \\n                    \" + customData.errorId + \", \" + customData.gameRoundId + \", \" + JSON.stringify(customData) + \")\"));\r\n\t        }\r\n\t        if (isError) {\r\n\t            var error_code_for_platforms = apiError.httpStatusCode.toString();\r\n\t            if (apiError.error) {\r\n\t                error_code_for_platforms = [apiError.httpStatusCode.toString(), apiError.error.code].join(\"-\");\r\n\t            }\r\n\t            neo_games_1.Platforms.Platforms.error(error_code_for_platforms, localizedText);\r\n\t            if (isFatalError) {\r\n\t                Jackpot_1.Jackpot.showError();\r\n\t                NotificationManager_1.NotificationManager.disconnect();\r\n\t            }\r\n\t        }\r\n\t        if (neo_games_1.Platforms.Platforms.handleShowErrorDialog || ignoreShowDialog) {\r\n\t            return;\r\n\t        }\r\n\t        if (hasMessages) {\r\n\t            MessageManager_1.MessageManager.postpone(callbackFnc, apiError.error);\r\n\t        }\r\n\t        else {\r\n\t            AppContext_1.AppContext.current.showDialog(localizedText, isError, code, customData.errorId, customData.gameRoundId, customData);\r\n\t        }\r\n\t    };\r\n\t    GameManager.parseResponses = function (response) {\r\n\t        if (false) {\r\n\t            GameManager.log(\"parseResponses\");\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager.gameResponse = response;\r\n\t            if (response.module(GameModules.Base) != null) {\r\n\t                GameManager.baseResponse = response.module(GameModules.Base);\r\n\t            }\r\n\t            else {\r\n\t                GameManager.baseResponse = null;\r\n\t            }\r\n\t            if (response.module(GameModules.Gamble) != null) {\r\n\t                GameManager.gambleResponse = response.module(GameModules.Gamble);\r\n\t            }\r\n\t            else {\r\n\t                GameManager.gambleResponse = null;\r\n\t            }\r\n\t            if (response.module(GameModules.Freespins) != null) {\r\n\t                GameManager.freespinsResponse = response.module(GameModules.Freespins);\r\n\t            }\r\n\t            else {\r\n\t                GameManager.freespinsResponse = null;\r\n\t            }\r\n\t            if (response.module(GameModules.Pick) != null) {\r\n\t                GameManager.pickResponse = response.module(GameModules.Pick);\r\n\t            }\r\n\t            else {\r\n\t                GameManager.pickResponse = null;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GameManager.collectable = function () {\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            return false;\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.endMsgDisplayed) {\r\n\t            return false;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && Jackpot_1.Jackpot.hasMiniGame()) {\r\n\t            return false;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && DataManager_1.DataManager.Collectable) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    GameManager.canExit = function (exit) {\r\n\t        if (exit === void 0) { exit = false; }\r\n\t        var canExit = GameManager.collectable();\r\n\t        if (false) {\r\n\t            console.log(\"GameManager.canExit(exit: \" + exit + \") -> afterCollect: \" + canExit);\r\n\t        }\r\n\t        if (canExit &&\r\n\t            !exit &&\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect &&\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.responsibleDialog1Data != null &&\r\n\t            !FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            DataManager_1.DataManager.AutoplayAfterGamble = false;\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.openDialog(ResponsibleDialog1_1.ResponsibleDialog1.responsibleDialog1Data);\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect = false;\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.responsibleDialog1Data = null;\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            ModuleManager_1.ModuleManager.disableGamble();\r\n\t            ModuleManager_1.ModuleManager.resetWinAnimator(GameModules.Base);\r\n\t        }\r\n\t        if (GameManager.exitOnCollect && canExit) {\r\n\t            if (false) {\r\n\t                console.log((\"GameManager.canExit(exit: \" + exit + \") -> manuall call of GameApp.exit() \") +\r\n\t                    (\"because of GameManager.exitOnCollect = \" + GameManager.exitOnCollect));\r\n\t            }\r\n\t            GameApp_1.GameApp.exit();\r\n\t            return false;\r\n\t        }\r\n\t        if (canExit && exit) {\r\n\t            return canExit;\r\n\t        }\r\n\t        else {\r\n\t            if (!GameManager.exitOnCollect && exit) {\r\n\t                if (false) {\r\n\t                    console.log((\"GameManager.canExit(exit: \" + exit + \") -> \") +\r\n\t                        (\"changing GameManager.exitOnCollect(\" + GameManager.exitOnCollect + \") to value '\" + exit + \"'\"));\r\n\t                }\r\n\t                GameManager.exitOnCollect = true;\r\n\t            }\r\n\t        }\r\n\t        if (false) {\r\n\t            console.log(\"GameManager.canExit(exit: \" + exit + \") -> returns: \" + canExit);\r\n\t        }\r\n\t        return canExit;\r\n\t    };\r\n\t    GameManager.showResponsibleDialog1 = function (data) {\r\n\t        if (GameManager.canExit()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            DataManager_1.DataManager.AutoplayAfterGamble = false;\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.openDialog(data);\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect = true;\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.responsibleDialog1Data = null;\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            ModuleManager_1.ModuleManager.disableGamble();\r\n\t            ModuleManager_1.ModuleManager.resetWinAnimator(GameModules.Base);\r\n\t        }\r\n\t        else {\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect = true;\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.responsibleDialog1Data = data;\r\n\t        }\r\n\t    };\r\n\t    GameManager.disablePlay = function () {\r\n\t        GameManager.disableOnCollect = true;\r\n\t        if (GameManager.collectable()) {\r\n\t            GameManager.disableGamePlay = true;\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            DataManager_1.DataManager.gameState(\"GamePlayDisabled\");\r\n\t        }\r\n\t    };\r\n\t    GameManager.enablePlay = function () {\r\n\t        GameManager.disableOnCollect = false;\r\n\t        GameManager.disableGamePlay = false;\r\n\t        if (!GameManager.dontEnableGamePlay) {\r\n\t            ModuleManager_1.ModuleManager.restoreGameRound(GameModules.Base);\r\n\t        }\r\n\t        DataManager_1.DataManager.gameState(\"GamePlayEnabled\");\r\n\t    };\r\n\t    GameManager.openConfirmationDialog = function (module, text) {\r\n\t        var dialogData = {\r\n\t            text: text,\r\n\t            actions: [\r\n\t                {\r\n\t                    type: \"restore\",\r\n\t                    text: Languages_1.Languages.getRid(\"CONTINUE\"),\r\n\t                    customData: module,\r\n\t                },\r\n\t            ],\r\n\t            special: true,\r\n\t        };\r\n\t        ModuleManager_1.ModuleManager.disableChannelModule(module);\r\n\t        AppContext_1.AppContext.current.showDialog(text, false, null, null, null, dialogData);\r\n\t    };\r\n\t    GameManager.closeResponsibleDialog1 = function () {\r\n\t        GameManager.requestSend = false;\r\n\t        ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect = false;\r\n\t        ModuleManager_1.ModuleManager.restoreGameRound(GameModules.Base);\r\n\t    };\r\n\t    GameManager.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"GameManager\", s);\r\n\t        }\r\n\t    };\r\n\t    GameManager._collectModule = GameModules.Base;\r\n\t    GameManager.requestSend = false;\r\n\t    GameManager.exitOnCollect = false;\r\n\t    GameManager.disableOnCollect = false;\r\n\t    GameManager.disableGamePlay = false;\r\n\t    GameManager.dontEnableGamePlay = false;\r\n\t    return GameManager;\r\n\t}());\r\n\texports.GameManager = GameManager;\r\n\n\n/***/ },\n/* 31 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\r\n\tvar SpinBet = neo_games_1.Communication.Game.SpinBet;\r\n\tvar BetType = neo_games_1.Communication.Game.BetType;\r\n\tvar BetManager = (function () {\r\n\t    function BetManager() {\r\n\t    }\r\n\t    BetManager.initializeBet = function () {\r\n\t        if (GameManager_1.GameManager.baseResponse.initData != null) {\r\n\t            if (GameManager_1.GameManager.baseResponse.initData.betSettings != null &&\r\n\t                GameManager_1.GameManager.baseResponse.initData.betSettings.totalBets != null) {\r\n\t                BetManager.TotalBets = GameManager_1.GameManager.baseResponse.initData.betSettings.totalBets;\r\n\t            }\r\n\t            if (GameManager_1.GameManager.baseResponse.initData.betSettings != null &&\r\n\t                GameManager_1.GameManager.baseResponse.initData.betSettings.coins != null) {\r\n\t                BetManager.Coins = GameManager_1.GameManager.baseResponse.initData.betSettings.coins;\r\n\t            }\r\n\t            if (GameManager_1.GameManager.baseResponse.initData.lastBet != null &&\r\n\t                GameManager_1.GameManager.baseResponse.initData.lastBet.betType === BetType.Total) {\r\n\t                if (GameManager_1.GameManager.baseResponse.initData.lastBet.totalBet != null &&\r\n\t                    !AppContext_1.AppContext.gameConfiguration.UseCoins) {\r\n\t                    if (BetManager.Bet != null &&\r\n\t                        BetManager.Bet !== GameManager_1.GameManager.baseResponse.initData.lastBet.totalBet) {\r\n\t                        ModuleManager_1.ModuleManager.initNewBet();\r\n\t                    }\r\n\t                    else {\r\n\t                        ModuleManager_1.ModuleManager.initNewBet(false);\r\n\t                    }\r\n\t                    BetManager.Bet = BetHigherThanMinDialog_1.BetHigherThanMinDialog.getGameStartedWithoutFeature()\r\n\t                        ? BetManager.TotalBets[0]\r\n\t                        : GameManager_1.GameManager.baseResponse.initData.lastBet.totalBet;\r\n\t                    BetManager.updateBetPosition();\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t                }\r\n\t                else {\r\n\t                    if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t                        if (GameManager_1.GameManager.baseResponse.initData.lastBet.coinSize != null) {\r\n\t                            BetManager.CoinSize = GameManager_1.GameManager.baseResponse.initData.lastBet.coinSize;\r\n\t                            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n\t                        }\r\n\t                        if (GameManager_1.GameManager.baseResponse.initData.lastBet.coinCount != null) {\r\n\t                            BetManager.CoinCount = parseInt(GameManager_1.GameManager.baseResponse.initData.lastBet.coinCount.toString());\r\n\t                            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCointCount, BetManager.CoinCount.toString());\r\n\t                        }\r\n\t                        if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n\t                            BetManager.Bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n\t                            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t                        }\r\n\t                        BalanceManager_1.BalanceManager.recalculateDenomBalance();\r\n\t                    }\r\n\t                    else if (AppContext_1.AppContext.current.getDenomination() != null && BetManager.Coins != null) {\r\n\t                        if (BetManager.Coins[AppContext_1.AppContext.current.getDenomination()] != null) {\r\n\t                            BetManager.changeDenom(AppContext_1.AppContext.current.getDenomination(), true);\r\n\t                        }\r\n\t                        else {\r\n\t                            BetManager.changeDefaultDenom();\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        BetManager.changeDefaultDenom();\r\n\t                    }\r\n\t                    if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n\t                        BetManager.Bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n\t                        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (BetManager.DenomContainer != null) {\r\n\t                BetManager.DenomContainer.addValues();\r\n\t            }\r\n\t            if (BetManager.CoinCountContainer != null) {\r\n\t                BetManager.CoinCountContainer.addValues();\r\n\t            }\r\n\t            if (BetManager.BetContainer != null) {\r\n\t                BetManager.BetContainer.addValues();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BetManager.changeBet = function (decrease, max, cycle) {\r\n\t        if (decrease === void 0) { decrease = false; }\r\n\t        if (max === void 0) { max = false; }\r\n\t        if (cycle === void 0) { cycle = false; }\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.closeDialog(true);\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t        }\r\n\t        BetManager.unHideValues();\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins) {\r\n\t            if (cycle) {\r\n\t                BetManager.cycleCoinCount();\r\n\t                return;\r\n\t            }\r\n\t            else if (max) {\r\n\t                BetManager.maxCoinCount();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        var bonus = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceBonus));\r\n\t        var real = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceReal));\r\n\t        if (BetManager.Bet != null && BetManager.TotalBets != null && BetManager.TotalBets.length > 0) {\r\n\t            var index;\r\n\t            for (var i = 0; i < BetManager.TotalBets.length; i++) {\r\n\t                if (BetManager.Bet === BetManager.TotalBets[i]) {\r\n\t                    index = i;\r\n\t                }\r\n\t            }\r\n\t            if (index != null) {\r\n\t                if (decrease) {\r\n\t                    if (index === 0) {\r\n\t                        if (cycle) {\r\n\t                            index = BetManager.TotalBets.length - 1;\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        index--;\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (max) {\r\n\t                        var findMax = false;\r\n\t                        if (!findMax) {\r\n\t                            for (var jj = BetManager.TotalBets.length - 1; jj >= 0; jj--) {\r\n\t                                if (BetManager.TotalBets[jj] <= bonus && findMax === false) {\r\n\t                                    findMax = true;\r\n\t                                    index = jj;\r\n\t                                }\r\n\t                                if (BetManager.TotalBets[jj] <= real && findMax === false) {\r\n\t                                    findMax = true;\r\n\t                                    index = jj;\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (index === BetManager.TotalBets.length - 1) {\r\n\t                            if (cycle) {\r\n\t                                index = 0;\r\n\t                            }\r\n\t                        }\r\n\t                        else {\r\n\t                            index++;\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                BetManager.Bet = BetManager.TotalBets[index];\r\n\t                if (bonus != null) {\r\n\t                    if (bonus >= BetManager.Bet) {\r\n\t                        ModuleManager_1.ModuleManager.changeBetColor(true);\r\n\t                    }\r\n\t                    else {\r\n\t                        ModuleManager_1.ModuleManager.changeBetColor();\r\n\t                    }\r\n\t                }\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBet);\r\n\t                neo_games_1.Platforms.Platforms.bet({\r\n\t                    totalBet: BetManager.Bet,\r\n\t                    maxBetAction: max,\r\n\t                    userAction: DataManager_1.DataManager.getTrustedUserAction(\"BET_CHANGE\"),\r\n\t                });\r\n\t                BetManager.updateBetPosition();\r\n\t            }\r\n\t        }\r\n\t        BalanceManager_1.BalanceManager.poolingBalance();\r\n\t    };\r\n\t    BetManager.sortNumber = function (a, b) {\r\n\t        return a - b;\r\n\t    };\r\n\t    BetManager.changeDefaultDenom = function () {\r\n\t        BetManager.unHideValues();\r\n\t        if (BetManager.Coins != null) {\r\n\t            var lowestDenom = void 0;\r\n\t            for (var key in BetManager.Coins) {\r\n\t                if (lowestDenom == null) {\r\n\t                    lowestDenom = parseFloat(key);\r\n\t                }\r\n\t                else {\r\n\t                    if (parseFloat(key) < lowestDenom) {\r\n\t                        lowestDenom = parseFloat(key);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            BetManager.CoinSize = lowestDenom;\r\n\t            AppContext_1.AppContext.current.setDenomination(BetManager.CoinSize);\r\n\t            BetManager.Coins[lowestDenom].sort(BetManager.sortNumber);\r\n\t            BetManager.CoinCount = BetManager.Coins[lowestDenom][0];\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCointCount, BetManager.CoinCount.toString());\r\n\t            BetManager.Bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCoinSize);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCointCount);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBet);\r\n\t            neo_games_1.Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n\t            if (BetManager.CoinCountContainer != null) {\r\n\t                BetManager.CoinCountContainer.addValues();\r\n\t            }\r\n\t            BalanceManager_1.BalanceManager.recalculateDenomBalance();\r\n\t        }\r\n\t    };\r\n\t    BetManager.changeDenom = function (value, init) {\r\n\t        if (init === void 0) { init = false; }\r\n\t        BetManager.unHideValues();\r\n\t        if (BetManager.Coins != null && BetManager.Coins[value] != null) {\r\n\t            BetManager.CoinSize = value;\r\n\t            AppContext_1.AppContext.current.setDenomination(BetManager.CoinSize);\r\n\t            BetManager.Coins[value].sort(BetManager.sortNumber);\r\n\t            if (!init && BetManager.CoinCount != null && !AppContext_1.AppContext.gameConfiguration.ResetCoinCountOnDenomChange) {\r\n\t                var found = false;\r\n\t                var coinCount = BetManager.CoinCount;\r\n\t                for (var i = 0; i < BetManager.Coins[value].length; i++) {\r\n\t                    if (BetManager.Coins[value][i] <= BetManager.CoinCount) {\r\n\t                        found = true;\r\n\t                        coinCount = BetManager.Coins[value][i];\r\n\t                    }\r\n\t                }\r\n\t                if (!found) {\r\n\t                    BetManager.CoinCount = BetManager.Coins[value][0];\r\n\t                }\r\n\t                else {\r\n\t                    BetManager.CoinCount = coinCount;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                BetManager.CoinCount = BetManager.Coins[value][0];\r\n\t            }\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCointCount, BetManager.CoinCount.toString());\r\n\t            BetManager.Bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCoinSize);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCointCount);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBet);\r\n\t            neo_games_1.Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n\t            if (BetManager.CoinCountContainer != null) {\r\n\t                BetManager.CoinCountContainer.addValues();\r\n\t            }\r\n\t            BalanceManager_1.BalanceManager.recalculateDenomBalance();\r\n\t        }\r\n\t        if (DataManager_1.DataManager.HelpDataGameLimit != 0) {\r\n\t            if (AppContext_1.AppContext != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration.UseCoins &&\r\n\t                BetManager.CoinSize != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataHelpGameLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager_1.DataManager.HelpDataGameLimit, BetManager.CoinSize).toString()).toString());\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataHelpGameLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager_1.DataManager.HelpDataGameLimit, BetManager.CoinSize).toString()).toString());\r\n\t            }\r\n\t        }\r\n\t        if (DataManager_1.DataManager.HelpDataGambleLimit != 0) {\r\n\t            if (AppContext_1.AppContext != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration.UseCoins &&\r\n\t                BetManager.CoinSize != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataHelpGambleLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager_1.DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString()).toString());\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataHelpGambleLimit, parseInt(neo_common_1.NumberUtils.devide(DataManager_1.DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString()).toString());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BetManager.changeBetByValue = function (value) {\r\n\t        BetManager.unHideValues();\r\n\t        var bonus = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceBonus));\r\n\t        BetManager.Bet = value;\r\n\t        if (bonus != null) {\r\n\t            if (bonus >= BetManager.Bet) {\r\n\t                ModuleManager_1.ModuleManager.changeBetColor(true);\r\n\t            }\r\n\t            else {\r\n\t                ModuleManager_1.ModuleManager.changeBetColor();\r\n\t            }\r\n\t        }\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBet);\r\n\t        neo_games_1.Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n\t        BetManager.updateBetPosition();\r\n\t    };\r\n\t    BetManager.changeCoinCount = function (value) {\r\n\t        BetManager.unHideValues();\r\n\t        if (BetManager.Coins != null) {\r\n\t            if (BetManager.CoinSize != null) {\r\n\t                BetManager.CoinCount = value;\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCointCount, BetManager.CoinCount.toString());\r\n\t                BetManager.Bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCoinSize);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCointCount);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBet);\r\n\t                neo_games_1.Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BetManager.cycleCoinCount = function () {\r\n\t        BetManager.unHideValues();\r\n\t        if (BetManager.Coins != null) {\r\n\t            if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n\t                var index = 0;\r\n\t                var coinSizes = [];\r\n\t                for (var i = 0; i < BetManager.Coins[BetManager.CoinSize].length; i++) {\r\n\t                    coinSizes.push(BetManager.Coins[BetManager.CoinSize][i]);\r\n\t                }\r\n\t                coinSizes.sort(BetManager.sortNumber);\r\n\t                for (var i = 0; i < coinSizes.length; i++) {\r\n\t                    if (BetManager.CoinCount === coinSizes[i]) {\r\n\t                        index = i;\r\n\t                    }\r\n\t                }\r\n\t                if (coinSizes[index + 1] != null) {\r\n\t                    BetManager.CoinCount = coinSizes[index + 1];\r\n\t                }\r\n\t                else {\r\n\t                    BetManager.CoinCount = coinSizes[0];\r\n\t                }\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCointCount, BetManager.CoinCount.toString());\r\n\t                BetManager.Bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCoinSize);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCointCount);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBet);\r\n\t                neo_games_1.Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BetManager.maxCoinCount = function () {\r\n\t        BetManager.unHideValues();\r\n\t        if (BetManager.Coins != null) {\r\n\t            if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n\t                var credit = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceReal));\r\n\t                var coinCount = BetManager.CoinCount;\r\n\t                BetManager.Coins[BetManager.CoinSize].sort(BetManager.sortNumber);\r\n\t                for (var i = 0; i < BetManager.Coins[BetManager.CoinSize].length; i++) {\r\n\t                    var bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.Coins[BetManager.CoinSize][i]));\r\n\t                    if (credit >= bet) {\r\n\t                        coinCount = BetManager.Coins[BetManager.CoinSize][i];\r\n\t                    }\r\n\t                }\r\n\t                BetManager.CoinCount = coinCount;\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataCointCount, BetManager.CoinCount.toString());\r\n\t                BetManager.Bet = parseFloat(neo_common_1.NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBet, BetManager.Bet.toString());\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCoinSize);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataCointCount);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBet);\r\n\t                neo_games_1.Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BetManager.updateBetPosition = function () {\r\n\t        if (BetManager.TotalBets != null) {\r\n\t            for (var i = 0; i < BetManager.TotalBets.length; i++) {\r\n\t                if (BetManager.Bet === BetManager.TotalBets[i]) {\r\n\t                    if (i <= 0) {\r\n\t                        BetManager.minBet = true;\r\n\t                        BetManager.maxBet = false;\r\n\t                    }\r\n\t                    else if (i >= BetManager.TotalBets.length - 1) {\r\n\t                        BetManager.minBet = false;\r\n\t                        BetManager.maxBet = true;\r\n\t                    }\r\n\t                    else {\r\n\t                        BetManager.minBet = false;\r\n\t                        BetManager.maxBet = false;\r\n\t                    }\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBetPosition, i + 1 + \"/\" + BetManager.TotalBets.length);\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBetPosition);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BetManager.unHideValues = function (credit) {\r\n\t        if (credit === void 0) { credit = false; }\r\n\t        for (var i = 0; i < HtmlController_1.HtmlController.HideButtons.length; i++) {\r\n\t            HtmlController_1.HtmlController.HideButtons[i].unHide(credit);\r\n\t        }\r\n\t    };\r\n\t    BetManager.createBetForSpin = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n\t            return new SpinBet(BetType.Total, BetManager.CoinSize, BetManager.CoinCount, null, null);\r\n\t        }\r\n\t        else {\r\n\t            return new SpinBet(BetType.Total, null, null, null, BetManager.Bet);\r\n\t        }\r\n\t    };\r\n\t    BetManager.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"BetManager\", s);\r\n\t        }\r\n\t    };\r\n\t    BetManager.minBet = false;\r\n\t    BetManager.maxBet = false;\r\n\t    return BetManager;\r\n\t}());\r\n\texports.BetManager = BetManager;\r\n\n\n/***/ },\n/* 32 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar GameStatuses = neo_games_1.Communication.Game.GameModuleStatus;\r\n\tvar ModuleManager = (function () {\r\n\t    function ModuleManager() {\r\n\t    }\r\n\t    ModuleManager.registerGameModule = function (key, module) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"registerGameModule \" + key);\r\n\t        }\r\n\t        if (ModuleManager._gameModules[key] == null) {\r\n\t            ModuleManager._gameModules[key] = module;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                ModuleManager.log(\"ERROR try to register game module with same key: \" + key);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.registerChannelModule = function (key, module) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"registerChannelModule \" + key);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[key] == null) {\r\n\t            ModuleManager._channelModules[key] = module;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                ModuleManager.log(\"ERROR try to register channel module with same key: \" + key);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.connectModules = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"connectModules\");\r\n\t        }\r\n\t        var allChannelsHaveController = true;\r\n\t        for (var key in ModuleManager._channelModules) {\r\n\t            if (ModuleManager._gameModules[key] != null) {\r\n\t                ModuleManager._channelModules[key].addController(ModuleManager._gameModules[key]);\r\n\t                if (false) {\r\n\t                    ModuleManager.log(\"connect module key: \" + key);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    ModuleManager.log(\"cant connect module key: \" + key);\r\n\t                }\r\n\t                allChannelsHaveController = false;\r\n\t            }\r\n\t        }\r\n\t        return allChannelsHaveController;\r\n\t    };\r\n\t    ModuleManager.initModules = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"initModules\");\r\n\t        }\r\n\t        for (var key in ModuleManager._channelModules) {\r\n\t            ModuleManager._channelModules[key].initReceived();\r\n\t        }\r\n\t        if (ModuleManager.gambleActive() && ModuleManager._channelModules[GameModules.Gamble] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Gamble].initIntro();\r\n\t        }\r\n\t        else if (ModuleManager.freespinsActive() && ModuleManager._channelModules[GameModules.Freespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Freespins].initIntro();\r\n\t        }\r\n\t        else if (ModuleManager.pickActive() && ModuleManager._channelModules[GameModules.Pick] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Pick].initIntro();\r\n\t        }\r\n\t        else if (ModuleManager.freespinsEnabled() && ModuleManager._channelModules[GameModules.Pick] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Pick].initIntro();\r\n\t        }\r\n\t        else {\r\n\t            if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t                ModuleManager._channelModules[GameModules.Base].initIntro();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.gambleEnabled = function () {\r\n\t        if (!AppContext_1.AppContext.gameDefinition.Gamble) {\r\n\t            return false;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.Autoplay && !AppContext_1.AppContext.gameConfiguration.AutoplayGambleEnabled) {\r\n\t            return false;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gambleResponse != null && GameManager_1.GameManager.gambleResponse.status === GameStatuses.Enabled) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ModuleManager.gambleActive = function () {\r\n\t        if (!AppContext_1.AppContext.gameDefinition.Gamble) {\r\n\t            return false;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gambleResponse != null && GameManager_1.GameManager.gambleResponse.status === GameStatuses.Active) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ModuleManager.pickEnabled = function () {\r\n\t        if (GameManager_1.GameManager.pickResponse != null && GameManager_1.GameManager.pickResponse.status === GameStatuses.Enabled) {\r\n\t            DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ModuleManager.pickActive = function () {\r\n\t        if (GameManager_1.GameManager.pickResponse != null && GameManager_1.GameManager.pickResponse.status === GameStatuses.Active) {\r\n\t            DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ModuleManager.freespinsEnabled = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null && GameManager_1.GameManager.freespinsResponse.status === GameStatuses.Enabled) {\r\n\t            DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ModuleManager.freespinsActive = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null && GameManager_1.GameManager.freespinsResponse.status === GameStatuses.Active) {\r\n\t            DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ModuleManager.enableGamble = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"enableGamble\");\r\n\t        }\r\n\t        if (ModuleManager.gambleEnabled() && ModuleManager._channelModules[GameModules.Gamble] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Gamble].enable();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.startGamble = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"startGamble\");\r\n\t        }\r\n\t        if (ModuleManager.gambleActive()) {\r\n\t            ModuleManager.outroModule(GameModules.Base);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.startPick = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"startPick\");\r\n\t        }\r\n\t        if (ModuleManager.pickActive()) {\r\n\t            ModuleManager.outroModule(GameModules.Base);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Pick] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Pick].start();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.endPick = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"endPick\");\r\n\t        }\r\n\t        if (!ModuleManager.pickActive()) {\r\n\t            ModuleManager.introModule(GameModules.Freespins);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Pick] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Pick].end();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.enableFreespins = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"enableFreespins\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Freespins].enable();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.enablePick = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"enablePick\");\r\n\t        }\r\n\t        ModuleManager._channelModules[GameModules.Base].disable();\r\n\t        if (ModuleManager._channelModules[GameModules.Pick] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Pick].enable();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.startFreespins = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"startFreespins\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Freespins].start();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.endFreespins = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"endFreespins\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Freespins].end();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.disableGamble = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"disableGamble\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Gamble] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Gamble].disable();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.disablePick = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"disablePick\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Pick] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Pick].disable();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.disableBase = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"disableBase\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base].disable();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.disableChannelModule = function (key) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"disable\" + key);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].disable();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.changeBetColor = function (green) {\r\n\t        if (green === void 0) { green = false; }\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base].changeBetColor(green);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.initNewBet = function (animate) {\r\n\t        if (animate === void 0) { animate = true; }\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base].initNewBet(animate);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.introModule = function (key, long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"introModule key: \" + key);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].intro(long);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.outroModule = function (key) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"outroModule key: \" + key);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].outro();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.collect = function (key) {\r\n\t        if (key != null && ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].collect();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.collectInModule = function (key) {\r\n\t        if (key != null && ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].collectReceived();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.restoreGameRound = function (key, collect) {\r\n\t        if (collect === void 0) { collect = false; }\r\n\t        if (key != null && ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].restoreGameRound(collect);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.dispatchAction = function (action) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"dispatchAction action: \" + action);\r\n\t        }\r\n\t        for (var key in ModuleManager._channelModules) {\r\n\t            ModuleManager._channelModules[key].dispatchAction(action);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.setActiveSceneInBasegame = function (id) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"setActiveScene to \" + id);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base].setActiveSceneInBasegame(id);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.setActiveSceneBackground = function (key, sceneIndex) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"setActiveSceneBackground key: \" + key);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].setSceneAnimations(sceneIndex);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.updatePaytable = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"updatePaytable\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base].updatePaytable();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.cycleHelp = function () {\r\n\t        if (ModuleManager.freespinsActive() && ModuleManager._channelModules[GameModules.Freespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Freespins].cycleHelp();\r\n\t        }\r\n\t        else {\r\n\t            if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t                ModuleManager._channelModules[GameModules.Base].cycleHelp();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.setAutoplayAfterFeature = function (tf) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"setAutoplayAfterFeature to \" + tf);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base].setAutoplayAfterFeature(tf);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.primaryGameEnded = function () {\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            return ModuleManager._channelModules[GameModules.Base].primaryGameEnded();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.toggleModuleSounds = function (key, enable) {\r\n\t        if (ModuleManager._gameModules[key] != null) {\r\n\t            ModuleManager._gameModules[key].toggleSounds(enable);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.resetSceneAsOnCollect = function (key) {\r\n\t        if (ModuleManager._gameModules[key] != null) {\r\n\t            ModuleManager._gameModules[key].collect();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.resetWinAnimator = function (key) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"resetWinAnimator:\" + key);\r\n\t        }\r\n\t        if (ModuleManager._channelModules[key] != null) {\r\n\t            ModuleManager._channelModules[key].resetWinAnimator();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.getActiveGameModules = function () {\r\n\t        var activeModulesArray = [];\r\n\t        if (GameManager_1.GameManager.gameResponse != null && GameManager_1.GameManager.gameResponse.modules != null) {\r\n\t            for (var key in GameManager_1.GameManager.gameResponse.modules) {\r\n\t                if (GameManager_1.GameManager.gameResponse.modules[key].status !== GameStatuses.Disabled) {\r\n\t                    activeModulesArray.push(key);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return activeModulesArray;\r\n\t    };\r\n\t    ModuleManager.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"ModuleManager\", s);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.pickStartButton = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"pickStartButton\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Pick] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Pick].pickStartButton();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.freeSpinsStartButton = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"freeSpinsStartButton\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Freespins].freeSpinsStartButton();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.freeSpinsConfiguratorContinue = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"freeSpinsConfiguratorContinue\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base].freeSpinsConfiguratorContinue();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.enableConfiguratorButtons = function (delay) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"enableConfigurationButtons\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base]._enableConfiguratorButtons.start(delay ? delay : 0);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.disableConfiguratorButtons = function (delay) {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"disableConfigurationButtons\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base]._disableConfiguratorButtons.start(delay ? delay : 0);\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.overlayFsBoard = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"overlayFsBoard\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Freespins].overlayFsBoard();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.removeOverlayFsBoard = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"removeOverlayFsBoard\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Freespins].removeOverlayFsBoard();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager._gameModules = {};\r\n\t    ModuleManager._channelModules = {};\r\n\t    return ModuleManager;\r\n\t}());\r\n\texports.ModuleManager = ModuleManager;\r\n\n\n/***/ },\n/* 33 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar CashierDialog_1 = __webpack_require__(34);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar BalanceManager = (function () {\r\n\t    function BalanceManager() {\r\n\t    }\r\n\t    BalanceManager.setBalance = function () {\r\n\t        if (GameManager_1.GameManager.gameResponse.balance != null) {\r\n\t            if (GameManager_1.GameManager.gameResponse.balance.real != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceReal, GameManager_1.GameManager.gameResponse.balance.real.toString());\r\n\t                if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceRealDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gameResponse.balance.real, BetManager_1.BetManager.CoinSize)).toString());\r\n\t                }\r\n\t            }\r\n\t            if (GameManager_1.GameManager.gameResponse.balance.bonus != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceBonus, GameManager_1.GameManager.gameResponse.balance.bonus.toString());\r\n\t            }\r\n\t            if (GameManager_1.GameManager.gameResponse.balance.real != null && GameManager_1.GameManager.gameResponse.balance.bonus != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceTotal, neo_common_1.NumberUtils.add(GameManager_1.GameManager.gameResponse.balance.real, GameManager_1.GameManager.gameResponse.balance.bonus));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BalanceManager.fixBalance = function () {\r\n\t        var bonus = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceBonus));\r\n\t        var real = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceReal));\r\n\t        var realDenom = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceRealDenom));\r\n\t        var win = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataTotalWin));\r\n\t        var winDenom;\r\n\t        var total = parseFloat(neo_common_1.NumberUtils.add(bonus, real));\r\n\t        var bet = BetManager_1.BetManager.Bet;\r\n\t        var betDenom = BetManager_1.BetManager.CoinCount;\r\n\t        var denom = BetManager_1.BetManager.CoinSize;\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.inFrb) {\r\n\t            if (AppContext_1.AppContext.gameDefinition.Gamble && FreeRoundBonus_1.FreeRoundBonus.winPayMethod !== \"cumulative\") {\r\n\t                if (GameManager_1.GameManager.gameResponse != null && GameManager_1.GameManager.gameResponse.balance != null) {\r\n\t                    var totalRealBalance = DataManager_1.DataManager.GameRoundClosed ? real : parseFloat(neo_common_1.NumberUtils.add(real, win));\r\n\t                    var totalBalance = DataManager_1.DataManager.GameRoundClosed ? total : parseFloat(neo_common_1.NumberUtils.add(total, win));\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceBonus, bonus.toString());\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceReal, totalRealBalance.toString());\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceTotal, totalBalance.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus, bonus.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal, real.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal, totalBalance.toString());\r\n\t                }\r\n\t            }\r\n\t            else if (!AppContext_1.AppContext.gameDefinition.Gamble && !DataManager_1.DataManager.Collectable) {\r\n\t                if (GameManager_1.GameManager.gameResponse != null && GameManager_1.GameManager.gameResponse.balance != null) {\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceBonus, bonus.toString());\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceReal, real.toString());\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceTotal, total.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus, bonus.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal, real.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal, total.toString());\r\n\t                }\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (denom != null && win != null) {\r\n\t            winDenom = parseFloat(neo_common_1.NumberUtils.devide(win, denom));\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            if (bonus != null && bonus > 0 && bonus >= bet) {\r\n\t                ModuleManager_1.ModuleManager.changeBetColor(true);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus, neo_common_1.NumberUtils.subtract(bonus, bet));\r\n\t            }\r\n\t            else {\r\n\t                ModuleManager_1.ModuleManager.changeBetColor();\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal, neo_common_1.NumberUtils.subtract(real, bet));\r\n\t                if (denom != null && betDenom != null) {\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceRealDenom, neo_common_1.NumberUtils.subtract(realDenom, betDenom));\r\n\t                }\r\n\t            }\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal, neo_common_1.NumberUtils.subtract(total, bet));\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceTotal, neo_common_1.NumberUtils.subtract(total, bet));\r\n\t        }\r\n\t        else {\r\n\t            if (win > 0) {\r\n\t                if (bonus != null && bonus > 0 && bonus >= bet) {\r\n\t                    ModuleManager_1.ModuleManager.changeBetColor(true);\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus, neo_common_1.NumberUtils.subtract(bonus, bet));\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal, neo_common_1.NumberUtils.add(real, win));\r\n\t                    if (denom != null && winDenom != null) {\r\n\t                        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceRealDenom, neo_common_1.NumberUtils.add(realDenom, winDenom));\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    ModuleManager_1.ModuleManager.changeBetColor();\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal, neo_common_1.NumberUtils.add(neo_common_1.NumberUtils.subtract(real, bet), win));\r\n\t                    if (denom != null && winDenom != null && betDenom != null) {\r\n\t                        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceRealDenom, neo_common_1.NumberUtils.add(neo_common_1.NumberUtils.subtract(realDenom, betDenom), winDenom));\r\n\t                    }\r\n\t                }\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal, neo_common_1.NumberUtils.add(neo_common_1.NumberUtils.subtract(total, bet), win));\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceTotal, neo_common_1.NumberUtils.add(neo_common_1.NumberUtils.subtract(total, bet), win));\r\n\t            }\r\n\t            else {\r\n\t                if (bonus != null && bonus > 0 && bonus >= bet) {\r\n\t                    ModuleManager_1.ModuleManager.changeBetColor(true);\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus, neo_common_1.NumberUtils.subtract(bonus, bet));\r\n\t                }\r\n\t                else {\r\n\t                    ModuleManager_1.ModuleManager.changeBetColor();\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal, neo_common_1.NumberUtils.subtract(real, bet));\r\n\t                    if (denom != null && betDenom != null) {\r\n\t                        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceRealDenom, neo_common_1.NumberUtils.subtract(realDenom, betDenom));\r\n\t                    }\r\n\t                }\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal, neo_common_1.NumberUtils.subtract(total, bet));\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceTotal, neo_common_1.NumberUtils.subtract(total, bet));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BalanceManager.hasCredit = function (maxBet, onSpin) {\r\n\t        if (maxBet === void 0) { maxBet = false; }\r\n\t        if (onSpin === void 0) { onSpin = false; }\r\n\t        var bonus = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceBonus));\r\n\t        var real = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceReal));\r\n\t        var win = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataTotalWin));\r\n\t        var bet = BetManager_1.BetManager.Bet;\r\n\t        var canPlay = true;\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            win = 0;\r\n\t        }\r\n\t        if (bonus != null && bonus > 0) {\r\n\t            if (bonus >= bet) {\r\n\t                ModuleManager_1.ModuleManager.changeBetColor(true);\r\n\t                return true;\r\n\t            }\r\n\t            else {\r\n\t                ModuleManager_1.ModuleManager.changeBetColor();\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.inFrb) {\r\n\t            if (AppContext_1.AppContext.current) {\r\n\t                AppContext_1.AppContext.current.closeDialog();\r\n\t            }\r\n\t            if (CashierDialog_1.CashierDialog.opened) {\r\n\t                CashierDialog_1.CashierDialog.onClose();\r\n\t            }\r\n\t            if (onSpin) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t            }\r\n\t            canPlay = true;\r\n\t        }\r\n\t        else if (real <= 0 || real < bet) {\r\n\t            var credit = parseFloat(neo_common_1.NumberUtils.add(real, win));\r\n\t            if (credit > 0 && credit >= bet) {\r\n\t                if (AppContext_1.AppContext.current) {\r\n\t                    AppContext_1.AppContext.current.closeDialog();\r\n\t                }\r\n\t                if (CashierDialog_1.CashierDialog.opened) {\r\n\t                    CashierDialog_1.CashierDialog.onClose();\r\n\t                }\r\n\t                if (onSpin) {\r\n\t                    FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t                }\r\n\t                canPlay = true;\r\n\t            }\r\n\t            else {\r\n\t                if (AppContext_1.AppContext.current && onSpin) {\r\n\t                    ModuleManager_1.ModuleManager.collect(GameModules.Base);\r\n\t                    if (AppContext_1.AppContext.gameConfiguration.ShowCashierMessage) {\r\n\t                        CashierDialog_1.CashierDialog.openDialog();\r\n\t                    }\r\n\t                    else {\r\n\t                        AppContext_1.AppContext.current.showDialog(Languages_1.Languages.getRid(\"NOT_ENOUGH_CREDIT\"), false);\r\n\t                    }\r\n\t                    neo_games_1.Platforms.Platforms.clientError(\"NOT_ENOUGH_CREDIT\", Languages_1.Languages.getRid(\"NOT_ENOUGH_CREDIT\"));\r\n\t                    GameManager_1.GameManager.requestSend = false;\r\n\t                }\r\n\t                canPlay = false;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (AppContext_1.AppContext.current) {\r\n\t                AppContext_1.AppContext.current.closeDialog();\r\n\t            }\r\n\t            if (CashierDialog_1.CashierDialog.opened) {\r\n\t                CashierDialog_1.CashierDialog.onClose();\r\n\t            }\r\n\t            if (onSpin) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t            }\r\n\t            canPlay = true;\r\n\t        }\r\n\t        return canPlay;\r\n\t    };\r\n\t    BalanceManager.poolingBalance = function () {\r\n\t        if (AppContext_1.AppContext != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration.PollCredit > 0 &&\r\n\t            DataManager_1.DataManager.GameRoundClosed) {\r\n\t            var balance = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceReal));\r\n\t            if (balance != null && BetManager_1.BetManager.Bet != null && balance >= BetManager_1.BetManager.Bet) {\r\n\t                return;\r\n\t            }\r\n\t            else {\r\n\t                if (!BalanceManager._poolBalance) {\r\n\t                    setTimeout(function () {\r\n\t                        BalanceManager.refreshBalance();\r\n\t                    }, AppContext_1.AppContext.gameConfiguration.PollCredit);\r\n\t                    BalanceManager._poolBalance = true;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BalanceManager.refreshBalance = function (forced) {\r\n\t        if (forced === void 0) { forced = false; }\r\n\t        if (GameManager_1.GameManager.gameClient) {\r\n\t            GameManager_1.GameManager.gameClient.balance().then(function (response) {\r\n\t                BalanceManager.balanceReceived(response, forced);\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    BalanceManager.balanceReceived = function (response, forced) {\r\n\t        if (forced === void 0) { forced = false; }\r\n\t        BalanceManager._poolBalance = false;\r\n\t        var bonus = response.bonus.toString();\r\n\t        var real = response.real.toString();\r\n\t        var total = neo_common_1.NumberUtils.add(response.bonus, response.real);\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceBonus, bonus);\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceReal, real);\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceTotal, total);\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceRealDenom, parseInt(neo_common_1.NumberUtils.devide(response.real, BetManager_1.BetManager.CoinSize)).toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus, bonus);\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal, real);\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal, total);\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceRealDenom, parseInt(neo_common_1.NumberUtils.devide(response.real, BetManager_1.BetManager.CoinSize)).toString());\r\n\t        }\r\n\t        BalanceManager.poolingBalance();\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: parseFloat(total), forced: forced });\r\n\t    };\r\n\t    BalanceManager.recalculateDenomBalance = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBalanceRealDenom, parseInt(neo_common_1.NumberUtils.devide(parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceReal)), BetManager_1.BetManager.CoinSize)).toString());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceRealDenom, parseInt(neo_common_1.NumberUtils.devide(parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceReal)), BetManager_1.BetManager.CoinSize)).toString());\r\n\t        }\r\n\t    };\r\n\t    BalanceManager.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"BalanceManager\", s);\r\n\t        }\r\n\t    };\r\n\t    BalanceManager._poolBalance = false;\r\n\t    return BalanceManager;\r\n\t}());\r\n\texports.BalanceManager = BalanceManager;\r\n\n\n/***/ },\n/* 34 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar Dialog_1 = __webpack_require__(35);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar CashierDialog = (function () {\r\n\t    function CashierDialog() {\r\n\t    }\r\n\t    CashierDialog.openDialog = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"CashierDialog\", \"openDialog()\");\r\n\t        }\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"cashier\", true);\r\n\t        CashierDialog.opened = true;\r\n\t        CashierDialog._element = document.getElementById(\"cashierDialog\");\r\n\t        if (CashierDialog._element != null) {\r\n\t            CashierDialog._cashierButton = document.getElementById(\"cashierButton\");\r\n\t            if (CashierDialog._cashierButton != null) {\r\n\t                CashierDialog._cashierButton.onclick = CashierDialog.onCashier;\r\n\t            }\r\n\t            CashierDialog._refreshButton = document.getElementById(\"refreshButton\");\r\n\t            if (CashierDialog._refreshButton != null) {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.CashierMessageShowRefreshBalanceButton) {\r\n\t                    CashierDialog._refreshButton.onclick = CashierDialog.onRefreshBalance;\r\n\t                }\r\n\t                else {\r\n\t                    CashierDialog._refreshButton.style.display = \"none\";\r\n\t                }\r\n\t            }\r\n\t            CashierDialog._closeButton = document.getElementById(\"cashierCloseButton\");\r\n\t            if (CashierDialog._closeButton != null) {\r\n\t                CashierDialog._closeButton.onclick = CashierDialog.onClose;\r\n\t            }\r\n\t            CashierDialog._closeButtonIcon = document.getElementById(\"cashierCloseButtonIcon\");\r\n\t            if (CashierDialog._closeButtonIcon != null) {\r\n\t                CashierDialog._closeButtonIcon.onclick = CashierDialog.onClose;\r\n\t            }\r\n\t            if (CashierDialog._element.classList.contains(Dialog_1.Dialog.DisabledClass)) {\r\n\t                CashierDialog._element.classList.remove(Dialog_1.Dialog.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    CashierDialog.onCashier = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"CashierDialog\", \"onCashier()\");\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.CashierUrl)) {\r\n\t            neo_games_1.Platforms.Platforms.gotoCasier({\r\n\t                reason: \"InsufficientFunds\",\r\n\t                target: AppContext_1.AppContext.gameConfiguration.CashierUrl,\r\n\t            });\r\n\t            if (neo_games_1.Platforms.Platforms.handleOpenCashierPage) {\r\n\t                return;\r\n\t            }\r\n\t            window.open(AppContext_1.AppContext.gameConfiguration.CashierUrl, \"_self\");\r\n\t        }\r\n\t        else {\r\n\t            neo_games_1.Platforms.Platforms.gotoCasier();\r\n\t        }\r\n\t    };\r\n\t    CashierDialog.onRefreshBalance = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"CashierDialog\", \"onRefreshBalance()\");\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        BalanceManager_1.BalanceManager.refreshBalance();\r\n\t    };\r\n\t    CashierDialog.onClose = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"CashierDialog\", \"onClose()\");\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        CashierDialog.opened = false;\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"cashier\", false);\r\n\t        if (!CashierDialog._element.classList.contains(Dialog_1.Dialog.DisabledClass)) {\r\n\t            CashierDialog._element.classList.add(Dialog_1.Dialog.DisabledClass);\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.id != null || FreeRoundBonus_1.FreeRoundBonus.otherOfferes.length > 0) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t        }\r\n\t    };\r\n\t    CashierDialog.opened = false;\r\n\t    return CashierDialog;\r\n\t}());\r\n\texports.CashierDialog = CashierDialog;\r\n\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar BaseModel_1 = __webpack_require__(45);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\r\n\tvar Dialog = (function () {\r\n\t    function Dialog(app) {\r\n\t        this._app = app;\r\n\t        this._element = document.getElementById(\"dialog\");\r\n\t        this._elementHeading = document.getElementById(\"dialogHeading\");\r\n\t        this._elementCode = document.getElementById(\"errorCode\");\r\n\t        this._elementText = document.getElementById(\"dialogText\");\r\n\t        this._elementButton = document.getElementById(\"dialogButton\");\r\n\t        this._elementButtonReload = document.getElementById(\"dialogReloadButton\");\r\n\t        this._elementCustomButtons = document.getElementById(\"dialogCustomButtons\");\r\n\t        this._elementInfo = document.getElementById(\"dialogInfo\");\r\n\t        this._elementError = document.getElementById(\"dialogError\");\r\n\t        if (this._element != null && !this._element.classList.contains(Dialog.DisabledClass)) {\r\n\t            this._element.classList.add(Dialog.DisabledClass);\r\n\t        }\r\n\t        if (this._elementInfo != null) {\r\n\t            this._elementInfo.style.display = \"none\";\r\n\t        }\r\n\t        if (this._elementError != null) {\r\n\t            this._elementError.style.display = \"none\";\r\n\t        }\r\n\t        this._timer = FrameTimer_1.CreateFrameTimer(\"dialogTimer\");\r\n\t        this._timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.closeDialog.bind(this));\r\n\t        this.onClickError = this.onClickError.bind(this);\r\n\t        this.onClickRefresh = this.onClickRefresh.bind(this);\r\n\t        this._customData = null;\r\n\t    }\r\n\t    Dialog.prototype.openDialog = function (text, code, errorId, error, special, gameRoundId, customData) {\r\n\t        if (code === void 0) { code = \"\"; }\r\n\t        if (errorId === void 0) { errorId = \"\"; }\r\n\t        if (error === void 0) { error = false; }\r\n\t        if (special === void 0) { special = false; }\r\n\t        if (gameRoundId === void 0) { gameRoundId = \"0\"; }\r\n\t        if (customData === void 0) { customData = null; }\r\n\t        this._customData = customData;\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Dialog\", (\"openDialog('\" + text + \"', code: '\" + code + \"', errorId: '\" + errorId + \"', error: \" + error + \", special: \" + special + \", \") +\r\n\t                (\"gameRoundId: \" + gameRoundId + \", customData: \" + (customData ? JSON.stringify(customData) : \"\") + \")\"));\r\n\t        }\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"default\", true);\r\n\t        if (this._element != null) {\r\n\t            var ultraSpecial = !neo_common_1.Utils.isNullOrUndefined(this._customData) &&\r\n\t                !neo_common_1.Utils.isNullOrUndefined(this._customData.data) &&\r\n\t                !neo_common_1.Utils.isNullOrUndefined(this._customData.data.ultraSpecial) &&\r\n\t                this._customData.data.ultraSpecial === true;\r\n\t            if (this._elementText != null) {\r\n\t                this._elementText.innerHTML = text;\r\n\t            }\r\n\t            if (this._elementCode != null) {\r\n\t                if (code !== \"\" && this._elementCode != null && !special) {\r\n\t                    if (errorId === \"\") {\r\n\t                        errorId = \"0\";\r\n\t                    }\r\n\t                    var errorString = gameRoundId + \"-\" + errorId;\r\n\t                    code = \"CODE_\" + code.replace(\"-\", \"_\");\r\n\t                    var errorValue = Languages_1.Languages.getRid(code, errorString);\r\n\t                    this._elementCode.textContent = errorValue.replace(/ /g, \"\");\r\n\t                    this._elementCode.style.display = \"block\";\r\n\t                }\r\n\t                else {\r\n\t                    this._elementCode.style.display = \"none\";\r\n\t                }\r\n\t            }\r\n\t            if (error && !ultraSpecial) {\r\n\t                if (this._element.classList.contains(Dialog.InfoClass)) {\r\n\t                    this._element.classList.remove(Dialog.InfoClass);\r\n\t                }\r\n\t                if (!this._element.classList.contains(Dialog.ErrorClass)) {\r\n\t                    this._element.classList.add(Dialog.ErrorClass);\r\n\t                }\r\n\t                if (this._elementInfo != null) {\r\n\t                    this._elementInfo.style.display = \"none\";\r\n\t                }\r\n\t                if (this._elementError != null) {\r\n\t                    this._elementError.style.display = \"block\";\r\n\t                }\r\n\t                if (this._elementHeading != null) {\r\n\t                    this._elementHeading.textContent = Languages_1.Languages.getRid(\"DLG_ERROR\");\r\n\t                }\r\n\t                if (this._elementButtonReload != null) {\r\n\t                    this._elementButtonReload.style.display = \"none\";\r\n\t                }\r\n\t                if (this._elementButton != null) {\r\n\t                    this._elementButton.style.display = \"block\";\r\n\t                    this._elementButton.onclick = this.onClickError;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (!this._element.classList.contains(Dialog.InfoClass)) {\r\n\t                    this._element.classList.add(Dialog.InfoClass);\r\n\t                }\r\n\t                if (this._element.classList.contains(Dialog.ErrorClass)) {\r\n\t                    this._element.classList.remove(Dialog.ErrorClass);\r\n\t                }\r\n\t                if (this._elementInfo != null) {\r\n\t                    this._elementInfo.style.display = \"block\";\r\n\t                }\r\n\t                if (this._elementError != null) {\r\n\t                    this._elementError.style.display = \"none\";\r\n\t                }\r\n\t                if (this._elementHeading != null) {\r\n\t                    this._elementHeading.textContent = Languages_1.Languages.getRid(\"DLG_INFO\");\r\n\t                }\r\n\t                if (this._elementButton != null) {\r\n\t                    this._elementButton.style.display = \"none\";\r\n\t                }\r\n\t                if (this._elementButtonReload) {\r\n\t                    this._elementButtonReload.style.display = \"none\";\r\n\t                }\r\n\t                if (ultraSpecial) {\r\n\t                    if (this._elementCode != null) {\r\n\t                        this._elementCode.style.display = \"none\";\r\n\t                    }\r\n\t                    if (this._elementButton != null) {\r\n\t                        this._elementButton.style.display = \"block\";\r\n\t                        this._elementButton.onclick = this.onClickError;\r\n\t                    }\r\n\t                }\r\n\t                else if (special) {\r\n\t                    if (this._elementCode != null) {\r\n\t                        this._elementCode.style.display = \"none\";\r\n\t                    }\r\n\t                    if (this._elementButtonReload != null) {\r\n\t                        this._elementButtonReload.style.display = \"block\";\r\n\t                        this._elementButtonReload.onclick = this.onClickRefresh;\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (this._timer.isPlaying()) {\r\n\t                        neo_games_1.Platforms.Platforms.dialogOpened(\"default\", false);\r\n\t                    }\r\n\t                    this._timer.stop();\r\n\t                    this._timer.start(180);\r\n\t                }\r\n\t            }\r\n\t            if (!neo_common_1.Utils.isNullOrUndefined(this._customData.data) &&\r\n\t                !neo_common_1.Utils.isNullOrUndefined(this._customData.data.actions)) {\r\n\t                this.handleCustomActions(this._customData.data.actions);\r\n\t            }\r\n\t            if (this._element.classList.contains(Dialog.DisabledClass)) {\r\n\t                this._element.classList.remove(Dialog.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.errorGroup(\"Dialog\", \"ERROR no dialog\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Dialog.prototype.closeDialog = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Dialog\", \"closeDialog()\");\r\n\t        }\r\n\t        this._timer.stop();\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"default\", false);\r\n\t        if (!this._element.classList.contains(Dialog.DisabledClass)) {\r\n\t            this._element.classList.add(Dialog.DisabledClass);\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.id != null || FreeRoundBonus_1.FreeRoundBonus.otherOfferes.length > 0) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t        }\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.setOpenedStatus();\r\n\t    };\r\n\t    Dialog.prototype.onClickError = function () {\r\n\t        var clientHost = AppContext_1.AppContext.clientHost;\r\n\t        if (clientHost) {\r\n\t            var request = null;\r\n\t            if (!neo_common_1.Utils.isNullOrUndefined(this._customData)) {\r\n\t                var dialogRequest = this._customData;\r\n\t                request = dialogRequest.error;\r\n\t                request.reason = dialogRequest.error.errorMessageTitle;\r\n\t            }\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"Dialog\", \"onClickError -> calling client host '\" + AppContext_1.AppContext.gameDefinition.ClientHostType + \".endGame()', request: \", request);\r\n\t            }\r\n\t            neo_games_1.Platforms.Platforms.exitHandler = \"dialog\";\r\n\t            neo_games_1.Platforms.Platforms.gameClosing();\r\n\t            clientHost.endGame(this._app, request);\r\n\t        }\r\n\t    };\r\n\t    Dialog.prototype.onClickRefresh = function () {\r\n\t        neo_games_1.Platforms.Platforms.gameReloading();\r\n\t        if (neo_games_1.Platforms.Platforms.handleGameReload) {\r\n\t            return;\r\n\t        }\r\n\t        window.location.reload(true);\r\n\t    };\r\n\t    Dialog.prototype.handleCustomActions = function (actions) {\r\n\t        if (actions.length > 0) {\r\n\t            this.hideAllButtons();\r\n\t            var buttons = [];\r\n\t            var imageWidthCorrection = 0.82;\r\n\t            var baseWidth = 0;\r\n\t            var baseFontSize = 0;\r\n\t            var maxWidth = 0;\r\n\t            for (var i = 0; i < actions.length; i++) {\r\n\t                var currentAction = actions[i];\r\n\t                if (currentAction && currentAction[\"type\"]) {\r\n\t                    var button = document.createElement(\"div\");\r\n\t                    button.classList.add(\"dialogBtn\", \"customDialogBtn\");\r\n\t                    this._elementCustomButtons.appendChild(button);\r\n\t                    baseWidth =\r\n\t                        parseInt(window.getComputedStyle(button).getPropertyValue(\"width\")) * imageWidthCorrection;\r\n\t                    baseFontSize = parseInt(window.getComputedStyle(button).getPropertyValue(\"font-size\"));\r\n\t                    var currentWidth = 0;\r\n\t                    if (currentAction[\"text\"]) {\r\n\t                        currentWidth = this.getButtonTextWidth(currentAction[\"text\"], baseFontSize);\r\n\t                        button.textContent = currentAction[\"text\"];\r\n\t                    }\r\n\t                    if (currentWidth > maxWidth) {\r\n\t                        maxWidth = currentWidth;\r\n\t                    }\r\n\t                    switch (currentAction[\"type\"]) {\r\n\t                        case \"continue\":\r\n\t                            button.onclick = this.onClickContinue.bind(this);\r\n\t                            break;\r\n\t                        case \"exit\":\r\n\t                            button.onclick = this.onClickClose;\r\n\t                            break;\r\n\t                        case \"history\":\r\n\t                            button.onclick = this.onClickHistory;\r\n\t                            break;\r\n\t                        case \"reload\":\r\n\t                            button.onclick = this.onClickReload;\r\n\t                            break;\r\n\t                        case \"restore\":\r\n\t                            button.onclick = this.onClickRestore.bind(this, currentAction[\"customData\"]);\r\n\t                            break;\r\n\t                    }\r\n\t                    buttons.push(button);\r\n\t                }\r\n\t            }\r\n\t            if (maxWidth > baseWidth) {\r\n\t                var newFontSize = Math.round(baseFontSize * (baseWidth / maxWidth));\r\n\t                for (var i = 0; i < buttons.length; i++) {\r\n\t                    buttons[i].style.fontSize = newFontSize + \"px\";\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Dialog.prototype.getButtonTextWidth = function (text, fontSize) {\r\n\t        var elem = document.createElement(\"span\");\r\n\t        elem.textContent = text;\r\n\t        elem.style.fontSize = fontSize + \"px\";\r\n\t        document.body.appendChild(elem);\r\n\t        var width = elem.offsetWidth;\r\n\t        document.body.removeChild(elem);\r\n\t        return width;\r\n\t    };\r\n\t    Dialog.prototype.hideAllButtons = function () {\r\n\t        if (this._elementButton != null) {\r\n\t            this._elementButton.style.display = \"none\";\r\n\t        }\r\n\t        if (this._elementButtonReload != null) {\r\n\t            this._elementButtonReload.style.display = \"none\";\r\n\t        }\r\n\t        while (this._elementCustomButtons.firstChild) {\r\n\t            this._elementCustomButtons.removeChild(this._elementCustomButtons.firstChild);\r\n\t        }\r\n\t    };\r\n\t    Dialog.prototype.onClickClose = function () {\r\n\t        neo_games_1.Platforms.Platforms.exitHandler = \"dialog\";\r\n\t        GameApp_1.GameApp.exit();\r\n\t    };\r\n\t    Dialog.prototype.onClickContinue = function () {\r\n\t        this.closeDialog();\r\n\t        BaseModel_1.BaseModel.spinContinue();\r\n\t    };\r\n\t    Dialog.prototype.onClickHistory = function () {\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.HistoryUrl)) {\r\n\t            GameApp_1.GameApp.openGameRoundHistoryFromUrl();\r\n\t        }\r\n\t        else if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n\t            GameApp_1.GameApp.openGameRoundHistoryFromUrl();\r\n\t        }\r\n\t        else {\r\n\t            GameApp_1.GameApp.openGameRoundHistory();\r\n\t        }\r\n\t    };\r\n\t    Dialog.prototype.onClickReload = function () {\r\n\t        neo_games_1.Platforms.Platforms.gameReloading();\r\n\t        if (neo_games_1.Platforms.Platforms.handleGameReload) {\r\n\t            return;\r\n\t        }\r\n\t        window.location.reload(true);\r\n\t    };\r\n\t    Dialog.prototype.onClickRestore = function (module) {\r\n\t        this.closeDialog();\r\n\t        ModuleManager_1.ModuleManager.restoreGameRound(module);\r\n\t    };\r\n\t    Dialog.DisabledClass = \"_disabled\";\r\n\t    Dialog.InfoClass = \"info\";\r\n\t    Dialog.ErrorClass = \"error\";\r\n\t    return Dialog;\r\n\t}());\r\n\texports.Dialog = Dialog;\r\n\n\n/***/ },\n/* 36 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar FreeRoundBonusIcon_1 = __webpack_require__(42);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar ResponsibleDialog1_1 = __webpack_require__(43);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar RetentionPanel_1 = __webpack_require__(40);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar GameStatuses = neo_games_1.Communication.Game.GameModuleStatus;\r\n\tvar FreeRoundBonus = (function () {\r\n\t    function FreeRoundBonus() {\r\n\t    }\r\n\t    FreeRoundBonus.initialize = function (gameClient) {\r\n\t        if (!FreeRoundBonus.wasInitialized && gameClient != null) {\r\n\t            gameClient\r\n\t                .sendFreeRoundsOffersRequest(GameApp_1.GameApp.key)\r\n\t                .then(function (response) {\r\n\t                FreeRoundBonus.getCurrentOfferReceived(response);\r\n\t            })\r\n\t                .catch(function (err) {\r\n\t                FreeRoundBonus.wasInitialized = true;\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.activateOffer = function () {\r\n\t        if (FreeRoundBonus.status === \"active\") {\r\n\t            FreeRoundBonus.inFrb = true;\r\n\t            neo_games_1.Platforms.Platforms.featureStarted({ type: \"FRB\" });\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"active\");\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            if (GameApp_1.GameApp.gameClient != null && FreeRoundBonus.id != null) {\r\n\t                GameApp_1.GameApp.gameClient.setOfferId(FreeRoundBonus.id);\r\n\t            }\r\n\t            GameManager_1.GameManager.softInit();\r\n\t        }\r\n\t        else {\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            if (GameApp_1.GameApp.gameClient != null && FreeRoundBonus.id != null) {\r\n\t                GameApp_1.GameApp.gameClient.setOfferId(FreeRoundBonus.id);\r\n\t                GameApp_1.GameApp.gameClient\r\n\t                    .sendFreeRoundsActivateOfferRequest(GameApp_1.GameApp.key, FreeRoundBonus.id)\r\n\t                    .then(function (response) {\r\n\t                    FreeRoundBonus.activateOfferReceived(response);\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.declineOffer = function () {\r\n\t        if (GameApp_1.GameApp.gameClient != null && FreeRoundBonus.id != null) {\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.hideDialog();\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.hideAllIcons();\r\n\t            GameApp_1.GameApp.gameClient\r\n\t                .sendFreeRoundsDeclineOfferRequest(GameApp_1.GameApp.key, FreeRoundBonus.id)\r\n\t                .then(function (response) {\r\n\t                FreeRoundBonus.declineOfferReceived(response);\r\n\t                FreeRoundBonus.refreshCurrentOffers();\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.initializeFreeRounds = function () {\r\n\t        FreeRoundBonusDialog_1.FreeRoundBonusDialog.initialize();\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.initialize();\r\n\t        if (GameApp_1.GameApp.gameClient != null && FreeRoundBonus.id != null && FreeRoundBonus.status === \"active\") {\r\n\t            GameApp_1.GameApp.gameClient.setOfferId(FreeRoundBonus.id);\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"active\");\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"active\");\r\n\t            FreeRoundBonus.inFrb = true;\r\n\t            neo_games_1.Platforms.Platforms.featureInit({ type: \"FRB\" });\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.showFreeRounds = function () {\r\n\t        if (FreeRoundBonus.id != null) {\r\n\t            FreeRoundBonus.countDown();\r\n\t            if (FreeRoundBonus.status !== \"active\") {\r\n\t                if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                    FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"new\");\r\n\t                    ModuleManager_1.ModuleManager.disableBase();\r\n\t                    FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"new\");\r\n\t                    FreeRoundBonus.enableUi();\r\n\t                }\r\n\t                else {\r\n\t                    if (!FreeRoundBonus.playing) {\r\n\t                        FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"new\");\r\n\t                        FreeRoundBonus.disableUi();\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t                    FreeRoundBonus.frbSpin();\r\n\t                    FreeRoundBonusDialog_1.FreeRoundBonusDialog.hideDialog();\r\n\t                    FreeRoundBonus.disableUi();\r\n\t                }\r\n\t                else {\r\n\t                    ModuleManager_1.ModuleManager.disableBase();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            FreeRoundBonus.openOther();\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.reopenFreeRounds = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && FreeRoundBonus.isLastFrb) {\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"active\");\r\n\t            FreeRoundBonus.disableUi();\r\n\t            GameApp_1.GameApp.gameClient.setOfferId(null);\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"end\");\r\n\t            FreeRoundBonus.endMsgDisplayed = true;\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            return;\r\n\t        }\r\n\t        if (FreeRoundBonus.status === \"new\" && FreeRoundBonus.state === \"new\") {\r\n\t            BetHigherThanMinDialog_1.BetHigherThanMinDialog.hideDialog();\r\n\t            BetHigherThanMinDialog_1.BetHigherThanMinDialog.closeDialog();\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"new\");\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"new\");\r\n\t            FreeRoundBonus.enableUi();\r\n\t        }\r\n\t        if (FreeRoundBonus.state === \"active\") {\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"active\");\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"active\");\r\n\t            FreeRoundBonus.enableUi();\r\n\t        }\r\n\t        if (FreeRoundBonus.state === \"end\") {\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"active\");\r\n\t            FreeRoundBonus.disableUi();\r\n\t            GameApp_1.GameApp.gameClient.setOfferId(null);\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"end\");\r\n\t            FreeRoundBonus.endMsgDisplayed = true;\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t        }\r\n\t        if (FreeRoundBonus.state === \"other\") {\r\n\t            if (FreeRoundBonus.validTo != null) {\r\n\t                var countDownDate = new Date(FreeRoundBonus.validTo + \"+00:00\").getTime();\r\n\t                var now = new Date().getTime();\r\n\t                var distance = countDownDate - now;\r\n\t                if (distance > 0) {\r\n\t                    FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"other\");\r\n\t                    ModuleManager_1.ModuleManager.disableBase();\r\n\t                    FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"new\");\r\n\t                    FreeRoundBonus.enableUi();\r\n\t                }\r\n\t            }\r\n\t            else if (FreeRoundBonusDialog_1.FreeRoundBonusDialog.revalidateOtherGames()) {\r\n\t                FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"other\");\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"new\");\r\n\t                FreeRoundBonus.enableUi();\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus.state === \"\") {\r\n\t            FreeRoundBonus.enableUi();\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.openOther = function () {\r\n\t        if (FreeRoundBonus.id == null && FreeRoundBonusDialog_1.FreeRoundBonusDialog.revalidateOtherGames()) {\r\n\t            FreeRoundBonus.countDownOther();\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"new\");\r\n\t                FreeRoundBonus.enableUi();\r\n\t            }\r\n\t            else {\r\n\t                FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"new\");\r\n\t                FreeRoundBonus.disableUi();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.endFreeRounds = function () {\r\n\t        if (FreeRoundBonus.id != null) {\r\n\t            DataManager_1.DataManager.Collectable = true;\r\n\t            FreeRoundBonus.disableUi();\r\n\t            if (GameManager_1.GameManager.gameResponse[\"freeRounds\"] != null) {\r\n\t                if (GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\r\n\t                    FreeRoundBonus.totalWin = GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\r\n\t                }\r\n\t                if (GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"status\"] != null) {\r\n\t                    if (GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"status\"] === \"pending\") {\r\n\t                        FreeRoundBonus.status = GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"status\"];\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            GameApp_1.GameApp.gameClient.setOfferId(null);\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"end\");\r\n\t            FreeRoundBonus.endMsgDisplayed = true;\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.finishFreeRounds = function () {\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.hideAllIcons();\r\n\t        FreeRoundBonus.id = null;\r\n\t        FreeRoundBonus.inFrb = false;\r\n\t        neo_games_1.Platforms.Platforms.featureFinished({ type: \"FRB\" });\r\n\t        FreeRoundBonus.isLastFrb = false;\r\n\t        FreeRoundBonus.endMsgDisplayed = false;\r\n\t        FreeRoundBonus.wasInitialized = false;\r\n\t        FreeRoundBonus.softInit = false;\r\n\t        FreeRoundBonus.remainingFrbCount = null;\r\n\t        FreeRoundBonus.roundsAssigned = 0;\r\n\t        FreeRoundBonus.roundsPlayed = 0;\r\n\t        FreeRoundBonus.roundsStarted = 0;\r\n\t        FreeRoundBonus.hasFeature = false;\r\n\t        FreeRoundBonus.featureName = null;\r\n\t        FreeRoundBonus.status = null;\r\n\t        if (FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (FreeRoundBonus.totalWin != null && FreeRoundBonus.totalWin > 0) {\r\n\t                PlayList_1.PlayList.play(\"SND_BaseCollect\");\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                ModuleManager_1.ModuleManager.resetSceneAsOnCollect(GameModules.Base);\r\n\t            }\r\n\t        }\r\n\t        FreeRoundBonus.refreshCurrentOffers();\r\n\t    };\r\n\t    FreeRoundBonus.refreshCurrentOffers = function () {\r\n\t        if (GameApp_1.GameApp.gameClient != null) {\r\n\t            GameApp_1.GameApp.gameClient\r\n\t                .sendFreeRoundsOffersRequest(GameApp_1.GameApp.key)\r\n\t                .then(function (response) {\r\n\t                FreeRoundBonus.getCurrentOfferReceived(response);\r\n\t                if (FreeRoundBonus.id != null) {\r\n\t                    FreeRoundBonus.softInit = true;\r\n\t                    if (FreeRoundBonus.status === \"active\") {\r\n\t                        FreeRoundBonus.initializeFreeRounds();\r\n\t                    }\r\n\t                    else {\r\n\t                        FreeRoundBonus.showFreeRounds();\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    GameManager_1.GameManager.softInit();\r\n\t                    FreeRoundBonus.disableUi();\r\n\t                    if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                        GameManager_1.GameManager.canExit();\r\n\t                    }\r\n\t                }\r\n\t                return null;\r\n\t            })\r\n\t                .catch(function (err) {\r\n\t                FreeRoundBonus.wasInitialized = true;\r\n\t                GameManager_1.GameManager.softInit();\r\n\t                FreeRoundBonus.disableUi();\r\n\t                if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                    GameManager_1.GameManager.canExit();\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.expiredFreeRounds = function () {\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.hideAllIcons();\r\n\t        FreeRoundBonus.id = null;\r\n\t        FreeRoundBonus.inFrb = false;\r\n\t        neo_games_1.Platforms.Platforms.featureFinished({ type: \"FRB\" });\r\n\t        FreeRoundBonus.isLastFrb = false;\r\n\t        FreeRoundBonus.endMsgDisplayed = false;\r\n\t        FreeRoundBonus.softInit = false;\r\n\t        FreeRoundBonus.remainingFrbCount = null;\r\n\t        FreeRoundBonus.roundsAssigned = 0;\r\n\t        FreeRoundBonus.roundsPlayed = 0;\r\n\t        FreeRoundBonus.roundsStarted = 0;\r\n\t        FreeRoundBonus.hasFeature = false;\r\n\t        FreeRoundBonus.featureName = null;\r\n\t        FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"expired\");\r\n\t    };\r\n\t    FreeRoundBonus.getCurrentOfferReceived = function (response) {\r\n\t        FreeRoundBonus.totalWin = 0;\r\n\t        FreeRoundBonus.termsUrl = null;\r\n\t        if (response != null) {\r\n\t            FreeRoundBonus.wasInitialized = true;\r\n\t            if (response.currentOffer != null) {\r\n\t                if (response.currentOffer.id != null)\r\n\t                    FreeRoundBonus.id = response.currentOffer.id;\r\n\t                if (response.currentOffer.termsUrl != null)\r\n\t                    FreeRoundBonus.termsUrl = response.currentOffer.termsUrl;\r\n\t                if (response.currentOffer.roundsAssigned != null)\r\n\t                    FreeRoundBonus.roundsAssigned = response.currentOffer.roundsAssigned;\r\n\t                if (response.currentOffer.roundsStarted != null)\r\n\t                    FreeRoundBonus.roundsStarted = response.currentOffer.roundsStarted;\r\n\t                if (response.currentOffer.roundsPlayed != null)\r\n\t                    FreeRoundBonus.roundsPlayed = response.currentOffer.roundsPlayed;\r\n\t                if (response.currentOffer.remainingCount != null)\r\n\t                    FreeRoundBonus.remainingFrbCount = response.currentOffer.remainingCount;\r\n\t                if (response.currentOffer.playing != null)\r\n\t                    FreeRoundBonus.playing = response.currentOffer.playing;\r\n\t                if (response.currentOffer.status != null)\r\n\t                    FreeRoundBonus.status = response.currentOffer.status;\r\n\t                if (response.currentOffer.winType != null)\r\n\t                    FreeRoundBonus.winType = response.currentOffer.winType;\r\n\t                if (response.currentOffer.validTo != null)\r\n\t                    FreeRoundBonus.validTo = response.currentOffer.validTo;\r\n\t                if (response.currentOffer.winPayMethod != null)\r\n\t                    FreeRoundBonus.winPayMethod = response.currentOffer.winPayMethod;\r\n\t                if (response.currentOffer.collectPartial != null)\r\n\t                    FreeRoundBonus.collectPartial = response.currentOffer.collectPartial;\r\n\t                if (response.currentOffer.hasBuyFeature != null)\r\n\t                    FreeRoundBonus.hasFeature = response.currentOffer.hasBuyFeature;\r\n\t                if (response.currentOffer.buyFeatureName != null)\r\n\t                    FreeRoundBonus.featureName = response.currentOffer.buyFeatureName;\r\n\t                if (FreeRoundBonus.remainingFrbCount == null) {\r\n\t                    if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\r\n\t                        FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\r\n\t                    }\r\n\t                }\r\n\t                if (FreeRoundBonus.remainingFrbCount != null && FreeRoundBonus.remainingFrbCount === 0) {\r\n\t                    FreeRoundBonus.isLastFrb = true;\r\n\t                }\r\n\t            }\r\n\t            FreeRoundBonus.otherOfferes = [];\r\n\t            if (response.otherOffers != null) {\r\n\t                FreeRoundBonus.otherOfferes = response.otherOffers;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.activateOfferReceived = function (response) {\r\n\t        FreeRoundBonus.inFrb = true;\r\n\t        neo_games_1.Platforms.Platforms.featureStarted({ type: \"FRB\" });\r\n\t        FreeRoundBonus.status = \"active\";\r\n\t        GameManager_1.GameManager.softInit();\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.showIcon(\"active\");\r\n\t    };\r\n\t    FreeRoundBonus.declineOfferReceived = function (response) {\r\n\t        FreeRoundBonus.id = null;\r\n\t        FreeRoundBonus.softInit = false;\r\n\t        FreeRoundBonus.remainingFrbCount = null;\r\n\t        FreeRoundBonus.roundsAssigned = 0;\r\n\t        FreeRoundBonus.roundsPlayed = 0;\r\n\t        FreeRoundBonus.roundsStarted = 0;\r\n\t        FreeRoundBonus.hasFeature = false;\r\n\t        FreeRoundBonus.featureName = null;\r\n\t    };\r\n\t    FreeRoundBonus.valid = function () {\r\n\t        var str = \"\";\r\n\t        if (FreeRoundBonus.validTo != null) {\r\n\t            str = FreeRoundBonus.validTo;\r\n\t        }\r\n\t        return str;\r\n\t    };\r\n\t    FreeRoundBonus.assignedCount = function () {\r\n\t        var str = \"0\";\r\n\t        if (FreeRoundBonus.roundsAssigned != null) {\r\n\t            str = FreeRoundBonus.roundsAssigned.toString();\r\n\t        }\r\n\t        return str;\r\n\t    };\r\n\t    FreeRoundBonus.remainingCount = function () {\r\n\t        var str = \"0\";\r\n\t        if (FreeRoundBonus.remainingFrbCount == null) {\r\n\t            if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\r\n\t                FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus.remainingFrbCount != null) {\r\n\t            if (FreeRoundBonus.id === -1 && FreeRoundBonus.isLastFrb) {\r\n\t                str = \"0\";\r\n\t            }\r\n\t            else {\r\n\t                str = FreeRoundBonus.remainingFrbCount.toString();\r\n\t            }\r\n\t        }\r\n\t        return str;\r\n\t    };\r\n\t    FreeRoundBonus.rulesLink = function () {\r\n\t        var str = \"\";\r\n\t        if (FreeRoundBonus.termsUrl != null) {\r\n\t            str = '<a href=\"' + FreeRoundBonus.termsUrl + '\" target=\"_blank\">' + FreeRoundBonus.termsUrl + \"</a>\";\r\n\t        }\r\n\t        return str;\r\n\t    };\r\n\t    FreeRoundBonus.win = function () {\r\n\t        var str = \"\";\r\n\t        if (FreeRoundBonus.totalWin != null && FreeRoundBonus.totalWin > 0) {\r\n\t            str =\r\n\t                Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, FreeRoundBonus.totalWin.toString()) +\r\n\t                    \" \" +\r\n\t                    DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency);\r\n\t        }\r\n\t        return str;\r\n\t    };\r\n\t    FreeRoundBonus.frbSpin = function () {\r\n\t        if (FreeRoundBonus.id == null && !FreeRoundBonus.inFrb) {\r\n\t            return;\r\n\t        }\r\n\t        FreeRoundBonus.blockFrbExpiration = true;\r\n\t        if (FreeRoundBonus.inFrb) {\r\n\t            DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gameResponse[\"freeRounds\"] != null) {\r\n\t            if (GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"roundsStarted\"] != null) {\r\n\t                FreeRoundBonus.roundsStarted = GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"roundsStarted\"];\r\n\t            }\r\n\t            if (GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\r\n\t                FreeRoundBonus.totalWin = GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\r\n\t            }\r\n\t            if (GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\r\n\t                FreeRoundBonus.remainingFrbCount = GameManager_1.GameManager.gameResponse[\"freeRounds\"][\"remainingCount\"];\r\n\t            }\r\n\t            else {\r\n\t                if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\r\n\t                    FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\r\n\t        if (FreeRoundBonus.remainingFrbCount != null && FreeRoundBonus.remainingFrbCount === 0) {\r\n\t            FreeRoundBonus.isLastFrb = true;\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.countDown = function () {\r\n\t        if (FreeRoundBonus.validTo != null) {\r\n\t            var countDownDate = new Date(FreeRoundBonus.validTo + \"+00:00\").getTime();\r\n\t            var now = new Date().getTime();\r\n\t            var distance = countDownDate - now;\r\n\t            var days = Math.floor(distance / (1000 * 60 * 60 * 24));\r\n\t            var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n\t            var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n\t            var seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n\t            if (!FreeRoundBonus.blockFrbExpiration && distance < 0) {\r\n\t                FreeRoundBonus.id = null;\r\n\t                FreeRoundBonus.softInit = false;\r\n\t                FreeRoundBonus.remainingFrbCount = null;\r\n\t                FreeRoundBonus.roundsAssigned = 0;\r\n\t                FreeRoundBonus.roundsPlayed = 0;\r\n\t                FreeRoundBonus.roundsStarted = 0;\r\n\t                FreeRoundBonus.hasFeature = false;\r\n\t                if (FreeRoundBonus.state !== \"end\" && FreeRoundBonus.state !== \"other\") {\r\n\t                    if (!FreeRoundBonusDialog_1.FreeRoundBonusDialog.revalidateOtherGames()) {\r\n\t                        FreeRoundBonusDialog_1.FreeRoundBonusDialog.hideDialog();\r\n\t                        FreeRoundBonusIcon_1.FreeRoundBonusIcon.hideAllIcons();\r\n\t                        FreeRoundBonus.state = \"expired\";\r\n\t                        FreeRoundBonus.enableGame();\r\n\t                    }\r\n\t                    else {\r\n\t                        FreeRoundBonusDialog_1.FreeRoundBonusDialog.hideDialog();\r\n\t                        FreeRoundBonus.enableGame();\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (days > 0) {\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbExpiryTime, days + \"d\");\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbExpiryTime, days + \"d\");\r\n\t                }\r\n\t                else if (hours > 0) {\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbExpiryTime, hours + \":\" + minutes + \"h\");\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbExpiryTime, hours + \":\" + minutes + \"h\");\r\n\t                }\r\n\t                else if (minutes > 0) {\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbExpiryTime, minutes + \":\" + seconds + \"s\");\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbExpiryTime, minutes + \":\" + seconds + \"s\");\r\n\t                }\r\n\t                setTimeout(function () {\r\n\t                    FreeRoundBonus.countDown();\r\n\t                }, 1000);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.countDownOther = function () {\r\n\t        if (!FreeRoundBonusDialog_1.FreeRoundBonusDialog.revalidateOtherGames()) {\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.hideDialog();\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.hideAllIcons();\r\n\t            FreeRoundBonus.enableGame();\r\n\t        }\r\n\t        else {\r\n\t            setTimeout(function () {\r\n\t                FreeRoundBonus.countDownOther();\r\n\t            }, 2000);\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.hasNewActiveOffer = function () {\r\n\t        if (FreeRoundBonus.id == null && FreeRoundBonus.remainingFrbCount > 0) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    FreeRoundBonus.updateRemainingCount = function (count) {\r\n\t        if (FreeRoundBonus.id == null || (FreeRoundBonus.id > -1 && FreeRoundBonus.status != \"active\")) {\r\n\t            if (count > 0) {\r\n\t                if (FreeRoundBonus.canInitDynamicFRB()) {\r\n\t                    FreeRoundBonus.softInitialize();\r\n\t                }\r\n\t                else {\r\n\t                    if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.status === GameStatuses.Enabled) {\r\n\t                        DataManager_1.DataManager.Autoplay = false;\r\n\t                    }\r\n\t                    FreeRoundBonus.remainingFrbCount = count;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else if (FreeRoundBonus.id === -1) {\r\n\t            if (count > 0) {\r\n\t                if (FreeRoundBonus.remainingFrbCount > 0) {\r\n\t                    FreeRoundBonus.isLastFrb = false;\r\n\t                    FreeRoundBonus.remainingFrbCount = count;\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbRemainginCount, count.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbRemainginCount, count.toString());\r\n\t                }\r\n\t                else {\r\n\t                    FreeRoundBonus.remainingFrbCount = count;\r\n\t                }\r\n\t            }\r\n\t            else if (count === 0) {\r\n\t                if (FreeRoundBonus.remainingFrbCount > 0) {\r\n\t                    FreeRoundBonus.remainingFrbCount = count;\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbRemainginCount, count.toString());\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbRemainginCount, count.toString());\r\n\t                    FreeRoundBonus.isLastFrb = true;\r\n\t                    if (DataManager_1.DataManager.GameRoundClosed && !DataManager_1.DataManager.Autoplay && FreeRoundBonus.enabledUi) {\r\n\t                        FreeRoundBonus.endFreeRounds();\r\n\t                    }\r\n\t                    else {\r\n\t                        DataManager_1.DataManager.Autoplay = false;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.canInitDynamicFRB = function () {\r\n\t        return (!FreeRoundBonusIcon_1.FreeRoundBonusIcon.isDisabled() &&\r\n\t            DataManager_1.DataManager.GameRoundClosed &&\r\n\t            !DataManager_1.DataManager.Autoplay &&\r\n\t            !ResponsibleDialog1_1.ResponsibleDialog1.opened);\r\n\t    };\r\n\t    FreeRoundBonus.softInitialize = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        ModuleManager_1.ModuleManager.disableBase();\r\n\t        if (!FreeRoundBonus.softInit) {\r\n\t            FreeRoundBonus.softInit = true;\r\n\t            GameManager_1.GameManager.gameClient\r\n\t                .sendFreeRoundsOffersRequest(GameApp_1.GameApp.key)\r\n\t                .then(function (response) {\r\n\t                FreeRoundBonus.getCurrentOfferReceived(response);\r\n\t                FreeRoundBonus.initializeFreeRounds();\r\n\t            })\r\n\t                .catch(function (err) {\r\n\t                FreeRoundBonus.softInit = false;\r\n\t                FreeRoundBonus.wasInitialized = true;\r\n\t                ModuleManager_1.ModuleManager.restoreGameRound(GameModules.Base);\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.disableUi = function () {\r\n\t        FreeRoundBonus.enabledUi = false;\r\n\t        FreeRoundBonusDialog_1.FreeRoundBonusDialog.hideDialog();\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.disableActiveIcon();\r\n\t    };\r\n\t    FreeRoundBonus.enableUi = function () {\r\n\t        if (!ResponsibleDialog1_1.ResponsibleDialog1.opened) {\r\n\t            FreeRoundBonus.enabledUi = true;\r\n\t            if (FreeRoundBonus.hasNewActiveOffer()) {\r\n\t                FreeRoundBonus.softInitialize();\r\n\t                return;\r\n\t            }\r\n\t            if (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod == \"cumulative\") {\r\n\t                return;\r\n\t            }\r\n\t            FreeRoundBonusIcon_1.FreeRoundBonusIcon.enableActiveIcon();\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonus.enableGame = function () {\r\n\t        if (FreeRoundBonus.softInit) {\r\n\t            GameManager_1.GameManager.softInit();\r\n\t            FreeRoundBonus.softInit = false;\r\n\t        }\r\n\t        else if (ModuleManager_1.ModuleManager.getActiveGameModules().length == 0 ||\r\n\t            ModuleManager_1.ModuleManager.getActiveGameModules().indexOf(GameModules.Base) != -1) {\r\n\t            ModuleManager_1.ModuleManager.restoreGameRound(GameModules.Base);\r\n\t        }\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t    };\r\n\t    FreeRoundBonus.enableFrbExpiration = function () {\r\n\t        FreeRoundBonus.blockFrbExpiration = false;\r\n\t    };\r\n\t    FreeRoundBonus.inFrb = false;\r\n\t    FreeRoundBonus.isLastFrb = false;\r\n\t    FreeRoundBonus.playing = false;\r\n\t    FreeRoundBonus.otherOfferes = [];\r\n\t    FreeRoundBonus.wasInitialized = false;\r\n\t    FreeRoundBonus.state = \"\";\r\n\t    FreeRoundBonus.endMsgDisplayed = false;\r\n\t    FreeRoundBonus.softInit = false;\r\n\t    FreeRoundBonus.enabledUi = false;\r\n\t    FreeRoundBonus.blockFrbExpiration = false;\r\n\t    return FreeRoundBonus;\r\n\t}());\r\n\texports.FreeRoundBonus = FreeRoundBonus;\r\n\n\n/***/ },\n/* 37 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar RetentionPanel_1 = __webpack_require__(40);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\r\n\tvar FreeRoundBonusDialog = (function () {\r\n\t    function FreeRoundBonusDialog() {\r\n\t    }\r\n\t    FreeRoundBonusDialog.initialize = function () {\r\n\t        FreeRoundBonusDialog.Dialog = document.getElementById(\"frbDialog\");\r\n\t        FreeRoundBonusDialog.DialogContentOther = document.getElementById(\"frbDialogContentOther\");\r\n\t        FreeRoundBonusDialog.DialogContentOther2 = document.getElementById(\"frbDialogContentOther2\");\r\n\t        FreeRoundBonusDialog.DialogContentOtherList = document.getElementById(\"frbDialogContentOtherList\");\r\n\t        FreeRoundBonusDialog.DialogContentOtherList2 = document.getElementById(\"frbDialogContentOtherList2\");\r\n\t        FreeRoundBonusDialog.DialogContentNew = document.getElementById(\"frbDialogContentNew\");\r\n\t        FreeRoundBonusDialog.DialogContentActive = document.getElementById(\"frbDialogContentActive\");\r\n\t        FreeRoundBonusDialog.DialogContentEnd = document.getElementById(\"frbDialogContentEnd\");\r\n\t        FreeRoundBonusDialog.DialogContentExpired = document.getElementById(\"frbDialogContentExpired\");\r\n\t        FreeRoundBonusDialog.ConfirmationDialog = document.getElementById(\"frbConfirmationDialog\");\r\n\t        FreeRoundBonusDialog.DialogButtonPlay = document.getElementById(\"dialogBtnPlay\");\r\n\t        FreeRoundBonusDialog.DialogButtonPostPone = document.getElementById(\"dialogBtnPostPone\");\r\n\t        FreeRoundBonusDialog.DialogButtonDeny = document.getElementById(\"dialogBtnDeny\");\r\n\t        FreeRoundBonusDialog.DialogButtonOk = document.getElementById(\"dialogBtnOk\");\r\n\t        FreeRoundBonusDialog.DialogButtonYes = document.getElementById(\"dialogBtnYes\");\r\n\t        FreeRoundBonusDialog.DialogButtonNo = document.getElementById(\"dialogBtnNo\");\r\n\t        FreeRoundBonusDialog.bindEvents();\r\n\t        FreeRoundBonusDialog.setupFRBDialogByConfiguration();\r\n\t    };\r\n\t    FreeRoundBonusDialog.showDialog = function (type) {\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbRemainginCount, FreeRoundBonus_1.FreeRoundBonus.remainingCount());\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbAssignedCount, FreeRoundBonus_1.FreeRoundBonus.assignedCount());\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbValidTo, FreeRoundBonus_1.FreeRoundBonus.valid());\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFrbWin, FreeRoundBonus_1.FreeRoundBonus.win());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbRemainginCount, FreeRoundBonus_1.FreeRoundBonus.remainingCount());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbAssignedCount, FreeRoundBonus_1.FreeRoundBonus.assignedCount());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbValidTo, FreeRoundBonus_1.FreeRoundBonus.valid());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFrbWin, FreeRoundBonus_1.FreeRoundBonus.win());\r\n\t        FreeRoundBonusDialog.termsUrl();\r\n\t        DataManager_1.DataManager.showDataElements(\"frbRules\", \"\");\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.rulesLink() === \"\") {\r\n\t            DataManager_1.DataManager.hideDataElements(\"frbRules\");\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.win() === \"\") {\r\n\t            DataManager_1.DataManager.hideDataElements(\"frbWin\");\r\n\t        }\r\n\t        else {\r\n\t            DataManager_1.DataManager.showDataElements(\"frbWin\");\r\n\t        }\r\n\t        FreeRoundBonusDialog.hideAllButtons();\r\n\t        FreeRoundBonusDialog.hideAllContents();\r\n\t        DataManager_1.DataManager.hideDataElements(\"frbCumulative\");\r\n\t        DataManager_1.DataManager.hideDataElements(\"frbPlatformTransactionFail\");\r\n\t        neo_games_1.Platforms.Platforms.closeMenu();\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"frb\", true);\r\n\t        switch (type) {\r\n\t            case \"new\":\r\n\t                FreeRoundBonus_1.FreeRoundBonus.state = \"new\";\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentNew);\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonPlay);\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonPostPone);\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonDeny);\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t                    DataManager_1.DataManager.showDataElements(\"frbCumulative\");\r\n\t                }\r\n\t                if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\r\n\t                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n\t                }\r\n\t                break;\r\n\t            case \"other\":\r\n\t                FreeRoundBonus_1.FreeRoundBonus.state = \"other\";\r\n\t                FreeRoundBonusDialog.refillOtherGames();\r\n\t                if (AppContext_1.AppContext != null &&\r\n\t                    AppContext_1.AppContext.gameConfiguration != null &&\r\n\t                    AppContext_1.AppContext.gameConfiguration.ShowSimilarGames) {\r\n\t                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentOther);\r\n\t                }\r\n\t                else {\r\n\t                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentOther2);\r\n\t                }\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\r\n\t                FreeRoundBonus_1.FreeRoundBonus.openOther();\r\n\t                break;\r\n\t            case \"active\":\r\n\t                FreeRoundBonus_1.FreeRoundBonus.state = \"active\";\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentActive);\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t                    DataManager_1.DataManager.showDataElements(\"frbCumulative\");\r\n\t                }\r\n\t                break;\r\n\t            case \"end\":\r\n\t                FreeRoundBonus_1.FreeRoundBonus.state = \"end\";\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentEnd);\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.status === \"pending\" && FreeRoundBonus_1.FreeRoundBonus.totalWin > 0) {\r\n\t                    DataManager_1.DataManager.showDataElements(\"frbPlatformTransactionFail\");\r\n\t                }\r\n\t                break;\r\n\t            case \"expired\":\r\n\t                FreeRoundBonus_1.FreeRoundBonus.state = \"expired\";\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentExpired);\r\n\t                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\r\n\t                break;\r\n\t        }\r\n\t        DataManager_1.DataManager.hideDataElements(\"frbRegular\");\r\n\t        DataManager_1.DataManager.hideDataElements(\"frbFeature\");\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.state === \"new\" || FreeRoundBonus_1.FreeRoundBonus.state === \"active\") {\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.hasFeature !== null && FreeRoundBonus_1.FreeRoundBonus.hasFeature) {\r\n\t                FreeRoundBonusDialog.Dialog.classList.add(\"ffrDialog\");\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.remainingCount() === \"1\") {\r\n\t                    DataManager_1.DataManager.showDataElements(\"frbFeatureSingle\");\r\n\t                }\r\n\t                else {\r\n\t                    DataManager_1.DataManager.showDataElements(\"frbFeatureMultiple\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                FreeRoundBonusDialog.Dialog.classList.remove(\"ffrDialog\");\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.remainingCount() === \"1\") {\r\n\t                    DataManager_1.DataManager.showDataElements(\"frbRegularSingle\");\r\n\t                }\r\n\t                else {\r\n\t                    DataManager_1.DataManager.showDataElements(\"frbRegularMultiple\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.Dialog);\r\n\t    };\r\n\t    FreeRoundBonusDialog.setConfirmationDialog = function (value) {\r\n\t        FreeRoundBonusDialog.isConfirmationDialogOpened = value;\r\n\t    };\r\n\t    FreeRoundBonusDialog.setPointerEventsButtons = function (value) {\r\n\t        if (value === void 0) { value = \"\"; }\r\n\t        FreeRoundBonusDialog.DialogButtonPlay.style.pointerEvents = value;\r\n\t        FreeRoundBonusDialog.DialogButtonPostPone.style.pointerEvents = value;\r\n\t        FreeRoundBonusDialog.DialogButtonDeny.style.pointerEvents = value;\r\n\t    };\r\n\t    FreeRoundBonusDialog.hideDialog = function () {\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"frb\", false);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.Dialog);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n\t    };\r\n\t    FreeRoundBonusDialog.bindEvents = function () {\r\n\t        if (FreeRoundBonusDialog.DialogButtonPlay != null) {\r\n\t            FreeRoundBonusDialog.DialogButtonPlay.onclick = FreeRoundBonusDialog.onPlay;\r\n\t        }\r\n\t        if (FreeRoundBonusDialog.DialogButtonPostPone != null) {\r\n\t            FreeRoundBonusDialog.DialogButtonPostPone.onclick = FreeRoundBonusDialog.onPostPone;\r\n\t        }\r\n\t        if (FreeRoundBonusDialog.DialogButtonDeny != null) {\r\n\t            FreeRoundBonusDialog.DialogButtonDeny.onclick = FreeRoundBonusDialog.onDeny;\r\n\t        }\r\n\t        if (FreeRoundBonusDialog.DialogButtonOk != null) {\r\n\t            FreeRoundBonusDialog.DialogButtonOk.onclick = FreeRoundBonusDialog.onOk;\r\n\t        }\r\n\t        if (FreeRoundBonusDialog.DialogButtonYes != null) {\r\n\t            FreeRoundBonusDialog.DialogButtonYes.onclick = FreeRoundBonusDialog.onYes;\r\n\t        }\r\n\t        if (FreeRoundBonusDialog.DialogButtonNo != null) {\r\n\t            FreeRoundBonusDialog.DialogButtonNo.onclick = FreeRoundBonusDialog.onNo;\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.hideAllButtons = function () {\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonPlay);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonPostPone);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonDeny);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonOk);\r\n\t    };\r\n\t    FreeRoundBonusDialog.hideAllContents = function () {\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentActive);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentNew);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentOther);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentOther2);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentEnd);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentExpired);\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n\t    };\r\n\t    FreeRoundBonusDialog.showElement = function (element) {\r\n\t        if (element != null) {\r\n\t            if (element.classList.contains(\"_disabled\")) {\r\n\t                element.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            if (element.classList.contains(\"_hidden\")) {\r\n\t                element.classList.remove(\"_hidden\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.hideElement = function (element) {\r\n\t        if (element != null) {\r\n\t            if (element.classList.contains(\"_disabled\")) {\r\n\t                element.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            if (!element.classList.contains(\"_hidden\")) {\r\n\t                element.classList.add(\"_hidden\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.disableElement = function (element) {\r\n\t        if (element != null) {\r\n\t            if (!element.classList.contains(\"_disabled\")) {\r\n\t                element.classList.add(\"_disabled\");\r\n\t            }\r\n\t            if (element.classList.contains(\"_hidden\")) {\r\n\t                element.classList.remove(\"_hidden\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.onPlay = function () {\r\n\t        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\r\n\t            return;\r\n\t        }\r\n\t        FreeRoundBonus_1.FreeRoundBonus.state = \"\";\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        FreeRoundBonusDialog.hideDialog();\r\n\t        FreeRoundBonus_1.FreeRoundBonus.activateOffer();\r\n\t        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t    };\r\n\t    FreeRoundBonusDialog.onPostPone = function () {\r\n\t        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\r\n\t            return;\r\n\t        }\r\n\t        FreeRoundBonus_1.FreeRoundBonus.state = \"\";\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        FreeRoundBonusDialog.hideDialog();\r\n\t        FreeRoundBonus_1.FreeRoundBonus.enableGame();\r\n\t        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.restoreDialog();\r\n\t    };\r\n\t    FreeRoundBonusDialog.onDeny = function () {\r\n\t        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\r\n\t            return;\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n\t        FreeRoundBonusDialog.setConfirmationDialog(true);\r\n\t        FreeRoundBonusDialog.setPointerEventsButtons(\"none\");\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.restoreDialog();\r\n\t    };\r\n\t    FreeRoundBonusDialog.onYes = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.state = \"\";\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        FreeRoundBonusDialog.hideDialog();\r\n\t        FreeRoundBonus_1.FreeRoundBonus.declineOffer();\r\n\t        FreeRoundBonusDialog.setConfirmationDialog(false);\r\n\t        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t    };\r\n\t    FreeRoundBonusDialog.onNo = function () {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n\t        FreeRoundBonusDialog.setConfirmationDialog(false);\r\n\t        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\r\n\t    };\r\n\t    FreeRoundBonusDialog.onOk = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.state = \"\";\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        FreeRoundBonusDialog.hideDialog();\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.finishFreeRounds();\r\n\t        }\r\n\t        else {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableGame();\r\n\t        }\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t    };\r\n\t    FreeRoundBonusDialog.revalidateOtherGames = function () {\r\n\t        if (AppContext_1.AppContext != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration.StaticContentUrl === \"\") {\r\n\t            return false;\r\n\t        }\r\n\t        FreeRoundBonusDialog.otherOffersKeys = [];\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.otherOfferes.length > 0) {\r\n\t            var now = new Date().getTime();\r\n\t            for (var i = 0; i < FreeRoundBonus_1.FreeRoundBonus.otherOfferes.length; i++) {\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.otherOfferes[i][\"validTo\"] != null) {\r\n\t                    var countDownDate = new Date(FreeRoundBonus_1.FreeRoundBonus.otherOfferes[i][\"validTo\"] + \"+00:00\").getTime();\r\n\t                    var distance = countDownDate - now;\r\n\t                    if (distance > 0 && FreeRoundBonus_1.FreeRoundBonus.otherOfferes[i][\"gameCode\"] != null) {\r\n\t                        FreeRoundBonusDialog.otherOffersKeys.push(FreeRoundBonus_1.FreeRoundBonus.otherOfferes[i][\"gameCode\"]);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonusDialog.otherOffersKeys.length > 0) {\r\n\t            return true;\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.refillOtherGames = function () {\r\n\t        if (FreeRoundBonusDialog.DialogContentOtherList != null) {\r\n\t            FreeRoundBonusDialog.DialogContentOtherList.innerHTML = \"\";\r\n\t        }\r\n\t        if (FreeRoundBonusDialog.DialogContentOtherList2 != null) {\r\n\t            FreeRoundBonusDialog.DialogContentOtherList2.innerHTML = \"\";\r\n\t        }\r\n\t        for (var i = 0; i < 5; i++) {\r\n\t            if (FreeRoundBonusDialog.otherOffersKeys.length > 0 && FreeRoundBonusDialog.otherOffersKeys[i] != null) {\r\n\t                FreeRoundBonusDialog.createItem(FreeRoundBonusDialog.otherOffersKeys[i], false, FreeRoundBonusDialog.DialogContentOtherList);\r\n\t                FreeRoundBonusDialog.createItem(FreeRoundBonusDialog.otherOffersKeys[i], true, FreeRoundBonusDialog.DialogContentOtherList2);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.createItem = function (gameCode, noClick, parent) {\r\n\t        if (AppContext_1.AppContext != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration.StaticContentUrl === \"\") {\r\n\t            return;\r\n\t        }\r\n\t        var itemHolder = document.createElement(\"div\");\r\n\t        var itemLoading = document.createElement(\"div\");\r\n\t        var itemLoadingIcon = document.createElement(\"div\");\r\n\t        var itemLogo = document.createElement(\"div\");\r\n\t        itemHolder.classList.add(\"frbOfferItem\");\r\n\t        itemLoading.classList.add(\"frbGameLoading\");\r\n\t        itemLoadingIcon.classList.add(\"loadingIcon\");\r\n\t        itemLogo.classList.add(\"frbGameLogo\");\r\n\t        itemLogo.setAttribute(\"game\", gameCode);\r\n\t        itemLogo.style.background =\r\n\t            \"url(\" + AppContext_1.AppContext.gameConfiguration.StaticContentUrl + gameCode + \"/\" + window[\"QUALITY\"] + \"/logo.jpg)\";\r\n\t        itemHolder.appendChild(itemLoading);\r\n\t        itemLoading.appendChild(itemLoadingIcon);\r\n\t        itemHolder.appendChild(itemLogo);\r\n\t        if (!noClick) {\r\n\t            itemLogo.onclick = FreeRoundBonusDialog.selectGame;\r\n\t        }\r\n\t        if (parent != null) {\r\n\t            parent.appendChild(itemHolder);\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.selectGame = function (e) {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        if (e != null && e.target != null && e.target.hasAttribute(\"game\")) {\r\n\t            var urlInfo = neo_common_1.UriHelper.parseUrl(window.location.href, true, true);\r\n\t            if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\r\n\t                var serverUrl = urlInfo[\"query\"][\"serverUrl\"];\r\n\t                var token = urlInfo[\"hash\"].substring(1);\r\n\t                var newUrl_1 = serverUrl + \"Launch/\" + e.target.getAttribute(\"game\") + \"?\" + token;\r\n\t                var root = document.getElementById(\"root\");\r\n\t                if (root != null) {\r\n\t                    root.style.display = \"none\";\r\n\t                }\r\n\t                neo_games_1.Platforms.Platforms.gameChange(e.target.getAttribute(\"game\"));\r\n\t                if (neo_games_1.Platforms.Platforms.handleChangeGame) {\r\n\t                    return;\r\n\t                }\r\n\t                setTimeout(function () {\r\n\t                    window.location.href = newUrl_1;\r\n\t                }, 100);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.termsUrl = function () {\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.termsUrl != null && FreeRoundBonus_1.FreeRoundBonus.termsUrl !== \"\") {\r\n\t            var elements = document.getElementsByClassName(\"termsLink\");\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                if (element != null) {\r\n\t                    element.setAttribute(\"href\", FreeRoundBonus_1.FreeRoundBonus.termsUrl);\r\n\t                    element.addEventListener(\"click\", function (e) {\r\n\t                        e.stopPropagation();\r\n\t                    });\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.setupFRBDialogByConfiguration = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration) {\r\n\t            if (!AppContext_1.AppContext.gameConfiguration.FRBShowDenyButton) {\r\n\t                FreeRoundBonusDialog.hideFRBDenyButton();\r\n\t            }\r\n\t            if (!AppContext_1.AppContext.gameConfiguration.FRBShowPostponeButton) {\r\n\t                FreeRoundBonusDialog.hideFRBPostPoneButton();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.hideFRBDenyButton = function () {\r\n\t        if (FreeRoundBonusDialog.DialogButtonDeny) {\r\n\t            FreeRoundBonusDialog.DialogButtonDeny.parentNode.removeChild(FreeRoundBonusDialog.DialogButtonDeny);\r\n\t        }\r\n\t        var infoMsg = document.getElementById(\"frbDialogPlayingOptions3\");\r\n\t        if (infoMsg) {\r\n\t            infoMsg.parentNode.removeChild(infoMsg);\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.hideFRBPostPoneButton = function () {\r\n\t        if (FreeRoundBonusDialog.DialogButtonPostPone) {\r\n\t            FreeRoundBonusDialog.DialogButtonPostPone.parentNode.removeChild(FreeRoundBonusDialog.DialogButtonPostPone);\r\n\t        }\r\n\t        var infoMsg = document.getElementById(\"frbDialogPlayingOptions3\");\r\n\t        if (infoMsg) {\r\n\t            infoMsg.parentNode.removeChild(infoMsg);\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusDialog.dialogActive = function () {\r\n\t        return !FreeRoundBonusDialog.Dialog.classList.contains(\"_hidden\");\r\n\t    };\r\n\t    FreeRoundBonusDialog.otherOffersKeys = [];\r\n\t    FreeRoundBonusDialog.isConfirmationDialogOpened = false;\r\n\t    return FreeRoundBonusDialog;\r\n\t}());\r\n\texports.FreeRoundBonusDialog = FreeRoundBonusDialog;\r\n\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar SoundManager_1 = __webpack_require__(39);\r\n\tvar PlayList = (function () {\r\n\t    function PlayList() {\r\n\t    }\r\n\t    PlayList.addToPlayList = function (song) {\r\n\t        PlayList.Songs[song.id] = song;\r\n\t    };\r\n\t    PlayList.prototype.create = function (node) {\r\n\t        SoundManager_1.SoundManager.parseElements(node, node.nodeName);\r\n\t    };\r\n\t    PlayList.isPlaying = function (song) {\r\n\t        if (PlayList.Songs[song] != null) {\r\n\t            return PlayList.Songs[song].isPlaying();\r\n\t        }\r\n\t    };\r\n\t    PlayList.play = function (song, fadeIn, reset, onProgress) {\r\n\t        if (fadeIn === void 0) { fadeIn = 0; }\r\n\t        if (reset === void 0) { reset = true; }\r\n\t        if (onProgress === void 0) { onProgress = null; }\r\n\t        if (PlayList.Songs[song] != null) {\r\n\t            PlayList.Songs[song].play(false, fadeIn, reset, onProgress);\r\n\t        }\r\n\t    };\r\n\t    PlayList.loop = function (song, fadeIn, reset) {\r\n\t        if (fadeIn === void 0) { fadeIn = 0; }\r\n\t        if (reset === void 0) { reset = false; }\r\n\t        if (PlayList.Songs[song] != null) {\r\n\t            PlayList.Songs[song].play(true, fadeIn, reset);\r\n\t        }\r\n\t    };\r\n\t    PlayList.stop = function (song, fadeOut) {\r\n\t        if (fadeOut === void 0) { fadeOut = 0; }\r\n\t        if (PlayList.Songs[song] != null) {\r\n\t            PlayList.Songs[song].stop(fadeOut);\r\n\t        }\r\n\t    };\r\n\t    PlayList.stopAll = function (fadeOut) {\r\n\t        if (fadeOut === void 0) { fadeOut = 0; }\r\n\t        if (PlayList.Songs != null) {\r\n\t            for (var song in PlayList.Songs) {\r\n\t                PlayList.Songs[song].stop(fadeOut);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlayList.pauseAll = function () {\r\n\t        if (PlayList.Songs != null) {\r\n\t            for (var song in PlayList.Songs) {\r\n\t                PlayList.Songs[song].pause();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlayList.resumeAll = function () {\r\n\t        if (PlayList.Songs != null) {\r\n\t            for (var song in PlayList.Songs) {\r\n\t                PlayList.Songs[song].resume();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlayList.stopAllInGroup = function (group, toggle) {\r\n\t        if (toggle === void 0) { toggle = false; }\r\n\t        if (PlayList.Songs != null) {\r\n\t            for (var song in PlayList.Songs) {\r\n\t                PlayList.Songs[song].toggleGroup(group, toggle);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlayList.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    PlayList.Songs = {};\r\n\t    PlayList = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.PlayList)\r\n\t    ], PlayList);\r\n\t    return PlayList;\r\n\t}());\r\n\texports.PlayList = PlayList;\r\n\n\n/***/ },\n/* 39 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar SoundManager = (function () {\r\n\t    function SoundManager() {\r\n\t    }\r\n\t    SoundManager.log = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"SoundManager\", data);\r\n\t        }\r\n\t    };\r\n\t    SoundManager.parseElements = function (node, playList) {\r\n\t        if (playList === void 0) { playList = \"\"; }\r\n\t        if (node != null) {\r\n\t            var next = node.firstElementChild;\r\n\t            while (next != null) {\r\n\t                var cls = \"\";\r\n\t                if (next.hasAttribute(\"Class\")) {\r\n\t                    cls = next.getAttribute(\"Class\");\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING element with name: \" + next.nodeName + \" has no class\");\r\n\t                    }\r\n\t                }\r\n\t                if (cls !== \"\") {\r\n\t                    if (neo_common_1.EngineComponentFactory.isTypeOf(cls, ComponentTypes_1.ComponentTypes.PlayList)) {\r\n\t                        var element = neo_common_1.EngineComponentFactory.get(cls);\r\n\t                        SoundManager.PlayLists[next.nodeName] = element;\r\n\t                        element.create(next);\r\n\t                    }\r\n\t                    else if (neo_common_1.EngineComponentFactory.isTypeOf(cls, ComponentTypes_1.ComponentTypes.Song)) {\r\n\t                        var element = neo_common_1.EngineComponentFactory.get(cls);\r\n\t                        element.create(next);\r\n\t                        if (playList !== \"\") {\r\n\t                            PlayList_1.PlayList.addToPlayList(element);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SoundManager.PlayLists = {};\r\n\t    return SoundManager;\r\n\t}());\r\n\texports.SoundManager = SoundManager;\r\n\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\r\n\tvar RetentionPanel = (function () {\r\n\t    function RetentionPanel() {\r\n\t        this.screen = null;\r\n\t        this.panel = null;\r\n\t        this.icons = null;\r\n\t        this.lastCount = 0;\r\n\t        this.createPanel();\r\n\t    }\r\n\t    RetentionPanel.prototype.revalidate = function () {\r\n\t        if (!RetentionPanel.canShow) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.screen == null) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.panel == null) {\r\n\t            return;\r\n\t        }\r\n\t        this.log(\"revalidate\");\r\n\t        if (this.hasActiveIcon()) {\r\n\t            document.body.classList.add(\"retention-panel-active\");\r\n\t            RetentionPanel.panelWidth = parseInt(window.getComputedStyle(this.panel).width);\r\n\t        }\r\n\t        else {\r\n\t            document.body.classList.remove(\"retention-panel-active\");\r\n\t            RetentionPanel.panelWidth = 0;\r\n\t        }\r\n\t        this.showPeakHelpIcon();\r\n\t        Scaling_1.Scaling.LeftPanelWidth = RetentionPanel.panelWidth;\r\n\t    };\r\n\t    RetentionPanel.prototype.showPeakHelpIcon = function () {\r\n\t        var _this = this;\r\n\t        var peakHelp = document.querySelector(\".hlpTournamentsBtn\");\r\n\t        if (RetentionPanel.peakActive) {\r\n\t            var peakHelpIcon = document.querySelector(\".btnTournaments\");\r\n\t            var peakHelpIconBackground = document.getElementById(\"peakMenuBtn\") != null\r\n\t                ? window.getComputedStyle(document.getElementById(\"peakMenuBtn\")).backgroundImage\r\n\t                : false;\r\n\t            var peakHelpIconBackgroundSize = document.querySelector(\".hlpMenu\") != null\r\n\t                ? window.getComputedStyle(document.querySelector(\".hlpMenu\")).width\r\n\t                : false;\r\n\t            if (peakHelp != null && peakHelpIcon != null && peakHelpIconBackground && peakHelpIconBackgroundSize) {\r\n\t                peakHelpIcon.setAttribute(\"style\", \"background-image:\" +\r\n\t                    peakHelpIconBackground +\r\n\t                    \"; height:100%; background-position: center; background-size: auto \" +\r\n\t                    peakHelpIconBackgroundSize +\r\n\t                    \"; -webkit-transform: scale(0.66); transform: scale(0.66);\");\r\n\t                peakHelp.classList.remove(\"_hidden\");\r\n\t            }\r\n\t            else {\r\n\t                setTimeout(function () {\r\n\t                    _this.showPeakHelpIcon();\r\n\t                }, RetentionPanel.initRevalidateTimeout);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            peakHelp.classList.add(\"_hidden\");\r\n\t        }\r\n\t    };\r\n\t    RetentionPanel.prototype.createPanel = function () {\r\n\t        var root = document.getElementById(RetentionPanel.panelParentId);\r\n\t        if (root == null) {\r\n\t            if (false) {\r\n\t                console.log(\"ERROR - panel with id \" + RetentionPanel.panelParentId + \" was not found\");\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        this.screen = this.createElement(\"div\", \"retentionScreen\", [\"screen\"]);\r\n\t        this.content = this.createElement(\"div\", \"retentionContent\");\r\n\t        this.panel = this.createElement(\"div\", \"retentionPanel\", [\"gameControls\"]);\r\n\t        this.icons = this.createElement(\"div\", \"retentionPanelIcons\");\r\n\t        this.createContentPlaceholder(this.content);\r\n\t        this.createIconsPlaceholder(this.icons);\r\n\t        this.screen.appendChild(this.content);\r\n\t        this.screen.appendChild(this.panel);\r\n\t        this.panel.appendChild(this.icons);\r\n\t        root.appendChild(this.screen);\r\n\t    };\r\n\t    RetentionPanel.prototype.createContentPlaceholder = function (contentHolder) {\r\n\t        if (contentHolder == null) {\r\n\t            return;\r\n\t        }\r\n\t        contentHolder.appendChild(this.createElement(\"div\", \"peakContentHolder\", [\"retentionContentHolder\"]));\r\n\t        contentHolder.appendChild(this.createElement(\"div\", \"frbContentHolder\", [\"retentionContentHolder\"]));\r\n\t    };\r\n\t    RetentionPanel.prototype.createIconsPlaceholder = function (iconsHolder) {\r\n\t        if (iconsHolder == null) {\r\n\t            return;\r\n\t        }\r\n\t        iconsHolder.appendChild(this.createElement(\"div\", \"peakIconHolder\", [\"retentionIconHolder\"]));\r\n\t        iconsHolder.appendChild(this.createElement(\"div\", \"frbIconHolder\", [\"retentionIconHolder\"]));\r\n\t        for (var i = 0; i < iconsHolder.children.length; i++) {\r\n\t            var child = iconsHolder.children[i];\r\n\t            child.addEventListener(\"click\", function (event) {\r\n\t                BetHigherThanMinDialog_1.BetHigherThanMinDialog.closeDialog();\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    RetentionPanel.prototype.createElement = function (type, id, classList) {\r\n\t        if (id === void 0) { id = \"\"; }\r\n\t        if (classList === void 0) { classList = []; }\r\n\t        var elem = document.createElement(type);\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(id)) {\r\n\t            elem.id = id;\r\n\t        }\r\n\t        if (classList.length > 0) {\r\n\t            for (var i = 0; i < classList.length; i++) {\r\n\t                elem.classList.add(classList[i]);\r\n\t            }\r\n\t        }\r\n\t        return elem;\r\n\t    };\r\n\t    RetentionPanel.prototype.updateCount = function (currentCount) {\r\n\t        if (currentCount === void 0) { currentCount = -1; }\r\n\t        currentCount = currentCount == -1 ? this.lastCount : currentCount;\r\n\t        var isPortrait = Scaling_1.Scaling.isPortrait();\r\n\t        var slots = isPortrait\r\n\t            ? RetentionPanel.portraitMaxIconCount - currentCount\r\n\t            : RetentionPanel.landscapeMaxIconCount - currentCount;\r\n\t        if (this.iconsSlotsCount != slots) {\r\n\t            this.iconsSlotsCount = slots;\r\n\t            neo_games_1.Platforms.Platforms.iconsCountAvailable(slots);\r\n\t        }\r\n\t        var isMultiIcon = this.isMultiIcon(currentCount);\r\n\t        this.icons.classList.remove(\"retention-icon-count-\" + this.lastCount, \"retention-icon-count-\" + this.lastCount + \"-m\");\r\n\t        this.icons.classList.add(\"retention-icon-count-\" + currentCount + (isMultiIcon || RetentionPanel.peakActive > 1 ? \"-m\" : \"\"));\r\n\t        this.lastCount = currentCount;\r\n\t    };\r\n\t    RetentionPanel.prototype.isMultiIcon = function (count) {\r\n\t        if (count == 0 || count > 1) {\r\n\t            return false;\r\n\t        }\r\n\t        var style = window.getComputedStyle(this.icons);\r\n\t        var width = parseInt(style.width);\r\n\t        var height = parseInt(style.height);\r\n\t        return width != 0 ? height / width > 1.5 : false;\r\n\t    };\r\n\t    RetentionPanel.prototype.hasActiveIcon = function () {\r\n\t        if (this.panel == null) {\r\n\t            return false;\r\n\t        }\r\n\t        if (this.icons == null) {\r\n\t            return false;\r\n\t        }\r\n\t        var result = false;\r\n\t        var count = 0;\r\n\t        RetentionPanel.peakActive = 0;\r\n\t        var children = this.icons.children;\r\n\t        for (var i = 0; i < children.length; i++) {\r\n\t            var child = children[i];\r\n\t            if (child != null) {\r\n\t                var iconChildren = child.children;\r\n\t                for (var j = 0; j < iconChildren.length; j++) {\r\n\t                    var iconChild = iconChildren[j];\r\n\t                    if (iconChild.getAttribute(\"active\") == \"true\") {\r\n\t                        result = true;\r\n\t                        count++;\r\n\t                        if (iconChild.hasAttribute(\"promotions-count\") &&\r\n\t                            parseInt(iconChild.getAttribute(\"promotions-count\")) > 0)\r\n\t                            RetentionPanel.peakActive = parseInt(iconChild.getAttribute(\"promotions-count\"));\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.updateCount(count);\r\n\t        return result;\r\n\t    };\r\n\t    RetentionPanel.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"RetentionPanel\", \"RetentionPanel \" + s);\r\n\t        }\r\n\t    };\r\n\t    RetentionPanel.getInstance = function () {\r\n\t        if (RetentionPanel.instance == null) {\r\n\t            RetentionPanel.instance = new RetentionPanel();\r\n\t        }\r\n\t        return RetentionPanel.instance;\r\n\t    };\r\n\t    RetentionPanel.initialize = function () {\r\n\t        RetentionPanel.getInstance();\r\n\t    };\r\n\t    RetentionPanel.show = function () {\r\n\t        RetentionPanel.canShow = true;\r\n\t        RetentionPanel.revalidate();\r\n\t        Scaling_1.Scaling.Emitter.on(Scaling_1.Scaling.EventResize, function () {\r\n\t            RetentionPanel.getInstance().updateCount();\r\n\t            RetentionPanel.getInstance().revalidate();\r\n\t        });\r\n\t        setTimeout(function () {\r\n\t            RetentionPanel.revalidate();\r\n\t        }, RetentionPanel.initRevalidateTimeout);\r\n\t    };\r\n\t    RetentionPanel.revalidate = function () {\r\n\t        RetentionPanel.getInstance().revalidate();\r\n\t        Scaling_1.Scaling.resizeRoot(false, false);\r\n\t    };\r\n\t    RetentionPanel.panelParentId = \"root\";\r\n\t    RetentionPanel.initRevalidateTimeout = 500;\r\n\t    RetentionPanel.landscapeMaxIconCount = window[\"CHANNEL\"] === \"mobile\" ? 4 : 5;\r\n\t    RetentionPanel.portraitMaxIconCount = 2;\r\n\t    RetentionPanel.panelWidth = 0;\r\n\t    RetentionPanel.canShow = false;\r\n\t    RetentionPanel.peakActive = 0;\r\n\t    return RetentionPanel;\r\n\t}());\r\n\texports.RetentionPanel = RetentionPanel;\r\n\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar BetHigherThanMinDialog = (function () {\r\n\t    function BetHigherThanMinDialog() {\r\n\t    }\r\n\t    BetHigherThanMinDialog.openDialog = function () {\r\n\t        if (!this.canNotifyBetHigherThanMin() ||\r\n\t            (this._wasOpened && !this._reopenDialog) ||\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.dialogActive()) {\r\n\t            return;\r\n\t        }\r\n\t        var minBet = Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, this.getMinBet().toString()) +\r\n\t            \" \" +\r\n\t            DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency);\r\n\t        var message = Languages_1.Languages.getRid(\"EXCEED_MIN_BET\", minBet);\r\n\t        var dialogData = {\r\n\t            text: message,\r\n\t            actions: [\r\n\t                {\r\n\t                    type: \"restore\",\r\n\t                    text: Languages_1.Languages.getRid(\"CONTINUE\"),\r\n\t                    customData: neo_games_1.Communication.Game.GameModules.Base,\r\n\t                },\r\n\t            ],\r\n\t            special: true,\r\n\t        };\r\n\t        AppContext_1.AppContext.current.showDialog(message, false, null, null, null, dialogData);\r\n\t        this._wasOpened = true;\r\n\t        this._isOpened = true;\r\n\t    };\r\n\t    BetHigherThanMinDialog.canOpenDialog = function () {\r\n\t        return (AppContext_1.AppContext.gameConfiguration.NotifyBetHigherThanMin &&\r\n\t            !this.isMinBet() &&\r\n\t            !ModuleManager_1.ModuleManager.gambleActive() &&\r\n\t            !(FreeRoundBonus_1.FreeRoundBonus.status && FreeRoundBonus_1.FreeRoundBonus.status === \"active\") &&\r\n\t            !Jackpot_1.Jackpot.hasMiniGame() &&\r\n\t            !this._wasOpened &&\r\n\t            this._gameStartedWithFeature);\r\n\t    };\r\n\t    BetHigherThanMinDialog.closeDialog = function (changeBet) {\r\n\t        if (this._isOpened) {\r\n\t            this._isOpened = false;\r\n\t            AppContext_1.AppContext.current.closeDialog();\r\n\t        }\r\n\t        if (changeBet) {\r\n\t            this._wasOpened = true;\r\n\t        }\r\n\t    };\r\n\t    BetHigherThanMinDialog.hideDialog = function () {\r\n\t        if (this._isOpened) {\r\n\t            this._reopenDialog = true;\r\n\t        }\r\n\t    };\r\n\t    BetHigherThanMinDialog.restoreDialog = function () {\r\n\t        if (this._reopenDialog) {\r\n\t            this.openDialog();\r\n\t            this._reopenDialog = false;\r\n\t        }\r\n\t    };\r\n\t    BetHigherThanMinDialog.setOpenedStatus = function () {\r\n\t        if (this._isOpened) {\r\n\t            this._isOpened = false;\r\n\t        }\r\n\t    };\r\n\t    BetHigherThanMinDialog.gameFeatureActive = function () {\r\n\t        return (ModuleManager_1.ModuleManager.gambleActive() ||\r\n\t            (FreeRoundBonus_1.FreeRoundBonus.status && FreeRoundBonus_1.FreeRoundBonus.status === \"active\") ||\r\n\t            Jackpot_1.Jackpot.hasMiniGame() ||\r\n\t            !DataManager_1.DataManager.GameRoundClosed);\r\n\t    };\r\n\t    BetHigherThanMinDialog.isMinBet = function () {\r\n\t        BetManager_1.BetManager.updateBetPosition();\r\n\t        return BetManager_1.BetManager.minBet;\r\n\t    };\r\n\t    BetHigherThanMinDialog.canNotifyBetHigherThanMin = function () {\r\n\t        return (!this.isMinBet() &&\r\n\t            AppContext_1.AppContext.gameConfiguration.NotifyBetHigherThanMin &&\r\n\t            this._gameStartedWithFeature &&\r\n\t            !this.gameFeatureActive());\r\n\t    };\r\n\t    BetHigherThanMinDialog.getMinBet = function () {\r\n\t        return Math.min.apply(Math, BetManager_1.BetManager.TotalBets);\r\n\t    };\r\n\t    BetHigherThanMinDialog.getGameStartedWithoutFeature = function () {\r\n\t        if (this._gameStarted) {\r\n\t            this._gameStartedWithFeature = this.gameFeatureActive();\r\n\t            this._gameStarted = false;\r\n\t        }\r\n\t        return !this._gameStartedWithFeature && AppContext_1.AppContext.gameConfiguration.NotifyBetHigherThanMin;\r\n\t    };\r\n\t    BetHigherThanMinDialog._wasOpened = false;\r\n\t    BetHigherThanMinDialog._isOpened = false;\r\n\t    BetHigherThanMinDialog._reopenDialog = false;\r\n\t    BetHigherThanMinDialog._gameStartedWithFeature = false;\r\n\t    BetHigherThanMinDialog._gameStarted = true;\r\n\t    return BetHigherThanMinDialog;\r\n\t}());\r\n\texports.BetHigherThanMinDialog = BetHigherThanMinDialog;\r\n\n\n/***/ },\n/* 42 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar RetentionPanel_1 = __webpack_require__(40);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar FreeRoundBonusIcon = (function () {\r\n\t    function FreeRoundBonusIcon() {\r\n\t    }\r\n\t    FreeRoundBonusIcon.initialize = function () {\r\n\t        FreeRoundBonusIcon.IconNew = document.getElementById(\"frbIconNew\");\r\n\t        FreeRoundBonusIcon.IconActive = document.getElementById(\"frbIconActive\");\r\n\t        FreeRoundBonusIcon.bindEvents();\r\n\t    };\r\n\t    FreeRoundBonusIcon.showIcon = function (type) {\r\n\t        FreeRoundBonusIcon.hideAllIcons();\r\n\t        switch (type) {\r\n\t            case \"new\":\r\n\t                DataManager_1.DataManager.showDataElements(\"helpFRB\", \"block\");\r\n\t                DataManager_1.DataManager.showDataElements(\"helpFRB_flex\", \"flex\");\r\n\t                FreeRoundBonusIcon.showElement(FreeRoundBonusIcon.IconNew);\r\n\t                RetentionPanel_1.RetentionPanel.revalidate();\r\n\t                break;\r\n\t            case \"active\":\r\n\t                DataManager_1.DataManager.showDataElements(\"helpFRB\", \"block\");\r\n\t                DataManager_1.DataManager.showDataElements(\"helpFRB_flex\", \"flex\");\r\n\t                FreeRoundBonusIcon.showElement(FreeRoundBonusIcon.IconActive);\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t                    if (FreeRoundBonusIcon.IconActive != null) {\r\n\t                        FreeRoundBonusIcon.IconActive.classList.add(\"_disabled\");\r\n\t                    }\r\n\t                }\r\n\t                RetentionPanel_1.RetentionPanel.revalidate();\r\n\t                break;\r\n\t        }\r\n\t        FreeRoundBonusIcon.toggleCumulative();\r\n\t    };\r\n\t    FreeRoundBonusIcon.toggleCumulative = function () {\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (FreeRoundBonusIcon.IconActive != null) {\r\n\t                FreeRoundBonusIcon.IconActive.classList.add(\"cumulativeFrb\");\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (FreeRoundBonusIcon.IconActive != null) {\r\n\t                FreeRoundBonusIcon.IconActive.classList.remove(\"cumulativeFrb\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.bindEvents = function () {\r\n\t        if (FreeRoundBonusIcon.IconNew != null) {\r\n\t            FreeRoundBonusIcon.IconNew.onclick = FreeRoundBonusIcon.handleIconClick.bind(this, FreeRoundBonusIcon.onNew);\r\n\t        }\r\n\t        if (FreeRoundBonusIcon.IconActive != null) {\r\n\t            FreeRoundBonusIcon.IconActive.onclick = FreeRoundBonusIcon.handleIconClick.bind(this, FreeRoundBonusIcon.onActive);\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.hideAllIcons = function () {\r\n\t        DataManager_1.DataManager.hideDataElements(\"helpFRB\");\r\n\t        FreeRoundBonusIcon.hideElement(FreeRoundBonusIcon.IconNew);\r\n\t        FreeRoundBonusIcon.hideElement(FreeRoundBonusIcon.IconActive);\r\n\t    };\r\n\t    FreeRoundBonusIcon.disableActiveIcon = function () {\r\n\t        if (FreeRoundBonusIcon.IconNew != null &&\r\n\t            !FreeRoundBonusIcon.IconNew.classList.contains(\"_hidden\") &&\r\n\t            !FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")) {\r\n\t            FreeRoundBonusIcon.IconNew.classList.add(\"_disabled\");\r\n\t        }\r\n\t        if (FreeRoundBonusIcon.IconActive != null &&\r\n\t            !FreeRoundBonusIcon.IconActive.classList.contains(\"_hidden\") &&\r\n\t            !FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")) {\r\n\t            FreeRoundBonusIcon.IconActive.classList.add(\"_disabled\");\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.enableActiveIcon = function () {\r\n\t        if (DataManager_1.DataManager.Autoplay && (parseFloat(DataManager_1.DataManager.AutoplayCount) > 0 || DataManager_1.DataManager.AutoplayCount === \"∞\")) {\r\n\t            return;\r\n\t        }\r\n\t        if (FreeRoundBonusIcon.IconNew != null &&\r\n\t            !FreeRoundBonusIcon.IconNew.classList.contains(\"_hidden\") &&\r\n\t            FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")) {\r\n\t            FreeRoundBonusIcon.IconNew.classList.remove(\"_disabled\");\r\n\t        }\r\n\t        if (FreeRoundBonusIcon.IconActive != null &&\r\n\t            !FreeRoundBonusIcon.IconActive.classList.contains(\"_hidden\") &&\r\n\t            FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")) {\r\n\t            FreeRoundBonusIcon.IconActive.classList.remove(\"_disabled\");\r\n\t        }\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t    };\r\n\t    FreeRoundBonusIcon.showElement = function (element) {\r\n\t        if (element != null) {\r\n\t            if (element.classList.contains(\"_disabled\")) {\r\n\t                element.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            if (element.classList.contains(\"_hidden\")) {\r\n\t                element.classList.remove(\"_hidden\");\r\n\t            }\r\n\t            if (element.getAttribute(\"active\") != \"true\") {\r\n\t                element.setAttribute(\"active\", \"true\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.hideElement = function (element) {\r\n\t        if (element != null) {\r\n\t            if (element.classList.contains(\"_disabled\")) {\r\n\t                element.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            if (!element.classList.contains(\"_hidden\")) {\r\n\t                element.classList.add(\"_hidden\");\r\n\t            }\r\n\t            if (element.getAttribute(\"active\") != \"false\") {\r\n\t                element.setAttribute(\"active\", \"false\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.disableElement = function (element) {\r\n\t        if (element != null) {\r\n\t            if (!element.classList.contains(\"_disabled\")) {\r\n\t                element.classList.add(\"_disabled\");\r\n\t            }\r\n\t            if (element.classList.contains(\"_hidden\")) {\r\n\t                element.classList.remove(\"_hidden\");\r\n\t            }\r\n\t            if (element.getAttribute(\"active\") != \"true\") {\r\n\t                element.setAttribute(\"active\", \"true\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.isDisabled = function () {\r\n\t        var isDis = false;\r\n\t        if (FreeRoundBonusIcon.IconNew != null && FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")) {\r\n\t            isDis = true;\r\n\t        }\r\n\t        if (FreeRoundBonusIcon.IconActive != null && FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")) {\r\n\t            isDis = true;\r\n\t        }\r\n\t        return isDis;\r\n\t    };\r\n\t    FreeRoundBonusIcon.handleIconClick = function (callback, event) {\r\n\t        var element = event.target;\r\n\t        if (!FreeRoundBonusIcon.isDisabled() && element != null) {\r\n\t            element.classList.add(\"_loading\");\r\n\t            GameApp_1.GameApp.gameClient\r\n\t                .sendFreeRoundsOffersRequest(GameApp_1.GameApp.key)\r\n\t                .then(function (response) {\r\n\t                if (response != null) {\r\n\t                    if (response.currentOffer != null || response.otherOffers != null) {\r\n\t                        callback();\r\n\t                    }\r\n\t                    else {\r\n\t                        FreeRoundBonus_1.FreeRoundBonus.expiredFreeRounds();\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    FreeRoundBonus_1.FreeRoundBonus.expiredFreeRounds();\r\n\t                }\r\n\t            })\r\n\t                .finally(function () {\r\n\t                element.classList.remove(\"_loading\");\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.onNew = function () {\r\n\t        if (!FreeRoundBonusIcon.isDisabled()) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.id != null) {\r\n\t                FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"new\");\r\n\t            }\r\n\t            else {\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.otherOfferes.length > 0) {\r\n\t                    FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"other\");\r\n\t                }\r\n\t            }\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t        }\r\n\t    };\r\n\t    FreeRoundBonusIcon.onActive = function () {\r\n\t        if (!FreeRoundBonusIcon.isDisabled() && parseInt(FreeRoundBonus_1.FreeRoundBonus.remainingCount()) > 0) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            FreeRoundBonusDialog_1.FreeRoundBonusDialog.showDialog(\"active\");\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            ModuleManager_1.ModuleManager.resetSceneAsOnCollect(GameModules.Base);\r\n\t        }\r\n\t    };\r\n\t    return FreeRoundBonusIcon;\r\n\t}());\r\n\texports.FreeRoundBonusIcon = FreeRoundBonusIcon;\r\n\n\n/***/ },\n/* 43 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar MessageManager_1 = __webpack_require__(44);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\r\n\tvar ResponsibleDialog1 = (function () {\r\n\t    function ResponsibleDialog1() {\r\n\t    }\r\n\t    ResponsibleDialog1.openDialog = function (data) {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.RCIInfo) {\r\n\t            GameManager_1.GameManager.gameClient.getRealityCheckInfo().then(function (response) {\r\n\t                ResponsibleDialog1.openDialogContinue(data, response);\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            ResponsibleDialog1.openDialogContinue(data);\r\n\t        }\r\n\t    };\r\n\t    ResponsibleDialog1.openDialogContinue = function (data, info) {\r\n\t        if (info === void 0) { info = null; }\r\n\t        if (ResponsibleDialog1._element == null) {\r\n\t            ResponsibleDialog1._element = document.getElementById(\"responsibleGamingDialog\");\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(info) &&\r\n\t            !neo_common_1.Utils.isNullOrUndefined(info[\"messages\"]) &&\r\n\t            info[\"messages\"].length > 0) {\r\n\t            MessageManager_1.MessageManager.postpone(ResponsibleDialog1.onContinue, info);\r\n\t            return;\r\n\t        }\r\n\t        var elementWin = document.getElementById(\"rciWin\");\r\n\t        var elementLost = document.getElementById(\"rciLost\");\r\n\t        var totalGain = 0;\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"rci\", true);\r\n\t        if (info != null) {\r\n\t            if (info.totalGain <= 0) {\r\n\t                elementWin.style.display = \"none\";\r\n\t                elementLost.style.display = \"block\";\r\n\t                totalGain = -1 * info.totalGain;\r\n\t            }\r\n\t            else {\r\n\t                elementWin.style.display = \"block\";\r\n\t                elementLost.style.display = \"none\";\r\n\t                totalGain = info.totalGain;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            elementWin.style.display = \"none\";\r\n\t            elementLost.style.display = \"none\";\r\n\t        }\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.hideDialog();\r\n\t        AppContext_1.AppContext.current.closeDialog();\r\n\t        FreeRoundBonusDialog_1.FreeRoundBonusDialog.hideDialog();\r\n\t        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        Jackpot_1.Jackpot.closeAllHistoryDialogs();\r\n\t        ResponsibleDialog1.opened = true;\r\n\t        if (ResponsibleDialog1._continueButton == null) {\r\n\t            ResponsibleDialog1._continueButton = document.getElementById(\"continueButton\");\r\n\t            if (ResponsibleDialog1._continueButton != null) {\r\n\t                ResponsibleDialog1._continueButton.onclick = ResponsibleDialog1.onContinue;\r\n\t                if (data.continue) {\r\n\t                    ResponsibleDialog1._continueButton.style.display = \"inline-block\";\r\n\t                }\r\n\t                else {\r\n\t                    ResponsibleDialog1._continueButton.style.display = \"none\";\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (ResponsibleDialog1._historyButton == null) {\r\n\t            ResponsibleDialog1._historyButton = document.getElementById(\"historyButton\");\r\n\t            if (ResponsibleDialog1._historyButton != null) {\r\n\t                if (data.history) {\r\n\t                    ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onHistory;\r\n\t                    ResponsibleDialog1._historyButton.style.display = \"inline-block\";\r\n\t                }\r\n\t                else {\r\n\t                    if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n\t                        ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onGameRoundHistory;\r\n\t                        ResponsibleDialog1._historyButton.style.display = \"inline-block\";\r\n\t                    }\r\n\t                    else {\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.RCIShowHistoryButton) {\r\n\t                            ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onGameRoundHistory;\r\n\t                            ResponsibleDialog1._historyButton.style.display = \"inline-block\";\r\n\t                        }\r\n\t                        else {\r\n\t                            ResponsibleDialog1._historyButton.style.display = \"none\";\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (ResponsibleDialog1._closeButton == null) {\r\n\t            ResponsibleDialog1._closeButton = document.getElementById(\"closeButton\");\r\n\t            if (ResponsibleDialog1._closeButton != null) {\r\n\t                ResponsibleDialog1._closeButton.onclick = ResponsibleDialog1.onClose;\r\n\t                if (data.exit) {\r\n\t                    ResponsibleDialog1._closeButton.style.display = \"inline-block\";\r\n\t                }\r\n\t                else {\r\n\t                    ResponsibleDialog1._closeButton.style.display = \"none\";\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        var startTime = (Date.now() - data.startTime.getTime()) / 1000;\r\n\t        var interval = \"\";\r\n\t        var t = startTime / 60;\r\n\t        var h = parseInt(t / 60 + \"\") + \"\";\r\n\t        if (parseInt(h) < 10) {\r\n\t            h = \"0\" + h;\r\n\t        }\r\n\t        var m = parseInt((t % 60) + \"\") + \"\";\r\n\t        if (parseInt(m) < 10) {\r\n\t            m = \"0\" + m;\r\n\t        }\r\n\t        if (data.interval % 60 === 0) {\r\n\t            interval = (data.interval / 60).toFixed(0);\r\n\t        }\r\n\t        else {\r\n\t            interval = (data.interval / 60).toFixed(2);\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(\"RESPONSIBLE_DIALOG_1\", Math.floor(t) + \"\");\r\n\t        if (AppContext_1.AppContext.gameConfiguration.RCIInfo) {\r\n\t            if (info != null) {\r\n\t                if (DataManager_1.DataManager.DisplayCurrencies.hasOwnProperty(info.currency)) {\r\n\t                    info.currency = DataManager_1.DataManager.DisplayCurrencies[info.currency];\r\n\t                }\r\n\t                if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                    DataManager_1.DataManager.updateDataElement(\"RESPONSIBLE_DIALOG_1_SUM\", neo_common_1.NumberUtils.devide(totalGain, BetManager_1.BetManager.CoinSize).toString() + \" \" + info.currency);\r\n\t                }\r\n\t                else {\r\n\t                    DataManager_1.DataManager.updateDataElement(\"RESPONSIBLE_DIALOG_1_SUM\", Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, totalGain.toString()) + \" \" + info.currency);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(\"RESPONSIBLE_DIALOG_1_INTERVAL\", interval);\r\n\t        var elementRciIntervalInfo = document.getElementById(\"rciIntervalInfo\");\r\n\t        if (AppContext_1.AppContext.gameConfiguration.RCIIntervalInfo) {\r\n\t            if (elementRciIntervalInfo != null) {\r\n\t                elementRciIntervalInfo.style.display = \"block\";\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (elementRciIntervalInfo != null) {\r\n\t                elementRciIntervalInfo.style.display = \"none\";\r\n\t            }\r\n\t        }\r\n\t        if (ResponsibleDialog1._element != null) {\r\n\t            if (ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n\t                ResponsibleDialog1._element.classList.remove(ResponsibleDialog1.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.errorGroup(\"ResponsibleDialog1\", \"ERROR no responsibleDialog1\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ResponsibleDialog1.onContinue = function () {\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"rci\", false);\r\n\t        ResponsibleDialog1.opened = false;\r\n\t        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n\t            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        GameApp_1.GameApp.continue();\r\n\t        GameManager_1.GameManager.closeResponsibleDialog1();\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.restoreDialog();\r\n\t        FreeRoundBonus_1.FreeRoundBonus.reopenFreeRounds();\r\n\t    };\r\n\t    ResponsibleDialog1.onHistory = function () {\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"rci\", false);\r\n\t        ResponsibleDialog1.opened = false;\r\n\t        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n\t            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        GameApp_1.GameApp.closeRealityCheck();\r\n\t        GameApp_1.GameApp.history();\r\n\t        GameManager_1.GameManager.closeResponsibleDialog1();\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.restoreDialog();\r\n\t        FreeRoundBonus_1.FreeRoundBonus.reopenFreeRounds();\r\n\t    };\r\n\t    ResponsibleDialog1.onGameRoundHistory = function () {\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"rci\", false);\r\n\t        ResponsibleDialog1.opened = false;\r\n\t        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n\t            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        GameApp_1.GameApp.closeRealityCheck();\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n\t            GameApp_1.GameApp.openGameRoundHistoryFromUrl();\r\n\t        }\r\n\t        else {\r\n\t            GameApp_1.GameApp.openGameRoundHistory();\r\n\t        }\r\n\t        GameManager_1.GameManager.closeResponsibleDialog1();\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.restoreDialog();\r\n\t        FreeRoundBonus_1.FreeRoundBonus.reopenFreeRounds();\r\n\t    };\r\n\t    ResponsibleDialog1.onClose = function () {\r\n\t        neo_games_1.Platforms.Platforms.dialogOpened(\"rci\", false);\r\n\t        ResponsibleDialog1.opened = false;\r\n\t        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n\t            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        neo_games_1.Platforms.Platforms.exitHandler = \"responsibleDialog\";\r\n\t        GameApp_1.GameApp.exit();\r\n\t    };\r\n\t    ResponsibleDialog1.opened = false;\r\n\t    ResponsibleDialog1.DisabledClass = \"_disabled\";\r\n\t    ResponsibleDialog1.showResponsibleDialog1OnCollect = false;\r\n\t    return ResponsibleDialog1;\r\n\t}());\r\n\texports.ResponsibleDialog1 = ResponsibleDialog1;\r\n\n\n/***/ },\n/* 44 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BaseModel_1 = __webpack_require__(45);\r\n\tvar MessageManager = (function () {\r\n\t    function MessageManager() {\r\n\t    }\r\n\t    MessageManager.postpone = function (callback, response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response) &&\r\n\t            !neo_common_1.Utils.isNullOrUndefined(response.messages) &&\r\n\t            response.messages.length > 0) {\r\n\t            if (neo_common_1.Utils.isNullOrUndefined(MessageManager.dialog)) {\r\n\t                MessageManager.dialog = document.getElementById(\"messageDialog\");\r\n\t                if (!neo_common_1.Utils.isNullOrUndefined(MessageManager.dialog)) {\r\n\t                    MessageManager.title = MessageManager.dialog.getElementsByTagName(\"h3\")[0];\r\n\t                    MessageManager.text = document.getElementById(\"messageDialogText\");\r\n\t                    MessageManager.buttonsHolder = document.getElementById(\"messageDialogButtons\");\r\n\t                    MessageManager.buttons = [];\r\n\t                }\r\n\t            }\r\n\t            if (neo_common_1.Utils.isNullOrUndefined(MessageManager.dialog)) {\r\n\t                callback(response);\r\n\t            }\r\n\t            else {\r\n\t                MessageManager.callback = callback;\r\n\t                MessageManager.response = response;\r\n\t                MessageManager.step = 0;\r\n\t                MessageManager.handle();\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            callback(response);\r\n\t        }\r\n\t    };\r\n\t    MessageManager.updateDialogData = function (data) {\r\n\t        MessageManager.resetDialogData();\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"title\"])) {\r\n\t            MessageManager.title.innerHTML = data[\"title\"];\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"text\"])) {\r\n\t            MessageManager.text.innerHTML = data[\"text\"];\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"actions\"])) {\r\n\t            MessageManager.removeAllButtons();\r\n\t            for (var i = 0; i < data[\"actions\"].length; i++) {\r\n\t                var action = data[\"actions\"][i];\r\n\t                switch (action.type) {\r\n\t                    case \"continue\":\r\n\t                        MessageManager.createButton(action[\"text\"], MessageManager.actionContinue.bind(this, action));\r\n\t                        break;\r\n\t                    case \"exit\":\r\n\t                        MessageManager.createButton(action[\"text\"], MessageManager.actionExit.bind(this, action));\r\n\t                        break;\r\n\t                    case \"history\":\r\n\t                        MessageManager.createButton(action[\"text\"], MessageManager.actionHistory.bind(this, action));\r\n\t                        break;\r\n\t                    case \"reload\":\r\n\t                        MessageManager.createButton(action[\"text\"], MessageManager.actionReload.bind(this, action));\r\n\t                        break;\r\n\t                    case \"cashier\":\r\n\t                        MessageManager.createButton(action[\"text\"], MessageManager.actionCashier.bind(this, action));\r\n\t                        break;\r\n\t                    case \"link\":\r\n\t                        MessageManager.createButton(action[\"text\"], MessageManager.actionLink.bind(this, action));\r\n\t                        break;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MessageManager.resetDialogData = function () {\r\n\t        MessageManager.title.innerHTML = Languages_1.Languages.getRid(\"DLG_INFO\");\r\n\t        MessageManager.removeAllButtons();\r\n\t        MessageManager.createButton(Languages_1.Languages.getRid(\"CONTINUE\"), MessageManager.actionContinue);\r\n\t    };\r\n\t    MessageManager.removeAllButtons = function () {\r\n\t        while (MessageManager.buttons.length > 0) {\r\n\t            var button = MessageManager.buttons.pop();\r\n\t            MessageManager.buttonsHolder.removeChild(button);\r\n\t        }\r\n\t    };\r\n\t    MessageManager.createButton = function (text, action) {\r\n\t        var button = document.createElement(\"div\");\r\n\t        button.textContent = text;\r\n\t        button.classList.add(\"dialogBtn\", \"customDialogBtn\");\r\n\t        button.onclick = action;\r\n\t        MessageManager.buttonsHolder.appendChild(button);\r\n\t        MessageManager.buttons.push(button);\r\n\t    };\r\n\t    MessageManager.actionContinue = function (data) {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        MessageManager.handle();\r\n\t    };\r\n\t    MessageManager.actionExit = function (data) {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        neo_games_1.Platforms.Platforms.exitHandler = \"messageDialog\";\r\n\t        GameApp_1.GameApp.exit();\r\n\t    };\r\n\t    MessageManager.actionReload = function (data) {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        neo_games_1.Platforms.Platforms.gameReloading();\r\n\t        if (neo_games_1.Platforms.Platforms.handleGameReload) {\r\n\t            return;\r\n\t        }\r\n\t        window.location.reload(true);\r\n\t    };\r\n\t    MessageManager.actionHistory = function (data) {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"linkUrl\"])) {\r\n\t            neo_games_1.Platforms.Platforms.gotoHistory({ target: data[\"linkUrl\"] });\r\n\t            if (neo_games_1.Platforms.Platforms.handleOpenHistoryPage) {\r\n\t                return;\r\n\t            }\r\n\t            window.open(data[\"linkUrl\"], !neo_common_1.Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_blank\");\r\n\t        }\r\n\t        else if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.HistoryUrl)) {\r\n\t            GameApp_1.GameApp.openGameRoundHistoryFromUrl();\r\n\t        }\r\n\t        else if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n\t            GameApp_1.GameApp.openGameRoundHistoryFromUrl();\r\n\t        }\r\n\t        else {\r\n\t            GameApp_1.GameApp.openGameRoundHistory();\r\n\t        }\r\n\t    };\r\n\t    MessageManager.actionCashier = function (data) {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"linkUrl\"])) {\r\n\t            neo_games_1.Platforms.Platforms.gotoCasier({ reason: \"InsufficientFunds\", target: data[\"linkUrl\"] });\r\n\t            if (neo_games_1.Platforms.Platforms.handleOpenCashierPage) {\r\n\t                return;\r\n\t            }\r\n\t            window.open(data[\"linkUrl\"], !neo_common_1.Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_self\");\r\n\t        }\r\n\t        else if (!neo_common_1.StringUtils.isNullOrEmpty(AppContext_1.AppContext.gameConfiguration.CashierUrl)) {\r\n\t            neo_games_1.Platforms.Platforms.gotoCasier({\r\n\t                reason: \"InsufficientFunds\",\r\n\t                target: AppContext_1.AppContext.gameConfiguration.CashierUrl,\r\n\t            });\r\n\t            if (neo_games_1.Platforms.Platforms.handleOpenCashierPage) {\r\n\t                return;\r\n\t            }\r\n\t            window.open(AppContext_1.AppContext.gameConfiguration.CashierUrl, \"_self\");\r\n\t        }\r\n\t    };\r\n\t    MessageManager.actionLink = function (data) {\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"linkUrl\"])) {\r\n\t            window.open(data[\"linkUrl\"], !neo_common_1.Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_blank\");\r\n\t        }\r\n\t    };\r\n\t    MessageManager.handle = function () {\r\n\t        if (MessageManager.response.messages.length === MessageManager.step) {\r\n\t            MessageManager.dialog.classList.add(\"_disabled\");\r\n\t            MessageManager.callback(MessageManager.response);\r\n\t            neo_games_1.Platforms.Platforms.dialogOpened(\"default\", false);\r\n\t        }\r\n\t        else {\r\n\t            if (MessageManager.response.messages[MessageManager.step].type == \"plugin\") {\r\n\t                neo_games_1.Platforms.Platforms.sendPluginMessage(MessageManager.response.messages[MessageManager.step].text);\r\n\t                MessageManager.step++;\r\n\t                MessageManager.handle();\r\n\t            }\r\n\t            else {\r\n\t                MessageManager.dialog.classList.remove(\"_disabled\");\r\n\t                MessageManager.updateDialogData(MessageManager.response.messages[MessageManager.step]);\r\n\t                MessageManager.step++;\r\n\t                neo_games_1.Platforms.Platforms.dialogOpened(\"default\", true);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MessageManager.callbackFnc = function (response) {\r\n\t        BaseModel_1.BaseModel.spinContinue();\r\n\t    };\r\n\t    return MessageManager;\r\n\t}());\r\n\texports.MessageManager = MessageManager;\r\n\n\n/***/ },\n/* 45 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar MessageManager_1 = __webpack_require__(44);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar BaseActions_1 = __webpack_require__(46);\r\n\tvar BaseModel = (function () {\r\n\t    function BaseModel(controller) {\r\n\t        this.controller = controller;\r\n\t    }\r\n\t    BaseModel.prototype.start = function (id) {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        GameManager_1.GameManager.gameClient.start(neo_games_1.Communication.Game.GameModules.Base, { index: id }).then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.startReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    BaseModel.prototype.spin = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        BaseModel.GameRequest = {};\r\n\t        BaseModel.GameRequest.module = neo_games_1.Communication.Game.GameModules.Base;\r\n\t        BaseModel.GameRequest.bet = BetManager_1.BetManager.createBetForSpin();\r\n\t        BaseModel.GameRequest.callBackFcn = this.spinReceived.bind(this);\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        GameManager_1.GameManager.gameClient\r\n\t            .spin(neo_games_1.Communication.Game.GameModules.Base, BetManager_1.BetManager.createBetForSpin())\r\n\t            .then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.spinReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    BaseModel.spinContinue = function () {\r\n\t        if (!GameManager_1.GameManager.requestSend && BaseModel.GameRequest) {\r\n\t            GameManager_1.GameManager.requestSend = true;\r\n\t            GameManager_1.GameManager.gameClient\r\n\t                .spin(BaseModel.GameRequest.module, BaseModel.GameRequest.bet)\r\n\t                .then(function (response) {\r\n\t                MessageManager_1.MessageManager.postpone(BaseModel.GameRequest.callBackFcn, response);\r\n\t            });\r\n\t            neo_games_1.Platforms.Platforms.roundStarted({\r\n\t                totalBet: BetManager_1.BetManager.Bet,\r\n\t                freeRound: FreeRoundBonus_1.FreeRoundBonus.inFrb,\r\n\t                userAction: DataManager_1.DataManager.getTrustedUserAction(BaseActions_1.BaseActions.ActionSpin),\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    BaseModel.prototype.end = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        GameManager_1.GameManager.gameClient.endFreespin().then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.endReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    BaseModel.prototype.startReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            this.controller.startReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    BaseModel.prototype.spinReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            BaseModel.GameRequest = null;\r\n\t            this.controller.spinReceived();\r\n\t            neo_games_1.Platforms.Platforms.spinReceived({\r\n\t                balance: parseFloat(neo_common_1.NumberUtils.add(response.balance.real, response.balance.bonus)),\r\n\t                win: GameManager_1.GameManager.baseResponse.currentWin,\r\n\t                totalBet: BetManager_1.BetManager.createBetForSpin().totalBet,\r\n\t                roundId: response.roundId,\r\n\t            });\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    BaseModel.prototype.endReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            this.controller.endReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    BaseModel.GameRequest = null;\r\n\t    return BaseModel;\r\n\t}());\r\n\texports.BaseModel = BaseModel;\r\n\n\n/***/ },\n/* 46 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar BaseActions = (function () {\r\n\t    function BaseActions() {\r\n\t    }\r\n\t    BaseActions.ActionSpin = \"SPIN\";\r\n\t    BaseActions.ActionSpinStop = \"SPIN_STOP\";\r\n\t    BaseActions.ActionAutoplay = \"AUTOPLAY\";\r\n\t    BaseActions.ActionAutoplayStop = \"AUTOPLAY_STOP\";\r\n\t    BaseActions.ActionBetPlus = \"BET_PLUS\";\r\n\t    BaseActions.ActionBetMinus = \"BET_MINUS\";\r\n\t    BaseActions.ActionBetCycle = \"BET_CYCLE\";\r\n\t    BaseActions.ActionMaxBet = \"MAX_BET\";\r\n\t    BaseActions.ActionBaseCollect = \"BASE_COLLECT\";\r\n\t    BaseActions.ActionSelectPayline = \"SELECT_PAYLINE_\";\r\n\t    BaseActions.ActionDenomSelect = \"DENOM_SELECT\";\r\n\t    BaseActions.ActionDenomSelectValue = \"DENOM_SELECT_VALUE_\";\r\n\t    BaseActions.ActionCoinCountSelect = \"COIN_COUNT_SELECT\";\r\n\t    BaseActions.ActionCoinCountSelectValue = \"COIN_COUNT_SELECT_VALUE_\";\r\n\t    BaseActions.ActionBetSelect = \"BET_SELECT\";\r\n\t    BaseActions.ActionBetSelectValue = \"BET_SELECT_VALUE_\";\r\n\t    BaseActions.ActionFsConfiguratorTreasure = \"FS_CONFIGURATOR_TREASURE_\";\r\n\t    return BaseActions;\r\n\t}());\r\n\texports.BaseActions = BaseActions;\r\n\n\n/***/ },\n/* 47 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar UserAction_1 = __webpack_require__(48);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar BaseActions_1 = __webpack_require__(46);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar QuickspinDialog_1 = __webpack_require__(49);\r\n\tvar Paytable_1 = __webpack_require__(51);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\r\n\tvar HtmlController = (function () {\r\n\t    function HtmlController() {\r\n\t    }\r\n\t    HtmlController.registerActionElement = function (action, element) {\r\n\t        if (false) {\r\n\t            this.log(\"registerActionElement action: \" + action);\r\n\t        }\r\n\t        if (this.ActionElements[action] == null) {\r\n\t            this.ActionElements[action] = [];\r\n\t        }\r\n\t        this.ActionElements[action].push(element);\r\n\t    };\r\n\t    HtmlController.registerUiActionElement = function (action, element) {\r\n\t        if (false) {\r\n\t            this.log(\"registerUiActionElement action: \" + action);\r\n\t        }\r\n\t        if (this.UiActionElements[action] == null) {\r\n\t            this.UiActionElements[action] = [];\r\n\t        }\r\n\t        this.UiActionElements[action].push(element);\r\n\t    };\r\n\t    HtmlController.registerUiDispatchElement = function (action, element) {\r\n\t        if (false) {\r\n\t            this.log(\"registerUiDispatchElement action: \" + action);\r\n\t        }\r\n\t        if (this.UiDispatchElements[action] == null) {\r\n\t            this.UiDispatchElements[action] = [];\r\n\t        }\r\n\t        this.UiDispatchElements[action].push(element);\r\n\t    };\r\n\t    HtmlController.registerActionsHoldersElement = function (action, element) {\r\n\t        if (false) {\r\n\t            this.log(\"registerActionsHoldersElement action: \" + action);\r\n\t        }\r\n\t        if (this.ActionsHoldersElements[action] == null) {\r\n\t            this.ActionsHoldersElements[action] = [];\r\n\t        }\r\n\t        this.ActionsHoldersElements[action].push(element);\r\n\t    };\r\n\t    HtmlController.registerUiActionDispatchElement = function (action, element) {\r\n\t        if (false) {\r\n\t            this.log(\"registerUiDispatchElement action: \" + action);\r\n\t        }\r\n\t        if (this.UiActionDispatchElements[action] == null) {\r\n\t            this.UiActionDispatchElements[action] = [];\r\n\t        }\r\n\t        this.UiActionDispatchElements[action].push(element);\r\n\t    };\r\n\t    HtmlController.registerDataElement = function (data, element) {\r\n\t        if (false) {\r\n\t            this.log(\"registerDataElement data: \" + data);\r\n\t        }\r\n\t        if (this.DataElements[data] == null) {\r\n\t            this.DataElements[data] = [];\r\n\t        }\r\n\t        this.DataElements[data].push(element);\r\n\t    };\r\n\t    HtmlController.dispatchAction = function (action) {\r\n\t        if (false) {\r\n\t            this.log(\"dispatchAction action: \" + action);\r\n\t        }\r\n\t        if (!HtmlController.dispatchActionAllowed) {\r\n\t            return;\r\n\t        }\r\n\t        var updateUI = true;\r\n\t        if (action === BaseActions_1.BaseActions.ActionDenomSelect) {\r\n\t            updateUI = false;\r\n\t            if (BetManager_1.BetManager.CoinCountContainer != null) {\r\n\t                BetManager_1.BetManager.CoinCountContainer.disable();\r\n\t            }\r\n\t            if (BetManager_1.BetManager.BetContainer != null) {\r\n\t                BetManager_1.BetManager.BetContainer.disable();\r\n\t            }\r\n\t            if (HtmlController.SoundContainer != null) {\r\n\t                HtmlController.SoundContainer.disable();\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        }\r\n\t        if (action === BaseActions_1.BaseActions.ActionCoinCountSelect) {\r\n\t            updateUI = false;\r\n\t            if (BetManager_1.BetManager.DenomContainer != null) {\r\n\t                BetManager_1.BetManager.DenomContainer.disable();\r\n\t            }\r\n\t            if (BetManager_1.BetManager.BetContainer != null) {\r\n\t                BetManager_1.BetManager.BetContainer.disable();\r\n\t            }\r\n\t            if (HtmlController.SoundContainer != null) {\r\n\t                HtmlController.SoundContainer.disable();\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        }\r\n\t        if (action === BaseActions_1.BaseActions.ActionBetSelect) {\r\n\t            updateUI = false;\r\n\t            if (BetManager_1.BetManager.DenomContainer != null) {\r\n\t                BetManager_1.BetManager.DenomContainer.disable();\r\n\t            }\r\n\t            if (BetManager_1.BetManager.BetContainer != null) {\r\n\t                BetManager_1.BetManager.BetContainer.disable();\r\n\t            }\r\n\t            if (HtmlController.SoundContainer != null) {\r\n\t                HtmlController.SoundContainer.disable();\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameDefinition.ClientHostType === \"Mobile\") {\r\n\t            switch (action) {\r\n\t                case BaseActions_1.BaseActions.ActionBetPlus:\r\n\t                    updateUI = false;\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBetMinus:\r\n\t                    updateUI = false;\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t        if (updateUI) {\r\n\t            this.dispatchUiAction(\"\");\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.dispatchAction(action);\r\n\t    };\r\n\t    HtmlController.setSound = function (level) {\r\n\t        if (HtmlController.SoundContainer != null) {\r\n\t            HtmlController.SoundContainer.setLevel(level);\r\n\t            return;\r\n\t        }\r\n\t        for (var i = 0; i < HtmlController.UiActionElements[UserAction_1.UserAction.ActionToggleSound].length; i++) {\r\n\t            var ele = HtmlController.UiActionElements[UserAction_1.UserAction.ActionToggleSound][i];\r\n\t            if (ele.instance != null) {\r\n\t                ele.instance.classList.remove(\"off\");\r\n\t                ele.instance.classList.remove(\"on1\");\r\n\t                ele.instance.classList.remove(\"on2\");\r\n\t                ele.instance.classList.remove(\"on3\");\r\n\t                switch (level) {\r\n\t                    case 0:\r\n\t                        ele.instance.classList.add(\"off\");\r\n\t                        PIXI.sound.volumeAll = 0;\r\n\t                        neo_games_1.Platforms.Platforms.setVolume(0);\r\n\t                        break;\r\n\t                    case 1:\r\n\t                        ele.instance.classList.add(\"on1\");\r\n\t                        PIXI.sound.volumeAll = 0.25;\r\n\t                        neo_games_1.Platforms.Platforms.setVolume(1);\r\n\t                        break;\r\n\t                    case 2:\r\n\t                        ele.instance.classList.add(\"on2\");\r\n\t                        PIXI.sound.volumeAll = 0.5;\r\n\t                        neo_games_1.Platforms.Platforms.setVolume(2);\r\n\t                        break;\r\n\t                    case 3:\r\n\t                    default:\r\n\t                        ele.instance.classList.add(\"on3\");\r\n\t                        PIXI.sound.volumeAll = 1;\r\n\t                        neo_games_1.Platforms.Platforms.setVolume(3);\r\n\t                        break;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.dispatchUiAction = function (action) {\r\n\t        if (false) {\r\n\t            this.log(\"dispatchUiAction action: \" + action);\r\n\t        }\r\n\t        if (!HtmlController.dispatchActionAllowed) {\r\n\t            return;\r\n\t        }\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.closeDialog();\r\n\t        Jackpot_1.Jackpot.closeAllHistoryDialogs();\r\n\t        neo_games_1.Platforms.Platforms.gameCloseMenu();\r\n\t        if (action === \"EMPTY\") {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            action = \"\";\r\n\t        }\r\n\t        var playSound = true;\r\n\t        if (HtmlController.ContainerElementsById[\"autoplaySelector\"]) {\r\n\t            var autoplaySelector = HtmlController.ContainerElementsById[\"autoplaySelector\"];\r\n\t            if (autoplaySelector != null &&\r\n\t                autoplaySelector.instance != null &&\r\n\t                !autoplaySelector.instance.classList.contains(\"_disabled\")) {\r\n\t                if (autoplaySelector.recalculateHeight) {\r\n\t                    autoplaySelector.instance.removeAttribute(\"style\");\r\n\t                }\r\n\t                autoplaySelector.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t        if (HtmlController.ContainerElementsById[\"autoplayDialog\"]) {\r\n\t            var autoplayDialog = HtmlController.ContainerElementsById[\"autoplayDialog\"];\r\n\t            if (autoplayDialog != null &&\r\n\t                autoplayDialog.instance != null &&\r\n\t                !autoplayDialog.instance.classList.contains(\"_disabled\")) {\r\n\t                autoplayDialog.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t        if (BetManager_1.BetManager.DenomContainer != null) {\r\n\t            BetManager_1.BetManager.DenomContainer.disable();\r\n\t        }\r\n\t        if (BetManager_1.BetManager.CoinCountContainer != null) {\r\n\t            BetManager_1.BetManager.CoinCountContainer.disable();\r\n\t        }\r\n\t        if (action !== UserAction_1.UserAction.ActionExit && DataManager_1.DataManager.SimilarGames != null) {\r\n\t            DataManager_1.DataManager.SimilarGames.disable();\r\n\t        }\r\n\t        switch (action) {\r\n\t            case \"\":\r\n\t                Paytable_1.Paytable.clearListeners();\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                playSound = false;\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionHelpTerminal:\r\n\t                ModuleManager_1.ModuleManager.cycleHelp();\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionGameRoundReport:\r\n\t                HtmlController.dispatchUiAction(\"\");\r\n\t                GameApp_1.GameApp.openGameRoundHistory(true);\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionExit:\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                if (DataManager_1.DataManager.SimilarGames != null && DataManager_1.DataManager.SimilarGames.enabled) {\r\n\t                    if (DataManager_1.DataManager.SimilarGames.open()) {\r\n\t                    }\r\n\t                    else {\r\n\t                        this.dispatchUiAction(\"\");\r\n\t                    }\r\n\t                    if (HtmlController.SoundContainer != null) {\r\n\t                        HtmlController.SoundContainer.disable();\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    neo_games_1.Platforms.Platforms.exitHandler = \"exitBtn\";\r\n\t                    GameApp_1.GameApp.exit();\r\n\t                }\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionExit + \"2\":\r\n\t                neo_games_1.Platforms.Platforms.exitHandler = \"similarGamesExitBtn\";\r\n\t                GameApp_1.GameApp.exit();\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionToggleSound:\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.toggle();\r\n\t                }\r\n\t                else {\r\n\t                    if (HtmlController.UiActionElements[UserAction_1.UserAction.ActionToggleSound] != null) {\r\n\t                        for (var i = 0; i < HtmlController.UiActionElements[UserAction_1.UserAction.ActionToggleSound].length; i++) {\r\n\t                            var ele = HtmlController.UiActionElements[UserAction_1.UserAction.ActionToggleSound][i];\r\n\t                            if (ele.instance != null) {\r\n\t                                if (ele.instance.classList.contains(\"off\")) {\r\n\t                                    ele.instance.classList.remove(\"off\");\r\n\t                                    ele.instance.classList.add(\"on3\");\r\n\t                                    PIXI.sound.volumeAll = 1;\r\n\t                                    AppContext_1.AppContext.current.setVolume(3);\r\n\t                                    neo_games_1.Platforms.Platforms.setVolume(3);\r\n\t                                }\r\n\t                                else if (ele.instance.classList.contains(\"on1\")) {\r\n\t                                    ele.instance.classList.remove(\"on1\");\r\n\t                                    ele.instance.classList.add(\"off\");\r\n\t                                    playSound = false;\r\n\t                                    PIXI.sound.volumeAll = 0;\r\n\t                                    AppContext_1.AppContext.current.setVolume(0);\r\n\t                                    neo_games_1.Platforms.Platforms.setVolume(0);\r\n\t                                }\r\n\t                                else if (ele.instance.classList.contains(\"on2\")) {\r\n\t                                    ele.instance.classList.remove(\"on2\");\r\n\t                                    ele.instance.classList.add(\"on1\");\r\n\t                                    PIXI.sound.volumeAll = 0.25;\r\n\t                                    AppContext_1.AppContext.current.setVolume(1);\r\n\t                                    neo_games_1.Platforms.Platforms.setVolume(1);\r\n\t                                }\r\n\t                                else if (ele.instance.classList.contains(\"on3\")) {\r\n\t                                    ele.instance.classList.remove(\"on3\");\r\n\t                                    ele.instance.classList.add(\"on2\");\r\n\t                                    PIXI.sound.volumeAll = 0.5;\r\n\t                                    AppContext_1.AppContext.current.setVolume(2);\r\n\t                                    neo_games_1.Platforms.Platforms.setVolume(2);\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionToggleBet:\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.toggleUiAction(action, \"toggle\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionTogglePaytable:\r\n\t                this.toggleUiAction(action, \"toggle\");\r\n\t                this.toggleUiAction(UserAction_1.UserAction.ActionHelpOn, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                Paytable_1.Paytable.instance.updateDataValues();\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionToggleMenu:\r\n\t                this.toggleUiAction(action, \"toggle\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"remove\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionToggleMenuBack:\r\n\t                this.toggleUiAction(UserAction_1.UserAction.ActionToggleMenu, \"toggle\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionHelpOn:\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.toggleUiAction(action, \"toggle\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                neo_games_1.Platforms.Platforms.gotoHelp();\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionHelpOff:\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionPaytableOn:\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.toggleUiAction(action, \"toggle\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"remove\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                neo_games_1.Platforms.Platforms.gotoPaytable();\r\n\t                Paytable_1.Paytable.instance.updateDataValues();\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionPaytableOff:\r\n\t                Paytable_1.Paytable.clearListeners();\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionSettingsOn:\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.toggleUiAction(action, \"toggle\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                neo_games_1.Platforms.Platforms.gotoSettings();\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionSettingsOff:\r\n\t                this.disableAllUiDispatchers(action);\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOn, \"remove\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionMenuOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionHelpOff, \"add\");\r\n\t                this.changeUiAcionDispatchers(UserAction_1.UserAction.ActionPaytableOff, \"add\");\r\n\t                if (HtmlController.SoundContainer != null) {\r\n\t                    HtmlController.SoundContainer.disable();\r\n\t                }\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionQuickspinDialogOff:\r\n\t                QuickspinDialog_1.QuickspinDialog.closeDialog();\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionQuickspinToggle:\r\n\t                DataManager_1.DataManager.quickspinSet();\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionVibrationToggle:\r\n\t                DataManager_1.DataManager.vibrationSet();\r\n\t                break;\r\n\t            case UserAction_1.UserAction.ActionSwitchControls:\r\n\t                var body = document.body;\r\n\t                if (body.classList.contains(\"reverse\")) {\r\n\t                    body.classList.remove(\"reverse\");\r\n\t                }\r\n\t                else {\r\n\t                    body.classList.add(\"reverse\");\r\n\t                }\r\n\t                break;\r\n\t            default:\r\n\t                if (false) {\r\n\t                    this.log(\"No element with ui disptacher: \" + action);\r\n\t                }\r\n\t        }\r\n\t        if (playSound) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        }\r\n\t    };\r\n\t    HtmlController.disableAllUiDispatchers = function (action) {\r\n\t        for (var key in this.UiDispatchElements) {\r\n\t            for (var i = 0; i < this.UiDispatchElements[key].length; i++) {\r\n\t                if (this.UiDispatchElements[key][i].instance.classList.contains(HtmlController.DisabledClass) ===\r\n\t                    false &&\r\n\t                    key != action) {\r\n\t                    this.UiDispatchElements[key][i].instance.classList.add(HtmlController.DisabledClass);\r\n\t                    if (this.UiActionDispatchElements[key] != null) {\r\n\t                        for (var j = 0; j < this.UiActionDispatchElements[key].length; j++) {\r\n\t                            this.UiActionDispatchElements[key][j].instance.classList.toggle(HtmlController.DisabledClass);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.changeUiAcionDispatchers = function (action, type) {\r\n\t        if (this.UiActionDispatchElements[action] != null) {\r\n\t            for (var i = 0; i < this.UiActionDispatchElements[action].length; i++) {\r\n\t                if (type === \"add\") {\r\n\t                    if (this.UiActionDispatchElements[action][i].instance.classList.contains(HtmlController.DisabledClass) === false) {\r\n\t                        this.UiActionDispatchElements[action][i].instance.classList.add(HtmlController.DisabledClass);\r\n\t                    }\r\n\t                }\r\n\t                else if (type === \"remove\") {\r\n\t                    this.UiActionDispatchElements[action][i].instance.classList.remove(HtmlController.DisabledClass);\r\n\t                }\r\n\t                else {\r\n\t                    this.UiActionDispatchElements[action][i].instance.classList.toggle(HtmlController.DisabledClass);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.toggleUiAction = function (action, type) {\r\n\t        if (this.UiDispatchElements[action] != null) {\r\n\t            for (var i = 0; i < this.UiDispatchElements[action].length; i++) {\r\n\t                if (type === \"add\") {\r\n\t                    if (this.UiDispatchElements[action][i].instance.classList.contains(HtmlController.DisabledClass) ===\r\n\t                        false) {\r\n\t                        this.UiDispatchElements[action][i].instance.classList.add(HtmlController.DisabledClass);\r\n\t                    }\r\n\t                }\r\n\t                else if (type === \"remove\") {\r\n\t                    this.UiDispatchElements[action][i].instance.classList.remove(HtmlController.DisabledClass);\r\n\t                }\r\n\t                else {\r\n\t                    this.UiDispatchElements[action][i].instance.classList.toggle(HtmlController.DisabledClass);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.updateDataElement = function (data, value) {\r\n\t        if (this.DataElements[data] != null) {\r\n\t            for (var i = 0; i < this.DataElements[data].length; i++) {\r\n\t                HtmlController.currencyNoZero(data, value);\r\n\t                this.DataElements[data][i].setText(value);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"No element with data id: \" + data);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.updateDataElements = function (gameData) {\r\n\t        if (false) {\r\n\t            this.log(\"udpateDataElements\");\r\n\t        }\r\n\t        for (var key in gameData) {\r\n\t            if (this.DataElements[key] != null) {\r\n\t                for (var i = 0; i < this.DataElements[key].length; i++) {\r\n\t                    HtmlController.currencyNoZero(key, gameData[key]);\r\n\t                    this.DataElements[key][i].setText(gameData[key]);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"No element with data id: \" + key);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.currencyNoZero = function (data, value) {\r\n\t        var parsedValue;\r\n\t        if (value === \"\") {\r\n\t            parsedValue = 0;\r\n\t        }\r\n\t        else {\r\n\t            parsedValue = parseFloat(value);\r\n\t        }\r\n\t        if (data === GameData_1.GameData.DataTotalWin) {\r\n\t            if (parsedValue === 0) {\r\n\t                HtmlController.toggleElementsByClass(\"currencyNoZero\");\r\n\t            }\r\n\t            else {\r\n\t                HtmlController.toggleElementsByClass(\"currencyNoZero\", true);\r\n\t            }\r\n\t        }\r\n\t        else if (data === GameData_1.GameData.DataGambleColorWin) {\r\n\t            if (parsedValue === 0) {\r\n\t                HtmlController.toggleElementsByClass(\"gambleCurrencyNoZero\");\r\n\t            }\r\n\t            else {\r\n\t                HtmlController.toggleElementsByClass(\"gambleCurrencyNoZero\", true);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.toggleElementsByClass = function (cls, show) {\r\n\t        if (show === void 0) { show = false; }\r\n\t        var elements = document.getElementsByClassName(cls);\r\n\t        for (var i = 0; i < elements.length; i++) {\r\n\t            var element = elements[i];\r\n\t            if (element != null) {\r\n\t                if (show) {\r\n\t                    element.style.display = \"\";\r\n\t                }\r\n\t                else {\r\n\t                    element.style.display = \"none\";\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.updateActionElements = function (actionData) {\r\n\t        if (false) {\r\n\t            this.log(\"updateActionElements\");\r\n\t        }\r\n\t        for (var key in actionData) {\r\n\t            if (this.ActionElements[key] != null) {\r\n\t                var i;\r\n\t                for (i = 0; i < this.ActionElements[key].length; i++) {\r\n\t                    this.ActionElements[key][i].changeState(actionData[key]);\r\n\t                }\r\n\t                if (this.ActionsHoldersElements[key] != null) {\r\n\t                    for (i = 0; i < this.ActionsHoldersElements[key].length; i++) {\r\n\t                        this.ActionsHoldersElements[key][i].changeState(actionData[key]);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    var keys = neo_common_1.lodash.keys(this.ActionElements).join(\";\");\r\n\t                    this.log(\"No element with data id: \" + key + \", current keys: \" + keys);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.updateActionElement = function (key, value) {\r\n\t        var i;\r\n\t        if (this.ActionElements[key] != null) {\r\n\t            for (i = 0; i < this.ActionElements[key].length; i++) {\r\n\t                this.ActionElements[key][i].changeState(value);\r\n\t            }\r\n\t        }\r\n\t        if (this.ActionsHoldersElements[key] != null) {\r\n\t            for (i = 0; i < this.ActionsHoldersElements[key].length; i++) {\r\n\t                this.ActionsHoldersElements[key][i].changeState(value);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlController.log = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"HtmlController\", data);\r\n\t        }\r\n\t    };\r\n\t    HtmlController.Configurations = { SHOW_BONUS_BALANCE: false };\r\n\t    HtmlController.ActionElements = {};\r\n\t    HtmlController.UiActionElements = {};\r\n\t    HtmlController.UiDispatchElements = {};\r\n\t    HtmlController.UiActionDispatchElements = {};\r\n\t    HtmlController.ActionsHoldersElements = {};\r\n\t    HtmlController.ContainerElementsById = {};\r\n\t    HtmlController.DataElements = {};\r\n\t    HtmlController.RidElements = [];\r\n\t    HtmlController.DisabledClass = \"_disabled\";\r\n\t    HtmlController.HideButtons = [];\r\n\t    HtmlController.dispatchActionAllowed = true;\r\n\t    return HtmlController;\r\n\t}());\r\n\texports.HtmlController = HtmlController;\r\n\n\n/***/ },\n/* 48 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar UserAction = (function () {\r\n\t    function UserAction() {\r\n\t    }\r\n\t    UserAction.ActionToggleSound = \"TOGGLE_SOUND\";\r\n\t    UserAction.ActionExit = \"EXIT\";\r\n\t    UserAction.ActionTogglePaytable = \"TOGGLE_PAYTABLE\";\r\n\t    UserAction.ActionPaytableOn = \"PAYTABLE_ON\";\r\n\t    UserAction.ActionPaytableOff = \"PAYTABLE_OFF\";\r\n\t    UserAction.ActionMenuOn = \"MENU_ON\";\r\n\t    UserAction.ActionMenuOff = \"MENU_OFF\";\r\n\t    UserAction.ActionToggleMenu = \"TOGGLE_MENU\";\r\n\t    UserAction.ActionToggleMenuBack = \"TOGGLE_MENU_BACK\";\r\n\t    UserAction.ActionSwitchControls = \"SWITCH_CONTROLS\";\r\n\t    UserAction.ActionHelpOn = \"HELP_ON\";\r\n\t    UserAction.ActionHelpOff = \"HELP_OFF\";\r\n\t    UserAction.ActionHelpTerminal = \"TERMINAL_HELP_CYCLE\";\r\n\t    UserAction.ActionToggleBet = \"TOGGLE_BET\";\r\n\t    UserAction.ActionSettingsOn = \"SETTINGS_ON\";\r\n\t    UserAction.ActionSettingsOff = \"SETTINGS_OFF\";\r\n\t    UserAction.ActionQuickspinDialogOff = \"QUICKSPIN_DIALOG_OFF\";\r\n\t    UserAction.ActionQuickspinToggle = \"QUICKSPIN_TOGGLE\";\r\n\t    UserAction.ActionVibrationToggle = \"VIBRATION_TOGGLE\";\r\n\t    UserAction.ActionGameRoundReport = \"GAME_ROUND_REPORT\";\r\n\t    return UserAction;\r\n\t}());\r\n\texports.UserAction = UserAction;\r\n\n\n/***/ },\n/* 49 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar FrameTimerPool_1 = __webpack_require__(22);\r\n\tvar gsap_1 = __webpack_require__(16);\r\n\tvar PageVisibilityHandler_1 = __webpack_require__(50);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar QuickspinDialog = (function () {\r\n\t    function QuickspinDialog() {\r\n\t    }\r\n\t    QuickspinDialog.openDialog = function () {\r\n\t        QuickspinDialog.initializeDialog();\r\n\t        if (!QuickspinDialog._opened && !QuickspinDialog._wasOpened) {\r\n\t            if (QuickspinDialog._container != null && QuickspinDialog._container.classList.contains(\"_disabled\")) {\r\n\t                QuickspinDialog._container.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            PIXI.sound.pauseAll();\r\n\t            StageController_1.StageController.pauseAnimations();\r\n\t            FrameTimerPool_1.FrameTimerPool.pause();\r\n\t            gsap_1.TweenMax.pauseAll();\r\n\t            PageVisibilityHandler_1.PageVisibilityHandler.Enabled = false;\r\n\t            QuickspinDialog._opened = true;\r\n\t            QuickspinDialog._wasOpened = true;\r\n\t            neo_games_1.Platforms.Platforms.dialogOpened(\"quickspin\", true);\r\n\t        }\r\n\t    };\r\n\t    QuickspinDialog.closeDialog = function () {\r\n\t        if (QuickspinDialog._opened) {\r\n\t            QuickspinDialog.initializeDialog();\r\n\t            if (QuickspinDialog._container != null && !QuickspinDialog._container.classList.contains(\"_disabled\")) {\r\n\t                QuickspinDialog._container.classList.add(\"_disabled\");\r\n\t            }\r\n\t            PIXI.sound.resumeAll();\r\n\t            StageController_1.StageController.resumeAnimations();\r\n\t            FrameTimerPool_1.FrameTimerPool.unpause();\r\n\t            gsap_1.TweenMax.resumeAll();\r\n\t            PageVisibilityHandler_1.PageVisibilityHandler.Enabled = true;\r\n\t            QuickspinDialog._opened = false;\r\n\t            neo_games_1.Platforms.Platforms.quickSpinDialog(DataManager_1.DataManager.quickspinEnabled());\r\n\t            neo_games_1.Platforms.Platforms.dialogOpened(\"quickspin\", false);\r\n\t        }\r\n\t    };\r\n\t    QuickspinDialog.initializeDialog = function () {\r\n\t        if (QuickspinDialog._container == null) {\r\n\t            QuickspinDialog._container = document.getElementById(\"quickspinDialog\");\r\n\t        }\r\n\t    };\r\n\t    QuickspinDialog._opened = false;\r\n\t    QuickspinDialog._wasOpened = false;\r\n\t    return QuickspinDialog;\r\n\t}());\r\n\texports.QuickspinDialog = QuickspinDialog;\r\n\n\n/***/ },\n/* 50 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar FrameTimerPool_1 = __webpack_require__(22);\r\n\tvar gsap_1 = __webpack_require__(16);\r\n\tvar PageVisibilityHandler = (function () {\r\n\t    function PageVisibilityHandler() {\r\n\t    }\r\n\t    PageVisibilityHandler.handle = function () {\r\n\t        var hidden;\r\n\t        var visibilityChange;\r\n\t        if (typeof document.hidden !== \"undefined\") {\r\n\t            hidden = \"hidden\";\r\n\t            visibilityChange = \"visibilitychange\";\r\n\t        }\r\n\t        else if (typeof document.mozHidden !== \"undefined\") {\r\n\t            hidden = \"mozHidden\";\r\n\t            visibilityChange = \"mozvisibilitychange\";\r\n\t        }\r\n\t        else if (typeof document.msHidden !== \"undefined\") {\r\n\t            hidden = \"msHidden\";\r\n\t            visibilityChange = \"msvisibilitychange\";\r\n\t        }\r\n\t        else if (typeof document.webkitHidden !== \"undefined\") {\r\n\t            hidden = \"webkitHidden\";\r\n\t            visibilityChange = \"webkitvisibilitychange\";\r\n\t        }\r\n\t        else {\r\n\t            return;\r\n\t        }\r\n\t        document.addEventListener(visibilityChange, function (e) {\r\n\t            if (PageVisibilityHandler.Enabled) {\r\n\t                var isIos = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\r\n\t                if (document[hidden]) {\r\n\t                    PageVisibilityHandler.pauseAll();\r\n\t                }\r\n\t                else {\r\n\t                    if (isIos) {\r\n\t                        clearTimeout(PageVisibilityHandler.Timer);\r\n\t                        PageVisibilityHandler.Timer = setTimeout(function () {\r\n\t                            PageVisibilityHandler.resumeAll();\r\n\t                        }, 200);\r\n\t                    }\r\n\t                    else {\r\n\t                        PageVisibilityHandler.resumeAll();\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }, false);\r\n\t        window.addEventListener(\"focus\", function () {\r\n\t            var isIos = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\r\n\t            if (isIos) {\r\n\t                var context = PIXI.sound.context.audioContext;\r\n\t                if (context.state === \"suspended\" || context.state === \"interrupted\") {\r\n\t                    context.resume();\r\n\t                }\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    PageVisibilityHandler.pauseAll = function () {\r\n\t        gsap_1.TweenMax.pauseAll();\r\n\t        FrameTimerPool_1.FrameTimerPool.pause();\r\n\t        PIXI.sound.pauseAll();\r\n\t    };\r\n\t    PageVisibilityHandler.resumeAll = function () {\r\n\t        gsap_1.TweenMax.resumeAll();\r\n\t        FrameTimerPool_1.FrameTimerPool.unpause();\r\n\t        PIXI.sound.resumeAll();\r\n\t        PIXI.sound.unmuteAll();\r\n\t    };\r\n\t    PageVisibilityHandler.Enabled = true;\r\n\t    return PageVisibilityHandler;\r\n\t}());\r\n\texports.PageVisibilityHandler = PageVisibilityHandler;\r\n\n\n/***/ },\n/* 51 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar UserAction_1 = __webpack_require__(48);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar Paytable = (function () {\r\n\t    function Paytable() {\r\n\t        Paytable.instance = this;\r\n\t    }\r\n\t    Paytable.prototype.initialize = function () {\r\n\t        var prewPageButton = document.getElementById(\"paytableButtonLeft\");\r\n\t        var nextPageButton = document.getElementById(\"paytableButtonRight\");\r\n\t        if (prewPageButton != null) {\r\n\t            prewPageButton.onclick = this.prewPage.bind(this);\r\n\t        }\r\n\t        if (nextPageButton != null) {\r\n\t            nextPageButton.onclick = this.nextPage.bind(this);\r\n\t        }\r\n\t        this._pages = document.getElementsByClassName(\"paytablePage\");\r\n\t        this._paginations = document.getElementsByClassName(\"paytablePageNumber\");\r\n\t        this.updateDataValues();\r\n\t    };\r\n\t    Paytable.prototype.updateDataValues = function () {\r\n\t        var config = Configuration_1.Configuration.Configurations[\"PaytableConfiguration\"];\r\n\t        if (config != null) {\r\n\t            var data = {};\r\n\t            var next = config.firstElementChild;\r\n\t            var maxValue = 0;\r\n\t            while (next != null) {\r\n\t                if (next.nodeName == \"Pages\") {\r\n\t                    if (next.hasAttribute(\"Payouts\")) {\r\n\t                        Paytable.payoutPage = parseInt(next.getAttribute(\"Payouts\")) - 1;\r\n\t                    }\r\n\t                }\r\n\t                else if (next.hasAttribute(\"Symbol\")) {\r\n\t                    var id = next.getAttribute(\"Symbol\");\r\n\t                    var attrCounts = null;\r\n\t                    var attrValues = null;\r\n\t                    var i;\r\n\t                    if (next.hasAttribute(\"Counts\")) {\r\n\t                        attrCounts = next.getAttribute(\"Counts\");\r\n\t                        var counts = next.getAttribute(\"Counts\").split(\";\");\r\n\t                        for (i = 0; i < counts.length; i++) {\r\n\t                            data[\"PTB_SYMBOL_\" + id + \"_COUNT_\" + (i + 1)] =\r\n\t                                Paytable.Configurations.PAYTABLE_COUNT_PREFIX +\r\n\t                                    counts[i] +\r\n\t                                    Paytable.Configurations.PAYTABLE_COUNT_POSTFIX;\r\n\t                        }\r\n\t                    }\r\n\t                    if (next.hasAttribute(\"Values\")) {\r\n\t                        attrValues = next.getAttribute(\"Values\");\r\n\t                        var values = next.getAttribute(\"Values\").split(\";\");\r\n\t                        for (i = 0; i < values.length; i++) {\r\n\t                            if (parseInt(values[i]) > maxValue) {\r\n\t                                maxValue = parseInt(values[i]);\r\n\t                            }\r\n\t                            data[\"PTB_SYMBOL_\" + id + \"_VALUE_\" + (i + 1)] = this.getPaytableValue(values[i]);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t            if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration.PaytableUseValue) {\r\n\t                var elements = document.getElementsByClassName(\"ptbTotalBetMultiplierDisplay\");\r\n\t                for (var i_1 = 0; i_1 < elements.length; i_1++) {\r\n\t                    elements[i_1].classList.add(\"_hidden\");\r\n\t                }\r\n\t                elements = document.getElementsByClassName(\"ptbTotalBetMultiplier\");\r\n\t                for (var i_2 = 0; i_2 < elements.length; i_2++) {\r\n\t                    elements[i_2].classList.add(\"_invisible\");\r\n\t                }\r\n\t            }\r\n\t            if (data != null) {\r\n\t                this.updateFontSize(maxValue, data);\r\n\t                HtmlController_1.HtmlController.updateDataElements(data);\r\n\t            }\r\n\t            this.customContent();\r\n\t        }\r\n\t    };\r\n\t    Paytable.prototype.getPaytableValue = function (value, valueSepratator) {\r\n\t        if (valueSepratator === void 0) { valueSepratator = \"-\"; }\r\n\t        var valueArray = value.split(valueSepratator);\r\n\t        for (var i = 0; i < valueArray.length; i++) {\r\n\t            if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration.PaytableUseValue) {\r\n\t                valueArray[i] =\r\n\t                    Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, neo_common_1.NumberUtils.multiply(valueArray[i], BetManager_1.BetManager.Bet)) +\r\n\t                        \" \" +\r\n\t                        DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency);\r\n\t            }\r\n\t            else {\r\n\t                valueArray[i] =\r\n\t                    Paytable.Configurations.PAYTABLE_VALUE_PREFIX +\r\n\t                        valueArray[i] +\r\n\t                        Paytable.Configurations.PAYTABLE_VALUE_POSTFIX;\r\n\t            }\r\n\t        }\r\n\t        return valueArray.join(valueSepratator);\r\n\t    };\r\n\t    Paytable.prototype.updateFontSize = function (maxValue, data) {\r\n\t        if (AppContext_1.AppContext != null && !AppContext_1.AppContext.gameConfiguration.PaytableUseValue) {\r\n\t            return;\r\n\t        }\r\n\t        var elements = HtmlController_1.HtmlController.DataElements[\"PTB_SYMBOL_1_VALUE_1\"];\r\n\t        var conversionRate = 1;\r\n\t        if (elements != null && elements.length > 0) {\r\n\t            var element = elements[0].instance;\r\n\t            element.removeAttribute(\"style\");\r\n\t            if (this._defaultWidth == undefined) {\r\n\t                this._defaultFontSize = parseInt(window.getComputedStyle(element).fontSize);\r\n\t                var defaultWidth = window.getComputedStyle(element).width;\r\n\t                this._defaultWidth =\r\n\t                    defaultWidth.indexOf(\"%\") > -1 ? undefined : parseInt(window.getComputedStyle(element).width);\r\n\t                this._maxBet = Math.max.apply(Math, BetManager_1.BetManager.TotalBets);\r\n\t            }\r\n\t            element.textContent =\r\n\t                Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, neo_common_1.NumberUtils.multiply(maxValue, BetManager_1.BetManager.Bet)) +\r\n\t                    \" \" +\r\n\t                    DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency);\r\n\t            element.style.fontSize = this._defaultFontSize + \"px\";\r\n\t            element.style.width = \"auto\";\r\n\t            element.style.whiteSpace = \"nowrap\";\r\n\t            element.offsetWidth;\r\n\t            var currentWidth = parseFloat(window.getComputedStyle(element).width);\r\n\t            conversionRate = this._defaultWidth / (currentWidth * 1.1);\r\n\t            if (isNaN(conversionRate) || conversionRate > 1) {\r\n\t                conversionRate = 1;\r\n\t            }\r\n\t            element.style.fontSize = \"\";\r\n\t            element.style.width = \"\";\r\n\t        }\r\n\t        var fontConversion = window[\"CHANNEL\"] == \"mobile\" ? 0.65 : 0.75;\r\n\t        var fontSize = Math.floor(this._defaultFontSize * conversionRate * fontConversion) + \"px\";\r\n\t        for (var key in data) {\r\n\t            elements = HtmlController_1.HtmlController.DataElements[key];\r\n\t            if (elements != null) {\r\n\t                for (var i = 0; i < elements.length; i++) {\r\n\t                    elements[i].instance.style.fontSize = fontSize;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Paytable.prototype.customContent = function () {\r\n\t        if (AppContext_1.AppContext != null && !AppContext_1.AppContext.gameConfiguration.PaytableUseValue) {\r\n\t            return;\r\n\t        }\r\n\t    };\r\n\t    Paytable.prototype.prewPage = function () {\r\n\t        var activeIndex = this.disableElementsAndReturnActive();\r\n\t        if (this._pages != null) {\r\n\t            if (activeIndex === 0) {\r\n\t                this._pages[this._pages.length - 1].classList.remove(\"_disabled\");\r\n\t                this._pages[this._pages.length - 1].classList.add(\"_active\");\r\n\t            }\r\n\t            else {\r\n\t                this._pages[activeIndex - 1].classList.remove(\"_disabled\");\r\n\t                this._pages[activeIndex - 1].classList.add(\"_active\");\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        }\r\n\t        if (this._paginations != null) {\r\n\t            if (activeIndex === 0) {\r\n\t                this._paginations[this._paginations.length - 1].classList.remove(\"_disabled\");\r\n\t                this._paginations[this._paginations.length - 1].classList.add(\"_active\");\r\n\t            }\r\n\t            else {\r\n\t                this._paginations[activeIndex - 1].classList.remove(\"_disabled\");\r\n\t                this._paginations[activeIndex - 1].classList.add(\"_active\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Paytable.prototype.nextPage = function () {\r\n\t        var activeIndex = this.disableElementsAndReturnActive();\r\n\t        if (this._pages != null) {\r\n\t            if (activeIndex === this._pages.length - 1) {\r\n\t                this._pages[0].classList.remove(\"_disabled\");\r\n\t                this._pages[0].classList.add(\"_active\");\r\n\t            }\r\n\t            else {\r\n\t                this._pages[activeIndex + 1].classList.remove(\"_disabled\");\r\n\t                this._pages[activeIndex + 1].classList.add(\"_active\");\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        }\r\n\t        if (this._paginations != null) {\r\n\t            if (activeIndex === this._paginations.length - 1) {\r\n\t                this._paginations[0].classList.remove(\"_disabled\");\r\n\t                this._paginations[0].classList.add(\"_active\");\r\n\t            }\r\n\t            else {\r\n\t                this._paginations[activeIndex + 1].classList.remove(\"_disabled\");\r\n\t                this._paginations[activeIndex + 1].classList.add(\"_active\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Paytable.prototype.setPage = function (page) {\r\n\t        if (page < 0 || page > this._pages.length - 1) {\r\n\t            return;\r\n\t        }\r\n\t        this.disableElementsAndReturnActive();\r\n\t        if (this._pages != null) {\r\n\t            this._pages[page].classList.remove(\"_disabled\");\r\n\t            this._pages[page].classList.add(\"_active\");\r\n\t            this._pages[page].scrollIntoView();\r\n\t        }\r\n\t        if (this._paginations != null) {\r\n\t            this._paginations[page].classList.remove(\"_disabled\");\r\n\t            this._paginations[page].classList.add(\"_active\");\r\n\t        }\r\n\t    };\r\n\t    Paytable.prototype.disableElementsAndReturnActive = function () {\r\n\t        var activeIndex = 0;\r\n\t        for (var i = 0; i < this._pages.length; i++) {\r\n\t            var element = this._pages[i];\r\n\t            if (element != null) {\r\n\t                if (!element.classList.contains(\"_disabled\")) {\r\n\t                    element.classList.add(\"_disabled\");\r\n\t                }\r\n\t                if (element.classList.contains(\"_active\")) {\r\n\t                    activeIndex = i;\r\n\t                    element.classList.remove(\"_active\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this._paginations.length; i++) {\r\n\t            var element = this._paginations[i];\r\n\t            if (element != null) {\r\n\t                if (!element.classList.contains(\"_disabled\")) {\r\n\t                    element.classList.add(\"_disabled\");\r\n\t                }\r\n\t                if (element.classList.contains(\"_active\")) {\r\n\t                    element.classList.remove(\"_active\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return activeIndex;\r\n\t    };\r\n\t    Paytable.openAtStart = function (newGameRound) {\r\n\t        if (newGameRound === void 0) { newGameRound = false; }\r\n\t        if (Paytable.shouldOpen(newGameRound)) {\r\n\t            Paytable.show();\r\n\t        }\r\n\t    };\r\n\t    Paytable.show = function () {\r\n\t        Paytable.hasBeenDisplayed = true;\r\n\t        var dipatchElementId = UserAction_1.UserAction.ActionPaytableOn;\r\n\t        if (HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId]) {\r\n\t            var dipatchElement = HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\t            if (dipatchElement != null) {\r\n\t                if (dipatchElement.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionPaytableOn);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        Paytable.openPayoutPage();\r\n\t        window.addEventListener(\"resize\", Paytable.openPayoutPage);\r\n\t    };\r\n\t    Paytable.openPayoutPage = function () {\r\n\t        Paytable.instance.setPage(Paytable.payoutPage);\r\n\t    };\r\n\t    Paytable.clearListeners = function () {\r\n\t        window.removeEventListener(\"resize\", Paytable.openPayoutPage);\r\n\t    };\r\n\t    Paytable.shouldOpen = function (newGameRound, isSpin) {\r\n\t        if (newGameRound === void 0) { newGameRound = false; }\r\n\t        if (isSpin === void 0) { isSpin = false; }\r\n\t        if (!AppContext_1.AppContext || !AppContext_1.AppContext.gameConfiguration.ShowPaytableAtStart) {\r\n\t            return false;\r\n\t        }\r\n\t        if (Paytable.hasBeenDisplayed && newGameRound) {\r\n\t            return false;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            return false;\r\n\t        }\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed && !isSpin) {\r\n\t            return false;\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t            return false;\r\n\t        }\r\n\t        return true;\r\n\t    };\r\n\t    Paytable.Configurations = {\r\n\t        PAYTABLE_COUNT_PREFIX: \"\",\r\n\t        PAYTABLE_COUNT_POSTFIX: \"\",\r\n\t        PAYTABLE_VALUE_PREFIX: \"\",\r\n\t        PAYTABLE_VALUE_POSTFIX: \"x\",\r\n\t    };\r\n\t    Paytable.hasBeenDisplayed = false;\r\n\t    Paytable.payoutPage = -1;\r\n\t    return Paytable;\r\n\t}());\r\n\texports.Paytable = Paytable;\r\n\n\n/***/ },\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Configuration = (function () {\r\n\t    function Configuration() {\r\n\t    }\r\n\t    Configuration.Configurations = {};\r\n\t    Configuration = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Element)\r\n\t    ], Configuration);\r\n\t    return Configuration;\r\n\t}());\r\n\texports.Configuration = Configuration;\r\n\texports.GeneralConfigurationAttributes = {\r\n\t    REEL_COUNT: \"ReelCount\",\r\n\t    REEL_X: \"ReelX\",\r\n\t    REEL_Y: \"ReelY\",\r\n\t    SYMBOL_WIDTH: \"SymbolWidth\",\r\n\t    SYMBOL_HEIGHT: \"SymbolHeight\",\r\n\t    SYMBOL_BOTTOM_COUNT: \"SymbolBottomCount\",\r\n\t    SYMBOL_TOP_COUNT: \"SymbolTopCount\",\r\n\t    VISIBLE_SYMBOL_COUNT: \"VisibleSymbolCount\",\r\n\t    WINS_MULTIPLIERS: \"WinsMultipliers\",\r\n\t    WINS_ANIMATIONS: \"WinsAnimations\",\r\n\t};\r\n\texports.ReelConfigurationAttributes = {\r\n\t    PRE_ROLL: \"PreRoll\",\r\n\t    PRE_ROLL_SPEED: \"PreRollSpeed\",\r\n\t    POST_ROLL: \"PostRoll\",\r\n\t    POST_ROLL_SPEED: \"PostRollSpeed\",\r\n\t    SPEED: \"Speed\",\r\n\t    FORCE_SPEED_MULTIPLER: \"ForceSpeedMultipler\",\r\n\t};\r\n\texports.MachineConfigurationAttributes = {\r\n\t    MIN_SPIN_ROTATION: \"MinSpinRotation\",\r\n\t    MIN_SPIN_ROTATION_LONG: \"MinSpinRotationLong\",\r\n\t    START_DELAY: \"StartDelay\",\r\n\t    STOP_DELAY: \"StopDelay\",\r\n\t    REEL_CONFIGURATION: \"ReelConfiguration\",\r\n\t    TEASINGS: \"Teasings\",\r\n\t    TEASING_SYMBOLS: \"TeasingSymbols\",\r\n\t    TEASING_STOP_DELAY: \"TeasingStopDelay\",\r\n\t};\r\n\n\n/***/ },\n/* 53 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar SimilarGames = (function () {\r\n\t    function SimilarGames() {\r\n\t        this.enabled = false;\r\n\t        this._pages = [];\r\n\t        this._paging = [];\r\n\t        this._actualPage = 0;\r\n\t    }\r\n\t    SimilarGames.prototype.initialize = function () {\r\n\t        if (AppContext_1.AppContext != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration.ShowSimilarGames &&\r\n\t            AppContext_1.AppContext.gameConfiguration.StaticContentUrl !== \"\" &&\r\n\t            this.getSimilarGamesList().length > 0) {\r\n\t            this._holder = document.getElementById(\"similarGames\");\r\n\t            this._pagesHolder = document.getElementById(\"similarGamesPagesContainer\");\r\n\t            this._pagingHolder = document.getElementById(\"similarGamesPaging\");\r\n\t            if (this._holder != null && this._pagesHolder != null) {\r\n\t                this.createPages();\r\n\t                this.enabled = true;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.getSimilarGamesList = function () {\r\n\t        if (AppContext_1.AppContext != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration != null &&\r\n\t            AppContext_1.AppContext.gameConfiguration.SimilarGamesList.length > 0) {\r\n\t            return AppContext_1.AppContext.gameConfiguration.SimilarGamesList.filter(function (e) { return e !== GameApp_1.GameApp.key; });\r\n\t        }\r\n\t        return [];\r\n\t    };\r\n\t    SimilarGames.prototype.createPages = function () {\r\n\t        if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration != null && this.getSimilarGamesList().length > 0) {\r\n\t            var filterArray = this.getSimilarGamesList();\r\n\t            var page = 0;\r\n\t            for (var i = 0; i < filterArray.length; i++) {\r\n\t                if (i % 15 === 0) {\r\n\t                    page = this.createNextPage();\r\n\t                }\r\n\t                this.createPageItem(filterArray[i], page);\r\n\t            }\r\n\t        }\r\n\t        if (this._pages.length > 1) {\r\n\t            var prewPageButton = document.getElementById(\"similarGamesPrewArrow\");\r\n\t            var nextPageButton = document.getElementById(\"similarGamesNextArrow\");\r\n\t            if (prewPageButton != null) {\r\n\t                prewPageButton.classList.remove(\"_hidden\");\r\n\t                prewPageButton.onclick = this.prewPage.bind(this);\r\n\t            }\r\n\t            if (nextPageButton != null) {\r\n\t                nextPageButton.classList.remove(\"_hidden\");\r\n\t                nextPageButton.onclick = this.nextPage.bind(this);\r\n\t            }\r\n\t            if (this._pagingHolder != null) {\r\n\t                this._pagingHolder.classList.remove(\"_hidden\");\r\n\t            }\r\n\t        }\r\n\t        var exitBtn = document.getElementById(\"exitBtn\");\r\n\t        if (exitBtn != null) {\r\n\t            if (AppContext_1.AppContext != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration.ShowExitGameButton) {\r\n\t                exitBtn.classList.remove(\"_hidden\");\r\n\t            }\r\n\t            else {\r\n\t                exitBtn.classList.add(\"_hidden\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.createNextPage = function () {\r\n\t        var newPage = document.createElement(\"div\");\r\n\t        var newPageChild = document.createElement(\"div\");\r\n\t        var newPaging = document.createElement(\"div\");\r\n\t        newPage.classList.add(\"similarGamesPage\");\r\n\t        newPageChild.classList.add(\"customContent\");\r\n\t        newPaging.classList.add(\"similarGamesPageNumber\");\r\n\t        if (this._pages.length === 0) {\r\n\t            newPage.classList.add(\"_active\");\r\n\t            newPaging.classList.add(\"_active\");\r\n\t        }\r\n\t        else {\r\n\t            newPage.classList.add(\"_disabled\");\r\n\t        }\r\n\t        newPage.appendChild(newPageChild);\r\n\t        this._pages.push(newPage);\r\n\t        this._paging.push(newPaging);\r\n\t        if (this._pagesHolder != null) {\r\n\t            this._pagesHolder.appendChild(newPage);\r\n\t        }\r\n\t        if (this._pagingHolder != null) {\r\n\t            this._pagingHolder.appendChild(newPaging);\r\n\t        }\r\n\t        return this._pages.length - 1;\r\n\t    };\r\n\t    SimilarGames.prototype.createPageItem = function (name, page) {\r\n\t        var itemHolder = document.createElement(\"div\");\r\n\t        var item = document.createElement(\"div\");\r\n\t        var itemLoading = document.createElement(\"div\");\r\n\t        var itemLoadingIcon = document.createElement(\"div\");\r\n\t        var itemLogo = document.createElement(\"div\");\r\n\t        itemHolder.classList.add(\"similarGameContainer\");\r\n\t        item.classList.add(\"similarGameItem\");\r\n\t        itemLoading.classList.add(\"similarGameLoading\");\r\n\t        itemLoadingIcon.classList.add(\"loadingIcon\");\r\n\t        itemLogo.classList.add(\"similarGameLogo\");\r\n\t        itemLogo.setAttribute(\"game\", name);\r\n\t        itemLogo.style.background =\r\n\t            \"url(\" + AppContext_1.AppContext.gameConfiguration.StaticContentUrl + name + \"/\" + window[\"QUALITY\"] + \"/logo.jpg)\";\r\n\t        itemHolder.appendChild(item);\r\n\t        item.appendChild(itemLoading);\r\n\t        itemLoading.appendChild(itemLoadingIcon);\r\n\t        item.appendChild(itemLogo);\r\n\t        itemLogo.onclick = this.selectGame.bind(this);\r\n\t        if (this._pages[page] != null) {\r\n\t            this._pages[page].firstChild.appendChild(itemHolder);\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.prewPage = function () {\r\n\t        if (!this.enabled) {\r\n\t            return;\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        this.disableAllPages();\r\n\t        this._actualPage--;\r\n\t        if (this._pages[this._actualPage] == null) {\r\n\t            this._actualPage = this._pages.length - 1;\r\n\t        }\r\n\t        if (this._pages[this._actualPage] != null) {\r\n\t            this._pages[this._actualPage].classList.remove(\"_disabled\");\r\n\t            this._pages[this._actualPage].classList.add(\"_active\");\r\n\t        }\r\n\t        if (this._paging[this._actualPage] != null) {\r\n\t            this._paging[this._actualPage].classList.add(\"_active\");\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.nextPage = function () {\r\n\t        if (!this.enabled) {\r\n\t            return;\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        this.disableAllPages();\r\n\t        this._actualPage++;\r\n\t        if (this._pages[this._actualPage] == null) {\r\n\t            this._actualPage = 0;\r\n\t        }\r\n\t        if (this._pages[this._actualPage] != null) {\r\n\t            this._pages[this._actualPage].classList.remove(\"_disabled\");\r\n\t            this._pages[this._actualPage].classList.add(\"_active\");\r\n\t        }\r\n\t        if (this._paging[this._actualPage] != null) {\r\n\t            this._paging[this._actualPage].classList.add(\"_active\");\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.disableAllPages = function () {\r\n\t        if (!this.enabled) {\r\n\t            return;\r\n\t        }\r\n\t        for (var i = 0; i < this._pages.length; i++) {\r\n\t            if (this._pages[i].classList.contains(\"_active\")) {\r\n\t                this._pages[i].classList.remove(\"_active\");\r\n\t            }\r\n\t            if (!this._pages[i].classList.contains(\"_disabled\")) {\r\n\t                this._pages[i].classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this._paging.length; i++) {\r\n\t            if (this._paging[i].classList.contains(\"_active\")) {\r\n\t                this._paging[i].classList.remove(\"_active\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.selectGame = function (e) {\r\n\t        if (!this.enabled) {\r\n\t            return;\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        if (e != null && e.target != null && e.target.hasAttribute(\"game\")) {\r\n\t            var urlInfo = neo_common_1.UriHelper.parseUrl(window.location.href, true, true);\r\n\t            if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\r\n\t                var serverUrl = urlInfo[\"query\"][\"serverUrl\"];\r\n\t                var token = urlInfo[\"hash\"].substring(1);\r\n\t                var newUrl_1 = serverUrl + \"Launch/\" + e.target.getAttribute(\"game\") + \"?\" + token;\r\n\t                var root = document.getElementById(\"root\");\r\n\t                if (root != null) {\r\n\t                    root.style.display = \"none\";\r\n\t                }\r\n\t                neo_games_1.Platforms.Platforms.gameChange(e.target.getAttribute(\"game\"));\r\n\t                if (neo_games_1.Platforms.Platforms.handleChangeGame) {\r\n\t                    return;\r\n\t                }\r\n\t                setTimeout(function () {\r\n\t                    window.location.replace(newUrl_1);\r\n\t                }, 100);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.open = function () {\r\n\t        if (this.enabled) {\r\n\t            if (this._holder.classList.contains(\"_disabled\")) {\r\n\t                this._holder.classList.remove(\"_disabled\");\r\n\t                return true;\r\n\t            }\r\n\t            else {\r\n\t                return false;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    SimilarGames.prototype.disable = function () {\r\n\t        if (!this.enabled) {\r\n\t            return;\r\n\t        }\r\n\t        if (!this._holder.classList.contains(\"_disabled\")) {\r\n\t            this._holder.classList.add(\"_disabled\");\r\n\t        }\r\n\t    };\r\n\t    return SimilarGames;\r\n\t}());\r\n\texports.SimilarGames = SimilarGames;\r\n\n\n/***/ },\n/* 54 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar LimitDialog = (function () {\r\n\t    function LimitDialog() {\r\n\t    }\r\n\t    LimitDialog.openDialog = function () {\r\n\t        LimitDialog.initializeDialog();\r\n\t        if (!LimitDialog._opened) {\r\n\t            LimitDialog._openTimer.start(1);\r\n\t            if (LimitDialog._limit != null) {\r\n\t                LimitDialog._limit.style.display = \"block\";\r\n\t            }\r\n\t            LimitDialog._opened = true;\r\n\t            neo_games_1.Platforms.Platforms.dialogOpened(\"limit\", true);\r\n\t        }\r\n\t    };\r\n\t    LimitDialog.closeDialog = function () {\r\n\t        if (LimitDialog._opened) {\r\n\t            LimitDialog.initializeDialog();\r\n\t            LimitDialog._closeTimer.start(60);\r\n\t            if (LimitDialog._limit != null && !LimitDialog._limit.classList.contains(\"_disabled\")) {\r\n\t                LimitDialog._limit.classList.add(\"_disabled\");\r\n\t            }\r\n\t            neo_games_1.Platforms.Platforms.dialogOpened(\"limit\", false);\r\n\t        }\r\n\t    };\r\n\t    LimitDialog.initializeDialog = function () {\r\n\t        if (LimitDialog._limit == null) {\r\n\t            LimitDialog._limit = document.getElementById(\"limitDialog\");\r\n\t        }\r\n\t        if (LimitDialog._openTimer == null) {\r\n\t            LimitDialog._openTimer = FrameTimer_1.CreateFrameTimer(\"openTimer\");\r\n\t            LimitDialog._openTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.showDialog);\r\n\t        }\r\n\t        if (LimitDialog._closeTimer == null) {\r\n\t            LimitDialog._closeTimer = FrameTimer_1.CreateFrameTimer(\"closeTimer\");\r\n\t            LimitDialog._closeTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.hideDialog);\r\n\t        }\r\n\t    };\r\n\t    LimitDialog.showDialog = function () {\r\n\t        LimitDialog.initializeDialog();\r\n\t        if (LimitDialog._limit != null && LimitDialog._limit.classList.contains(\"_disabled\")) {\r\n\t            LimitDialog._limit.classList.remove(\"_disabled\");\r\n\t            PlayList_1.PlayList.play(\"SND_BaseLimit\");\r\n\t        }\r\n\t    };\r\n\t    LimitDialog.hideDialog = function () {\r\n\t        LimitDialog.initializeDialog();\r\n\t        if (LimitDialog._limit != null) {\r\n\t            LimitDialog._limit.style.display = \"none\";\r\n\t        }\r\n\t        LimitDialog._opened = false;\r\n\t    };\r\n\t    LimitDialog._opened = false;\r\n\t    return LimitDialog;\r\n\t}());\r\n\texports.LimitDialog = LimitDialog;\r\n\n\n/***/ },\n/* 55 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar WebSocketClient_1 = __webpack_require__(56);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar PageVisibilityHandler_1 = __webpack_require__(50);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar WebSocketClientHub_1 = __webpack_require__(57);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar NotificationManager = (function () {\r\n\t    function NotificationManager() {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.ApplicationGatewayUrl) {\r\n\t            this.webSocketClientHub = new WebSocketClientHub_1.WebSocketClientHub();\r\n\t        }\r\n\t        else {\r\n\t            this.webSocketClient = new WebSocketClient_1.WebSocketClient();\r\n\t        }\r\n\t        this.bindMessages();\r\n\t    }\r\n\t    NotificationManager.prototype.bindMessages = function () {\r\n\t        if (this.webSocketClient != null) {\r\n\t            this.webSocketClient.on(\"RefreshBalance\", this.refreshBalance.bind(this));\r\n\t            this.webSocketClient.on(\"CloseSession\", this.closeSession.bind(this));\r\n\t            this.webSocketClient.on(\"UpdateStatusBar\", this.updateStatusBar.bind(this));\r\n\t        }\r\n\t        if (this.webSocketClientHub != null) {\r\n\t            this.onReceiveMessage(this.messageReceiver.bind(this));\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.prototype.sendMessage = function (message) {\r\n\t        if (this.webSocketClient != null) {\r\n\t            var methodName = message.action;\r\n\t            var data = message.data;\r\n\t            if (methodName == \"event/log\") {\r\n\t                methodName = \"LogEvent\";\r\n\t            }\r\n\t            this.webSocketClient.sendMessage(methodName, data);\r\n\t        }\r\n\t        if (this.webSocketClientHub != null) {\r\n\t            if (!this.webSocketClientHub.isConnectionEstablished()) {\r\n\t                this.webSocketClientHub.addMessage(this.sendMessage.bind(this, message));\r\n\t                return;\r\n\t            }\r\n\t            this.webSocketClientHub\r\n\t                .sendMessage(message)\r\n\t                .then(function () {\r\n\t                if (false) {\r\n\t                    console.log(\"Message received\");\r\n\t                }\r\n\t            })\r\n\t                .catch(function (error) {\r\n\t                if (false) {\r\n\t                    console.log(error);\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.prototype.invokeCommand = function (message) {\r\n\t        if (this.webSocketClientHub != null) {\r\n\t            return this.webSocketClientHub.invokeCommand(message);\r\n\t        }\r\n\t        return Promise.reject({ code: \"Hub connection not initialized\" });\r\n\t    };\r\n\t    NotificationManager.prototype.onReceiveMessage = function (receiver) {\r\n\t        if (this.webSocketClientHub != null) {\r\n\t            this.webSocketClientHub.onReceiveMessage(receiver);\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.prototype.disconnect = function () {\r\n\t        if (this.webSocketClientHub != null) {\r\n\t            this.webSocketClientHub.disconnect();\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.prototype.messageReceiver = function (message) {\r\n\t        if (message == null) {\r\n\t            if (false) {\r\n\t                console.log(\"ERROR - message object was not received from websocket\");\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (message.application.toLowerCase() != \"neo\") {\r\n\t            if (false) {\r\n\t                console.log('ERROR - message application was not \"NEO\"');\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (message.service.toLowerCase() == \"notification\") {\r\n\t            switch (message.action.toLowerCase()) {\r\n\t                case \"refreshbalance\":\r\n\t                    this.refreshBalance(message.data);\r\n\t                    break;\r\n\t                case \"closesession\":\r\n\t                    this.closeSession();\r\n\t                    break;\r\n\t                case \"updatestatusbar\":\r\n\t                    this.updateStatusBar(message.data);\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t        if (message.service.toLowerCase() == \"servertime\") {\r\n\t            switch (message.action.toLowerCase()) {\r\n\t                case \"update\":\r\n\t                    this.updateServerTime(message.data);\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.prototype.refreshBalance = function (data) {\r\n\t        if (data[\"freeRounds\"] != null) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.updateRemainingCount(data[\"freeRounds\"]);\r\n\t        }\r\n\t        if (Jackpot_1.Jackpot.hasActiveGame()) {\r\n\t            return;\r\n\t        }\r\n\t        BalanceManager_1.BalanceManager.balanceReceived(data);\r\n\t    };\r\n\t    NotificationManager.prototype.closeSession = function () {\r\n\t        for (var key in neo_games_1.Communication.Game.GameModules) {\r\n\t            ModuleManager_1.ModuleManager.disableChannelModule(neo_games_1.Communication.Game.GameModules[key]);\r\n\t        }\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.Enabled = false;\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.pauseAll();\r\n\t        HtmlController_1.HtmlController.dispatchActionAllowed = false;\r\n\t        GameManager_1.GameManager.errorReceived({\r\n\t            requestInfo: {\r\n\t                request: NotificationManager,\r\n\t                url: null,\r\n\t                gameKey: null,\r\n\t            },\r\n\t            httpStatusCode: 401,\r\n\t        });\r\n\t    };\r\n\t    NotificationManager.prototype.updateStatusBar = function (data) {\r\n\t        var statusBar = neo_games_1.Plugins.StatusBar.getInstance();\r\n\t        if (statusBar.hasActiveWidget(\"statusBarMessage\") && data != null && data[\"statusBarMessage\"]) {\r\n\t            statusBar.add(neo_games_1.Plugins.StatusBar.Types.StatusBarMessage, \"statusBarMessage\", data[\"statusBarMessage\"]);\r\n\t            Scaling_1.Scaling.resizeRoot();\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.prototype.updateServerTime = function (data) {\r\n\t        if (data == null) {\r\n\t            return;\r\n\t        }\r\n\t        DataManager_1.DataManager.serverTimeReceived(data);\r\n\t    };\r\n\t    NotificationManager.initialize = function () {\r\n\t        if (NotificationManager.instance == null) {\r\n\t            NotificationManager.instance = new NotificationManager();\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.sendMessage = function (message) {\r\n\t        if (NotificationManager.instance != null) {\r\n\t            NotificationManager.instance.sendMessage(message);\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.invokeCommand = function (message) {\r\n\t        if (NotificationManager.instance != null) {\r\n\t            return NotificationManager.instance.invokeCommand(message);\r\n\t        }\r\n\t        return Promise.reject({ code: \"Hub connection not initialized\" });\r\n\t    };\r\n\t    NotificationManager.onReceiveMessage = function (receiver) {\r\n\t        if (NotificationManager.instance != null) {\r\n\t            return NotificationManager.instance.onReceiveMessage(receiver);\r\n\t        }\r\n\t    };\r\n\t    NotificationManager.disconnect = function () {\r\n\t        if (NotificationManager.instance != null) {\r\n\t            NotificationManager.instance.disconnect();\r\n\t        }\r\n\t    };\r\n\t    return NotificationManager;\r\n\t}());\r\n\texports.NotificationManager = NotificationManager;\r\n\n\n/***/ },\n/* 56 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar WebSocketClient = (function () {\r\n\t    function WebSocketClient() {\r\n\t        this.connected = false;\r\n\t        var urlInfo = neo_common_1.UriHelper.parseUrl(window.location.href, true, true);\r\n\t        if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\r\n\t            var serverUrl = urlInfo[\"query\"][\"serverUrl\"];\r\n\t            try {\r\n\t                this.hubConnection = new GameClientHub.GameClientHubConnection(serverUrl, this.getToken, AppContext_1.AppContext.gameConfiguration);\r\n\t                this.connected = true;\r\n\t            }\r\n\t            catch (e) {\r\n\t                if (false) {\r\n\t                    console.log(\"ERROR websocket connection was not created: \" + e);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    WebSocketClient.prototype.getToken = function () {\r\n\t        var token = \"\";\r\n\t        var urlInfo = neo_common_1.UriHelper.parseUrl(window.location.href, true, true);\r\n\t        if (urlInfo != null && urlInfo[\"hash\"]) {\r\n\t            token = urlInfo[\"hash\"].substring(1).split(\"=\")[1];\r\n\t        }\r\n\t        return token;\r\n\t    };\r\n\t    WebSocketClient.prototype.sendMessage = function (methodName, data) {\r\n\t        if (this.hubConnection != null && this.connected) {\r\n\t            this.hubConnection.sendMessage(methodName, data);\r\n\t        }\r\n\t    };\r\n\t    WebSocketClient.prototype.on = function (methodName, callbackFn) {\r\n\t        if (this.hubConnection != null) {\r\n\t            this.hubConnection.on(methodName, callbackFn);\r\n\t        }\r\n\t    };\r\n\t    return WebSocketClient;\r\n\t}());\r\n\texports.WebSocketClient = WebSocketClient;\r\n\n\n/***/ },\n/* 57 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar ClientHubConnection = ClientHub.ClientHubConnection;\r\n\tvar UpdateTokenRequest = ClientHub.UpdateTokenRequest;\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar WebSocketClientHub = (function () {\r\n\t    function WebSocketClientHub() {\r\n\t        var _this = this;\r\n\t        if (AppContext_1.AppContext.gameConfiguration == null) {\r\n\t            return;\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.ApplicationGatewayUrl === \"\") {\r\n\t            return;\r\n\t        }\r\n\t        try {\r\n\t            this.stackedMessages = [];\r\n\t            this.connectionEstablished = false;\r\n\t            this.clientHubConnection = new ClientHubConnection(AppContext_1.AppContext.gameConfiguration.ApplicationGatewayUrl, this.getToken, function () {\r\n\t                _this.connectionEstablished = true;\r\n\t                neo_games_1.Platforms.Platforms.webSocketsInitialized();\r\n\t                _this.sendStackedMessages();\r\n\t            });\r\n\t            this.jwtToken = this.getToken();\r\n\t        }\r\n\t        catch (e) {\r\n\t            if (false) {\r\n\t                console.log(\"ERROR websocket connection was not created: \" + e);\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    WebSocketClientHub.prototype.getToken = function () {\r\n\t        var token = \"\";\r\n\t        var urlInfo = neo_common_1.UriHelper.parseUrl(window.location.href, true, true);\r\n\t        if (urlInfo != null && urlInfo[\"hash\"]) {\r\n\t            token = urlInfo[\"hash\"].substring(1).split(\"=\")[1];\r\n\t        }\r\n\t        return token;\r\n\t    };\r\n\t    WebSocketClientHub.prototype.tokenChanged = function () {\r\n\t        var currentToken = this.getToken();\r\n\t        return currentToken != this.jwtToken;\r\n\t    };\r\n\t    WebSocketClientHub.prototype.updateToken = function () {\r\n\t        if (!this.tokenChanged()) {\r\n\t            return;\r\n\t        }\r\n\t        if (!this.clientHubConnection) {\r\n\t            return;\r\n\t        }\r\n\t        var _self = this;\r\n\t        var token = this.getToken();\r\n\t        this.clientHubConnection\r\n\t            .updateToken(new UpdateTokenRequest(token))\r\n\t            .then(function () {\r\n\t            if (false) {\r\n\t                console.log(\"Websocket connection token was updated successfully.\");\r\n\t            }\r\n\t            _self.jwtToken = token;\r\n\t        })\r\n\t            .catch(function (e) {\r\n\t            if (false) {\r\n\t                console.log(\"ERROR websocket token was not updated: \" + e);\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    WebSocketClientHub.prototype.sendStackedMessages = function () {\r\n\t        for (var i = 0; i < this.stackedMessages.length; i++) {\r\n\t            var fn = this.stackedMessages[i];\r\n\t            if (fn) {\r\n\t                fn();\r\n\t            }\r\n\t        }\r\n\t        this.stackedMessages = [];\r\n\t    };\r\n\t    WebSocketClientHub.prototype.addMessage = function (message) {\r\n\t        if (this.stackedMessages != null) {\r\n\t            this.stackedMessages.push(message);\r\n\t        }\r\n\t    };\r\n\t    WebSocketClientHub.prototype.isConnectionEstablished = function () {\r\n\t        return this.connectionEstablished;\r\n\t    };\r\n\t    WebSocketClientHub.prototype.sendMessage = function (message) {\r\n\t        if (!this.clientHubConnection) {\r\n\t            return Promise.reject(new Error(\"Not initialized\"));\r\n\t        }\r\n\t        this.updateToken();\r\n\t        return this.clientHubConnection.sendMessage(message);\r\n\t    };\r\n\t    WebSocketClientHub.prototype.invokeCommand = function (message) {\r\n\t        if (!this.clientHubConnection) {\r\n\t            return Promise.reject({ code: \"Not initialized\" });\r\n\t        }\r\n\t        this.updateToken();\r\n\t        return this.clientHubConnection.invokeCommand(message);\r\n\t    };\r\n\t    WebSocketClientHub.prototype.onReceiveMessage = function (receiver) {\r\n\t        if (!this.clientHubConnection) {\r\n\t            return;\r\n\t        }\r\n\t        this.updateToken();\r\n\t        this.clientHubConnection.onReceiveMessage(receiver);\r\n\t    };\r\n\t    WebSocketClientHub.prototype.disconnect = function () {\r\n\t        if (!this.clientHubConnection) {\r\n\t            return;\r\n\t        }\r\n\t        this.clientHubConnection.disconnect().catch(function (e) {\r\n\t            console.log(\"ERROR websocket connection was disconnected: \" + e);\r\n\t        });\r\n\t    };\r\n\t    return WebSocketClientHub;\r\n\t}());\r\n\texports.WebSocketClientHub = WebSocketClientHub;\r\n\n\n/***/ },\n/* 58 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar BaseModel_1 = __webpack_require__(45);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar SessionTimer = (function () {\r\n\t    function SessionTimer() {\r\n\t    }\r\n\t    SessionTimer.postpone = function (callback, response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response) &&\r\n\t            !neo_common_1.Utils.isNullOrUndefined(response.messages) &&\r\n\t            response.messages.length > 0) {\r\n\t            if (neo_common_1.Utils.isNullOrUndefined(SessionTimer.dialog)) {\r\n\t                SessionTimer.dialog = document.getElementById(\"messageDialog\");\r\n\t                if (!neo_common_1.Utils.isNullOrUndefined(SessionTimer.dialog)) {\r\n\t                    SessionTimer.dialog.classList.add(\"sessionTimer\");\r\n\t                    SessionTimer.title = SessionTimer.dialog.getElementsByTagName(\"h3\")[0];\r\n\t                    SessionTimer.text = document.getElementById(\"messageDialogText\");\r\n\t                    SessionTimer.buttonsHolder = document.getElementById(\"messageDialogButtons\");\r\n\t                    SessionTimer.buttons = [];\r\n\t                }\r\n\t            }\r\n\t            if (neo_common_1.Utils.isNullOrUndefined(SessionTimer.dialog)) {\r\n\t                callback(response);\r\n\t            }\r\n\t            else {\r\n\t                SessionTimer.callback = callback;\r\n\t                SessionTimer.response = response;\r\n\t                SessionTimer.step = 0;\r\n\t                SessionTimer.handle();\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            callback(response);\r\n\t        }\r\n\t    };\r\n\t    SessionTimer.updateDialogData = function (data) {\r\n\t        SessionTimer.resetDialogData();\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"title\"])) {\r\n\t            SessionTimer.title.innerHTML = data[\"title\"];\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"text\"])) {\r\n\t            SessionTimer.text.innerHTML = data[\"text\"];\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"actions\"])) {\r\n\t            SessionTimer.removeAllButtons();\r\n\t            for (var i = 0; i < data[\"actions\"].length; i++) {\r\n\t                var action = data[\"actions\"][i];\r\n\t                switch (action.type) {\r\n\t                    case \"continue\":\r\n\t                        SessionTimer.createButton(action[\"text\"], SessionTimer.actionContinue.bind(this, action));\r\n\t                        break;\r\n\t                    case \"exit\":\r\n\t                        SessionTimer.createButton(action[\"text\"], SessionTimer.actionExit.bind(this, action));\r\n\t                        break;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(data[\"intervals\"])) {\r\n\t            SessionTimer.createIntervals(data[\"intervals\"]);\r\n\t        }\r\n\t    };\r\n\t    SessionTimer.resetDialogData = function () {\r\n\t        SessionTimer.title.innerHTML = Languages_1.Languages.getRid(\"DLG_INFO\");\r\n\t        SessionTimer.removeAllButtons();\r\n\t        SessionTimer.createButton(Languages_1.Languages.getRid(\"CONTINUE\"), SessionTimer.actionContinue);\r\n\t        if (SessionTimer.intervalHolder != null) {\r\n\t            SessionTimer.intervalHolder.parentElement.removeChild(SessionTimer.intervalHolder);\r\n\t            SessionTimer.intervalHolder = null;\r\n\t        }\r\n\t    };\r\n\t    SessionTimer.removeAllButtons = function () {\r\n\t        while (SessionTimer.buttons.length > 0) {\r\n\t            var button = SessionTimer.buttons.pop();\r\n\t            SessionTimer.buttonsHolder.removeChild(button);\r\n\t        }\r\n\t    };\r\n\t    SessionTimer.disableAllButtons = function () {\r\n\t        for (var i = 0; i < SessionTimer.buttons.length; i++) {\r\n\t            var button = SessionTimer.buttons[i];\r\n\t            if (button != null) {\r\n\t                button.classList.add(\"_disabled\");\r\n\t                button.onclick = null;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SessionTimer.createButton = function (text, action) {\r\n\t        var button = document.createElement(\"div\");\r\n\t        button.textContent = text;\r\n\t        button.classList.add(\"dialogBtn\", \"customDialogBtn\");\r\n\t        button.onclick = action;\r\n\t        SessionTimer.buttonsHolder.appendChild(button);\r\n\t        SessionTimer.buttons.push(button);\r\n\t    };\r\n\t    SessionTimer.actionContinue = function () {\r\n\t        var _this = this;\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        SessionTimer.disableAllButtons();\r\n\t        var interval;\r\n\t        if (SessionTimer.intervals != null && SessionTimer.intervalIndex > 0) {\r\n\t            interval = SessionTimer.intervals[SessionTimer.intervalIndex];\r\n\t        }\r\n\t        GameManager_1.GameManager.gameClient.resetRealityCheck(interval).then(function (response) {\r\n\t            _this.onActionContinueReceived();\r\n\t        });\r\n\t    };\r\n\t    SessionTimer.onActionContinueReceived = function () {\r\n\t        SessionTimer.handle();\r\n\t    };\r\n\t    SessionTimer.actionExit = function () {\r\n\t        var _this = this;\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        SessionTimer.disableAllButtons();\r\n\t        GameManager_1.GameManager.gameClient.closeRealityCheck().then(function (response) {\r\n\t            _this.onActionExitReceived();\r\n\t        });\r\n\t    };\r\n\t    SessionTimer.onActionExitReceived = function () {\r\n\t        neo_games_1.Platforms.Platforms.exitHandler = \"responsibleDialog\";\r\n\t        GameApp_1.GameApp.exit();\r\n\t    };\r\n\t    SessionTimer.handle = function () {\r\n\t        if (SessionTimer.response.messages.length === SessionTimer.step) {\r\n\t            SessionTimer.dialog.classList.add(\"_disabled\");\r\n\t            SessionTimer.callback(SessionTimer.response);\r\n\t            neo_games_1.Platforms.Platforms.dialogOpened(\"sessionTimer\", false);\r\n\t        }\r\n\t        else {\r\n\t            if (SessionTimer.response.messages[SessionTimer.step].type == \"plugin\") {\r\n\t                neo_games_1.Platforms.Platforms.sendPluginMessage(SessionTimer.response.messages[SessionTimer.step].text);\r\n\t                SessionTimer.step++;\r\n\t                SessionTimer.handle();\r\n\t            }\r\n\t            else {\r\n\t                SessionTimer.dialog.classList.remove(\"_disabled\");\r\n\t                SessionTimer.updateDialogData(SessionTimer.response.messages[SessionTimer.step]);\r\n\t                SessionTimer.step++;\r\n\t                neo_games_1.Platforms.Platforms.dialogOpened(\"sessionTimer\", true);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SessionTimer.createIntervals = function (intervals) {\r\n\t        if (SessionTimer.buttonsHolder != null) {\r\n\t            SessionTimer.intervals = intervals;\r\n\t            SessionTimer.intervalIndex = 0;\r\n\t            SessionTimer.intervalHolder = document.createElement(\"div\");\r\n\t            SessionTimer.intervalHolder.setAttribute(\"class\", \"sessionIntervals\");\r\n\t            var buttonMinus = document.createElement(\"div\");\r\n\t            buttonMinus.setAttribute(\"class\", \"minusBtn\");\r\n\t            buttonMinus.textContent = \"-\";\r\n\t            var buttonPlus = document.createElement(\"div\");\r\n\t            buttonPlus.setAttribute(\"class\", \"plusBtn\");\r\n\t            buttonPlus.textContent = \"+\";\r\n\t            buttonMinus.addEventListener(\"click\", SessionTimer.changeInterval.bind(this, true, buttonMinus, buttonPlus));\r\n\t            buttonPlus.addEventListener(\"click\", SessionTimer.changeInterval.bind(this, false, buttonMinus, buttonPlus));\r\n\t            SessionTimer.intervalDisplay = document.createElement(\"div\");\r\n\t            SessionTimer.intervalDisplay.setAttribute(\"class\", \"value\");\r\n\t            SessionTimer.intervalDisplay.innerText = intervals[0].toString();\r\n\t            if (SessionTimer.intervalIndex == SessionTimer.intervals.length - 1) {\r\n\t                buttonMinus.classList.add(\"_disabled\");\r\n\t            }\r\n\t            if (SessionTimer.intervalIndex == 0) {\r\n\t                buttonPlus.classList.add(\"_disabled\");\r\n\t            }\r\n\t            SessionTimer.intervalHolder.appendChild(buttonMinus);\r\n\t            SessionTimer.intervalHolder.appendChild(SessionTimer.intervalDisplay);\r\n\t            SessionTimer.intervalHolder.appendChild(buttonPlus);\r\n\t            SessionTimer.buttonsHolder.parentElement.insertBefore(SessionTimer.intervalHolder, SessionTimer.buttonsHolder);\r\n\t        }\r\n\t    };\r\n\t    SessionTimer.changeInterval = function (increase, buttonMinus, buttonPlus) {\r\n\t        if (increase === void 0) { increase = false; }\r\n\t        buttonMinus.classList.remove(\"_disabled\");\r\n\t        buttonPlus.classList.remove(\"_disabled\");\r\n\t        if (increase) {\r\n\t            if (SessionTimer.intervalIndex < SessionTimer.intervals.length - 1) {\r\n\t                SessionTimer.intervalIndex++;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (SessionTimer.intervalIndex > 0) {\r\n\t                SessionTimer.intervalIndex--;\r\n\t            }\r\n\t        }\r\n\t        if (SessionTimer.intervalIndex == SessionTimer.intervals.length - 1) {\r\n\t            buttonMinus.classList.add(\"_disabled\");\r\n\t        }\r\n\t        if (SessionTimer.intervalIndex == 0) {\r\n\t            buttonPlus.classList.add(\"_disabled\");\r\n\t        }\r\n\t        SessionTimer.intervalDisplay.innerText = SessionTimer.intervals[SessionTimer.intervalIndex].toString();\r\n\t    };\r\n\t    SessionTimer.callbackFnc = function (response) {\r\n\t        SessionTimer.dialog.classList.remove(\"sessionTimer\");\r\n\t        BaseModel_1.BaseModel.spinContinue();\r\n\t    };\r\n\t    SessionTimer.prepareData = function (response) {\r\n\t        return {\r\n\t            messages: [\r\n\t                {\r\n\t                    text: response.message,\r\n\t                    actions: [\r\n\t                        {\r\n\t                            type: \"continue\",\r\n\t                            text: Languages_1.Languages.getRid(\"CONTINUE\"),\r\n\t                        },\r\n\t                        {\r\n\t                            type: \"exit\",\r\n\t                            text: Languages_1.Languages.getRid(\"CLOSE\"),\r\n\t                        },\r\n\t                    ],\r\n\t                    intervals: response.intervals,\r\n\t                },\r\n\t            ],\r\n\t        };\r\n\t    };\r\n\t    return SessionTimer;\r\n\t}());\r\n\texports.SessionTimer = SessionTimer;\r\n\n\n/***/ },\n/* 59 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar gsap_1 = __webpack_require__(16);\r\n\tvar GsapEffects_1 = __webpack_require__(15);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar CustomEase_1 = __webpack_require__(60);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar AmbientBackground_1 = __webpack_require__(61);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar MessageManager_1 = __webpack_require__(44);\r\n\tvar LimitDialog_1 = __webpack_require__(54);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar JackpotGame = (function () {\r\n\t    function JackpotGame(holder) {\r\n\t        this.holder = holder;\r\n\t        this.root = this.createBaseLayout();\r\n\t        this.holder.appendChild(this.root);\r\n\t        var intro = this.createAnimations();\r\n\t        this.holder.appendChild(intro);\r\n\t        this.stopTimer = FrameTimer_1.CreateFrameTimer(\"MiniGameSpinStop\");\r\n\t        this.stopTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.spinStop.bind(this));\r\n\t        this.buzzerTimer = FrameTimer_1.CreateFrameTimer(\"BuzzerTimer\");\r\n\t        this.buzzerTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.buzzerTimeFinished.bind(this));\r\n\t        this.showWinDelay = FrameTimer_1.CreateFrameTimer(\"BuzzerTimer\");\r\n\t        this.showWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.updateWin.bind(this));\r\n\t        this.gameInitialized = false;\r\n\t        this.gameStarted = false;\r\n\t        this.autostart = false;\r\n\t        this.showHandPayDialog = false;\r\n\t        this.assetsLoaded = false;\r\n\t        this.startAfterLoad = false;\r\n\t        CustomEase_1.CustomEase.create(\"miniGameSpinStopEase\", \"M0,0,C0,0,0.212,0.616,0.452,0.842,0.519,0.905,0.627,1.008,0.716,1.026,0.768,1.036,0.819,1.031,0.848,1.028,0.89,1.022,1,1,1,1\");\r\n\t    }\r\n\t    JackpotGame.prototype.createBaseLayout = function () {\r\n\t        var root = this.createElement(\"div\", \"jackpotGame\");\r\n\t        this.reel = this.createElement(\"div\", \"jackpotReel\", root);\r\n\t        this.createElement(\"div\", \"jackpotTextOverlay\", root);\r\n\t        var hintContainer = this.createElement(\"div\", \"jackpotStartHint\", root);\r\n\t        this.createTextElement(\"div\", \"jackpotStartHintText\", Languages_1.Languages.getRid(\"PB_MINIGAME_SPINSTART\"), hintContainer);\r\n\t        this.createTextElement(\"div\", \"jackpotStartHintText\", Languages_1.Languages.getRid(\"PB_MINIGAME_SPINSTART\"), hintContainer);\r\n\t        this.createElement(\"div\", \"jackpotFrameLeft\", root);\r\n\t        this.createElement(\"div\", \"jackpotFrameRight\", root);\r\n\t        this.createElement(\"div\", \"jackpotGlowLeft\", root);\r\n\t        this.createElement(\"div\", \"jackpotGlowRight\", root);\r\n\t        var arrows = this.createElement(\"div\", \"jackpotArrows\", root);\r\n\t        var arrow = this.createElement(\"div\", \"jackpotArrowLeft\", arrows);\r\n\t        this.createElement(\"div\", \"jackpotArrowBlur\", arrow);\r\n\t        arrow = this.createElement(\"div\", \"jackpotArrowRight\", arrows);\r\n\t        this.createElement(\"div\", \"jackpotArrowBlur\", arrow);\r\n\t        this.createTextElement(\"div\", \"jackpotGameName\", document.getElementById(\"gameTitle\").innerHTML, root);\r\n\t        return root;\r\n\t    };\r\n\t    JackpotGame.prototype.createAnimations = function () {\r\n\t        var intro = this.createElement(\"div\", \"jackpotIntro\");\r\n\t        for (var i = 0; i < 5; i++) {\r\n\t            var firework = this.createElement(\"div\", \"jackpotFireworks\", intro);\r\n\t            for (var j = 0; j < 8; j++) {\r\n\t                this.createElement(\"div\", \"fireworksPart\", firework);\r\n\t            }\r\n\t        }\r\n\t        var titles = this.createElement(\"div\", \"jackpotTitles\", intro);\r\n\t        var _self = this;\r\n\t        document.body.classList.add(\"jpt-loading\");\r\n\t        Promise.all([\r\n\t            this.getCustomContent(\"jackpotTextSynot\", \".png\"),\r\n\t            this.getCustomContent(\"jackpotTextProgressive\", \".png\"),\r\n\t            this.getCustomContent(\"jackpotTextBonus\", \".png\"),\r\n\t        ]).then(function (values) {\r\n\t            for (var i = 0; i < values.length; i++) {\r\n\t                var elem = _self.createElement(\"div\", values[i][0], titles);\r\n\t                if (values[i][1] != \"\") {\r\n\t                    elem.style.background = \"url(\" + values[i][1] + \") no-repeat\";\r\n\t                }\r\n\t            }\r\n\t            document.body.classList.remove(\"jpt-loading\");\r\n\t            _self.assetsLoaded = true;\r\n\t            if (_self.startAfterLoad) {\r\n\t                _self.intro();\r\n\t            }\r\n\t        });\r\n\t        this.createElement(\"div\", \"jackpotTextOverlay\", intro);\r\n\t        this.winContainer = this.createElement(\"div\", \"jackpotWinValue\", intro);\r\n\t        return intro;\r\n\t    };\r\n\t    JackpotGame.prototype.init = function (autostart, callback) {\r\n\t        if (this.ticket == null && GameManager_1.GameManager.gameResponse && GameManager_1.GameManager.gameResponse[\"progressiveBonus\"].ticket) {\r\n\t            this.ticket = GameManager_1.GameManager.gameResponse[\"progressiveBonus\"].ticket;\r\n\t            this.gameInitialized = false;\r\n\t            this.autostart = autostart;\r\n\t            this.callback = callback;\r\n\t            this.initSymbols();\r\n\t            this.createSymbols();\r\n\t            this.sendInitBonusGameRequest();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.initFinished = function () {\r\n\t        this.gameInitialized = true;\r\n\t        if (this.autostart) {\r\n\t            if (this.callback != null) {\r\n\t                this.callback();\r\n\t            }\r\n\t            this.intro();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.start = function () {\r\n\t        if (!this.autostart) {\r\n\t            this.intro();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.startGame = function () {\r\n\t        HtmlController_1.HtmlController.dispatchAction(\"\");\r\n\t        Jackpot_1.Jackpot.refreshBonusInfoBeforeSpin(this.sendSpinBonusGameRequest.bind(this));\r\n\t        this.spinStart();\r\n\t    };\r\n\t    JackpotGame.prototype.spinStop = function (fromMachine, fromServer) {\r\n\t        if (fromMachine === void 0) { fromMachine = true; }\r\n\t        if (fromServer === void 0) { fromServer = false; }\r\n\t        if (fromMachine) {\r\n\t            this.stoppedFromMachine = true;\r\n\t        }\r\n\t        if (fromServer) {\r\n\t            this.stoppedFromServer = true;\r\n\t        }\r\n\t        if (this.stoppedFromMachine && this.stoppedFromServer) {\r\n\t            this.isStopping = true;\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.closeMiniGame = function () {\r\n\t        if (this.callback != null && this.autostart) {\r\n\t            this.callback();\r\n\t        }\r\n\t        this.outroFinished(false);\r\n\t    };\r\n\t    JackpotGame.prototype.setBaseGameSound = function (enable) {\r\n\t        ModuleManager_1.ModuleManager.toggleModuleSounds(GameModules.Base, enable);\r\n\t    };\r\n\t    JackpotGame.prototype.hasInitializedGame = function () {\r\n\t        return this.gameInitialized;\r\n\t    };\r\n\t    JackpotGame.prototype.hasStartedGame = function () {\r\n\t        return this.gameStarted;\r\n\t    };\r\n\t    JackpotGame.prototype.disableAutostart = function () {\r\n\t        this.autostart = false;\r\n\t        this.clearJackpotGameResponse();\r\n\t    };\r\n\t    JackpotGame.prototype.clearJackpotGame = function () {\r\n\t        if (this.holder) {\r\n\t            this.holder.classList.remove(\"outro\");\r\n\t            this.holder.classList.add(\"_hidden\");\r\n\t            this.holder.className = \"jackpotGameHolder _hidden\";\r\n\t        }\r\n\t        if (this.root) {\r\n\t            this.root.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n\t            this.root.removeEventListener(\"animationend\", this.lastEvent);\r\n\t        }\r\n\t        if (this.reel) {\r\n\t            this.reel.innerHTML = \"\";\r\n\t            this.currentOffset = 0;\r\n\t            this.setTransformY(this.reel, this.currentOffset);\r\n\t            this.currentSymbols = [];\r\n\t            this.currentSymbolsHeight = [];\r\n\t        }\r\n\t        if (this.winContainer) {\r\n\t            this.winContainer.style.transform = \"scale(0)\";\r\n\t            this.winContainer.innerHTML = \"\";\r\n\t            this.winContainer.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n\t            this.winContainer.removeEventListener(\"animationend\", this.lastEvent);\r\n\t        }\r\n\t        this.ticket = null;\r\n\t    };\r\n\t    JackpotGame.prototype.clearJackpotGameResponse = function () {\r\n\t        if (GameManager_1.GameManager.gameResponse[\"progressiveBonus\"]) {\r\n\t            GameManager_1.GameManager.gameResponse[\"progressiveBonus\"] = null;\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.sendInitBonusGameRequest = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.gameClient) {\r\n\t            GameManager_1.GameManager.gameClient\r\n\t                .sendMaxPowerBonusInitRequest(this.ticket)\r\n\t                .then(function (response) {\r\n\t                if (response != null && response.status == \"Active\") {\r\n\t                    _this.initFinished();\r\n\t                }\r\n\t                else {\r\n\t                    _this.closeMiniGame();\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.sendSpinBonusGameRequest = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.gameClient) {\r\n\t            GameManager_1.GameManager.gameClient\r\n\t                .sendMaxPowerBonusSpinRequest(this.ticket)\r\n\t                .then(function (response) {\r\n\t                _this.setGameData(response);\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.setGameData = function (response) {\r\n\t        if (response != null) {\r\n\t            this.gameData = response;\r\n\t            this.spinStop(false, true);\r\n\t            if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration.GameRoundIdVisible) {\r\n\t                HtmlController_1.HtmlController.updateDataElement(GameData_1.GameData.DataRoundId, this.ticket.id);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            Jackpot_1.Jackpot.showError();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.intro = function () {\r\n\t        var _this = this;\r\n\t        if (!this.assetsLoaded) {\r\n\t            this.startAfterLoad = true;\r\n\t            return;\r\n\t        }\r\n\t        if (!this.gameStarted) {\r\n\t            this.gameStarted = true;\r\n\t            PlayList_1.PlayList.loop(\"SND_JackpotBuzzer\");\r\n\t            this.bounceCounters(true);\r\n\t            this.buzzerTimer.stop();\r\n\t            this.buzzerTimer.start(JackpotGame.BuzzerDuration);\r\n\t            setTimeout(function () {\r\n\t                _this.setBaseGameSound(false);\r\n\t            }, 1);\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.buzzerTimeFinished = function () {\r\n\t        this.buzzerTimer.stop();\r\n\t        this.bounceCounters(false);\r\n\t        PlayList_1.PlayList.stop(\"SND_JackpotBuzzer\");\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        DataManager_1.DataManager.GameLimit = false;\r\n\t        if (this.holder) {\r\n\t            this.lastEvent = this.introFinished.bind(this);\r\n\t            this.root.addEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n\t            this.root.addEventListener(\"animationend\", this.lastEvent);\r\n\t            AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"jackpotBg\", 1000, 5500);\r\n\t            PlayList_1.PlayList.play(\"SND_JackpotIntroHit\");\r\n\t            PlayList_1.PlayList.loop(\"SND_JackpotIntroWaitingLoop\", 360);\r\n\t            this.holder.classList.remove(\"_hidden\");\r\n\t            void this.holder.offsetWidth;\r\n\t            this.holder.classList.add(\"start\");\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.introFinished = function () {\r\n\t        if (this.holder) {\r\n\t            this.root.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n\t            this.root.removeEventListener(\"animationend\", this.lastEvent);\r\n\t            PlayList_1.PlayList.stop(\"SND_JackpotIntroHit\");\r\n\t            this.holder.classList.add(\"startFinished\");\r\n\t            this.setStageVisibility(false);\r\n\t            this.createSpinBtn();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.outro = function () {\r\n\t        this.setStageVisibility(true);\r\n\t        this.holder.classList.remove(\"spin\");\r\n\t        void this.holder.offsetWidth;\r\n\t        this.holder.classList.add(\"outro\");\r\n\t        AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"base\", 2000, 8000);\r\n\t        this.lastEvent = this.outroFinished.bind(this);\r\n\t        this.winContainer.addEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n\t        this.winContainer.addEventListener(\"animationend\", this.lastEvent);\r\n\t    };\r\n\t    JackpotGame.prototype.outroFinished = function (collect) {\r\n\t        if (collect === void 0) { collect = true; }\r\n\t        if (collect) {\r\n\t            this.updateBalance();\r\n\t        }\r\n\t        this.clearJackpotGame();\r\n\t        this.clearJackpotGameResponse();\r\n\t        this.setBaseGameSound(true);\r\n\t        BalanceManager_1.BalanceManager.refreshBalance();\r\n\t        if (this.showHandPayDialog) {\r\n\t            this.openHandPayDialog();\r\n\t        }\r\n\t        else {\r\n\t            this.restoreGameRound(collect);\r\n\t        }\r\n\t        this.autostart = false;\r\n\t    };\r\n\t    JackpotGame.prototype.updateBalance = function () {\r\n\t        if (this.gameData != null) {\r\n\t            if (this.gameData.balance != null) {\r\n\t                this.showHandPayDialog = false;\r\n\t                BalanceManager_1.BalanceManager.balanceReceived(this.gameData.balance);\r\n\t                PlayList_1.PlayList.play(\"SND_BaseCollect\");\r\n\t                if (this.gameData.game != null && this.gameData.game.win != null) {\r\n\t                    DataManager_1.DataManager.updateTotalGain(false, this.gameData.game.win.amount);\r\n\t                }\r\n\t                if (AppContext_1.AppContext != null && !AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n\t                    this.updateWin(false, \"0\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this.showHandPayDialog = true;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.restoreGameRound = function (collect) {\r\n\t        if (collect === void 0) { collect = true; }\r\n\t        this.gameInitialized = false;\r\n\t        this.gameStarted = false;\r\n\t        this.showHandPayDialog = false;\r\n\t        ModuleManager_1.ModuleManager.restoreGameRound(GameModules.Base, collect);\r\n\t    };\r\n\t    JackpotGame.prototype.openHandPayDialog = function () {\r\n\t        var response = {\r\n\t            messages: [\r\n\t                {\r\n\t                    text: Languages_1.Languages.getRid(\"HANDPAY_DIALOG\", Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, this.gameData.game.win.amount.toString()) +\r\n\t                        \" \" +\r\n\t                        DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency)),\r\n\t                },\r\n\t            ],\r\n\t        };\r\n\t        MessageManager_1.MessageManager.postpone(this.restoreGameRound.bind(this), response);\r\n\t    };\r\n\t    JackpotGame.prototype.initSymbols = function () {\r\n\t        if (this.reel) {\r\n\t            this.currentSymbols = [];\r\n\t            this.currentSymbolsHeight = [];\r\n\t            this.stripIndex = (JackpotGame.Strip.indexOf(4) + 2 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\r\n\t            if (!this.rootHeight) {\r\n\t                this.rootHeight = this.getElementHeight(this.root);\r\n\t            }\r\n\t            var symbolId = void 0;\r\n\t            this.symbolsHeight = [];\r\n\t            for (var i = 0; i < JackpotGame.SymbolsCount; i++) {\r\n\t                symbolId = i + 1;\r\n\t                var symbol = this.createElement(\"div\", \"jackpotSymbol l-\" + symbolId, this.reel);\r\n\t                this.symbolsHeight.push(this.getElementHeight(symbol));\r\n\t                this.reel.removeChild(symbol);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.createSymbols = function () {\r\n\t        if (this.reel) {\r\n\t            var symbolId = void 0;\r\n\t            for (var i = 0; i < JackpotGame.SpinPreRollSymbolCount; i++) {\r\n\t                this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\r\n\t                symbolId = JackpotGame.Strip[this.stripIndex];\r\n\t                this.addSymbolToReel(symbolId, false, i > 3);\r\n\t            }\r\n\t            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\r\n\t            this.setTransformY(this.reel, this.currentOffset);\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.updateSymbols = function () {\r\n\t        while (this.currentSymbols.length > 3) {\r\n\t            this.currentSymbolsHeight.pop();\r\n\t            var symbol = this.currentSymbols.pop();\r\n\t            this.reel.removeChild(symbol);\r\n\t        }\r\n\t        if (this.isStopping) {\r\n\t            this.updatePostRollSymbols();\r\n\t        }\r\n\t        else {\r\n\t            this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\r\n\t            var symbolId = JackpotGame.Strip[this.stripIndex];\r\n\t            this.addSymbolToReel(symbolId, false, true);\r\n\t            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\r\n\t            this.setTransformY(this.reel, this.currentOffset);\r\n\t            this.spinRoll();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.updatePostRollSymbols = function () {\r\n\t        if (this.gameData != null) {\r\n\t            var winSymbolId = this.gameData.game.symbols[JackpotGame.MiddleSymbolIndex];\r\n\t            var finishStripIndex = Math.floor(Math.random() * JackpotGame.Strip.length);\r\n\t            while (JackpotGame.Strip[finishStripIndex] != winSymbolId) {\r\n\t                finishStripIndex = (finishStripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\r\n\t            }\r\n\t            this.stripIndex =\r\n\t                (finishStripIndex + (JackpotGame.SpinPostRollSymbolCount - 1) + JackpotGame.Strip.length) %\r\n\t                    JackpotGame.Strip.length;\r\n\t            for (var i = 0; i < JackpotGame.SpinPostRollSymbolCount; i++) {\r\n\t                this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\r\n\t                var symbolId = JackpotGame.Strip[this.stripIndex];\r\n\t                this.addSymbolToReel(symbolId, i == JackpotGame.SpinPostRollSymbolCount - 2, i < 8);\r\n\t            }\r\n\t            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\r\n\t            this.setTransformY(this.reel, this.currentOffset);\r\n\t            this.spinPostRoll();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.removeOffScreenSymbols = function () {\r\n\t        while (this.currentSymbols.length > 3) {\r\n\t            this.currentSymbolsHeight.pop();\r\n\t            var symbol = this.currentSymbols.pop();\r\n\t            this.reel.removeChild(symbol);\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.spinStart = function () {\r\n\t        if (this.spinBtn) {\r\n\t            this.spinBtn.parentElement.removeChild(this.spinBtn);\r\n\t        }\r\n\t        document.removeEventListener(\"keyup\", this.lastEvent);\r\n\t        this.updateWin(false, \"0\");\r\n\t        PlayList_1.PlayList.stop(\"SND_JackpotIntroWaitingLoop\");\r\n\t        PlayList_1.PlayList.play(\"SND_JackpotStartHit\");\r\n\t        PlayList_1.PlayList.play(\"SND_JackpotWheelMusic\");\r\n\t        this.stoppedFromMachine = false;\r\n\t        this.stoppedFromServer = false;\r\n\t        if (this.holder) {\r\n\t            this.holder.classList.remove(\"start\");\r\n\t            this.holder.classList.remove(\"startFinished\");\r\n\t            this.holder.classList.add(\"spin\");\r\n\t        }\r\n\t        this.isStopping = false;\r\n\t        this.stopTimer.start(JackpotGame.MinSpinDuration);\r\n\t        this.spinPreRoll();\r\n\t    };\r\n\t    JackpotGame.prototype.spinPreRoll = function () {\r\n\t        var nextOffset = this.getReelOffset(1);\r\n\t        this.symbolStepOffsets = this.getSymbolStepOffsets(1);\r\n\t        this.animate(this.currentOffset, nextOffset, this.updateSymbols, JackpotGame.SpinPreRollDuration, \"Power2.easeIn\", 0, this.onSpinPostRollUpdate);\r\n\t    };\r\n\t    JackpotGame.prototype.spinRoll = function () {\r\n\t        var nextOffset = this.getReelOffset(1);\r\n\t        var duration = this.getSpinRollDuration(nextOffset);\r\n\t        this.symbolStepOffsets = this.getSymbolStepOffsets(1);\r\n\t        this.animate(this.currentOffset, nextOffset, this.updateSymbols, duration, \"linear\", 0, this.onSpinPostRollUpdate);\r\n\t    };\r\n\t    JackpotGame.prototype.spinPostRoll = function () {\r\n\t        Jackpot_1.Jackpot.refreshBonusInfoInMiniGame(this.createLevelDataOverride(false));\r\n\t        var nextOffset = this.getReelOffset(1);\r\n\t        this.symbolStepOffsets = this.getSymbolStepOffsets(1);\r\n\t        this.animate(this.currentOffset, nextOffset, this.spinComplete, JackpotGame.SpinPostRollDuration, \"miniGameSpinStopEase\", 0, this.onSpinPostRollUpdate);\r\n\t    };\r\n\t    JackpotGame.prototype.onSpinPostRollUpdate = function (tween) {\r\n\t        if (this.symbolStepOffsets.length > 0) {\r\n\t            if (tween.target._gsTransform.y > this.symbolStepOffsets[0]) {\r\n\t                PlayList_1.PlayList.play(\"SND_JackpotWheelClick1\");\r\n\t                if (this.holder) {\r\n\t                    this.holder.classList.remove(\"hit\");\r\n\t                    this.holder.offsetWidth;\r\n\t                    this.holder.classList.add(\"hit\");\r\n\t                }\r\n\t                this.symbolStepOffsets.shift();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.spinComplete = function () {\r\n\t        HtmlController_1.HtmlController.dispatchAction(\"\");\r\n\t        if (this.gameData != null) {\r\n\t            this.showWinDelay.start(135);\r\n\t            if (this.gameData.game.limit) {\r\n\t                LimitDialog_1.LimitDialog.openDialog();\r\n\t            }\r\n\t        }\r\n\t        this.removeOffScreenSymbols();\r\n\t        Jackpot_1.Jackpot.refreshBonusInfoWithWinValue(this.createLevelDataOverride(true));\r\n\t        var isHigh = this.createWinValue();\r\n\t        PlayList_1.PlayList.stop(\"SND_JackpotWheelMusic\", 30);\r\n\t        PlayList_1.PlayList.play(\"SND_JackpotWinMusic\");\r\n\t        this.outro();\r\n\t    };\r\n\t    JackpotGame.prototype.updateWin = function (collected, value) {\r\n\t        if (value === void 0) { value = \"\"; }\r\n\t        this.showWinDelay.stop();\r\n\t        var uncollectedWin = document.getElementById(\"uncollectedWin\");\r\n\t        var collectedWin = document.getElementById(\"collectedWin\");\r\n\t        if (uncollectedWin != null && collectedWin != null) {\r\n\t            if (!neo_common_1.StringUtils.isNullOrEmpty(value)) {\r\n\t                HtmlController_1.HtmlController.updateDataElement(GameData_1.GameData.DataTotalWin, value);\r\n\t            }\r\n\t            else {\r\n\t                HtmlController_1.HtmlController.updateDataElement(GameData_1.GameData.DataTotalWin, this.gameData.game.win.amount.toString());\r\n\t            }\r\n\t            if (collected) {\r\n\t                uncollectedWin.classList.add(\"_hidden\");\r\n\t                collectedWin.classList.remove(\"_hidden\");\r\n\t            }\r\n\t            else {\r\n\t                uncollectedWin.classList.remove(\"_hidden\");\r\n\t                collectedWin.classList.add(\"_hidden\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.animate = function (currentOffset, newOffset, callback, duration, ease, delay, updateCallback) {\r\n\t        if (ease === void 0) { ease = \"linear\"; }\r\n\t        if (delay === void 0) { delay = 0; }\r\n\t        if (updateCallback === void 0) { updateCallback = null; }\r\n\t        duration = duration * GsapEffects_1.GsapEffects.TickTime;\r\n\t        delay = delay * GsapEffects_1.GsapEffects.TickTime;\r\n\t        gsap_1.TweenMax.killTweensOf(this.reel);\r\n\t        var tween = gsap_1.TweenMax.fromTo(this.reel, duration, { y: currentOffset, roundProps: \"y\" }, { y: newOffset, ease: ease, delay: delay, roundProps: \"y\" });\r\n\t        this.currentOffset = newOffset;\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(callback)) {\r\n\t            tween.eventCallback(\"onComplete\", callback, [], this);\r\n\t        }\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(updateCallback)) {\r\n\t            tween.eventCallback(\"onUpdate\", updateCallback, [\"{self}\"], this);\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.createWinValue = function () {\r\n\t        if (this.gameData != null) {\r\n\t            var winValue = Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, this.gameData.game.win.amount.toString());\r\n\t            if (this.winContainer) {\r\n\t                var childs = this.winContainer.children;\r\n\t                for (var i = 0; i < winValue.length; i++) {\r\n\t                    if (!childs[i]) {\r\n\t                        this.createElement(\"div\", \"n\" + winValue.charCodeAt(i).toString(), this.winContainer);\r\n\t                    }\r\n\t                    else {\r\n\t                        childs[i].className = \"n\" + winValue.charCodeAt(i).toString();\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            return this.gameData.game.win.level == \"Gold\" || this.gameData.game.win.level == \"Diamond\";\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    JackpotGame.prototype.getRoot = function () {\r\n\t        return this.root;\r\n\t    };\r\n\t    JackpotGame.prototype.getElementHeight = function (elem) {\r\n\t        return parseInt(window.getComputedStyle(elem).height);\r\n\t    };\r\n\t    JackpotGame.prototype.getSpinRollDuration = function (newOffset) {\r\n\t        var diff = Math.abs(this.currentOffset - newOffset);\r\n\t        return Math.round((diff / this.symbolsHeight[0]) * JackpotGame.SpinRollSpeed);\r\n\t    };\r\n\t    JackpotGame.prototype.getReelOffset = function (middleSymbolIndex) {\r\n\t        var offset = Math.round(this.rootHeight * 0.5);\r\n\t        if (this.currentSymbols.length > 0) {\r\n\t            for (var i = 0; i < middleSymbolIndex; i++) {\r\n\t                offset -= this.currentSymbolsHeight[i];\r\n\t            }\r\n\t            offset -= Math.round(this.currentSymbolsHeight[middleSymbolIndex] * 0.5);\r\n\t        }\r\n\t        return offset;\r\n\t    };\r\n\t    JackpotGame.prototype.getSymbolStepOffsets = function (middleSymbolIndex) {\r\n\t        var offset = this.currentOffset;\r\n\t        var result = [];\r\n\t        if (this.currentSymbols.length > 2) {\r\n\t            offset += this.currentSymbolsHeight[this.currentSymbols.length - 2] * 0.5;\r\n\t            result.push(offset);\r\n\t            for (var i = this.currentSymbolsHeight.length - 3; i > middleSymbolIndex; i--) {\r\n\t                offset += this.currentSymbolsHeight[i];\r\n\t                result.push(offset);\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    JackpotGame.prototype.createElement = function (tag, className, rootElem, appendBefore) {\r\n\t        if (appendBefore === void 0) { appendBefore = null; }\r\n\t        var elem = document.createElement(tag);\r\n\t        elem.setAttribute(\"class\", className);\r\n\t        if (rootElem != null) {\r\n\t            if (appendBefore != null) {\r\n\t                rootElem.insertBefore(elem, appendBefore);\r\n\t            }\r\n\t            else {\r\n\t                rootElem.appendChild(elem);\r\n\t            }\r\n\t        }\r\n\t        return elem;\r\n\t    };\r\n\t    JackpotGame.prototype.createSymbol = function (tag, className, rootElem, appendBefore) {\r\n\t        if (appendBefore === void 0) { appendBefore = null; }\r\n\t        var elem = document.createElement(tag);\r\n\t        elem.setAttribute(\"class\", className);\r\n\t        var symbolHolder = document.createElement(tag);\r\n\t        symbolHolder.className = \"jackpotSymbolHolder\";\r\n\t        elem.appendChild(symbolHolder);\r\n\t        if (rootElem != null) {\r\n\t            if (appendBefore != null) {\r\n\t                rootElem.insertBefore(elem, appendBefore);\r\n\t            }\r\n\t            else {\r\n\t                rootElem.appendChild(elem);\r\n\t            }\r\n\t        }\r\n\t        return elem;\r\n\t    };\r\n\t    JackpotGame.prototype.createTextElement = function (tag, className, text, rootElem) {\r\n\t        var elem = this.createElement(tag, className, rootElem);\r\n\t        elem.innerHTML = text;\r\n\t        return elem;\r\n\t    };\r\n\t    JackpotGame.prototype.createSpinBtn = function () {\r\n\t        var userControls = document.getElementById(\"userControls\");\r\n\t        if (userControls) {\r\n\t            var spinBtn = userControls.getElementsByClassName(\"spinBtn\")[0];\r\n\t            if (spinBtn) {\r\n\t                var parent_1 = spinBtn.parentElement;\r\n\t                this.spinBtn = this.createElement(\"div\", \"btn spinBtn\", parent_1);\r\n\t                this.spinBtn.innerHTML = spinBtn.innerHTML;\r\n\t                this.spinBtn.addEventListener(\"click\", this.startGame.bind(this));\r\n\t                this.lastEvent = this.handleSpaceStart.bind(this);\r\n\t                document.addEventListener(\"keyup\", this.lastEvent);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.createLevelDataOverride = function (winData) {\r\n\t        var result = {};\r\n\t        if (this.gameData != null) {\r\n\t            result.code = this.gameData.game.win.level;\r\n\t            if (winData) {\r\n\t                result.lastWinAmount = this.gameData.game.win.amount;\r\n\t            }\r\n\t            else {\r\n\t                result.nextValue = this.gameData.game.win.amount;\r\n\t                result.nextTimestamp = new Date(new Date().getTime() + 8000).toISOString();\r\n\t                result.previousValue = this.gameData.game.win.amount;\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    JackpotGame.prototype.setTransformY = function (elem, y) {\r\n\t        elem.style.transform = \"translate3d(0, \" + y + \"px, 0)\";\r\n\t    };\r\n\t    JackpotGame.prototype.setStageVisibility = function (visible) {\r\n\t        if (StageController_1.StageController.Stage != null) {\r\n\t            StageController_1.StageController.Stage.visible = visible;\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.handleSpaceStart = function (event) {\r\n\t        if (event.keyCode == 32) {\r\n\t            this.startGame();\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.addSymbolToReel = function (symbolId, winSymbol, blured) {\r\n\t        if (winSymbol === void 0) { winSymbol = false; }\r\n\t        if (blured === void 0) { blured = false; }\r\n\t        var className = \"jackpotSymbol l-\" + symbolId;\r\n\t        if (winSymbol) {\r\n\t            className += \" jackpotWinSymbol\";\r\n\t            this.holder.classList.add(\"win-\" + symbolId);\r\n\t        }\r\n\t        if (blured) {\r\n\t            className += \" blur\";\r\n\t        }\r\n\t        var symbol = this.createSymbol(\"div\", className, this.reel, this.currentSymbols[0]);\r\n\t        this.currentSymbols.unshift(symbol);\r\n\t        this.currentSymbolsHeight.unshift(this.symbolsHeight[symbolId - 1]);\r\n\t    };\r\n\t    JackpotGame.prototype.bounceCounters = function (enable) {\r\n\t        var countersHolder = document.getElementById(\"jackpotCounters\");\r\n\t        var countersLogo = document.getElementById(\"jackpotLogo\");\r\n\t        if (countersHolder != null && countersLogo != null) {\r\n\t            if (enable) {\r\n\t                countersHolder.classList.add(\"jackpotBounce\");\r\n\t                countersLogo.classList.add(\"jackpotBounce\");\r\n\t            }\r\n\t            else {\r\n\t                countersHolder.classList.remove(\"jackpotBounce\");\r\n\t                countersLogo.classList.remove(\"jackpotBounce\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    JackpotGame.prototype.getCustomContent = function (name, extension) {\r\n\t        return new Promise(function (resolve, reject) {\r\n\t            if (AppContext_1.AppContext.gameConfiguration == null) {\r\n\t                resolve([name, \"\"]);\r\n\t                return;\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameConfiguration.StaticContentUrl == \"\") {\r\n\t                resolve([name, \"\"]);\r\n\t                return;\r\n\t            }\r\n\t            var theme = AppContext_1.AppContext.gameConfiguration.ProgressiveBonusTheme;\r\n\t            if (theme == \"\") {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.UseJackpotLocalization) {\r\n\t                    theme = Jackpot_1.Jackpot.JackpotTheme;\r\n\t                }\r\n\t                else {\r\n\t                    resolve([name, \"\"]);\r\n\t                    return;\r\n\t                }\r\n\t            }\r\n\t            var staticContentUrl = AppContext_1.AppContext.gameConfiguration.StaticContentUrl;\r\n\t            var spbFolder = \"SynotProgressiveBonus\";\r\n\t            var url = \"\" + staticContentUrl + spbFolder + \"/\" + theme + \"/\" + window[\"QUALITY\"] + \"/\" + name + extension;\r\n\t            var img = document.createElement(\"img\");\r\n\t            img.setAttribute(\"src\", url);\r\n\t            img.addEventListener(\"load\", function (ev) {\r\n\t                resolve([name, url]);\r\n\t            });\r\n\t            img.addEventListener(\"error\", function (ev) {\r\n\t                resolve([name, \"\"]);\r\n\t            });\r\n\t        });\r\n\t    };\r\n\t    JackpotGame.Strip = [\r\n\t        1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 4, 1, 2, 1, 1, 2, 1, 3, 1, 1, 2, 1, 1, 1, 2, 1, 1,\r\n\t        1, 1, 3, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 4,\r\n\t    ];\r\n\t    JackpotGame.SymbolsCount = 4;\r\n\t    JackpotGame.BuzzerDuration = 180;\r\n\t    JackpotGame.SpinRollSpeed = 8;\r\n\t    JackpotGame.MinSpinDuration = 360;\r\n\t    JackpotGame.MiddleSymbolIndex = 1;\r\n\t    JackpotGame.SpinPreRollDuration = 120;\r\n\t    JackpotGame.SpinPreRollSymbolCount = 8;\r\n\t    JackpotGame.SpinPostRollDuration = 360;\r\n\t    JackpotGame.SpinPostRollSymbolCount = 12;\r\n\t    return JackpotGame;\r\n\t}());\r\n\texports.JackpotGame = JackpotGame;\r\n\n\n/***/ },\n/* 60 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar gsap_1 = __webpack_require__(16);\r\n\tvar CustomEase = (function (_super) {\r\n\t    __extends(CustomEase, _super);\r\n\t    function CustomEase(id, data, config) {\r\n\t        _super.call(this);\r\n\t        this._numbersExp = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi;\r\n\t        this._svgPathExp = /[achlmqstvz]|(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi;\r\n\t        this._scientific = /[\\+\\-]?\\d*\\.?\\d+e[\\+\\-]?\\d+/gi;\r\n\t        this._needsParsingExp = /[cLlsS]/g;\r\n\t        this._bezierError = \"CustomEase only accepts Cubic Bezier data.\";\r\n\t        this.id = id;\r\n\t        if (id) {\r\n\t            gsap_1.Ease.map[id] = this;\r\n\t        }\r\n\t        this._calcEnd = true;\r\n\t        this.getRatio = this._getRatio;\r\n\t        this.setData(data, config);\r\n\t    }\r\n\t    CustomEase.prototype._bezierToPoints = function (x1, y1, x2, y2, x3, y3, x4, y4, threshold, points, index) {\r\n\t        var x12 = (x1 + x2) / 2;\r\n\t        var y12 = (y1 + y2) / 2;\r\n\t        var x23 = (x2 + x3) / 2;\r\n\t        var y23 = (y2 + y3) / 2;\r\n\t        var x34 = (x3 + x4) / 2;\r\n\t        var y34 = (y3 + y4) / 2;\r\n\t        var x123 = (x12 + x23) / 2;\r\n\t        var y123 = (y12 + y23) / 2;\r\n\t        var x234 = (x23 + x34) / 2;\r\n\t        var y234 = (y23 + y34) / 2;\r\n\t        var x1234 = (x123 + x234) / 2;\r\n\t        var y1234 = (y123 + y234) / 2;\r\n\t        var dx = x4 - x1;\r\n\t        var dy = y4 - y1;\r\n\t        var d2 = Math.abs((x2 - x4) * dy - (y2 - y4) * dx);\r\n\t        var d3 = Math.abs((x3 - x4) * dy - (y3 - y4) * dx);\r\n\t        var length;\r\n\t        if (!points) {\r\n\t            points = [\r\n\t                { x: x1, y: y1 },\r\n\t                { x: x4, y: y4 },\r\n\t            ];\r\n\t            index = 1;\r\n\t        }\r\n\t        points.splice(index || points.length - 1, 0, { x: x1234, y: y1234 });\r\n\t        if ((d2 + d3) * (d2 + d3) > threshold * (dx * dx + dy * dy)) {\r\n\t            length = points.length;\r\n\t            this._bezierToPoints(x1, y1, x12, y12, x123, y123, x1234, y1234, threshold, points, index);\r\n\t            this._bezierToPoints(x1234, y1234, x234, y234, x34, y34, x4, y4, threshold, points, index + 1 + (points.length - length));\r\n\t        }\r\n\t        return points;\r\n\t    };\r\n\t    CustomEase.prototype._pathDataToBezier = function (d) {\r\n\t        var a = (d + \"\")\r\n\t            .replace(this._scientific, function (m) {\r\n\t            var n = +m;\r\n\t            var result = n < 0.0001 && n > -0.0001 ? 0 : n;\r\n\t            return result.toString();\r\n\t        })\r\n\t            .match(this._svgPathExp) || [];\r\n\t        var path = [];\r\n\t        var relativeX = 0;\r\n\t        var relativeY = 0;\r\n\t        var elements = a.length;\r\n\t        var l = 2;\r\n\t        var i;\r\n\t        var x;\r\n\t        var y;\r\n\t        var command;\r\n\t        var isRelative;\r\n\t        var segment;\r\n\t        var startX;\r\n\t        var startY;\r\n\t        var prevCommand;\r\n\t        var difX;\r\n\t        var difY;\r\n\t        for (i = 0; i < elements; i++) {\r\n\t            prevCommand = command;\r\n\t            if (isNaN(parseFloat(a[i]))) {\r\n\t                command = a[i].toUpperCase();\r\n\t                isRelative = command !== a[i];\r\n\t            }\r\n\t            else {\r\n\t                i--;\r\n\t            }\r\n\t            x = +a[i + 1];\r\n\t            y = +a[i + 2];\r\n\t            if (isRelative) {\r\n\t                x += relativeX;\r\n\t                y += relativeY;\r\n\t            }\r\n\t            if (!i) {\r\n\t                startX = x;\r\n\t                startY = y;\r\n\t            }\r\n\t            if (command === \"M\") {\r\n\t                if (segment && segment.length < 8) {\r\n\t                    path.length -= 1;\r\n\t                    l = 0;\r\n\t                }\r\n\t                relativeX = startX = x;\r\n\t                relativeY = startY = y;\r\n\t                segment = [x, y];\r\n\t                l = 2;\r\n\t                path.push(segment);\r\n\t                i += 2;\r\n\t                command = \"L\";\r\n\t            }\r\n\t            else if (command === \"C\") {\r\n\t                if (!segment) {\r\n\t                    segment = [0, 0];\r\n\t                }\r\n\t                segment[l++] = x;\r\n\t                segment[l++] = y;\r\n\t                if (!isRelative) {\r\n\t                    relativeX = relativeY = 0;\r\n\t                }\r\n\t                segment[l++] = relativeX + parseFloat(a[i + 3]);\r\n\t                segment[l++] = relativeY + parseFloat(a[i + 4]);\r\n\t                segment[l++] = relativeX = relativeX + parseFloat(a[i + 5]);\r\n\t                segment[l++] = relativeY = relativeY + parseFloat(a[i + 6]);\r\n\t                i += 6;\r\n\t            }\r\n\t            else if (command === \"S\") {\r\n\t                if (prevCommand === \"C\" || prevCommand === \"S\") {\r\n\t                    difX = relativeX - segment[l - 4];\r\n\t                    difY = relativeY - segment[l - 3];\r\n\t                    segment[l++] = relativeX + difX;\r\n\t                    segment[l++] = relativeY + difY;\r\n\t                }\r\n\t                else {\r\n\t                    segment[l++] = relativeX;\r\n\t                    segment[l++] = relativeY;\r\n\t                }\r\n\t                segment[l++] = x;\r\n\t                segment[l++] = y;\r\n\t                if (!isRelative) {\r\n\t                    relativeX = relativeY = 0;\r\n\t                }\r\n\t                segment[l++] = relativeX = relativeX + parseFloat(a[i + 3]);\r\n\t                segment[l++] = relativeY = relativeY + parseFloat(a[i + 4]);\r\n\t                i += 4;\r\n\t            }\r\n\t            else if (command === \"L\" || command === \"Z\") {\r\n\t                if (command === \"Z\") {\r\n\t                    x = startX;\r\n\t                    y = startY;\r\n\t                    segment.closed = true;\r\n\t                }\r\n\t                if (command === \"L\" || Math.abs(relativeX - x) > 0.5 || Math.abs(relativeY - y) > 0.5) {\r\n\t                    segment[l++] = relativeX + (x - relativeX) / 3;\r\n\t                    segment[l++] = relativeY + (y - relativeY) / 3;\r\n\t                    segment[l++] = relativeX + ((x - relativeX) * 2) / 3;\r\n\t                    segment[l++] = relativeY + ((y - relativeY) * 2) / 3;\r\n\t                    segment[l++] = x;\r\n\t                    segment[l++] = y;\r\n\t                    if (command === \"L\") {\r\n\t                        i += 2;\r\n\t                    }\r\n\t                }\r\n\t                relativeX = x;\r\n\t                relativeY = y;\r\n\t            }\r\n\t            else {\r\n\t                throw this._bezierError;\r\n\t            }\r\n\t        }\r\n\t        return path[0];\r\n\t    };\r\n\t    CustomEase.prototype._findMinimum = function (values) {\r\n\t        var l = values.length, min = 999999999999, i;\r\n\t        for (i = 1; i < l; i += 6) {\r\n\t            if (+values[i] < min) {\r\n\t                min = +values[i];\r\n\t            }\r\n\t        }\r\n\t        return min;\r\n\t    };\r\n\t    CustomEase.prototype._normalize = function (values, height, originY) {\r\n\t        if (!originY && originY !== 0) {\r\n\t            originY = Math.max(+values[values.length - 1], +values[1]);\r\n\t        }\r\n\t        var tx = +values[0] * -1, ty = -originY, l = values.length, sx = 1 / (+values[l - 2] + tx), sy = -height ||\r\n\t            (Math.abs(+values[l - 1] - +values[1]) < 0.01 * (+values[l - 2] - +values[0])\r\n\t                ? this._findMinimum(values) + ty\r\n\t                : +values[l - 1] + ty), i;\r\n\t        if (sy) {\r\n\t            sy = 1 / sy;\r\n\t        }\r\n\t        else {\r\n\t            sy = -sx;\r\n\t        }\r\n\t        for (i = 0; i < l; i += 2) {\r\n\t            values[i] = (+values[i] + tx) * sx;\r\n\t            values[i + 1] = (+values[i + 1] + ty) * sy;\r\n\t        }\r\n\t    };\r\n\t    CustomEase.prototype._getRatio = function (p) {\r\n\t        var point = this.lookup[(p * this.l) | 0] || this.lookup[this.l - 1];\r\n\t        if (point.nx < p) {\r\n\t            point = point.n;\r\n\t        }\r\n\t        var result = point.y + ((p - point.x) / point.cx) * point.cy;\r\n\t        return result;\r\n\t    };\r\n\t    CustomEase.prototype.setData = function (data, config) {\r\n\t        this.data = data || \"0,0,1,1\";\r\n\t        this.points = [];\r\n\t        this.lookup = [];\r\n\t        var values = neo_common_1.ArrayUtils.numberArray(this.data.match(this._numbersExp).join(\";\"));\r\n\t        var closest = 1;\r\n\t        var a1, a2, i, inc, j, point, prevPoint, p, precision;\r\n\t        precision = (config && config.precision) || 1;\r\n\t        this.fast = precision <= 1;\r\n\t        if (this._needsParsingExp.test(data) || (data.indexOf(\"M\") !== -1 && data.indexOf(\"C\") === -1)) {\r\n\t            values = this._pathDataToBezier(data);\r\n\t        }\r\n\t        this.l = values.length;\r\n\t        if (this.l === 4) {\r\n\t            values.unshift(0, 0);\r\n\t            values.push(1, 1);\r\n\t            this.l = 8;\r\n\t        }\r\n\t        else if ((this.l - 2) % 6) {\r\n\t            throw this._bezierError;\r\n\t        }\r\n\t        if (+values[0] !== 0 || +values[this.l - 2] !== 1) {\r\n\t            var height = config && config.height ? config.height : null;\r\n\t            var originY = config && config.originY ? config.originY : null;\r\n\t            this._normalize(values, height, originY);\r\n\t        }\r\n\t        this.rawBezier = values;\r\n\t        for (i = 2; i < this.l; i += 6) {\r\n\t            a1 = { x: +values[i - 2], y: +values[i - 1] };\r\n\t            a2 = { x: +values[i + 4], y: +values[i + 5] };\r\n\t            this.points.push(a1, a2);\r\n\t            this._bezierToPoints(a1.x, a1.y, +values[i], +values[i + 1], +values[i + 2], +values[i + 3], a2.x, a2.y, 1 / (precision * 200000), this.points, this.points.length - 1);\r\n\t        }\r\n\t        this.l = this.points.length;\r\n\t        for (i = 0; i < this.l; i++) {\r\n\t            point = this.points[i];\r\n\t            prevPoint = this.points[i - 1] || point;\r\n\t            if (point.x > prevPoint.x || (prevPoint.y !== point.y && prevPoint.x === point.x) || point === prevPoint) {\r\n\t                prevPoint.cx = point.x - prevPoint.x;\r\n\t                prevPoint.cy = point.y - prevPoint.y;\r\n\t                prevPoint.n = point;\r\n\t                prevPoint.nx = point.x;\r\n\t                if (this.fast &&\r\n\t                    i > 1 &&\r\n\t                    Math.abs(prevPoint.cy / prevPoint.cx - this.points[i - 2].cy / this.points[i - 2].cx) > 2) {\r\n\t                    this.fast = false;\r\n\t                }\r\n\t                if (prevPoint.cx < closest) {\r\n\t                    if (!prevPoint.cx) {\r\n\t                        prevPoint.cx = 0.001;\r\n\t                        if (i === this.l - 1) {\r\n\t                            prevPoint.x -= 0.001;\r\n\t                            closest = Math.min(closest, 0.001);\r\n\t                            this.fast = false;\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        closest = prevPoint.cx;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this.points.splice(i--, 1);\r\n\t                this.l--;\r\n\t            }\r\n\t        }\r\n\t        this.l = (1 / closest + 1) | 0;\r\n\t        inc = 1 / this.l;\r\n\t        j = 0;\r\n\t        point = this.points[0];\r\n\t        if (this.fast) {\r\n\t            for (i = 0; i < this.l; i++) {\r\n\t                p = i * inc;\r\n\t                if (point.nx < p) {\r\n\t                    point = this.points[++j];\r\n\t                }\r\n\t                a1 = point.y + ((p - point.x) / point.cx) * point.cy;\r\n\t                this.lookup[i] = { x: p, cx: inc, y: a1, cy: 0, nx: 9 };\r\n\t                if (i) {\r\n\t                    this.lookup[i - 1].cy = a1 - this.lookup[i - 1].y;\r\n\t                }\r\n\t            }\r\n\t            this.lookup[this.l - 1].cy = this.points[this.points.length - 1].y - a1;\r\n\t        }\r\n\t        else {\r\n\t            for (i = 0; i < this.l; i++) {\r\n\t                if (point.nx < i * inc) {\r\n\t                    point = this.points[++j];\r\n\t                }\r\n\t                this.lookup[i] = point;\r\n\t            }\r\n\t            if (j < this.points.length - 1) {\r\n\t                this.lookup[i - 1] = this.points[this.points.length - 2];\r\n\t            }\r\n\t        }\r\n\t        this._calcEnd = this.points[this.points.length - 1].y !== 1 || this.points[0].y !== 0;\r\n\t    };\r\n\t    CustomEase.create = function (id, data, config) {\r\n\t        return new CustomEase(id, data, config);\r\n\t    };\r\n\t    CustomEase.get = function (id) {\r\n\t        return gsap_1.Ease.map[id];\r\n\t    };\r\n\t    return CustomEase;\r\n\t}(gsap_1.Ease));\r\n\texports.CustomEase = CustomEase;\r\n\n\n/***/ },\n/* 61 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar AmbientBackground = (function () {\r\n\t    function AmbientBackground() {\r\n\t    }\r\n\t    AmbientBackground.changeAmbientBackground = function (newBackgroundName, duration, delay) {\r\n\t        if (duration === void 0) { duration = 200; }\r\n\t        if (delay === void 0) { delay = 0; }\r\n\t        var base = document.getElementById(\"ambientBackgroundBase\");\r\n\t        var transition = document.getElementById(\"ambientBackgroundTransition\");\r\n\t        if (base && transition) {\r\n\t            if (!transition.classList.contains(newBackgroundName)) {\r\n\t                transition.classList.remove(\"show\");\r\n\t                base.className = transition.className;\r\n\t                transition.style.transitionDuration = duration + \"ms\";\r\n\t                transition.style.transitionDelay = delay + \"ms\";\r\n\t                transition.className = \"\";\r\n\t                transition.offsetWidth;\r\n\t                transition.classList.add(newBackgroundName, \"show\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AmbientBackground.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Scaling\", s);\r\n\t        }\r\n\t    };\r\n\t    return AmbientBackground;\r\n\t}());\r\n\texports.AmbientBackground = AmbientBackground;\r\n\n\n/***/ },\n/* 62 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar Focus = (function () {\r\n\t    function Focus() {\r\n\t    }\r\n\t    Focus.focus = function () {\r\n\t        window.onblur = Focus.onBlur;\r\n\t        window.onfocus = Focus.onFocus;\r\n\t        window.onclick = Focus.onClick;\r\n\t        window.addEventListener(\"fullscreenchange\", Focus.onFullscreenChange.bind(this));\r\n\t    };\r\n\t    Focus.onClick = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration &&\r\n\t            AppContext_1.AppContext.gameConfiguration.FullscreenOnClick &&\r\n\t            !Scaling_1.Scaling.IsIOs &&\r\n\t            !neo_games_1.Platforms.Platforms.handleFullscreen) {\r\n\t            if (document.body.requestFullscreen) {\r\n\t                document.body.requestFullscreen();\r\n\t            }\r\n\t            else if (document.body.webkitRequestFullscreen) {\r\n\t                document.body.webkitRequestFullscreen();\r\n\t            }\r\n\t        }\r\n\t        if (!Focus.clicked) {\r\n\t            Focus.clicked = true;\r\n\t        }\r\n\t    };\r\n\t    Focus.onFullscreenChange = function (e) {\r\n\t        neo_games_1.Platforms.Platforms.fullscreen(document.fullscreenElement != null);\r\n\t    };\r\n\t    Focus.onFocus = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration && AppContext_1.AppContext.gameConfiguration.MuteOnLostFocus) {\r\n\t            PIXI.sound.unmuteAll();\r\n\t        }\r\n\t    };\r\n\t    Focus.onBlur = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration && AppContext_1.AppContext.gameConfiguration.MuteOnLostFocus) {\r\n\t            PIXI.sound.muteAll();\r\n\t        }\r\n\t    };\r\n\t    Focus.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Focus\", s);\r\n\t        }\r\n\t    };\r\n\t    Focus.clicked = false;\r\n\t    return Focus;\r\n\t}());\r\n\texports.Focus = Focus;\r\n\n\n/***/ },\n/* 63 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar XmlResource_1 = __webpack_require__(64);\r\n\tvar SoundManager_1 = __webpack_require__(39);\r\n\tvar StyleManager_1 = __webpack_require__(18);\r\n\tvar CanvasManager_1 = __webpack_require__(66);\r\n\tvar ConfigurationManager_1 = __webpack_require__(69);\r\n\tvar HtmlManager_1 = __webpack_require__(70);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar ActionManager_1 = __webpack_require__(75);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar DOCUMENT_TYPE = \"document\";\r\n\tvar PIXI_EVENTS = {\r\n\t    Load: \"load\",\r\n\t    Error: \"error\",\r\n\t    Complete: \"complete\",\r\n\t};\r\n\tvar LOADJS_EVENTS = {\r\n\t    FileLoad: \"fileload\",\r\n\t    Complete: \"complete\",\r\n\t    Progress: \"progress\",\r\n\t    Error: \"error\",\r\n\t};\r\n\tvar RESOURCE_FLAGS = {\r\n\t    Gamble: \"G\",\r\n\t};\r\n\tvar PreloaderProvider = (function (_super) {\r\n\t    __extends(PreloaderProvider, _super);\r\n\t    function PreloaderProvider() {\r\n\t        _super.call(this);\r\n\t        this._resourceLoader = new PIXIResourceLoader(false);\r\n\t        this._audioResourceLoader = new PIXIResourceLoader(true);\r\n\t    }\r\n\t    Object.defineProperty(PreloaderProvider.prototype, \"resourceLoader\", {\r\n\t        get: function () {\r\n\t            return this._resourceLoader;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(PreloaderProvider.prototype, \"audioResourceLoader\", {\r\n\t        get: function () {\r\n\t            return this._audioResourceLoader;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    PreloaderProvider.addLoadingElementFunction = function (fnc) {\r\n\t        PreloaderProvider._loadingElements.push(fnc);\r\n\t    };\r\n\t    PreloaderProvider.isGroupLoaded = function (group) {\r\n\t        return PreloaderProvider._loadedGroups.indexOf(group) != -1;\r\n\t    };\r\n\t    PreloaderProvider.prototype.cleanup = function () {\r\n\t        this._resourceLoader = null;\r\n\t        this._audioResourceLoader = null;\r\n\t        XmlResource_1.XmlResource.cleanup();\r\n\t        StyleManager_1.StyleManager.cleanup();\r\n\t    };\r\n\t    PreloaderProvider.prototype.prepareFileList = function (resources) {\r\n\t        var _this = this;\r\n\t        if (resources) {\r\n\t            var gambleIsDisabled = !AppContext_1.AppContext.gameDefinition.Gamble;\r\n\t            neo_common_1.lodash.remove(resources, function (resource) {\r\n\t                var gambleResource = _this.resourceHasFlag(resource, RESOURCE_FLAGS.Gamble);\r\n\t                var removeRes = gambleResource && gambleIsDisabled;\r\n\t                if (false) {\r\n\t                    if (removeRes) {\r\n\t                        neo_common_1.Logger.debugGroup(\"Preloader\", \"Gamble disabled -> removing resource path '\" + resource.path + \"' (because has gamble flag) from file list to be loaded.\");\r\n\t                    }\r\n\t                }\r\n\t                return removeRes;\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    PreloaderProvider.prototype.loadCompleted = function () {\r\n\t        for (var i = 0; i < PreloaderProvider._loadingElements.length; i++) {\r\n\t            var fnc = PreloaderProvider._loadingElements[i];\r\n\t            if (fnc != null) {\r\n\t                fnc.onLoadCompleted(neo_common_1.PreloaderInfo.instance.loadSucceed);\r\n\t            }\r\n\t        }\r\n\t        return new Promise(function (resolve, reject) {\r\n\t            resolve();\r\n\t        });\r\n\t    };\r\n\t    PreloaderProvider.prototype.onUpdateProgress = function (progress) {\r\n\t        neo_games_1.Platforms.Platforms.loadProgress(progress);\r\n\t        for (var i = 0; i < PreloaderProvider._loadingElements.length; i++) {\r\n\t            var fnc = PreloaderProvider._loadingElements[i];\r\n\t            if (fnc != null) {\r\n\t                fnc.onProgressUpdate(progress);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PreloaderProvider.prototype.loadGroupCompleted = function (group) {\r\n\t        neo_common_1.Logger.debugGroup(\"loadGroupCompleted\", \"Loaded group: \" + group);\r\n\t        if (PreloaderProvider._loadedGroups.indexOf(group) == -1) {\r\n\t            PreloaderProvider._loadedGroups.push(group);\r\n\t        }\r\n\t    };\r\n\t    PreloaderProvider.prototype.handleGroupError = function (error, group) {\r\n\t    };\r\n\t    PreloaderProvider.prototype.parseCurrentElements = function () {\r\n\t        var xmlItems = XmlResource_1.XmlResource.Items;\r\n\t        if (xmlItems != null && xmlItems.length > 0) {\r\n\t            var tempElements = neo_common_1.lodash.map(xmlItems, function (item) {\r\n\t                var el = item.documentElement;\r\n\t                var prio = el.hasAttribute(\"Priority\") ? parseInt(el.getAttribute(\"Priority\")) : -1;\r\n\t                if (prio === -1) {\r\n\t                    if (false) {\r\n\t                        neo_common_1.Logger.errorGroup(\"Preloader\", \"Element does not have \\\"Priority\\\" attr!\");\r\n\t                    }\r\n\t                }\r\n\t                return { element: el, priority: prio };\r\n\t            });\r\n\t            var elements = neo_common_1.lodash.map(neo_common_1.lodash.orderBy(tempElements, function (item) { return item.priority; }, \"desc\"), function (x) { return x.element; });\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"Preloader\", \"Parse Elements started: \" + new Date().toString());\r\n\t            }\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                ConfigurationManager_1.ConfigurationManager.parseElements(element);\r\n\t                SoundManager_1.SoundManager.parseElements(element);\r\n\t            }\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                StyleManager_1.StyleManager.parseElements(element);\r\n\t            }\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                ActionManager_1.ActionManager.parseActionSets(element);\r\n\t            }\r\n\t            document.body.setAttribute(\"Language\", GameApp_1.GameApp.language);\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                CanvasManager_1.CanvasManager.parseElements(element);\r\n\t                HtmlManager_1.HtmlManager.parseElements(element);\r\n\t            }\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"Preloader\", \"Parse Elements ended: \" + new Date().toString());\r\n\t            }\r\n\t        }\r\n\t        XmlResource_1.XmlResource.emptyItems();\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Preloader\", \"Parse xml resources ended.\");\r\n\t        }\r\n\t    };\r\n\t    PreloaderProvider.prototype.parseElements = function () {\r\n\t        return new Promise(function (resolve, reject) {\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"Preloader\", \"Parse xml resources started\");\r\n\t            }\r\n\t            var xmlItems = XmlResource_1.XmlResource.Items;\r\n\t            if (xmlItems != null && xmlItems.length > 0) {\r\n\t                var tempElements = neo_common_1.lodash.map(xmlItems, function (item) {\r\n\t                    var el = item.documentElement;\r\n\t                    var prio = el.hasAttribute(\"Priority\") ? parseInt(el.getAttribute(\"Priority\")) : -1;\r\n\t                    if (prio === -1) {\r\n\t                        if (false) {\r\n\t                            neo_common_1.Logger.errorGroup(\"Preloader\", \"Element does not have \\\"Priority\\\" attr!\");\r\n\t                        }\r\n\t                    }\r\n\t                    return { element: el, priority: prio };\r\n\t                });\r\n\t                var elements = neo_common_1.lodash.map(neo_common_1.lodash.orderBy(tempElements, function (item) { return item.priority; }, \"desc\"), function (x) { return x.element; });\r\n\t                if (false) {\r\n\t                    neo_common_1.Logger.debugGroup(\"Preloader\", \"Parse Elements started: \" + new Date().toString());\r\n\t                }\r\n\t                for (var i = 0; i < elements.length; i++) {\r\n\t                    var element = elements[i];\r\n\t                    ConfigurationManager_1.ConfigurationManager.parseElements(element);\r\n\t                    SoundManager_1.SoundManager.parseElements(element);\r\n\t                }\r\n\t                for (var i = 0; i < elements.length; i++) {\r\n\t                    var element = elements[i];\r\n\t                    StyleManager_1.StyleManager.parseElements(element);\r\n\t                }\r\n\t                for (var i = 0; i < elements.length; i++) {\r\n\t                    var element = elements[i];\r\n\t                    ActionManager_1.ActionManager.parseActionSets(element);\r\n\t                }\r\n\t                document.body.setAttribute(\"Language\", GameApp_1.GameApp.language);\r\n\t                for (var i = 0; i < elements.length; i++) {\r\n\t                    var element = elements[i];\r\n\t                    CanvasManager_1.CanvasManager.parseElements(element);\r\n\t                    HtmlManager_1.HtmlManager.parseElements(element);\r\n\t                }\r\n\t                if (false) {\r\n\t                    neo_common_1.Logger.debugGroup(\"Preloader\", \"Parse Elements ended: \" + new Date().toString());\r\n\t                }\r\n\t            }\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"Preloader\", \"Parse xml resources ended.\");\r\n\t            }\r\n\t            resolve();\r\n\t        });\r\n\t    };\r\n\t    PreloaderProvider._loadingElements = [];\r\n\t    PreloaderProvider._loadedGroups = [];\r\n\t    return PreloaderProvider;\r\n\t}(neo_common_1.PreloaderProviderBase));\r\n\texports.PreloaderProvider = PreloaderProvider;\r\n\tvar PIXIResourceLoader = (function (_super) {\r\n\t    __extends(PIXIResourceLoader, _super);\r\n\t    function PIXIResourceLoader(audio) {\r\n\t        _super.call(this, audio);\r\n\t        this.loader = new PIXI.loaders.Loader();\r\n\t        this._hasPreloaderVersionId = null;\r\n\t        this._loadingErrorCount = 0;\r\n\t        this._loadingErrorFiles = [];\r\n\t        this._resourcesWithNoId = {};\r\n\t        this.handleBeforeLoad = this.handleBeforeLoad.bind(this);\r\n\t        this.handleLoad = this.handleLoad.bind(this);\r\n\t        this.handleError = this.handleError.bind(this);\r\n\t        this.handleComplete = this.handleComplete.bind(this);\r\n\t        this.handleGroupComplete = this.handleGroupComplete.bind(this);\r\n\t        this.updateTextureAfterLoad = this.updateTextureAfterLoad.bind(this);\r\n\t    }\r\n\t    PIXIResourceLoader.prototype.cleanup = function () {\r\n\t        this._loadCompletedCallback = null;\r\n\t        this._updatedTextures = null;\r\n\t        this._preloaderVersionId = null;\r\n\t        this._loadingErrorCount = 0;\r\n\t        this._loadingErrorFiles = [];\r\n\t        this._resourcesWithNoId = null;\r\n\t        this.loader.reset();\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.xmlsResourceLoaded = function (document, resource) {\r\n\t        var acceptedAsXmlResource = document && document.documentElement.nodeName === XmlResource_1.XmlResource.Root;\r\n\t        if (false) {\r\n\t            var extra = acceptedAsXmlResource ? \" and is accepted as xml resource for app\" : \"\";\r\n\t            neo_common_1.Logger.debugGroup(\"Preloader\", (\"Resource \\\"\" + resource.path + \"\\\" is loaded as xml document\") + extra);\r\n\t        }\r\n\t        if (acceptedAsXmlResource) {\r\n\t            XmlResource_1.XmlResource.add(document);\r\n\t        }\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.beforeResourcesLoad = function () {\r\n\t        this.loader.reset();\r\n\t        this._updatedTextures = {};\r\n\t        this.loader.use(this.updateTextureAfterLoad);\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.updateTextureAfterLoad = function (resource, next) {\r\n\t        if (resource.data && resource.isImage) {\r\n\t            if (resource.texture && resource.texture.baseTexture && resource.texture.baseTexture.hasLoaded) {\r\n\t                var imageUrl = resource.texture.baseTexture.imageUrl;\r\n\t                var noId = this._resourcesWithNoId.hasOwnProperty(imageUrl);\r\n\t                if (!this._updatedTextures.hasOwnProperty(imageUrl)) {\r\n\t                    if (noId) {\r\n\t                        if (false) {\r\n\t                            neo_common_1.Logger.debugGroup(\"Preloader\", \"Resource '\" + imageUrl + \"' has no 'id' assigned and will not be pushed to webgl cache\");\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (resource.name.substr(0, 3) === \"ANI\" || resource.name.substr(0, 5) === \"GROUP\") {\r\n\t                            StageController_1.StageController.updateTexture(resource.texture.baseTexture);\r\n\t                            this._updatedTextures[imageUrl] = true;\r\n\t                        }\r\n\t                        if (false) {\r\n\t                            neo_common_1.Logger.debugGroup(\"Preloader\", \"Updated texture '\" + imageUrl + \"' to webgl cache\");\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        try {\r\n\t            next();\r\n\t        }\r\n\t        catch (e) {\r\n\t            this._loadCompletedCallback(e);\r\n\t        }\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.handleBeforeLoad = function (resource, next) {\r\n\t        if (this._hasPreloaderVersionId) {\r\n\t            var oldurl = resource.url;\r\n\t            resource.url = neo_common_1.UriHelper.setTimeStamp(resource.url, this._preloaderVersionId);\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"Preloader\", \"Resource url \\\"\" + oldurl + \"\\\" changed to non-cached url \\\"\" + resource.url + \"\\\"\");\r\n\t            }\r\n\t        }\r\n\t        try {\r\n\t            next();\r\n\t        }\r\n\t        catch (e) {\r\n\t            this._loadCompletedCallback(e);\r\n\t        }\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.handleLoad = function (loader, resource) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Preloader\", \"Resource \\\"\" + resource.url + \"\\\" [\" + resource.xhrType + \"] [\" + this.preloader.progressPercent + \" %]\");\r\n\t        }\r\n\t        if (resource.xhrType === DOCUMENT_TYPE) {\r\n\t            var xmlRoot = resource.data.documentElement.nodeName;\r\n\t            if (xmlRoot === XmlResource_1.XmlResource.Root) {\r\n\t                throw new Error(\"Should not be there!\");\r\n\t            }\r\n\t        }\r\n\t        this._loadSingleCompletedCallback(false);\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.handleError = function (error, loader, resource) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.errorGroup(\"Preloader\", \"Resource load error: \" + resource.url);\r\n\t        }\r\n\t        this._loadingErrorCount++;\r\n\t        this._loadingErrorFiles.push(resource.url);\r\n\t        this._loadSingleCompletedCallback(\"Failed to load \" + resource.url + \" resource!\");\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.handleComplete = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"Preloader\", \"Completed PIXI resource load\");\r\n\t        }\r\n\t        if (this.audio) {\r\n\t            for (var key in this.loader.resources) {\r\n\t                if (key.indexOf(\"_meta\") !== -1) {\r\n\t                    var sound = key.substr(0, key.length - 5);\r\n\t                    if (PIXI.sound.exists(sound)) {\r\n\t                        var soundSprite = PIXI.sound.find(sound);\r\n\t                        if (neo_common_1.lodash.isEmpty(soundSprite.sprites)) {\r\n\t                            soundSprite.addSprites(this.loader.resources[key].data.spritemap);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.handleGroupComplete = function () {\r\n\t        this.loader.removeAllListeners(PIXI_EVENTS.Load);\r\n\t        this.loader.removeAllListeners(PIXI_EVENTS.Error);\r\n\t        this.handleComplete();\r\n\t        var loadError = this._loadingErrorCount === 0\r\n\t            ? null\r\n\t            : \"Failed to load \" + this._loadingErrorCount + \" resources!: \\n\" + this._loadingErrorFiles.join(\",\\n\");\r\n\t        this._loadingErrorCount = 0;\r\n\t        this._loadingErrorFiles = [];\r\n\t        this._loadCompletedCallback(loadError);\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.loadAllGroupsCompleted = function () {\r\n\t    };\r\n\t    PIXIResourceLoader.prototype.loadResources = function (resources, resolveSingleCallback, resolveCallback) {\r\n\t        if (StageController_1.StageController.Renderer instanceof PIXI.CanvasRenderer) {\r\n\t            if (!AppContext_1.AppContext.gameConfiguration.CanvasFallback) {\r\n\t                var loadingScreen = document.getElementById(\"loading\");\r\n\t                var element = document.getElementById(\"progressNumber\");\r\n\t                if (loadingScreen != null) {\r\n\t                    loadingScreen.classList.add(\"_error\");\r\n\t                }\r\n\t                if (element != null) {\r\n\t                    element.innerHTML = \"WebGL error. Please contact support.\";\r\n\t                }\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        this._loadSingleCompletedCallback = resolveSingleCallback;\r\n\t        this._loadCompletedCallback = resolveCallback;\r\n\t        this._preloaderVersionId = this.preloader.versionId;\r\n\t        this._hasPreloaderVersionId = !neo_common_1.StringUtils.isNullOrEmpty(this._preloaderVersionId);\r\n\t        for (var i = 0; i < resources.length; i++) {\r\n\t            var resource = resources[i];\r\n\t            if (neo_common_1.StringUtils.isNullOrEmpty(resource.id)) {\r\n\t                this.loader.add(resource.path);\r\n\t                this._resourcesWithNoId[resource.path] = true;\r\n\t            }\r\n\t            else {\r\n\t                this.loader.add(resource.id, resource.path);\r\n\t            }\r\n\t        }\r\n\t        this.loader.pre(this.handleBeforeLoad);\r\n\t        this.loader.on(\"load\", this.handleLoad);\r\n\t        this.loader.on(\"error\", this.handleError);\r\n\t        this.loader.once(\"complete\", this.handleGroupComplete);\r\n\t        this.loader.load();\r\n\t    };\r\n\t    return PIXIResourceLoader;\r\n\t}(neo_common_1.PreloaderResourceLoader));\r\n\texports.PIXIResourceLoader = PIXIResourceLoader;\r\n\n\n/***/ },\n/* 64 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar Resource_1 = __webpack_require__(65);\r\n\tvar XmlResource = (function (_super) {\r\n\t    __extends(XmlResource, _super);\r\n\t    function XmlResource() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Object.defineProperty(XmlResource, \"Items\", {\r\n\t        get: function () {\r\n\t            return XmlResource.items;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    XmlResource.add = function (doc) {\r\n\t        XmlResource.items.push(doc);\r\n\t    };\r\n\t    XmlResource.cleanup = function () {\r\n\t        if (XmlResource.items) {\r\n\t            XmlResource.items.length = 0;\r\n\t            XmlResource.items = null;\r\n\t        }\r\n\t    };\r\n\t    XmlResource.emptyItems = function () {\r\n\t        if (XmlResource.items) {\r\n\t            XmlResource.items = [];\r\n\t        }\r\n\t    };\r\n\t    XmlResource.Root = \"Elements\";\r\n\t    XmlResource.items = [];\r\n\t    return XmlResource;\r\n\t}(Resource_1.Resource));\r\n\texports.XmlResource = XmlResource;\r\n\n\n/***/ },\n/* 65 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar Resource = (function () {\r\n\t    function Resource() {\r\n\t    }\r\n\t    return Resource;\r\n\t}());\r\n\texports.Resource = Resource;\r\n\n\n/***/ },\n/* 66 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar ActionSet_1 = __webpack_require__(67);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar CanvasManager = (function () {\r\n\t    function CanvasManager() {\r\n\t    }\r\n\t    CanvasManager.log = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"CanvasManager\", data);\r\n\t        }\r\n\t    };\r\n\t    CanvasManager.parseElements = function (startNode, parent) {\r\n\t        if (parent === void 0) { parent = null; }\r\n\t        var children = {};\r\n\t        if (!startNode) {\r\n\t            return children;\r\n\t        }\r\n\t        CanvasManager.getNodesList(startNode.firstElementChild)\r\n\t            .reverse()\r\n\t            .filter(function (node) {\r\n\t            return node.hasAttribute(\"Class\") &&\r\n\t                neo_common_1.EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes_1.ComponentTypes.DisplayObject);\r\n\t        })\r\n\t            .forEach(function (node) {\r\n\t            var element = neo_common_1.EngineComponentFactory.get(node.getAttribute(\"Class\"));\r\n\t            element.create(node);\r\n\t            if (node.hasAttribute(\"LinkId\")) {\r\n\t                ActionSet_1.ActionSet.ElementsToLink[node.getAttribute(\"LinkId\")] = element;\r\n\t            }\r\n\t            var noGamble = false;\r\n\t            if (node.hasAttribute(\"Key\")) {\r\n\t                if (node.getAttribute(\"Key\") === \"gamble\" && !AppContext_1.AppContext.gameDefinition.Gamble) {\r\n\t                    noGamble = true;\r\n\t                }\r\n\t            }\r\n\t            if (!noGamble) {\r\n\t                CanvasManager._addElementToParent(element, parent);\r\n\t                CanvasManager._handleElementController(node, element);\r\n\t            }\r\n\t            children[node.nodeName] = element;\r\n\t        });\r\n\t        return children;\r\n\t    };\r\n\t    CanvasManager.getNodesList = function (node, nodeList) {\r\n\t        if (nodeList === void 0) { nodeList = []; }\r\n\t        if (!node) {\r\n\t            return nodeList;\r\n\t        }\r\n\t        if (node.nextElementSibling) {\r\n\t            nodeList = CanvasManager.getNodesList(node.nextElementSibling, nodeList);\r\n\t        }\r\n\t        return nodeList.concat(node);\r\n\t    };\r\n\t    CanvasManager._addElementToParent = function (element, parent) {\r\n\t        if (parent != null) {\r\n\t            parent.addChild(element);\r\n\t        }\r\n\t        else if (element.children.length > 0) {\r\n\t            StageController_1.StageController.addChild(element);\r\n\t        }\r\n\t    };\r\n\t    CanvasManager._handleElementController = function (node, element) {\r\n\t        var controllerAttribute = node.hasAttribute(\"Controller\") ? node.getAttribute(\"Controller\") : \"\";\r\n\t        if (controllerAttribute === \"\") {\r\n\t            return;\r\n\t        }\r\n\t        var elementController = neo_common_1.EngineComponentFactory.get(controllerAttribute);\r\n\t        if (elementController != null) {\r\n\t            elementController.startInitialization(element);\r\n\t            if (node.hasAttribute(\"Key\")) {\r\n\t                if (!AppContext_1.AppContext.gameDefinition.Gamble && node.getAttribute(\"Key\") === \"gamble\") {\r\n\t                    return;\r\n\t                }\r\n\t                ModuleManager_1.ModuleManager.registerGameModule(node.getAttribute(\"Key\"), elementController);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                CanvasManager.log(\"ERROR no controller with name: \" + controllerAttribute);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    return CanvasManager;\r\n\t}());\r\n\texports.CanvasManager = CanvasManager;\r\n\n\n/***/ },\n/* 67 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ComponentAttributes_1 = __webpack_require__(68);\r\n\tvar ActionSet = (function () {\r\n\t    function ActionSet() {\r\n\t        this.actionElements = {};\r\n\t        this.cases = {};\r\n\t    }\r\n\t    ActionSet.prototype.RegisterActionSet = function (node) {\r\n\t        var _this = this;\r\n\t        ActionSet.getNodesList(node.firstElementChild)\r\n\t            .reverse()\r\n\t            .forEach(function (actionSetNode) {\r\n\t            switch (actionSetNode.nodeName) {\r\n\t                case \"Elements\":\r\n\t                    ActionSet.getNodesList(actionSetNode.firstElementChild)\r\n\t                        .reverse()\r\n\t                        .forEach(function (elementNode) {\r\n\t                        _this.actionElements[elementNode.nodeName] = elementNode;\r\n\t                    });\r\n\t                    break;\r\n\t                case \"Actions\":\r\n\t                    ActionSet.getNodesList(actionSetNode.firstElementChild)\r\n\t                        .reverse()\r\n\t                        .forEach(function (actionCase) {\r\n\t                        if (!actionCase.hasAttribute(ComponentAttributes_1.ActionSetAttributes.CASE)) {\r\n\t                            return;\r\n\t                        }\r\n\t                        if (_this.cases[actionCase.getAttribute(ComponentAttributes_1.ActionSetAttributes.CASE)] !== null) {\r\n\t                            _this.cases[actionCase.getAttribute(ComponentAttributes_1.ActionSetAttributes.CASE)] = actionCase;\r\n\t                        }\r\n\t                        else {\r\n\t                            if (false) {\r\n\t                                _this.log(\"ERROR case \" +\r\n\t                                    actionCase.getAttribute(\"Case\") +\r\n\t                                    \" already exist in ActionSet \" +\r\n\t                                    node.nodeName);\r\n\t                            }\r\n\t                        }\r\n\t                    });\r\n\t                    break;\r\n\t            }\r\n\t        });\r\n\t        ActionSet.ActionSets[node.nodeName] = this;\r\n\t    };\r\n\t    ActionSet.getNodesList = function (node, nodeList) {\r\n\t        if (nodeList === void 0) { nodeList = []; }\r\n\t        if (!node) {\r\n\t            return nodeList;\r\n\t        }\r\n\t        if (node.nextElementSibling) {\r\n\t            nodeList = ActionSet.getNodesList(node.nextElementSibling, nodeList);\r\n\t        }\r\n\t        return nodeList.concat(node);\r\n\t    };\r\n\t    ActionSet.prototype.DispatchEvent = function (action) {\r\n\t        var _this = this;\r\n\t        ActionSet.getNodesList(this.cases[action].firstElementChild)\r\n\t            .reverse()\r\n\t            .forEach(function (elementNode) {\r\n\t            var linkedElement = _this.actionElements[elementNode.nodeName];\r\n\t            var classAttribute = linkedElement.hasAttribute(\"Class\") ? linkedElement.getAttribute(\"Class\") : \"\";\r\n\t            if (classAttribute === \"\") {\r\n\t                if (false) {\r\n\t                    _this.log(\"WARNING element with name: \" + linkedElement.nodeName + \" has no class\");\r\n\t                }\r\n\t                return;\r\n\t            }\r\n\t            if (!neo_common_1.EngineComponentFactory.isTypeOf(classAttribute, ComponentTypes_1.ComponentTypes.LinkedElement)) {\r\n\t                return;\r\n\t            }\r\n\t            var element = neo_common_1.EngineComponentFactory.get(classAttribute);\r\n\t            element.create(linkedElement, elementNode);\r\n\t        });\r\n\t    };\r\n\t    ActionSet.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    ActionSet.ActionSets = {};\r\n\t    ActionSet.ElementsToLink = {};\r\n\t    ActionSet = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.ActionSet)\r\n\t    ], ActionSet);\r\n\t    return ActionSet;\r\n\t}());\r\n\texports.ActionSet = ActionSet;\r\n\n\n/***/ },\n/* 68 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\texports.ActionSetAttributes = {\r\n\t    CASE: \"Case\",\r\n\t};\r\n\texports.AnimationElementAttributes = {\r\n\t    ALPHA: \"Alpha\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    ANCHOR: \"Anchor\",\r\n\t    BITMAP_MASK: \"BitmapMask\",\r\n\t    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\r\n\t    BITMAP_MASK_X: \"BitmapMaskX\",\r\n\t    BITMAP_MASK_Y: \"BitmapMaskY\",\r\n\t    DEBUG_INFO: \"DebugInfo\",\r\n\t    DEBUG: \"Debug\",\r\n\t    MASK: \"Mask\",\r\n\t    PIVOT_X: \"PivotX\",\r\n\t    PIVOT_Y: \"PivotY\",\r\n\t    PLAY: \"Play\",\r\n\t    POSITION_TWEEN_X: \"PositionTweenX\",\r\n\t    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n\t    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n\t    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n\t    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n\t    POSITION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t    },\r\n\t    RANDOM_START_FRAME: \"RandomStartFrame\",\r\n\t    REVERSE: \"Reverse\",\r\n\t    ROTATION: \"Rotation\",\r\n\t    ROTATION_TWEEN: \"RotationTween\",\r\n\t    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n\t    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n\t    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\t    SCALE_TWEEN: \"ScaleTween\",\r\n\t    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n\t    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n\t    SCALE_X: \"ScaleX\",\r\n\t    SCALE_Y: \"ScaleY\",\r\n\t    SCALE: \"Scale\",\r\n\t    START_ROTATION: \"StartRotation\",\r\n\t    STYLE: \"Style\",\r\n\t    STYLE2: \"Style2\",\r\n\t    TINT: \"Tint\",\r\n\t    VISIBLE: \"Visible\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t};\r\n\texports.AnimationStyleAttributes = {\r\n\t    ANIMATION: \"Animation\",\r\n\t    FRAMES: \"Frames\",\r\n\t    START_FRAME: \"StartFrame\",\r\n\t    END_FRAME: \"EndFrame\",\r\n\t    LOOP: \"Loop\",\r\n\t    STOP: \"Stop\",\r\n\t    SPEED: \"Speed\",\r\n\t    ALPHA: \"Alpha\",\r\n\t    TINT: \"Tint\",\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    REVERSE: \"Reverse\",\r\n\t};\r\n\texports.BaseElementAttributes = {\r\n\t    ALPHA: \"Alpha\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\r\n\t    BITMAP_MASK: \"BitmapMask\",\r\n\t    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\r\n\t    BITMAP_MASK_X: \"BitmapMaskX\",\r\n\t    BITMAP_MASK_Y: \"BitmapMaskY\",\r\n\t    MASK: \"Mask\",\r\n\t    PIVOT_X: \"PivotX\",\r\n\t    PIVOT_Y: \"PivotY\",\r\n\t    POSITION_TWEEN_POSITION: \"ChildsPositionTweenPosition\",\r\n\t    POSITION_TWEEN_X: \"ChildsPositionTweenX\",\r\n\t    POSITION_TWEEN_Y: \"ChildsPositionTweenY\",\r\n\t    POSITION_TWEEN_EASE: \"ChildsPositionTweenEase\",\r\n\t    POSITION_TWEEN_DELAY: \"ChildsPositionTweenDelay\",\r\n\t    POSITION_TWEEN_DURATION: \"ChildsPositionTweenDuration\",\r\n\t    POSITION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t    },\r\n\t    ROTATION_TWEEN: \"RotationTween\",\r\n\t    ROTATION_TWEEN_DEGREES: \"RotationTweenDegrees\",\r\n\t    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\t    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n\t    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n\t    ROTATION: \"Rotation\",\r\n\t    SCALE_TWEEN: \"ScaleTween\",\r\n\t    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\r\n\t    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n\t    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n\t    SCALE_TWEEN_X: \"ScaleTweenX\",\r\n\t    SCALE_TWEEN_Y: \"ScaleTweenY\",\r\n\t    SCALE: \"Scale\",\r\n\t    SCALE_X: \"ScaleX\",\r\n\t    SCALE_Y: \"ScaleY\",\r\n\t    START_ROTATION: \"StartRotation\",\r\n\t    TWEEN_ENGINE: \"TweenEngine\",\r\n\t    VISIBLE: \"Visible\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t};\r\n\texports.ButtonElementAttributes = {\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t    WIDTH: \"Width\",\r\n\t    HEIGHT: \"Height\",\r\n\t    ACTION: \"Action\",\r\n\t    EVENT: \"Event\",\r\n\t    ACTION_SET: \"ActionSet\",\r\n\t    HIT_AREA: \"HitArea\",\r\n\t};\r\n\texports.ContainerElementAttributes = {\r\n\t    STYLE: \"Style\",\r\n\t    MULTIPLY: \"Multiply\",\r\n\t    CHILDS: {\r\n\t        X: \"ChildsX\",\r\n\t        Y: \"ChildsY\",\r\n\t        SCALE: \"ChildsScale\",\r\n\t        ALPHA: \"ChildsAlpha\",\r\n\t        ROTATION: \"ChildsRotation\",\r\n\t        ALPHA_TWEEN: \"ChildsAlphaTween\",\r\n\t        ALPHA_TWEEN_EASE: \"ChildsAlphaTweenEase\",\r\n\t        ALPHA_TWEEN_DELAY: \"ChildsAlphaTweenDelay\",\r\n\t        ALPHA_TWEEN_DURATION: \"ChildsAlphaTweenDuration\",\r\n\t        ROTATION_TWEEN: \"ChildsRotationTween\",\r\n\t        ROTATION_TWEEN_EASE: \"ChildsRotationTweenEase\",\r\n\t        ROTATION_TWEEN_DELAY: \"ChildsRotationTweenDelay\",\r\n\t        ROTATION_TWEEN_DURATION: \"ChildsRotationTweenDuration\",\r\n\t        SCALE_TWEEN: \"ChildsScaleTween\",\r\n\t        SCALE_TWEEN_X: \"ChildsScaleTweenX\",\r\n\t        SCALE_TWEEN_Y: \"ChildsScaleTweenY\",\r\n\t        SCALE_TWEEN_EASE: \"ChildsScaleTweenEase\",\r\n\t        SCALE_TWEEN_DELAY: \"ChildsScaleTweenDelay\",\r\n\t        SCALE_TWEEN_DURATION: \"ChildsScaleTweenDuration\",\r\n\t        POSITION_TWEEN_POSITION: \"ChildsPositionTweenPosition\",\r\n\t        POSITION_TWEEN_X: \"ChildsPositionTweenX\",\r\n\t        POSITION_TWEEN_Y: \"ChildsPositionTweenY\",\r\n\t        POSITION_TWEEN_EASE: \"ChildsPositionTweenEase\",\r\n\t        POSITION_TWEEN_DELAY: \"ChildsPositionTweenDelay\",\r\n\t        POSITION_TWEEN_DURATION: \"ChildsPositionTweenDuration\",\r\n\t    },\r\n\t};\r\n\texports.ImageElementAttributes = {\r\n\t    ALPHA: \"Alpha\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\r\n\t    ANCHOR: \"Anchor\",\r\n\t    FROM_FRAME: \"FromFrame\",\r\n\t    BITMAP_MASK: \"BitmapMask\",\r\n\t    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\r\n\t    BITMAP_MASK_X: \"BitmapMaskX\",\r\n\t    BITMAP_MASK_Y: \"BitmapMaskY\",\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    CACHE: \"Cache\",\r\n\t    DEBUG_INFO: \"DebugInfo\",\r\n\t    DEBUG: \"Debug\",\r\n\t    FRAME: \"Frame\",\r\n\t    IMAGE: \"Image\",\r\n\t    MASK: \"Mask\",\r\n\t    PIVOT_X: \"PivotX\",\r\n\t    PIVOT_Y: \"PivotY\",\r\n\t    POSITION_TWEEN_X: \"PositionTweenX\",\r\n\t    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n\t    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n\t    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n\t    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\r\n\t    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n\t    POSITION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t    },\r\n\t    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\r\n\t    ROTATION: \"Rotation\",\r\n\t    ROTATION_TWEEN: \"RotationTween\",\r\n\t    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n\t    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n\t    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\t    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\r\n\t    SCALE_TWEEN: \"ScaleTween\",\r\n\t    SCALE_TWEEN_X: \"ScaleTweenX\",\r\n\t    SCALE_TWEEN_Y: \"ScaleTweenY\",\r\n\t    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n\t    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\r\n\t    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n\t    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\r\n\t    SCALE: \"Scale\",\r\n\t    SCALE_X: \"ScaleX\",\r\n\t    SCALE_Y: \"ScaleY\",\r\n\t    START_ROTATION: \"StartRotation\",\r\n\t    TINT: \"Tint\",\r\n\t    TWEEN_ENGINE: \"TweenEngine\",\r\n\t    VISIBLE: \"Visible\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t};\r\n\texports.ImageTextCounterElementAttributes = {\r\n\t    DURATION: \"Duration\",\r\n\t    ROUND: \"Round\",\r\n\t    FORCE: \"Force\",\r\n\t    VALUE: \"Value\",\r\n\t};\r\n\texports.ImageTextElementAttributes = {\r\n\t    TEXT: \"Text\",\r\n\t    FONT: \"Font\",\r\n\t    TEXT_ALIGN: \"TextAlign\",\r\n\t    TEXT_ALIGN_VALUE: {\r\n\t        CENTER: \"center\",\r\n\t        RIGHT: \"right\",\r\n\t    },\r\n\t    TEXT_BASELINE: \"TextBaseline\",\r\n\t    TEXT_BASELINE_VALUE: {\r\n\t        MIDDLE: \"middle\",\r\n\t        BOTTOM: \"bottom\",\r\n\t    },\r\n\t    ALPHA: \"Alpha\",\r\n\t    ROTATION: \"Rotation\",\r\n\t    START_ROTATION: \"StartRotation\",\r\n\t    SCALE_X: \"ScaleX\",\r\n\t    SCALE_Y: \"ScaleY\",\r\n\t    SCALE: \"Scale\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t    PIVOT_X: \"PivotX\",\r\n\t    PIVOT_Y: \"PivotY\",\r\n\t    VISIBLE: \"Visible\",\r\n\t};\r\n\texports.LinkedElementAttributes = {\r\n\t    LINKED_TO_ID: \"LinkedToId\",\r\n\t};\r\n\texports.ParticleElementAttributes = {\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    SPEED: \"Speed\",\r\n\t    EMIT_ONCE: \"EmitOnce\",\r\n\t    START_TYPE: \"StartType\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    POSITION_TWEEN_X: \"PositionTweenX\",\r\n\t    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n\t    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n\t    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n\t    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n\t    POSITION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t    },\r\n\t    ROTATION_TWEEN: \"RotationTween\",\r\n\t    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n\t    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n\t    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\t    SCALE_TWEEN: \"ScaleTween\",\r\n\t    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n\t    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n\t    STYLE: \"Style\",\r\n\t    STYLE2: \"Style2\",\r\n\t    EXTEND_STYLE: \"ExtendStyle\",\r\n\t    START: \"Start\",\r\n\t    STOPPING: \"Stopping\",\r\n\t    STOP: \"Stop\",\r\n\t    TINT: \"Tint\",\r\n\t    ATTR_COUNT: \"Count\",\r\n\t    ATTR_TIME: \"Time\",\r\n\t    ATTR_MIN: \"Min\",\r\n\t    ATTR_MAX: \"Max\",\r\n\t    ATTR_FROM_FRAME: \"FromFrame\",\r\n\t    ATTR_IMAGES: \"Images\",\r\n\t    ATTR_TYPE: \"Type\",\r\n\t    ATTR_X: \"X\",\r\n\t    ATTR_Y: \"Y\",\r\n\t    ATTR_RANDOM_X: \"RandomX\",\r\n\t    ATTR_RANDOM_Y: \"RandomY\",\r\n\t    ATTR_WIDTH: \"Width\",\r\n\t    ATTR_HEIGHT: \"Height\",\r\n\t    ATTR_VALUES: \"Values\",\r\n\t    ATTR_VALUE: \"Value\",\r\n\t};\r\n\texports.SwitchElementAttributes = {\r\n\t    CASE: \"Case\",\r\n\t    DEBUG_INFO: \"DebugInfo\",\r\n\t    STYLE: \"Style\",\r\n\t};\r\n\texports.SwitchStyleAttributes = {\r\n\t    CASE: \"Case\",\r\n\t};\r\n\texports.SwitchStyleCaseAttributes = {\r\n\t    NEXT_CASE: \"NextCase\",\r\n\t    TIMER: \"Timer\",\r\n\t    HANDLER: \"Handler\",\r\n\t};\r\n\texports.TextElementAttributes = {\r\n\t    TEXT: \"Text\",\r\n\t    FONT: \"Font\",\r\n\t    SIZE: \"Size\",\r\n\t    TEXT_ALIGN: \"TextAlign\",\r\n\t    TEXT_ALIGN_VALUE: {\r\n\t        LEFT: \"left\",\r\n\t        CENTER: \"center\",\r\n\t        RIGHT: \"right\",\r\n\t    },\r\n\t    TEXT_BASELINE: \"TextBaseline\",\r\n\t    TEXT_BASELINE_VALUE: {\r\n\t        MIDDLE: \"middle\",\r\n\t        BOTTOM: \"bottom\",\r\n\t    },\r\n\t    ALPHA: \"Alpha\",\r\n\t    ROTATION: \"Rotation\",\r\n\t    START_ROTATION: \"StartRotation\",\r\n\t    SCALE_X: \"ScaleX\",\r\n\t    SCALE_Y: \"ScaleY\",\r\n\t    SCALE: \"Scale\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t    PIVOT_X: \"PivotX\",\r\n\t    PIVOT_Y: \"PivotY\",\r\n\t    VISIBLE: \"Visible\",\r\n\t    TINT: \"Tint\",\r\n\t};\r\n\texports.TimelineElementAttributes = {\r\n\t    LOOP: \"Loop\",\r\n\t    TINT: \"Tint\",\r\n\t    STYLE: \"Style\",\r\n\t    CLONE: \"Clone\",\r\n\t    SOUNDS: \"Sounds\",\r\n\t    PLAY: \"Play\",\r\n\t};\r\n\n\n/***/ },\n/* 69 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar ConfigurationManager = (function () {\r\n\t    function ConfigurationManager() {\r\n\t    }\r\n\t    ConfigurationManager.log = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"ConfigurationManager\", data);\r\n\t        }\r\n\t    };\r\n\t    ConfigurationManager.parseElements = function (startNode) {\r\n\t        if (!startNode) {\r\n\t            return;\r\n\t        }\r\n\t        ConfigurationManager.getNodesList(startNode.firstElementChild)\r\n\t            .reverse()\r\n\t            .filter(function (node) { return node.hasAttribute(\"Class\") && node.getAttribute(\"Class\") === \"Configuration\"; })\r\n\t            .forEach(function (node) { return (Configuration_1.Configuration.Configurations[node.nodeName] = node); });\r\n\t    };\r\n\t    ConfigurationManager.getNodesList = function (node, nodeList) {\r\n\t        if (nodeList === void 0) { nodeList = []; }\r\n\t        if (!node) {\r\n\t            return nodeList;\r\n\t        }\r\n\t        if (node.nextElementSibling) {\r\n\t            nodeList = ConfigurationManager.getNodesList(node.nextElementSibling, nodeList);\r\n\t        }\r\n\t        return nodeList.concat(node);\r\n\t    };\r\n\t    return ConfigurationManager;\r\n\t}());\r\n\texports.ConfigurationManager = ConfigurationManager;\r\n\n\n/***/ },\n/* 70 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlManager = (function () {\r\n\t    function HtmlManager() {\r\n\t    }\r\n\t    HtmlManager.log = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"HtmlManager\", data);\r\n\t        }\r\n\t    };\r\n\t    HtmlManager.parseElements = function (startNode, parent) {\r\n\t        if (parent === void 0) { parent = null; }\r\n\t        var children = {};\r\n\t        if (!startNode) {\r\n\t            return;\r\n\t        }\r\n\t        HtmlManager.getNodesList(startNode.firstElementChild, [])\r\n\t            .reverse()\r\n\t            .filter(function (node) {\r\n\t            return node.hasAttribute(\"Class\") &&\r\n\t                neo_common_1.EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes_1.ComponentTypes.HtmlElement);\r\n\t        })\r\n\t            .forEach(function (node) {\r\n\t            var element = neo_common_1.EngineComponentFactory.get(node.getAttribute(\"Class\"));\r\n\t            var root = document.getElementById(\"root\");\r\n\t            var customRoot;\r\n\t            if (node.hasAttribute(\"RootId\")) {\r\n\t                customRoot = document.getElementById(node.getAttribute(\"RootId\"));\r\n\t            }\r\n\t            if (node.hasAttribute(\"Key\")) {\r\n\t                if (!AppContext_1.AppContext.gameDefinition.Gamble && node.getAttribute(\"Key\") === \"gamble\") {\r\n\t                    return;\r\n\t                }\r\n\t                if (Object.getPrototypeOf(element) instanceof UserControls_1.UserControls) {\r\n\t                    ModuleManager_1.ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\r\n\t                }\r\n\t            }\r\n\t            if (element.instance != null) {\r\n\t                if (parent != null) {\r\n\t                    parent.instance.appendChild(element.instance);\r\n\t                }\r\n\t                else {\r\n\t                    if (customRoot != null) {\r\n\t                        customRoot.appendChild(element.instance);\r\n\t                    }\r\n\t                    else if (root != null) {\r\n\t                        root.appendChild(element.instance);\r\n\t                    }\r\n\t                    else {\r\n\t                        document.body.appendChild(element.instance);\r\n\t                    }\r\n\t                }\r\n\t                element.create(node);\r\n\t            }\r\n\t            else {\r\n\t                element.create(node);\r\n\t                if (parent != null) {\r\n\t                    parent.instance.appendChild(element.instance);\r\n\t                }\r\n\t                else {\r\n\t                    if (customRoot != null) {\r\n\t                        customRoot.appendChild(element.instance);\r\n\t                    }\r\n\t                    else if (root != null) {\r\n\t                        root.appendChild(element.instance);\r\n\t                    }\r\n\t                    else {\r\n\t                        document.body.appendChild(element.instance);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            children[node.nodeName] = element;\r\n\t        });\r\n\t        return children;\r\n\t    };\r\n\t    HtmlManager.getNodesList = function (node, nodeList) {\r\n\t        if (!node) {\r\n\t            return nodeList;\r\n\t        }\r\n\t        if (node.nextElementSibling) {\r\n\t            nodeList = HtmlManager.getNodesList(node.nextElementSibling, nodeList);\r\n\t        }\r\n\t        return nodeList.concat(node);\r\n\t    };\r\n\t    return HtmlManager;\r\n\t}());\r\n\texports.HtmlManager = HtmlManager;\r\n\n\n/***/ },\n/* 71 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ActionSet_1 = __webpack_require__(74);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar UserControls = (function (_super) {\r\n\t    __extends(UserControls, _super);\r\n\t    function UserControls(key) {\r\n\t        _super.call(this);\r\n\t        this._key = \"\";\r\n\t        this._key = key;\r\n\t        this._actions = new ActionSet_1.ActionSet(this._key + \".actions\", neo_common_1.EngineComponentFactory.getComponentName(this));\r\n\t    }\r\n\t    Object.defineProperty(UserControls.prototype, \"actions\", {\r\n\t        get: function () {\r\n\t            return this._actions;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    UserControls.prototype.getAllActions = function () {\r\n\t        return this._actions.getAllActions();\r\n\t    };\r\n\t    UserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t    };\r\n\t    UserControls.prototype.addController = function (controller) { };\r\n\t    UserControls.prototype.initReceived = function () {\r\n\t        this._uncollectedWin = document.getElementById(\"uncollectedWin\");\r\n\t        this._collectedWin = document.getElementById(\"collectedWin\");\r\n\t    };\r\n\t    UserControls.prototype.collectReceived = function () { };\r\n\t    UserControls.prototype.dispatchAction = function (action) { };\r\n\t    UserControls.prototype.collect = function () { };\r\n\t    UserControls.prototype.initIntro = function () { };\r\n\t    UserControls.prototype.flashBet = function () {\r\n\t        var _this = this;\r\n\t        if (this._betValue == null) {\r\n\t            this._betValue = document.getElementById(\"betValue\");\r\n\t        }\r\n\t        if (this._betValue != null) {\r\n\t            this._betValue.classList.remove(\"flash\");\r\n\t            setTimeout(function () { return _this._betValue.classList.add(\"flash\"); }, 33);\r\n\t            setTimeout(function () { return _this._betValue.classList.remove(\"flash\"); }, 2000);\r\n\t            PlayList_1.PlayList.play(\"SND_LowCredit\");\r\n\t        }\r\n\t    };\r\n\t    UserControls.prototype.initNewBet = function (animate) {\r\n\t        var _this = this;\r\n\t        if (animate === void 0) { animate = true; }\r\n\t        if (this._betLabel == null) {\r\n\t            this._betLabel = document.getElementById(\"betLabel\");\r\n\t        }\r\n\t        if (this._freeBetLabel == null) {\r\n\t            this._freeBetLabel = document.getElementById(\"freeBetLabel\");\r\n\t        }\r\n\t        if (this._betLabelFS == null) {\r\n\t            this._betLabelFS = document.getElementById(\"betLabelFS\");\r\n\t        }\r\n\t        if (this._freeBetLabelFS == null) {\r\n\t            this._freeBetLabelFS = document.getElementById(\"freeBetLabelFS\");\r\n\t        }\r\n\t        if (this._betValue == null) {\r\n\t            this._betValue = document.getElementById(\"betValue\");\r\n\t        }\r\n\t        if (this._betPlus == null) {\r\n\t            this._betPlus = document.getElementById(\"betPlus\");\r\n\t        }\r\n\t        if (this._betMinus == null) {\r\n\t            this._betMinus = document.getElementById(\"betMinus\");\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.inFrb) {\r\n\t            if (this._betLabel != null && !this._betLabel.classList.contains(\"_hidden\")) {\r\n\t                this._betLabel.classList.add(\"_hidden\");\r\n\t            }\r\n\t            if (this._freeBetLabel != null) {\r\n\t                if (this._freeBetLabel.classList.contains(\"_hidden\")) {\r\n\t                    this._freeBetLabel.classList.remove(\"_hidden\");\r\n\t                }\r\n\t                if (animate) {\r\n\t                    this._freeBetLabel.classList.remove(\"flash\");\r\n\t                    setTimeout(function () { return _this._freeBetLabel.classList.add(\"flash\"); }, 33);\r\n\t                    setTimeout(function () { return _this._freeBetLabel.classList.remove(\"flash\"); }, 2000);\r\n\t                }\r\n\t            }\r\n\t            if (this._betLabelFS != null && !this._betLabelFS.classList.contains(\"_hidden\")) {\r\n\t                this._betLabelFS.classList.add(\"_hidden\");\r\n\t            }\r\n\t            if (this._freeBetLabelFS != null) {\r\n\t                if (this._freeBetLabelFS.classList.contains(\"_hidden\")) {\r\n\t                    this._freeBetLabelFS.classList.remove(\"_hidden\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (this._freeBetLabel != null && !this._freeBetLabel.classList.contains(\"_hidden\")) {\r\n\t                this._freeBetLabel.classList.add(\"_hidden\");\r\n\t            }\r\n\t            if (this._betLabel != null) {\r\n\t                if (this._betLabel.classList.contains(\"_hidden\")) {\r\n\t                    this._betLabel.classList.remove(\"_hidden\");\r\n\t                }\r\n\t                if (animate) {\r\n\t                    this._betLabel.classList.remove(\"flash\");\r\n\t                    setTimeout(function () { return _this._betLabel.classList.add(\"flash\"); }, 33);\r\n\t                    setTimeout(function () { return _this._betLabel.classList.remove(\"flash\"); }, 2000);\r\n\t                }\r\n\t            }\r\n\t            if (this._freeBetLabelFS != null && !this._freeBetLabelFS.classList.contains(\"_hidden\")) {\r\n\t                this._freeBetLabelFS.classList.add(\"_hidden\");\r\n\t            }\r\n\t            if (this._betLabelFS != null) {\r\n\t                if (this._betLabelFS.classList.contains(\"_hidden\")) {\r\n\t                    this._betLabelFS.classList.remove(\"_hidden\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this._betValue != null) {\r\n\t            if (animate) {\r\n\t                this._betValue.classList.remove(\"flash\");\r\n\t                setTimeout(function () { return _this._betValue.classList.add(\"flash\"); }, 33);\r\n\t                setTimeout(function () { return _this._betValue.classList.remove(\"flash\"); }, 2000);\r\n\t            }\r\n\t        }\r\n\t        if (BetManager_1.BetManager.TotalBets.length > 1) {\r\n\t            if (this._betPlus != null && this._betPlus.classList.contains(\"_invisible\")) {\r\n\t                this._betPlus.classList.remove(\"_invisible\");\r\n\t            }\r\n\t            if (this._betMinus != null && this._betMinus.classList.contains(\"_invisible\")) {\r\n\t                this._betMinus.classList.remove(\"_invisible\");\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (this._betPlus != null && !this._betPlus.classList.contains(\"_invisible\")) {\r\n\t                this._betPlus.classList.add(\"_invisible\");\r\n\t            }\r\n\t            if (this._betMinus != null && !this._betMinus.classList.contains(\"_invisible\")) {\r\n\t                this._betMinus.classList.add(\"_invisible\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    UserControls.prototype.changeBetColor = function (green) {\r\n\t        if (green === void 0) { green = false; }\r\n\t        if (this._betValue == null) {\r\n\t            this._betValue = document.getElementById(\"betValue\");\r\n\t        }\r\n\t        if (this._betValue != null) {\r\n\t            if (green) {\r\n\t                this._betValue.style.color = \"#39ff04\";\r\n\t            }\r\n\t            else {\r\n\t                this._betValue.style.color = \"#ffffff\";\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    UserControls.prototype.playCollectSound = function () {\r\n\t        if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod !== \"cumulative\") {\r\n\t                PlayList_1.PlayList.play(\"SND_BaseCollect\");\r\n\t            }\r\n\t            else if (!FreeRoundBonus_1.FreeRoundBonus.inFrb) {\r\n\t                PlayList_1.PlayList.play(\"SND_BaseCollect\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    UserControls.prototype.cycleHelp = function () { };\r\n\t    UserControls.prototype.changeWinBox = function (collect) {\r\n\t        if (collect === void 0) { collect = false; }\r\n\t        if (AppContext_1.AppContext != null && !AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n\t            return;\r\n\t        }\r\n\t        if (this._uncollectedWin != null) {\r\n\t            if (collect) {\r\n\t                if (!this._uncollectedWin.classList.contains(\"_hidden\")) {\r\n\t                    this._uncollectedWin.classList.add(\"_hidden\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (this._uncollectedWin.classList.contains(\"_hidden\")) {\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t                    DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, \"0\");\r\n\t                    this._uncollectedWin.classList.remove(\"_hidden\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this._collectedWin != null) {\r\n\t            if (collect) {\r\n\t                if (this._collectedWin.classList.contains(\"_hidden\")) {\r\n\t                    this._collectedWin.classList.remove(\"_hidden\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (!this._collectedWin.classList.contains(\"_hidden\")) {\r\n\t                    this._collectedWin.classList.add(\"_hidden\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    UserControls.prototype.restoreGameRound = function () { };\r\n\t    UserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], UserControls);\r\n\t    return UserControls;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.UserControls = UserControls;\r\n\n\n/***/ },\n/* 72 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlElement_1 = __webpack_require__(73);\r\n\tvar StyleManager_1 = __webpack_require__(18);\r\n\tvar HtmlManager_1 = __webpack_require__(70);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar HtmlContainerElement = (function (_super) {\r\n\t    __extends(HtmlContainerElement, _super);\r\n\t    function HtmlContainerElement() {\r\n\t        _super.call(this);\r\n\t        this.childrenHolderClass = \"\";\r\n\t        this.childrenClass = \"\";\r\n\t        this.recalculateHeight = false;\r\n\t    }\r\n\t    HtmlContainerElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (node.hasAttribute(\"id\")) {\r\n\t            HtmlController_1.HtmlController.ContainerElementsById[node.getAttribute(\"id\")] = this;\r\n\t        }\r\n\t        if (node.hasAttribute(\"Style\")) {\r\n\t            this.style = StyleManager_1.StyleManager.HtmlStyles[node.getAttribute(\"Style\")];\r\n\t            if (this.style != null) {\r\n\t                this.childs = HtmlManager_1.HtmlManager.parseElements(this.style.node, this);\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.logError(\"ERROR no style with name \" + node.getAttribute(\"Style\"));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.childs = HtmlManager_1.HtmlManager.parseElements(node, this);\r\n\t        }\r\n\t        if (this.childs == null) {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING html container element with name \" + node.nodeName + \" has no children\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"OnOver\")) {\r\n\t            if (node.hasAttribute(\"OnOverAction\")) {\r\n\t                var actionEnabled = HtmlController_1.HtmlController.Configurations[node.getAttribute(\"OnOverAction\")];\r\n\t                if (actionEnabled) {\r\n\t                    this._overId = node.getAttribute(\"OnOver\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this._overId = node.getAttribute(\"OnOver\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"ChildrenHolderClass\")) {\r\n\t            this.childrenHolderClass = node.getAttribute(\"ChildrenHolderClass\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"ChildrenClass\")) {\r\n\t            this.childrenClass = node.getAttribute(\"ChildrenClass\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"RecalculateHeight\")) {\r\n\t            this.recalculateHeight = neo_common_1.StringUtils.parseBoolean(node.getAttribute(\"RecalculateHeight\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"OnClick\")) {\r\n\t            if (node.hasAttribute(\"OnClickAction\")) {\r\n\t                this._clickId = node.getAttribute(\"OnClick\");\r\n\t                this.instance.addEventListener(HtmlContainerElement.CustomClick, this.onCustomClick.bind(this));\r\n\t            }\r\n\t        }\r\n\t        if (this._overId != null) {\r\n\t            this.instance.addEventListener(HtmlContainerElement.Over, this.onOver.bind(this));\r\n\t            this.instance.addEventListener(HtmlContainerElement.Out, this.onOut.bind(this));\r\n\t        }\r\n\t        if (node.hasAttribute(\"ActionsHolder\")) {\r\n\t            HtmlController_1.HtmlController.registerActionsHoldersElement(node.getAttribute(\"ActionsHolder\"), this);\r\n\t        }\r\n\t        if (node.hasAttribute(\"Test\")) {\r\n\t            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"UIDispatcher\")) {\r\n\t            HtmlController_1.HtmlController.registerUiDispatchElement(node.getAttribute(\"UIDispatcher\"), this);\r\n\t        }\r\n\t        if (node.hasAttribute(\"UIActionDispatcher\")) {\r\n\t            HtmlController_1.HtmlController.registerUiActionDispatchElement(node.getAttribute(\"UIActionDispatcher\"), this);\r\n\t        }\r\n\t        var touchScroll = false;\r\n\t        if (node.hasAttribute(\"TouchScroll\")) {\r\n\t            touchScroll = neo_common_1.StringUtils.parseBoolean(node.getAttribute(\"TouchScroll\"));\r\n\t        }\r\n\t        if (touchScroll) {\r\n\t            this.enableScrollOnTouchmove();\r\n\t        }\r\n\t    };\r\n\t    HtmlContainerElement.prototype.enableScrollOnTouchmove = function () {\r\n\t        var allowScrollUp = true;\r\n\t        var allowScrollDown = true;\r\n\t        var lastY = 0;\r\n\t        var self = this;\r\n\t        this.instance.addEventListener(\"touchstart\", function (event) {\r\n\t            allowScrollUp = this.scrollTop > 0;\r\n\t            allowScrollDown = this.scrollTop < this.scrollHeight - this.clientHeight;\r\n\t            lastY = event.touches[0].pageY;\r\n\t        }, true);\r\n\t        this.instance.addEventListener(\"touchmove\", function (event) {\r\n\t            if (event.touches.length === 1) {\r\n\t                var up = event.touches[0].pageY > lastY;\r\n\t                var down = !up;\r\n\t                lastY = event.touches[0].pageY;\r\n\t                if ((up && allowScrollUp) || (down && allowScrollDown)) {\r\n\t                    event.stopPropagation();\r\n\t                }\r\n\t                else {\r\n\t                    event.preventDefault();\r\n\t                }\r\n\t            }\r\n\t        }, true);\r\n\t    };\r\n\t    HtmlContainerElement.prototype.onOver = function () {\r\n\t        if (this._overId != null) {\r\n\t            var element = document.getElementById(this._overId);\r\n\t            if (element != null) {\r\n\t                element.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlContainerElement.prototype.onOut = function () {\r\n\t        if (this._overId != null) {\r\n\t            var element = document.getElementById(this._overId);\r\n\t            if (element != null) {\r\n\t                element.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlContainerElement.prototype.onCustomClick = function () {\r\n\t        if (this._clickId != null && HtmlController_1.HtmlController.ContainerElementsById[this._clickId] != null) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            var element = HtmlController_1.HtmlController.ContainerElementsById[this._clickId];\r\n\t            if (element != null && element.instance != null) {\r\n\t                if (element.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t                    if (element.recalculateHeight) {\r\n\t                        element.recalculateChildrenHeight(element);\r\n\t                    }\r\n\t                    element.reset();\r\n\t                    element.instance.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                }\r\n\t                else {\r\n\t                    if (element.recalculateHeight) {\r\n\t                        element.instance.removeAttribute(\"style\");\r\n\t                    }\r\n\t                    element.instance.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                }\r\n\t                if (document.getElementById(\"autoPlayDialogTop\") != null) {\r\n\t                    document.getElementById(\"autoPlayDialogTop\").scrollTop = 0;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlContainerElement.prototype.recalculateChildrenHeight = function (element) {\r\n\t        if (element.instance != null && element.childrenHolderClass != \"\" && element.childrenClass != \"\") {\r\n\t            var holders = element.instance.getElementsByClassName(element.childrenHolderClass);\r\n\t            if (holders[0] != null) {\r\n\t                var paddingTop = parseInt(window.getComputedStyle(holders[0], null).getPropertyValue(\"padding-top\"));\r\n\t                var paddingBottom = parseInt(window.getComputedStyle(holders[0], null).getPropertyValue(\"padding-bottom\"));\r\n\t                var holdersChildren = holders[0].getElementsByClassName(element.childrenClass);\r\n\t                if (holdersChildren != null && holdersChildren.length > 0) {\r\n\t                    var height = paddingTop + paddingBottom;\r\n\t                    for (var i = 0; i < holdersChildren.length; i++) {\r\n\t                        var itemHeight = parseInt(window.getComputedStyle(holdersChildren[i], null).getPropertyValue(\"height\"));\r\n\t                        height += itemHeight;\r\n\t                    }\r\n\t                    element.instance.style.height = height + \"px\";\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlContainerElement.prototype.changeState = function (value) {\r\n\t        if (this.instance != null) {\r\n\t            if (value) {\r\n\t                this.instance.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            else {\r\n\t                this.instance.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                if (this._clickId != null && HtmlController_1.HtmlController.ContainerElementsById[this._clickId] != null) {\r\n\t                    var element = HtmlController_1.HtmlController.ContainerElementsById[this._clickId];\r\n\t                    if (element != null && element.instance != null) {\r\n\t                        if (!element.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                            if (element.recalculateHeight) {\r\n\t                                element.instance.removeAttribute(\"style\");\r\n\t                            }\r\n\t                            element.instance.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no instance\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlContainerElement.prototype.reset = function () { };\r\n\t    HtmlContainerElement.Over = \"mouseover\";\r\n\t    HtmlContainerElement.Out = \"mouseout\";\r\n\t    HtmlContainerElement.TouchStart = \"touchstart\";\r\n\t    HtmlContainerElement.TouchEnd = \"touchend\";\r\n\t    HtmlContainerElement.CustomClick = \"click\";\r\n\t    HtmlContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlContainerElement);\r\n\t    return HtmlContainerElement;\r\n\t}(HtmlElement_1.HtmlElement));\r\n\texports.HtmlContainerElement = HtmlContainerElement;\r\n\n\n/***/ },\n/* 73 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar HtmlElement = (function () {\r\n\t    function HtmlElement(tagName) {\r\n\t        if (tagName === void 0) { tagName = \"div\"; }\r\n\t        if (tagName !== \"\") {\r\n\t            this.instance = document.createElement(tagName);\r\n\t        }\r\n\t    }\r\n\t    HtmlElement.prototype.create = function (node) {\r\n\t        if (node.hasAttribute(\"id\")) {\r\n\t            this.instance.id = node.getAttribute(\"id\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"RidFilter\")) {\r\n\t            this.ridFilter = node.getAttribute(\"RidFilter\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"RidType\")) {\r\n\t            this.ridType = node.getAttribute(\"RidType\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"Rid\")) {\r\n\t            this.rid = node.getAttribute(\"Rid\");\r\n\t            HtmlController_1.HtmlController.RidElements.push(this);\r\n\t            this.setText();\r\n\t        }\r\n\t        if (node.hasAttribute(\"CssClass\")) {\r\n\t            this.instance.className = node.getAttribute(\"CssClass\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"Test\")) {\r\n\t            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"Data\")) {\r\n\t            this.data = node.getAttribute(\"Data\");\r\n\t            HtmlController_1.HtmlController.registerDataElement(node.getAttribute(\"Data\"), this);\r\n\t        }\r\n\t        if (node.hasAttribute(\"Lang\") && this.instance != null && GameApp_1.GameApp.language != null) {\r\n\t            this.instance.setAttribute(\"Language\", GameApp_1.GameApp.language);\r\n\t        }\r\n\t    };\r\n\t    HtmlElement.prototype.setText = function (value) {\r\n\t        var text = \"\";\r\n\t        if (value != null) {\r\n\t            text = value;\r\n\t            this.currentValue = value;\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (this.rid != null) {\r\n\t                if (Languages_1.Languages.getRid(this.rid) != null) {\r\n\t                    if (!neo_common_1.StringUtils.isNullOrEmpty(text)) {\r\n\t                        var texts = text.split(\";\");\r\n\t                        if (texts.length === 2) {\r\n\t                            text = Languages_1.Languages.getRid(this.rid, texts[0], texts[1]);\r\n\t                        }\r\n\t                        else {\r\n\t                            text = Languages_1.Languages.getRid(this.rid, text);\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        text = Languages_1.Languages.getRid(this.rid);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this.ridType != null) {\r\n\t                text = Languages_1.Languages.formatText(this.ridType, text);\r\n\t            }\r\n\t            if (this.ridFilter != null) {\r\n\t                text = Languages_1.Languages.filterText(this.ridFilter, text);\r\n\t                if (this.ridFilter === Languages_1.Languages.FilterNoZero && this.instance.classList.contains(\"bonus\")) {\r\n\t                    if (text === \"\") {\r\n\t                        this.instance.classList.add(\"_hidden\");\r\n\t                    }\r\n\t                    else {\r\n\t                        this.instance.classList.remove(\"_hidden\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            this.instance.innerHTML = text;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no instance\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlElement.prototype.updateText = function () {\r\n\t        var text = \"\";\r\n\t        if (this.currentValue != null) {\r\n\t            text = this.currentValue;\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (this.rid != null) {\r\n\t                if (Languages_1.Languages.getRid(this.rid) != null) {\r\n\t                    if (!neo_common_1.StringUtils.isNullOrEmpty(text)) {\r\n\t                        var texts = text.split(\";\");\r\n\t                        if (texts.length === 2) {\r\n\t                            text = Languages_1.Languages.getRid(this.rid, texts[0], texts[1]);\r\n\t                        }\r\n\t                        else {\r\n\t                            text = Languages_1.Languages.getRid(this.rid, text);\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        text = Languages_1.Languages.getRid(this.rid);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this.ridType != null) {\r\n\t                text = Languages_1.Languages.formatText(this.ridType, text);\r\n\t            }\r\n\t            if (this.ridFilter != null) {\r\n\t                text = Languages_1.Languages.filterText(this.ridFilter, text);\r\n\t                if (this.ridFilter === Languages_1.Languages.FilterNoZero && this.instance.classList.contains(\"bonus\")) {\r\n\t                    if (text === \"\") {\r\n\t                        this.instance.classList.add(\"_hidden\");\r\n\t                    }\r\n\t                    else {\r\n\t                        this.instance.classList.remove(\"_hidden\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            this.instance.innerHTML = text;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no instance\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    HtmlElement.prototype.logError = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.errorGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    HtmlElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlElement);\r\n\t    return HtmlElement;\r\n\t}());\r\n\texports.HtmlElement = HtmlElement;\r\n\n\n/***/ },\n/* 74 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ActionSet = (function () {\r\n\t    function ActionSet(setName, owner) {\r\n\t        this._actions = {};\r\n\t        this._setName = setName;\r\n\t        this._owner = owner;\r\n\t        this._batchUpdatesActive = false;\r\n\t        this._readonly = false;\r\n\t        this.registerActions = this.registerActions.bind(this);\r\n\t        this.registerAction = this.registerAction.bind(this);\r\n\t        this.changeActionState = this.changeActionState.bind(this);\r\n\t        this.getActionState = this.getActionState.bind(this);\r\n\t        this.getAllActions = this.getAllActions.bind(this);\r\n\t        this.batchUpdates = this.batchUpdates.bind(this);\r\n\t        this.disableAllActions = this.disableAllActions.bind(this);\r\n\t        this.invokeOnChange = this.invokeOnChange.bind(this);\r\n\t    }\r\n\t    Object.defineProperty(ActionSet.prototype, \"onChange\", {\r\n\t        get: function () {\r\n\t            return this._onChange;\r\n\t        },\r\n\t        set: function (value) {\r\n\t            this._onChange = value;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ActionSet.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(this._owner, (\"[\" + this._setName + \"] \") + s);\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.logError = function (s, e) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.errorGroup(this._owner, e, (\"[\" + this._setName + \"] \") + s);\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.invokeOnChange = function () {\r\n\t        if (this._onChange && !this._batchUpdatesActive) {\r\n\t            try {\r\n\t                this.onChange();\r\n\t            }\r\n\t            catch (e) {\r\n\t                if (false) {\r\n\t                    this.logError(\"invokeOnChange\", e);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.checkForReadonly = function () {\r\n\t        if (this._readonly) {\r\n\t            throw new Error(\"ActionSet \\\"\" + this._owner + \"\\\" [\" + this._setName + \"] is readonly!\");\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.beginBatchUpdates = function () {\r\n\t        this.checkForReadonly();\r\n\t        if (this._batchUpdatesActive) {\r\n\t            throw new Error(\"\\\"\" + this._owner + \"\\\" [\" + this._setName + \"] Other batch updates is in pending state!\");\r\n\t        }\r\n\t        this._batchUpdatesActive = true;\r\n\t    };\r\n\t    ActionSet.prototype.endBatchUpdates = function (hasChanges) {\r\n\t        this.checkForReadonly();\r\n\t        this._batchUpdatesActive = false;\r\n\t        if (neo_common_1.Utils.isNullOrUndefined(hasChanges)) {\r\n\t            hasChanges = true;\r\n\t        }\r\n\t        if (hasChanges) {\r\n\t            this.invokeOnChange();\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.batchUpdates = function (updateFn) {\r\n\t        this.beginBatchUpdates();\r\n\t        var hasChanges;\r\n\t        try {\r\n\t            hasChanges = updateFn(this);\r\n\t        }\r\n\t        finally {\r\n\t            this.endBatchUpdates(hasChanges);\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.registerActions = function (actions) {\r\n\t        this.beginBatchUpdates();\r\n\t        try {\r\n\t            for (var key in actions) {\r\n\t                if (actions.hasOwnProperty(key)) {\r\n\t                    this.registerAction(key, actions[key]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        finally {\r\n\t            this.endBatchUpdates(true);\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.registerAction = function (action, value) {\r\n\t        if (value === void 0) { value = false; }\r\n\t        this.checkForReadonly();\r\n\t        var notExist = neo_common_1.Utils.isNullOrUndefined(this._actions[action]);\r\n\t        if (notExist) {\r\n\t            this._actions[action] = value;\r\n\t            this.invokeOnChange();\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log((\"[changeActionState] Could not register action '\" + action + \"', action was already registered!\") +\r\n\t                    (\" all actions: \" + JSON.stringify(this._actions)));\r\n\t            }\r\n\t        }\r\n\t        return notExist;\r\n\t    };\r\n\t    ActionSet.prototype.changeActionStates = function (actionsOrValue, actionNames) {\r\n\t        this.beginBatchUpdates();\r\n\t        try {\r\n\t            var hasValue = typeof actionsOrValue === \"boolean\";\r\n\t            if (hasValue) {\r\n\t                for (var i = 0; i < actionNames.length; i++) {\r\n\t                    var action = actionNames[i];\r\n\t                    this.changeActionState(action, actionsOrValue);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                for (var key in actionsOrValue) {\r\n\t                    if (actionsOrValue.hasOwnProperty(key)) {\r\n\t                        this.changeActionState(key, actionsOrValue[key]);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        finally {\r\n\t            this.endBatchUpdates(true);\r\n\t        }\r\n\t    };\r\n\t    ActionSet.prototype.changeActionState = function (action, value) {\r\n\t        this.checkForReadonly();\r\n\t        var exist = !neo_common_1.Utils.isNullOrUndefined(this._actions[action]);\r\n\t        if (exist) {\r\n\t            this._actions[action] = value;\r\n\t            this.invokeOnChange();\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log((\"[changeActionState] Could not change action '\" + action + \"' value to '\" + value + \"', action was not registered!\") +\r\n\t                    (\" all actions: \" + JSON.stringify(this._actions)));\r\n\t            }\r\n\t        }\r\n\t        return exist;\r\n\t    };\r\n\t    ActionSet.prototype.getActionState = function (action) {\r\n\t        if (this._actions[action] != null) {\r\n\t            return this._actions[action];\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log((\"[changeActionState] Could not get action '\" + action + \"' value, action was not registered!\") +\r\n\t                    (\" all actions: \" + JSON.stringify(this._actions)));\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ActionSet.prototype.getAllActions = function () {\r\n\t        return this._actions;\r\n\t    };\r\n\t    ActionSet.prototype.clone = function (readonly) {\r\n\t        var cloned = new ActionSet(this._setName, this._owner);\r\n\t        for (var key in this._actions) {\r\n\t            if (this._actions.hasOwnProperty(key)) {\r\n\t                cloned.registerAction(key, this._actions[key]);\r\n\t            }\r\n\t        }\r\n\t        cloned._readonly = neo_common_1.Utils.valueOrDefault(readonly, true);\r\n\t        return cloned;\r\n\t    };\r\n\t    ActionSet.prototype.disableAllActions = function () {\r\n\t        this.beginBatchUpdates();\r\n\t        try {\r\n\t            for (var key in this._actions) {\r\n\t                this._actions[key] = false;\r\n\t            }\r\n\t        }\r\n\t        finally {\r\n\t            this.endBatchUpdates(true);\r\n\t        }\r\n\t    };\r\n\t    return ActionSet;\r\n\t}());\r\n\texports.ActionSet = ActionSet;\r\n\n\n/***/ },\n/* 75 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ActionManager = (function () {\r\n\t    function ActionManager() {\r\n\t    }\r\n\t    ActionManager.parseActionSets = function (startNode) {\r\n\t        if (!startNode) {\r\n\t            return;\r\n\t        }\r\n\t        ActionManager.getNodesList(startNode.firstElementChild)\r\n\t            .reverse()\r\n\t            .filter(function (node) {\r\n\t            return node.hasAttribute(\"Class\") &&\r\n\t                node.getAttribute(\"Class\") === \"ActionSet\" &&\r\n\t                neo_common_1.EngineComponentFactory.isTypeOf(\"ActionSet\", ComponentTypes_1.ComponentTypes.ActionSet);\r\n\t        })\r\n\t            .forEach(function (node) { return neo_common_1.EngineComponentFactory.get(\"ActionSet\").RegisterActionSet(node); });\r\n\t    };\r\n\t    ActionManager.getNodesList = function (node, nodeList) {\r\n\t        if (nodeList === void 0) { nodeList = []; }\r\n\t        if (!node) {\r\n\t            return nodeList;\r\n\t        }\r\n\t        if (node.nextElementSibling) {\r\n\t            nodeList = ActionManager.getNodesList(node.nextElementSibling, nodeList);\r\n\t        }\r\n\t        return nodeList.concat(node);\r\n\t    };\r\n\t    ActionManager.log = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"ActionManager\", data);\r\n\t        }\r\n\t    };\r\n\t    return ActionManager;\r\n\t}());\r\n\texports.ActionManager = ActionManager;\r\n\n\n/***/ },\n/* 76 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar Dialog_1 = __webpack_require__(35);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GameClientHostConsumer = (function (_super) {\r\n\t    __extends(GameClientHostConsumer, _super);\r\n\t    function GameClientHostConsumer(app) {\r\n\t        _super.call(this, app);\r\n\t    }\r\n\t    Object.defineProperty(GameClientHostConsumer.prototype, \"dialog\", {\r\n\t        get: function () {\r\n\t            if (neo_common_1.Utils.isNullOrUndefined(this._dialog)) {\r\n\t                this._dialog = new Dialog_1.Dialog(this._app);\r\n\t            }\r\n\t            return this._dialog;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    GameClientHostConsumer.prototype.handleAction = function (actionGroup, action) {\r\n\t        if (!HtmlController_1.HtmlController.dispatchActionAllowed) {\r\n\t            return;\r\n\t        }\r\n\t        if (actionGroup === neo_games_1.ClientHost.Types.ClientHostActionGroup.Default.toString()) {\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"GameClientHostConsumer\", \"Received action \\\"\" + action + \"\\\" (group: '\" + actionGroup + \"'), dispatching to controller.dispatchAction() ...\");\r\n\t            }\r\n\t            DataManager_1.DataManager.addTrustedUserAction(action);\r\n\t            ModuleManager_1.ModuleManager.dispatchAction(action);\r\n\t        }\r\n\t        else if (actionGroup === neo_games_1.ClientHost.Types.ClientHostActionGroup.Terminal.toString()) {\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.debugGroup(\"GameClientHostConsumer\", \"Received action \\\"\" + action + \"\\\" (group: '\" + actionGroup + \"'), dispatching to controller.dispatchTerminalAction() ...\");\r\n\t            }\r\n\t            DataManager_1.DataManager.addTrustedUserAction(action);\r\n\t            ModuleManager_1.ModuleManager.dispatchAction(action);\r\n\t        }\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleShowDialog = function (request) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"GameClientHostConsumer\", \"inside handleShowDialog(), request: \", request);\r\n\t        }\r\n\t        if (request.type === neo_games_1.ClientHost.Types.ClientHostDialogType.Responsible1) {\r\n\t            this.showResponsibleDialog1(request.data);\r\n\t        }\r\n\t        else {\r\n\t            var dialogData = neo_common_1.Utils.isNullOrUndefined(request.data) ? null : request.data;\r\n\t            var special = false;\r\n\t            var gameRoundId = \"0\";\r\n\t            var errorId = \"\";\r\n\t            if (!neo_common_1.Utils.isNullOrUndefined(dialogData)) {\r\n\t                special = dialogData.special;\r\n\t                gameRoundId = dialogData.gameRoundId;\r\n\t                errorId = dialogData.errorId;\r\n\t            }\r\n\t            var isError = request.type === neo_games_1.ClientHost.Types.ClientHostDialogType.Error;\r\n\t            var code = request.error ? request.error.errorCode : \"\";\r\n\t            this.dialog.openDialog(request.text, code, errorId, isError, special, gameRoundId, request);\r\n\t        }\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleShowEndGameDialog = function () {\r\n\t        var customData = {\r\n\t            data: {\r\n\t                actions: [null],\r\n\t            },\r\n\t        };\r\n\t        this.dialog.openDialog(Languages_1.Languages.getRid(\"DLG_ENDGAME\"), \"\", \"\", false, true, \"\", customData);\r\n\t        PIXI.sound.removeAll();\r\n\t        var dialog = document.getElementById(\"dialog\");\r\n\t        var root = document.getElementById(\"root\");\r\n\t        if (root != null && dialog != null) {\r\n\t            root.innerHTML = dialog.outerHTML;\r\n\t            document.body.innerHTML = \"\";\r\n\t            document.body.appendChild(root);\r\n\t        }\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleCloseDialog = function () {\r\n\t        this.dialog.closeDialog();\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleRefreshAccount = function () {\r\n\t        BalanceManager_1.BalanceManager.refreshBalance();\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleError = function (error, data) {\r\n\t        this.dialog.openDialog(error, null, \"\", true);\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleBlockRequest = function (blocked) {\r\n\t        if (blocked) {\r\n\t            if (DataManager_1.DataManager.Autoplay) {\r\n\t                DataManager_1.DataManager.gameState(\"AutoPlayEnded\");\r\n\t            }\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t            DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t        }\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handlePaytableRequest = function (request) { };\r\n\t    GameClientHostConsumer.prototype.handleAccountUpdate = function (balance, forceShow) {\r\n\t        if (forceShow) {\r\n\t            BetManager_1.BetManager.unHideValues(true);\r\n\t        }\r\n\t        BalanceManager_1.BalanceManager.balanceReceived(balance);\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleAutoplayAction = function (action) {\r\n\t        switch (action) {\r\n\t            case neo_games_1.ClientHost.Types.AutoplayAction.Stop: {\r\n\t                if (DataManager_1.DataManager.Autoplay) {\r\n\t                    DataManager_1.DataManager.gameState(\"AutoPlayEnded\");\r\n\t                }\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t                DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t                DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t                break;\r\n\t            }\r\n\t            case neo_games_1.ClientHost.Types.AutoplayAction.Enable: {\r\n\t                DataManager_1.DataManager.AutoplayEnabled = true;\r\n\t                break;\r\n\t            }\r\n\t            case neo_games_1.ClientHost.Types.AutoplayAction.Disable: {\r\n\t                if (DataManager_1.DataManager.Autoplay) {\r\n\t                    DataManager_1.DataManager.gameState(\"AutoPlayEnded\");\r\n\t                }\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t                DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t                DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t                DataManager_1.DataManager.AutoplayEnabled = false;\r\n\t                break;\r\n\t            }\r\n\t            default: {\r\n\t                if (false) {\r\n\t                    neo_common_1.Logger.errorGroup(\"GameClientHostConsumer\", \"Unknown autoplay action '\" + action + \"'\");\r\n\t                }\r\n\t                break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.handleGameplayAction = function (action) {\r\n\t        switch (action) {\r\n\t            case neo_games_1.ClientHost.Types.GamePlayAction.Enable: {\r\n\t                GameManager_1.GameManager.enablePlay();\r\n\t                break;\r\n\t            }\r\n\t            case neo_games_1.ClientHost.Types.GamePlayAction.Disable: {\r\n\t                GameManager_1.GameManager.disablePlay();\r\n\t                break;\r\n\t            }\r\n\t            default: {\r\n\t                if (false) {\r\n\t                    neo_common_1.Logger.errorGroup(\"GameClientHostConsumer\", \"Unknown gameplay action '\" + action + \"'\");\r\n\t                }\r\n\t                break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.terminateOnCollect = function () {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"GameClientHostConsumer\", \"inside terminateOnCollect()\");\r\n\t        }\r\n\t        return GameManager_1.GameManager.canExit(true);\r\n\t    };\r\n\t    GameClientHostConsumer.prototype.showResponsibleDialog1 = function (data) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"GameClientHostConsumer\", \"showResponsibleDialog1(), data: \", data);\r\n\t        }\r\n\t        GameManager_1.GameManager.showResponsibleDialog1(data);\r\n\t    };\r\n\t    return GameClientHostConsumer;\r\n\t}(neo_games_1.GameEngine.GameClientHostConsumerBase));\r\n\texports.GameClientHostConsumer = GameClientHostConsumer;\r\n\n\n/***/ },\n/* 77 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameDefinition = (function (_super) {\r\n\t    __extends(GameDefinition, _super);\r\n\t    function GameDefinition() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Object.defineProperty(GameDefinition.prototype, \"Gamble\", {\r\n\t        get: function () {\r\n\t            return this.getValue(\"Gamble\", true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return GameDefinition;\r\n\t}(neo_games_1.GameEngine.GameDefinitionBase));\r\n\texports.GameDefinition = GameDefinition;\r\n\n\n/***/ },\n/* 78 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar key_GameEnableReelsStop = \"GameEnableReelsStop\";\r\n\tvar key_GameEnableQuickSpin = \"GameEnableQuickSpin\";\r\n\tvar key_QuickSpinDialogCount = \"QuickSpinDialogCount\";\r\n\tvar key_QuickSpinDecayDelay = \"QuickSpinDecayDelay\";\r\n\tvar key_MinGameRoundDuration = \"MinGameRoundDuration\";\r\n\tvar key_GameRoundMinSpan = \"GameRoundMinSpan\";\r\n\tvar key_UIShowTime = \"UIShowTime\";\r\n\tvar key_GUIShowSessionTime = \"GUI_ShowSessionTime\";\r\n\tvar key_GUIShowSessionTimeStartValue = \"GUI_ShowSessionTimeStartValue\";\r\n\tvar key_UseServerTime = \"UseServerTime\";\r\n\tvar key_UseHtmlAudio = \"UseHtmlAudio\";\r\n\tvar key_FullscreenOnClick = \"FullscreenOnClick\";\r\n\tvar key_UseCoins = \"UseCoins\";\r\n\tvar key_AutoplayGambleEnabled = \"AutoplayGambleEnabled\";\r\n\tvar key_AutoplayMode = \"AutoplayMode\";\r\n\tvar key_AutoplayCounts = \"AutoplayCounts\";\r\n\tvar key_AutoplayLossLimit = \"AutoplayLossLimit\";\r\n\tvar key_AutoplaySingleWinLimit = \"AutoplaySingleWinLimit\";\r\n\tvar key_HelpShowGameLimit = \"HelpShowGameLimit\";\r\n\tvar key_HelpShowRTP = \"HelpShowRTP\";\r\n\tvar key_ShowGameRoundsHistory = \"ShowGameRoundsHistory\";\r\n\tvar key_ExpirationResolveHours = \"ExpirationResolveHours\";\r\n\tvar key_AutoplayModeSpeed = \"AutoplayModeSpeed\";\r\n\tvar key_HideAmountsEnabled = \"HideAmountsEnabled\";\r\n\tvar key_AutoplayModeEnabled = \"AutoplayModeEnabled\";\r\n\tvar key_ResetCoinCountOnDenomChange = \"ResetCoinCountOnDenomChange\";\r\n\tvar key_CollectOnUnCalculatedWin = \"CollectOnUnCalculatedWin\";\r\n\tvar key_PluginUrl = \"PluginUrl\";\r\n\tvar key_PluginOrigin = \"PluginOrigin\";\r\n\tvar key_Platform = \"Platform\";\r\n\tvar key_PollCredit = \"PollCredit\";\r\n\tvar key_ShowDecimalPlaces = \"ShowDecimalPlaces\";\r\n\tvar key_SelectorRolloutDuration = \"SelectorRolloutDuration\";\r\n\tvar key_DisplayCurrencies = \"DisplayCurrencies\";\r\n\tvar key_CanvasFallback = \"CanvasFallback\";\r\n\tvar key_GameRoundIdVisible = \"GameRoundIdVisible\";\r\n\tvar key_MuteOnLostFocus = \"MuteOnLostFocus\";\r\n\tvar key_ShowCashierMessage = \"ShowCashierMessage\";\r\n\tvar key_CashierMessageShowRefreshBalanceButton = \"CashierMessageShowRefreshBalanceButton\";\r\n\tvar key_CashierUrl = \"CashierUrl\";\r\n\tvar key_DisableUntrustedClicks = \"DisableUntrustedClicks\";\r\n\tvar key_PlayerSessionReconnectionInterval = \"PlayerSessionReconnectionInterval\";\r\n\tvar key_ApplicationGatewayUrl = \"ApplicationGatewayUrl\";\r\n\tvar key_EventTrackerEnabled = \"EventTrackerEnabled\";\r\n\tvar key_GameEnableVibration = \"GameEnableVibration\";\r\n\tvar key_PaytableUseValue = \"PaytableUseValue\";\r\n\tvar key_GUI_HistoryUrl = \"GUI_HistoryUrl\";\r\n\tvar key_RCI_HistoryUrl = \"RCI_HistoryUrl\";\r\n\tvar key_RCI_Info = \"RCI_Info\";\r\n\tvar key_RCI_IntervalInfo = \"RCI_IntervalInfo\";\r\n\tvar key_RCI_ShowHistoryButton = \"RCI_ShowHistoryButton\";\r\n\tvar key_FeatureAutoPlay = \"FeatureAutoPlay\";\r\n\tvar key_FeatureAutoPick = \"FeatureAutoPick\";\r\n\tvar key_ShowSimilarGames = \"ShowSimilarGames\";\r\n\tvar key_SimilarGamesList = \"SimilarGamesList\";\r\n\tvar key_ShowExitGameButton = \"ShowExitGameButton\";\r\n\tvar key_StaticContentUrl = \"StaticContentUrl\";\r\n\tvar key_ShowHomeButton = \"ShowHomeButton\";\r\n\tvar key_UsePortraitMode = \"UsePortraitMode\";\r\n\tvar key_FRBShowDenyButton = \"FRBShowDenyButton\";\r\n\tvar key_FRBShowPostponeButton = \"FRBShowPostponeButton\";\r\n\tvar key_StatusBar = \"StatusBar\";\r\n\tvar key_StatusBarData = \"StatusBarData\";\r\n\tvar key_ProgressiveBonusId = \"ProgressiveBonusId\";\r\n\tvar key_ProgressiveBonusContributeOnlyQualified = \"ProgressiveBonusContributeOnlyQualified\";\r\n\tvar key_ProgressiveBonusMinQualifyingBet = \"ProgressiveBonusMinQualifyingBet\";\r\n\tvar key_ProgressiveBonusMaxQualifyingBet = \"ProgressiveBonusMaxQualifyingBet\";\r\n\tvar key_ProgressiveBonusVisibleMax = \"ProgressiveBonusVisibleMax\";\r\n\tvar key_ProgressiveBonusHelpShowMaxVisibleLimit = \"ProgressiveBonusHelpShowMaxVisibleLimit\";\r\n\tvar key_ProgressiveBonusHelpShowCumulativeWinLimit = \"ProgressiveBonusHelpShowCumulativeWinLimit\";\r\n\tvar key_ProgressiveBonusTicketConstraint = \"ProgressiveBonusTicketConstraint\";\r\n\tvar key_UseJackpotLocalization = \"UseJackpotLocalization\";\r\n\tvar key_ProgressiveBonusTheme = \"ProgressiveBonusTheme\";\r\n\tvar key_SessionBalance = \"SessionBalance\";\r\n\tvar key_TotalBet = \"TotalBet\";\r\n\tvar key_TotalWin = \"TotalWin\";\r\n\tvar key_PlayerTokenId = \"PlayerTokenId\";\r\n\tvar key_ClientToken = \"ClientToken\";\r\n\tvar key_MaxBetEnabled = \"MaxBetEnabled\";\r\n\tvar key_ShowMaxBetMessage = \"ShowMaxBetMessage\";\r\n\tvar key_HelpShowGameModuleVersion = \"HelpShowGameModuleVersion\";\r\n\tvar key_NotifyBetHigherThanMin = \"NotifyBetHigherThanMin\";\r\n\tvar key_ShowPaytableAtStart = \"ShowPaytableAtStart\";\r\n\tvar key_HelpShowMaxPayoutProbability = \"HelpShowMaxPayoutProbability\";\r\n\tvar key_HelpShowMaxPayoutProbabilityFrequency = \"HelpShowMaxPayoutProbabilityFrequency\";\r\n\tvar GameConfiguration = (function (_super) {\r\n\t    __extends(GameConfiguration, _super);\r\n\t    function GameConfiguration() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GameEnableReelsStop\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GameEnableReelsStop, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GameEnableQuickSpin\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GameEnableQuickSpin, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"QuickSpinDialogCount\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_QuickSpinDialogCount, 3);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"QuickSpinDecayDelay\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_QuickSpinDecayDelay, 30);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"MinGameRoundDuration\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_MinGameRoundDuration, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GameRoundMinSpan\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GameRoundMinSpan, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"UIShowTime\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_UIShowTime, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GUIShowSessionTime\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GUIShowSessionTime, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GUIShowSessionTimeStartValue\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GUIShowSessionTimeStartValue, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"UseServerTime\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_UseServerTime, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"UseHtmlAudio\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_UseHtmlAudio, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"FullscreenOnClick\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_FullscreenOnClick, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"UseCoins\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_UseCoins, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"AutoplayGambleEnabled\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_AutoplayGambleEnabled, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"MaxBetEnabled\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_MaxBetEnabled, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowMaxBetMessage\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ShowMaxBetMessage, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"AutoplayMode\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_AutoplayMode, \"simple\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"AutoplayCounts\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_AutoplayCounts, [-1, 1000, 750, 500, 250, 100, 75, 50, 25, 10]);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"AutoplayLossLimit\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_AutoplayLossLimit, [-1, 5, 20, 50]);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"AutoplaySingleWinLimit\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_AutoplaySingleWinLimit, [-1, 10, 20, 75]);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"HelpShowGameLimit\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_HelpShowGameLimit, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"HelpShowRTP\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_HelpShowRTP, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowGameRoundsHistory\", {\r\n\t        get: function () {\r\n\t            return GameManager_1.GameManager.gameResponse.roundId > -1 && this.getValue(key_ShowGameRoundsHistory, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ExpirationResolveHours\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ExpirationResolveHours, -1);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"AutoplayModeSpeed\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_AutoplayModeSpeed, \"standard\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"HideAmountsEnabled\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_HideAmountsEnabled, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"AutoplayModeEnabled\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_AutoplayModeEnabled, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ResetCoinCountOnDenomChange\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ResetCoinCountOnDenomChange, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"CollectOnUnCalculatedWin\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_CollectOnUnCalculatedWin, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"PluginUrl\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_PluginUrl, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"PluginOrigin\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_PluginOrigin, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"Platform\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_Platform, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"PollCredit\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_PollCredit, -1);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowDecimalPlaces\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ShowDecimalPlaces, 2);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"SelectorRolloutDuration\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_SelectorRolloutDuration, 5);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"DisplayCurrencies\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_DisplayCurrencies, []);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"CanvasFallback\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_CanvasFallback, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GameRoundIdVisible\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GameRoundIdVisible, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"MuteOnLostFocus\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_MuteOnLostFocus, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowCashierMessage\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ShowCashierMessage, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"CashierMessageShowRefreshBalanceButton\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_CashierMessageShowRefreshBalanceButton, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"CashierUrl\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_CashierUrl, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"DisableUntrustedClicks\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_DisableUntrustedClicks, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GUIHistoryUrl\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GUI_HistoryUrl, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"RCIHistoryUrl\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_RCI_HistoryUrl, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"RCIInfo\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_RCI_Info, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"RCIIntervalInfo\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_RCI_IntervalInfo, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"RCIShowHistoryButton\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_RCI_ShowHistoryButton, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"FeatureAutoPlay\", {\r\n\t        get: function () {\r\n\t            return (this.getValue(key_FeatureAutoPlay, 0) / 1000) * 60;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"FeatureAutoPick\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_FeatureAutoPick, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowSimilarGames\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ShowSimilarGames, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"SimilarGamesList\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_SimilarGamesList, []);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowExitGameButton\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ShowExitGameButton, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"StaticContentUrl\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_StaticContentUrl, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowHomeButton\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ShowHomeButton, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"UsePortraitMode\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_UsePortraitMode, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"FRBShowDenyButton\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_FRBShowDenyButton, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"FRBShowPostponeButton\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_FRBShowPostponeButton, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"StatusBar\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_StatusBar, []);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"StatusBarData\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_StatusBarData, {});\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusId\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusId, -1);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusContributeOnlyQualified\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusContributeOnlyQualified, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusMinQualifyingBet\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusMinQualifyingBet, -1);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusMaxQualifyingBet\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusMaxQualifyingBet, -1);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusVisibleMax\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusVisibleMax, -1);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusHelpShowMaxVisibleLimit\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusHelpShowMaxVisibleLimit, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusHelpShowCumulativeWinLimit\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusHelpShowCumulativeWinLimit, true);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusTicketConstraint\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusTicketConstraint, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"UseJackpotLocalization\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_UseJackpotLocalization, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ProgressiveBonusTheme\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ProgressiveBonusTheme, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"SessionBalance\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_SessionBalance, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"TotalBet\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_TotalBet, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"TotalWin\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_TotalWin, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"PlayerTokenId\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_PlayerTokenId, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"PlayerSessionReconnectionInterval\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_PlayerSessionReconnectionInterval, 0);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ApplicationGatewayUrl\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ApplicationGatewayUrl, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"GameEnableVibration\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_GameEnableVibration, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"HelpShowGameModuleVersion\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_HelpShowGameModuleVersion, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"NotifyBetHigherThanMin\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_NotifyBetHigherThanMin, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"HelpShowMaxPayoutProbability\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_HelpShowMaxPayoutProbability, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"HelpShowMaxPayoutProbabilityFrequency\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_HelpShowMaxPayoutProbabilityFrequency, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ShowPaytableAtStart\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ShowPaytableAtStart, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"PaytableUseValue\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_PaytableUseValue, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"EventTrackerEnabled\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_EventTrackerEnabled, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameConfiguration.prototype, \"ClientToken\", {\r\n\t        get: function () {\r\n\t            return this.getValue(key_ClientToken, \"\");\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return GameConfiguration;\r\n\t}(neo_games_1.GameEngine.GameConfigurationBase));\r\n\texports.GameConfiguration = GameConfiguration;\r\n\n\n/***/ },\n/* 79 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar UserAction_1 = __webpack_require__(48);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar RetentionPanel_1 = __webpack_require__(40);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar PageVisibilityHandler_1 = __webpack_require__(50);\r\n\tvar NotificationManager_1 = __webpack_require__(55);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar PlatformsManager = (function () {\r\n\t    function PlatformsManager() {\r\n\t    }\r\n\t    PlatformsManager.create = function () {\r\n\t        var pluginOrigin = \"*\";\r\n\t        if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration != null) {\r\n\t            if (AppContext_1.AppContext.gameConfiguration.PluginOrigin != \"\") {\r\n\t                pluginOrigin = AppContext_1.AppContext.gameConfiguration.PluginOrigin;\r\n\t            }\r\n\t            neo_games_1.Platforms.Platforms.getTimeDataFnc = DataManager_1.DataManager.getTimeData;\r\n\t            neo_games_1.Platforms.Platforms.getGameTimeFnc = DataManager_1.DataManager.getGameTime;\r\n\t            neo_games_1.Platforms.Platforms.createEmitter();\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.AutoplayStop, PlatformsManager.stopAutoplay);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.RestoreAutoplay, function (autoplayData) {\r\n\t                PlatformsManager.restoreAutoplay(autoplayData);\r\n\t            });\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.ResizeGame, PlatformsManager.resizeGame);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.RefreshBalance, PlatformsManager.refreshBalance);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GamePlayStop, function (disableChannel) {\r\n\t                PlatformsManager.gamePlayStop(disableChannel);\r\n\t            });\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GamePlayResume, PlatformsManager.gamePlayResume);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GamePlayFreeze, PlatformsManager.gamePlayFreeze);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GamePlayUnfreeze, PlatformsManager.gamePlayUnfreeze);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GameAudioEnable, PlatformsManager.gameAudioEnable);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GameAudioMute, PlatformsManager.gameAudioMute);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GameAudioSet, function (level) {\r\n\t                PlatformsManager.gameAudioSet(level);\r\n\t            });\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.GameQuickSpin, function (enabled) {\r\n\t                PlatformsManager.gameQuickSpin(enabled);\r\n\t            });\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.ShowHelp, PlatformsManager.showHelp);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.HideHelp, PlatformsManager.hideHelp);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.ToggleHelp, PlatformsManager.toggleHelp);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.ShowPaytable, PlatformsManager.showPaytable);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.HidePaytable, PlatformsManager.hidePaytable);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.TogglePaytable, PlatformsManager.togglePaytable);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.PlatformCloseMenu, PlatformsManager.platformCloseMenu);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.PlatformCloseGame, PlatformsManager.platformCloseGame);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.PlatformUpdateUI, PlatformsManager.platformUpdateUI);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.PlatformErrorMessageDismissed, PlatformsManager.platformErrorMessageDismissed);\r\n\t            neo_games_1.Platforms.Platforms.eventEmitter.on(neo_games_1.Platforms.Platforms.CreateNotification, function (events) {\r\n\t                PlatformsManager.createNotification(events);\r\n\t            });\r\n\t            neo_games_1.Platforms.Platforms.create(AppContext_1.AppContext.gameConfiguration.Platform, AppContext_1.AppContext.gameConfiguration.PluginUrl, pluginOrigin, { gameKey: GameApp_1.GameApp.key, lang: GameApp_1.GameApp.language, clientHub: NotificationManager_1.NotificationManager });\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.stopAutoplay = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t        DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t        DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t    };\r\n\t    PlatformsManager.restoreAutoplay = function (autoplayData) {\r\n\t        DataManager_1.DataManager.Autoplay = true;\r\n\t        DataManager_1.DataManager.AutoplayCount = autoplayData.autoplayCount;\r\n\t        DataManager_1.DataManager.AutoplayLossLimit = autoplayData.autoplayLossLimit;\r\n\t        DataManager_1.DataManager.AutoplayWinLimit = autoplayData.autoplayWinLimit;\r\n\t        HtmlController_1.HtmlController.dispatchAction(\"AUTOPLAY\");\r\n\t    };\r\n\t    PlatformsManager.resizeGame = function () {\r\n\t        Scaling_1.Scaling.resizeRoot();\r\n\t    };\r\n\t    PlatformsManager.refreshBalance = function () {\r\n\t        BalanceManager_1.BalanceManager.refreshBalance(true);\r\n\t    };\r\n\t    PlatformsManager.gamePlayStop = function (disableChannel) {\r\n\t        if (disableChannel === void 0) { disableChannel = false; }\r\n\t        PlatformsManager.stopAutoplay();\r\n\t        if (disableChannel) {\r\n\t            if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            }\r\n\t            else if (ModuleManager_1.ModuleManager[\"freespinsActive\"] && ModuleManager_1.ModuleManager[\"freespinsActive\"]()) {\r\n\t            }\r\n\t            else {\r\n\t                ModuleManager_1.ModuleManager.disableChannelModule(GameModules.Base);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.gamePlayResume = function () {\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t        }\r\n\t        else if (ModuleManager_1.ModuleManager[\"freespinsActive\"] && ModuleManager_1.ModuleManager[\"freespinsActive\"]()) {\r\n\t        }\r\n\t        else {\r\n\t            ModuleManager_1.ModuleManager.restoreGameRound(GameModules.Base);\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.gamePlayFreeze = function () {\r\n\t        if (!neo_games_1.Platforms.Platforms.canSpinOnCollect) {\r\n\t            PlatformsManager.stopAutoplay();\r\n\t        }\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.Enabled = false;\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.pauseAll();\r\n\t        HtmlController_1.HtmlController.dispatchActionAllowed = false;\r\n\t        document.body.classList.add(\"freeze\");\r\n\t    };\r\n\t    PlatformsManager.gamePlayUnfreeze = function () {\r\n\t        document.body.classList.remove(\"freeze\");\r\n\t        HtmlController_1.HtmlController.dispatchActionAllowed = true;\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.resumeAll();\r\n\t        PageVisibilityHandler_1.PageVisibilityHandler.Enabled = true;\r\n\t    };\r\n\t    PlatformsManager.gameAudioEnable = function () {\r\n\t        HtmlController_1.HtmlController.setSound(3);\r\n\t    };\r\n\t    PlatformsManager.gameAudioMute = function () {\r\n\t        HtmlController_1.HtmlController.setSound(0);\r\n\t    };\r\n\t    PlatformsManager.gameAudioSet = function (level) {\r\n\t        HtmlController_1.HtmlController.setSound(level);\r\n\t    };\r\n\t    PlatformsManager.showHelp = function () {\r\n\t        var dipatchElementId = UserAction_1.UserAction.ActionHelpOn;\r\n\t        if (HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId]) {\r\n\t            var dipatchElement = HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\t            if (dipatchElement != null) {\r\n\t                if (dipatchElement.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionHelpOn);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.hideHelp = function () {\r\n\t        var dipatchElementId = UserAction_1.UserAction.ActionHelpOn;\r\n\t        if (HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId]) {\r\n\t            var dipatchElement = HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\t            if (dipatchElement != null) {\r\n\t                if (!dipatchElement.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionHelpOff);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.toggleHelp = function () {\r\n\t        var dipatchElementId = UserAction_1.UserAction.ActionHelpOn;\r\n\t        if (HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId]) {\r\n\t            var dipatchElement = HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\t            if (dipatchElement != null) {\r\n\t                if (dipatchElement.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionHelpOn);\r\n\t                }\r\n\t                else {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionHelpOff);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.showPaytable = function () {\r\n\t        var dipatchElementId = UserAction_1.UserAction.ActionPaytableOn;\r\n\t        if (HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId]) {\r\n\t            var dipatchElement = HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\t            if (dipatchElement != null) {\r\n\t                if (dipatchElement.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionPaytableOn);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.hidePaytable = function () {\r\n\t        var dipatchElementId = UserAction_1.UserAction.ActionPaytableOn;\r\n\t        if (HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId]) {\r\n\t            var dipatchElement = HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\t            if (dipatchElement != null) {\r\n\t                if (!dipatchElement.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionPaytableOff);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.togglePaytable = function () {\r\n\t        var dipatchElementId = UserAction_1.UserAction.ActionPaytableOn;\r\n\t        if (HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId]) {\r\n\t            var dipatchElement = HtmlController_1.HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\t            if (dipatchElement != null) {\r\n\t                if (dipatchElement.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionPaytableOn);\r\n\t                }\r\n\t                else {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(UserAction_1.UserAction.ActionPaytableOff);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.gameQuickSpin = function (enabled) {\r\n\t        if (DataManager_1.DataManager[\"quickspinSet\"]) {\r\n\t            DataManager_1.DataManager[\"quickspinSet\"](enabled);\r\n\t        }\r\n\t    };\r\n\t    PlatformsManager.platformCloseMenu = function () {\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t    };\r\n\t    PlatformsManager.platformCloseGame = function () {\r\n\t        neo_games_1.Platforms.Platforms.exitHandler = \"platformsManager\";\r\n\t        GameApp_1.GameApp.exit();\r\n\t    };\r\n\t    PlatformsManager.platformUpdateUI = function () {\r\n\t        RetentionPanel_1.RetentionPanel.revalidate();\r\n\t    };\r\n\t    PlatformsManager.platformErrorMessageDismissed = function () {\r\n\t    };\r\n\t    PlatformsManager.createNotification = function (events) {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.EventTrackerEnabled) {\r\n\t            NotificationManager_1.NotificationManager.sendMessage({\r\n\t                application: \"EventTrackingServer\",\r\n\t                service: \"EventTracker\",\r\n\t                action: \"event/log\",\r\n\t                data: { events: events },\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    return PlatformsManager;\r\n\t}());\r\n\texports.PlatformsManager = PlatformsManager;\r\n\n\n/***/ },\n/* 80 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar FreespinsActions = (function () {\r\n\t    function FreespinsActions() {\r\n\t    }\r\n\t    FreespinsActions.ActionStart = \"FREESPIN_START\";\r\n\t    FreespinsActions.ActionBack = \"FREESPIN_BACK_TO_GAME\";\r\n\t    FreespinsActions.ActionSpin = \"FREESPIN_SPIN\";\r\n\t    FreespinsActions.ActionSpinStop = \"FREESPIN_SPIN_STOP\";\r\n\t    FreespinsActions.ActionAutoplay = \"FREESPIN_AUTOPLAY\";\r\n\t    FreespinsActions.ActionAutoplayStop = \"FREESPIN_AUTOPLAY_STOP\";\r\n\t    return FreespinsActions;\r\n\t}());\r\n\texports.FreespinsActions = FreespinsActions;\r\n\n\n/***/ },\n/* 81 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar GambleActions = (function () {\r\n\t    function GambleActions() {\r\n\t    }\r\n\t    GambleActions.ActionGambleStart = \"GAMBLE_START\";\r\n\t    GambleActions.ActionGambleRed = \"GAMBLE_RED\";\r\n\t    GambleActions.ActionGambleBlack = \"GAMBLE_BLACK\";\r\n\t    GambleActions.ActionGambleHalve = \"GAMBLE_HALVE\";\r\n\t    GambleActions.ActionGambleCollect = \"GAMBLE_COLLECT\";\r\n\t    return GambleActions;\r\n\t}());\r\n\texports.GambleActions = GambleActions;\r\n\n\n/***/ },\n/* 82 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar GameActions = (function () {\r\n\t    function GameActions() {\r\n\t    }\r\n\t    GameActions.ActionSpinOrStop = \"SPIN_OR_STOP\";\r\n\t    return GameActions;\r\n\t}());\r\n\texports.GameActions = GameActions;\r\n\n\n/***/ },\n/* 83 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar PickActions = (function () {\r\n\t    function PickActions() {\r\n\t    }\r\n\t    PickActions.ActionConfirm = \"PICK_CONFIRM\";\r\n\t    PickActions.ActionSpot = \"SPOT_\";\r\n\t    PickActions.ActionBack = \"PICK_BACK_TO_GAME\";\r\n\t    return PickActions;\r\n\t}());\r\n\texports.PickActions = PickActions;\r\n\n\n/***/ },\n/* 84 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar TerminalActions = (function () {\r\n\t    function TerminalActions() {\r\n\t    }\r\n\t    Object.defineProperty(TerminalActions, \"Payout\", {\r\n\t        get: function () {\r\n\t            return \"Payout\";\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(TerminalActions, \"BackToLobby\", {\r\n\t        get: function () {\r\n\t            return \"BackToLobby\";\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(TerminalActions, \"StartWithCollect\", {\r\n\t        get: function () {\r\n\t            return \"StartWithCollect\";\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(TerminalActions, \"Autoplay\", {\r\n\t        get: function () {\r\n\t            return \"Autoplay\";\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(TerminalActions, \"BetOrGamble\", {\r\n\t        get: function () {\r\n\t            return \"BetOrGamble\";\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(TerminalActions, \"ActionLeft\", {\r\n\t        get: function () {\r\n\t            return \"ActionLeft\";\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(TerminalActions, \"ActionRight\", {\r\n\t        get: function () {\r\n\t            return \"ActionRight\";\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return TerminalActions;\r\n\t}());\r\n\texports.TerminalActions = TerminalActions;\r\n\n\n/***/ },\n/* 85 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar GambleActions_1 = __webpack_require__(81);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GambleController_1 = __webpack_require__(86);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar LimitDialog_1 = __webpack_require__(54);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar Color = neo_games_1.Communication.Game.Color;\r\n\tvar GambleUserControls = (function (_super) {\r\n\t    __extends(GambleUserControls, _super);\r\n\t    function GambleUserControls() {\r\n\t        _super.call(this, \"gamble\");\r\n\t        this._collectedWinValue = 0;\r\n\t        this._collectDelay = FrameTimer_1.CreateFrameTimer(\"collectDelay\");\r\n\t        this._collectDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.outro.bind(this));\r\n\t        this._allowStart = true;\r\n\t    }\r\n\t    GambleUserControls.prototype.ticker = function (state) {\r\n\t        if (state === void 0) { state = \"\"; }\r\n\t        if (this._gambleTickerDefault != null) {\r\n\t            this._gambleTickerDefault.style.display = \"none\";\r\n\t        }\r\n\t        if (this._gambleTickerHalveLimit != null) {\r\n\t            this._gambleTickerHalveLimit.style.display = \"none\";\r\n\t        }\r\n\t        if (this._gambleTickerSoftLimit != null) {\r\n\t            this._gambleTickerSoftLimit.style.display = \"none\";\r\n\t        }\r\n\t        if (this._gambleTickerGameLimit != null) {\r\n\t            this._gambleTickerGameLimit.style.display = \"none\";\r\n\t        }\r\n\t        switch (state) {\r\n\t            case \"default\":\r\n\t                if (this._gambleTickerDefault != null) {\r\n\t                    this._gambleTickerDefault.style.display = \"block\";\r\n\t                }\r\n\t                break;\r\n\t            case \"halvelimit\":\r\n\t                if (this._gambleTickerHalveLimit != null) {\r\n\t                    this._gambleTickerHalveLimit.style.display = \"block\";\r\n\t                }\r\n\t                break;\r\n\t            case \"softLimit\":\r\n\t                if (this._gambleTickerSoftLimit != null) {\r\n\t                    this._gambleTickerSoftLimit.style.display = \"block\";\r\n\t                }\r\n\t                break;\r\n\t            case \"limit\":\r\n\t                if (this._gambleTickerGameLimit != null) {\r\n\t                    this._gambleTickerGameLimit.style.display = \"block\";\r\n\t                }\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    GambleUserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.registerActions();\r\n\t        this._gambleTickerDefault = document.getElementById(\"gambleTickerDefault\");\r\n\t        this._gambleTickerHalveLimit = document.getElementById(\"gambleTickerHalveLimit\");\r\n\t        this._gambleTickerSoftLimit = document.getElementById(\"gambleTickerSoftLimit\");\r\n\t        this._gambleTickerGameLimit = document.getElementById(\"gambleTickerGameLimit\");\r\n\t        this._screen = document.getElementById(\"screen\");\r\n\t        this.ticker(\"default\");\r\n\t    };\r\n\t    GambleUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(GambleController_1.GambleController.StartReceived, this.startReceived.bind(this));\r\n\t        this._controller.on(GambleController_1.GambleController.SelectReceived, this.selectReceived.bind(this));\r\n\t        this._controller.on(GambleController_1.GambleController.HalveReceived, this.halveReceived.bind(this));\r\n\t        this._controller.on(GambleController_1.GambleController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n\t        this._controller.on(GambleController_1.GambleController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(GambleController_1.GambleController.Lose, this.lose.bind(this));\r\n\t        this._controller.on(GambleController_1.GambleController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(GambleController_1.GambleController.OutroFinished, this.outroFinished.bind(this));\r\n\t    };\r\n\t    GambleUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleStart] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleRed] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleBlack] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleHalve] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleCollect] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    GambleUserControls.prototype.initReceived = function () {\r\n\t        _super.prototype.initReceived.call(this);\r\n\t        this._controller.initReceived();\r\n\t    };\r\n\t    GambleUserControls.prototype.collectReceived = function () {\r\n\t        this.ticker(\"\");\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataGambleAttempts, 0 + \"\");\r\n\t        _super.prototype.collectReceived.call(this);\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWin, \"\");\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWin, \"\");\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWinDenom, \"\");\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWinDenom, \"\");\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        neo_games_1.Platforms.Platforms.roundEnded({\r\n\t            id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t            win: this._collectedWinValue,\r\n\t            balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t        });\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: GameManager_1.GameManager.gameResponse.balance.real });\r\n\t        this._collectDelay.start(30);\r\n\t        if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, this._collectedWinValue.toString());\r\n\t        }\r\n\t        this.changeWinBox(true);\r\n\t    };\r\n\t    GambleUserControls.prototype.restoreGameRound = function () {\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    GambleUserControls.prototype.startReceived = function () {\r\n\t        if (GameManager_1.GameManager.gambleResponse != null &&\r\n\t            GameManager_1.GameManager.gambleResponse[\"totalCount\"] != null &&\r\n\t            GameManager_1.GameManager.gambleResponse[\"currentCount\"] != null) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataGambleAttempts, (GameManager_1.GameManager.gambleResponse[\"totalCount\"] - GameManager_1.GameManager.gambleResponse[\"currentCount\"]).toString());\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.startGamble();\r\n\t    };\r\n\t    GambleUserControls.prototype.selectReceived = function () {\r\n\t        if (GameManager_1.GameManager.gambleResponse[\"paidWin\"] != null) {\r\n\t            this._collectedWinValue = parseFloat(neo_common_1.NumberUtils.add(GameManager_1.GameManager.gambleResponse.currentWin, GameManager_1.GameManager.gambleResponse[\"paidWin\"]));\r\n\t        }\r\n\t        else {\r\n\t            this._collectedWinValue = GameManager_1.GameManager.gambleResponse.currentWin;\r\n\t        }\r\n\t    };\r\n\t    GambleUserControls.prototype.halveReceived = function () {\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWin, GameManager_1.GameManager.gambleResponse.colorWin.toString());\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWin, GameManager_1.GameManager.gambleResponse.currentWin.toString());\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.colorWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.currentWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: GameManager_1.GameManager.gameResponse.balance.real });\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    GambleUserControls.prototype.dispatchAction = function (action) {\r\n\t        _super.prototype.dispatchAction.call(this, action);\r\n\t        if (this.actions.getActionState(action)) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            _super.prototype.dispatchAction.call(this, action);\r\n\t            switch (action) {\r\n\t                case GambleActions_1.GambleActions.ActionGambleStart:\r\n\t                    this.start();\r\n\t                    break;\r\n\t                case GambleActions_1.GambleActions.ActionGambleHalve:\r\n\t                    this.halve();\r\n\t                    break;\r\n\t                case GambleActions_1.GambleActions.ActionGambleBlack:\r\n\t                    this.select(Color.Black);\r\n\t                    break;\r\n\t                case GambleActions_1.GambleActions.ActionGambleRed:\r\n\t                    this.select(Color.Red);\r\n\t                    break;\r\n\t                case GambleActions_1.GambleActions.ActionGambleCollect:\r\n\t                    this.collect();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GambleUserControls.prototype.collect = function () {\r\n\t        if (GameManager_1.GameManager.gameResponse != null && GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.gameResponse.totalWin);\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gambleResponse[\"paidWin\"] != null) {\r\n\t            this._collectedWinValue = parseFloat(neo_common_1.NumberUtils.add(GameManager_1.GameManager.gambleResponse.currentWin, GameManager_1.GameManager.gambleResponse[\"paidWin\"]));\r\n\t        }\r\n\t        else {\r\n\t            this._collectedWinValue = GameManager_1.GameManager.gambleResponse.currentWin;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t            DataManager_1.DataManager.updateLossLimit(GameManager_1.GameManager.gameResponse.totalWin);\r\n\t        }\r\n\t        _super.prototype.collect.call(this);\r\n\t        this.disable();\r\n\t        this.playCollectSound();\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        GameManager_1.GameManager.collect(GameModules.Gamble);\r\n\t    };\r\n\t    GambleUserControls.prototype.start = function () {\r\n\t        this._allowStart = false;\r\n\t        this._collectedWinValue = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        ModuleManager_1.ModuleManager.disableBase();\r\n\t        this.disable();\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWin, GameManager_1.GameManager.gambleResponse.colorWin.toString());\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWin, GameManager_1.GameManager.gambleResponse.currentWin.toString());\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.colorWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.currentWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        this._controller.start();\r\n\t    };\r\n\t    GambleUserControls.prototype.select = function (color) {\r\n\t        this.ticker(\"\");\r\n\t        this.disable();\r\n\t        this._controller.select(color);\r\n\t    };\r\n\t    GambleUserControls.prototype.halve = function () {\r\n\t        if (GameManager_1.GameManager.gambleResponse.currentWin > 0) {\r\n\t            DataManager_1.DataManager.updateLossLimit(GameManager_1.GameManager.gambleResponse.currentWin / 2);\r\n\t        }\r\n\t        this.disable();\r\n\t        this.playCollectSound();\r\n\t        this._controller.halve();\r\n\t    };\r\n\t    GambleUserControls.prototype.winCalculationFinished = function () {\r\n\t        if (GameManager_1.GameManager.gambleResponse.currentWin > 0) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWin, GameManager_1.GameManager.gambleResponse.currentWin.toString());\r\n\t            if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.currentWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            }\r\n\t            DataManager_1.DataManager.updateDataElements();\r\n\t        }\r\n\t        else {\r\n\t            if (GameManager_1.GameManager.gambleResponse != null &&\r\n\t                GameManager_1.GameManager.gambleResponse[\"totalCount\"] != null &&\r\n\t                GameManager_1.GameManager.gambleResponse[\"currentCount\"] != null) {\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataGambleAttempts, 0 + \"\");\r\n\t            }\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWin, \"\");\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWin, \"\");\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWinDenom, \"\");\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWinDenom, \"\");\r\n\t            DataManager_1.DataManager.updateDataElements();\r\n\t        }\r\n\t    };\r\n\t    GambleUserControls.prototype.allWinsFinished = function () {\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWin, GameManager_1.GameManager.gambleResponse.colorWin.toString());\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.colorWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        if (GameManager_1.GameManager.gambleResponse.currentWin > 0) {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t    };\r\n\t    GambleUserControls.prototype.lose = function () {\r\n\t        this.outro();\r\n\t        if (this._collectedWinValue > 0) {\r\n\t            if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, this._collectedWinValue.toString());\r\n\t            }\r\n\t            this.changeWinBox(true);\r\n\t        }\r\n\t        else {\r\n\t            this.changeWinBox();\r\n\t        }\r\n\t        neo_games_1.Platforms.Platforms.roundEnded({\r\n\t            id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t            win: this._collectedWinValue,\r\n\t            balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t        });\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: GameManager_1.GameManager.gameResponse.balance.real });\r\n\t    };\r\n\t    GambleUserControls.prototype.initIntro = function () {\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        this.prepareNewGameRound();\r\n\t        if (this._screen != null && !this._screen.classList.contains(\"_inGamble\")) {\r\n\t            this._screen.classList.add(\"_inGamble\");\r\n\t        }\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWin, GameManager_1.GameManager.gambleResponse.colorWin.toString());\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWin, GameManager_1.GameManager.gambleResponse.currentWin.toString());\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleColorWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.colorWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleCurrentWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gambleResponse.currentWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        this._controller.initIntro();\r\n\t    };\r\n\t    GambleUserControls.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        if (this._screen != null && !this._screen.classList.contains(\"_inGamble\")) {\r\n\t            this._screen.classList.add(\"_inGamble\");\r\n\t        }\r\n\t        this._controller.intro(long);\r\n\t    };\r\n\t    GambleUserControls.prototype.introFinished = function () {\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    GambleUserControls.prototype.outro = function () {\r\n\t        if (this._screen != null && this._screen.classList.contains(\"_inGamble\")) {\r\n\t            this._screen.classList.remove(\"_inGamble\");\r\n\t        }\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        this._collectDelay.stop();\r\n\t        this._controller.outro();\r\n\t    };\r\n\t    GambleUserControls.prototype.outroFinished = function () {\r\n\t        this._allowStart = true;\r\n\t        FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t        ModuleManager_1.ModuleManager.introModule(GameModules.Base);\r\n\t    };\r\n\t    GambleUserControls.prototype.prepareNewGameRound = function () {\r\n\t        if (GameManager_1.GameManager.gambleResponse != null &&\r\n\t            GameManager_1.GameManager.gambleResponse[\"totalCount\"] != null &&\r\n\t            GameManager_1.GameManager.gambleResponse[\"currentCount\"] != null) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataGambleAttempts, (GameManager_1.GameManager.gambleResponse[\"totalCount\"] - GameManager_1.GameManager.gambleResponse[\"currentCount\"]).toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleAttempts, (GameManager_1.GameManager.gambleResponse[\"totalCount\"] - GameManager_1.GameManager.gambleResponse[\"currentCount\"]).toString());\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataGambleAttempts, 0 + \"\");\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataGambleAttempts, 0 + \"\");\r\n\t            this.limit();\r\n\t            this.ticker(\"limit\");\r\n\t        }\r\n\t        else {\r\n\t            var softLimit = false;\r\n\t            if (GameManager_1.GameManager.gambleResponse.colorWin === 0) {\r\n\t                softLimit = true;\r\n\t            }\r\n\t            if (softLimit) {\r\n\t                if (GameManager_1.GameManager.gambleResponse.halveEnabled) {\r\n\t                    this.ticker(\"softLimit\");\r\n\t                }\r\n\t                else {\r\n\t                    this.ticker(\"limit\");\r\n\t                }\r\n\t            }\r\n\t            else if (GameManager_1.GameManager.gambleResponse != null && !GameManager_1.GameManager.gambleResponse.halveEnabled) {\r\n\t                this.ticker(\"halveLimit\");\r\n\t            }\r\n\t            else {\r\n\t                this.ticker(\"default\");\r\n\t            }\r\n\t            this.actions.changeActionStates((_a = {},\r\n\t                _a[GambleActions_1.GambleActions.ActionGambleStart] = false,\r\n\t                _a[GambleActions_1.GambleActions.ActionGambleRed] = !softLimit,\r\n\t                _a[GambleActions_1.GambleActions.ActionGambleBlack] = !softLimit,\r\n\t                _a[GambleActions_1.GambleActions.ActionGambleHalve] = GameManager_1.GameManager.gambleResponse.halveEnabled,\r\n\t                _a[GambleActions_1.GambleActions.ActionGambleCollect] = true,\r\n\t                _a\r\n\t            ));\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        var _a;\r\n\t    };\r\n\t    GambleUserControls.prototype.limit = function () {\r\n\t        LimitDialog_1.LimitDialog.openDialog();\r\n\t        this.actions.changeActionStates((_a = {},\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleStart] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleRed] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleBlack] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleHalve] = false,\r\n\t            _a[GambleActions_1.GambleActions.ActionGambleCollect] = true,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    GambleUserControls.prototype.enable = function () {\r\n\t        this.actions.changeActionState(GambleActions_1.GambleActions.ActionGambleStart, this._allowStart);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    GambleUserControls.prototype.disable = function () {\r\n\t        this._actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    GambleUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], GambleUserControls);\r\n\t    return GambleUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.GambleUserControls = GambleUserControls;\r\n\n\n/***/ },\n/* 86 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Controller_1 = __webpack_require__(87);\r\n\tvar GambleModel_1 = __webpack_require__(88);\r\n\tvar GambleView_1 = __webpack_require__(89);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar GambleController = (function (_super) {\r\n\t    __extends(GambleController, _super);\r\n\t    function GambleController() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    GambleController.prototype.startInitialization = function (view) {\r\n\t        if (false) {\r\n\t            this.log(\"startInitialization\");\r\n\t        }\r\n\t        if (view instanceof GambleView_1.GambleView) {\r\n\t            this._view = view;\r\n\t        }\r\n\t        else {\r\n\t            this.log(\"ERROR view is not instance of GambleView\");\r\n\t        }\r\n\t        this._model = new GambleModel_1.GambleModel(this);\r\n\t    };\r\n\t    GambleController.prototype.initReceived = function () {\r\n\t        this._view.initReceived(this);\r\n\t    };\r\n\t    GambleController.prototype.initIntro = function () {\r\n\t        this._view.initIntro();\r\n\t    };\r\n\t    GambleController.prototype.start = function () {\r\n\t        this._model.start();\r\n\t    };\r\n\t    GambleController.prototype.startReceived = function () {\r\n\t        this._view.startReceived();\r\n\t        this.emit(GambleController.StartReceived);\r\n\t    };\r\n\t    GambleController.prototype.select = function (color) {\r\n\t        this._model.select(color);\r\n\t    };\r\n\t    GambleController.prototype.selectReceived = function () {\r\n\t        this._view.selectReceived();\r\n\t        this.emit(GambleController.SelectReceived);\r\n\t    };\r\n\t    GambleController.prototype.halve = function () {\r\n\t        this._model.halve();\r\n\t    };\r\n\t    GambleController.prototype.halveReceived = function () {\r\n\t        this.emit(GambleController.HalveReceived);\r\n\t    };\r\n\t    GambleController.prototype.winCalculationFinished = function () {\r\n\t        this.emit(GambleController.WinCalculationFinished);\r\n\t    };\r\n\t    GambleController.prototype.allWinsFinished = function () {\r\n\t        this.emit(GambleController.AllWinsFinished);\r\n\t    };\r\n\t    GambleController.prototype.lose = function () {\r\n\t        this.emit(GambleController.Lose);\r\n\t    };\r\n\t    GambleController.prototype.intro = function (long) {\r\n\t        this._view.intro();\r\n\t    };\r\n\t    GambleController.prototype.introFinished = function () {\r\n\t        this.emit(GambleController.IntroFinished);\r\n\t    };\r\n\t    GambleController.prototype.outro = function () {\r\n\t        this._view.outro();\r\n\t    };\r\n\t    GambleController.prototype.outroFinished = function () {\r\n\t        this.emit(GambleController.OutroFinished);\r\n\t    };\r\n\t    GambleController.StartReceived = \"eventStartReceived\";\r\n\t    GambleController.HalveReceived = \"eventHalveReceived\";\r\n\t    GambleController.SelectReceived = \"eventSelectReceived\";\r\n\t    GambleController.WinCalculationFinished = \"eventWinCalculationFinished\";\r\n\t    GambleController.AllWinsFinished = \"eventAllWinsFinished\";\r\n\t    GambleController.Lose = \"eventLose\";\r\n\t    GambleController.IntroFinished = \"eventIntroFinished\";\r\n\t    GambleController.OutroFinished = \"eventOutroFinished\";\r\n\t    GambleController = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Controller)\r\n\t    ], GambleController);\r\n\t    return GambleController;\r\n\t}(Controller_1.Controller));\r\n\texports.GambleController = GambleController;\r\n\n\n/***/ },\n/* 87 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Controller = (function (_super) {\r\n\t    __extends(Controller, _super);\r\n\t    function Controller() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Controller.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    return Controller;\r\n\t}(PIXI.utils.EventEmitter));\r\n\texports.Controller = Controller;\r\n\n\n/***/ },\n/* 88 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar MessageManager_1 = __webpack_require__(44);\r\n\tvar GambleModel = (function () {\r\n\t    function GambleModel(controller) {\r\n\t        this.controller = controller;\r\n\t    }\r\n\t    GambleModel.prototype.start = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        GameManager_1.GameManager.gameClient.start(neo_games_1.Communication.Game.GameModules.Gamble).then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.startReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    GambleModel.prototype.select = function (color) {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        GameManager_1.GameManager.gameClient.gambleSelect(color).then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.selectReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    GambleModel.prototype.halve = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        DataManager_1.DataManager.controlAutoplay();\r\n\t        GameManager_1.GameManager.gameClient.gambleHalve(neo_games_1.Communication.Game.GameModules.Gamble).then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.halveReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    GambleModel.prototype.startReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            this.controller.startReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    GambleModel.prototype.selectReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            this.controller.selectReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    GambleModel.prototype.halveReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            this.controller.halveReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    return GambleModel;\r\n\t}());\r\n\texports.GambleModel = GambleModel;\r\n\n\n/***/ },\n/* 89 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ContainerElement_1 = __webpack_require__(90);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar AmbientBackground_1 = __webpack_require__(61);\r\n\tvar GambleView = (function (_super) {\r\n\t    __extends(GambleView, _super);\r\n\t    function GambleView() {\r\n\t        _super.call(this);\r\n\t        this._revealTimer = FrameTimer_1.CreateFrameTimer(\"revealTimer\");\r\n\t        this._revealTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.reveal.bind(this));\r\n\t        this._revealBackTimer = FrameTimer_1.CreateFrameTimer(\"revealTimer\");\r\n\t        this._revealBackTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.revealBack.bind(this));\r\n\t        this._winTimer = FrameTimer_1.CreateFrameTimer(\"revealTimer\");\r\n\t        this._winTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.win.bind(this));\r\n\t        this._loseTimer = FrameTimer_1.CreateFrameTimer(\"revealTimer\");\r\n\t        this._loseTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.lose.bind(this));\r\n\t        this._introDelayTimer = FrameTimer_1.CreateFrameTimer(\"introDelayTimer\");\r\n\t        this._introDelayTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.introDelayed.bind(this));\r\n\t        this._introSoundTimer = FrameTimer_1.CreateFrameTimer(\"introSoundTimer\");\r\n\t        this._introSoundTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.introSoundStart.bind(this));\r\n\t        this._outroDelayTimer = FrameTimer_1.CreateFrameTimer(\"revealTimer\");\r\n\t        this._outroDelayTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.outroDelayed.bind(this));\r\n\t    }\r\n\t    GambleView.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t    };\r\n\t    GambleView.prototype.initReceived = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._gambleControls = document.getElementById(\"gamble\");\r\n\t        if (this._gambleControls == null) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no gamble controlls\");\r\n\t            }\r\n\t        }\r\n\t        this._gambleActualCard = document.getElementById(\"gambleActualCard\");\r\n\t        if (this._gambleActualCard == null) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no gambleActualCard\");\r\n\t            }\r\n\t        }\r\n\t        this._gambleCardBack = document.getElementById(\"gambleCardBack\");\r\n\t        if (this._gambleCardBack == null) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no gambleCardBack\");\r\n\t            }\r\n\t        }\r\n\t        this._gambleWin = document.getElementById(\"gambleWin\");\r\n\t        if (this._gambleWin == null) {\r\n\t            this._gambleWin = document.getElementById(\"winBox\");\r\n\t            if (this._gambleWin == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no gambleWin\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._gambleWin2 = document.getElementById(\"winBox2\");\r\n\t        if (this._gambleWin2 == null) {\r\n\t            if (this._gambleWin2 == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no _gambleWin2\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._gambleRedBtn = document.getElementById(\"gambleRedBtn\");\r\n\t        this._gambleBlackBtn = document.getElementById(\"gambleBlackBtn\");\r\n\t        if (this._gambleRedBtn != null && this._gambleBlackBtn != null) {\r\n\t            this._gambleRedBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.Over, this.onOver.bind(this));\r\n\t            this._gambleRedBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.TouchStart, this.onOver.bind(this));\r\n\t            this._gambleRedBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.Out, this.onOut.bind(this));\r\n\t            this._gambleRedBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.TouchEnd, this.onOut.bind(this));\r\n\t            this._gambleBlackBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.Over, this.onOver.bind(this));\r\n\t            this._gambleBlackBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.TouchStart, this.onOver.bind(this));\r\n\t            this._gambleBlackBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.Out, this.onOut.bind(this));\r\n\t            this._gambleBlackBtn.addEventListener(HtmlContainerElement_1.HtmlContainerElement.TouchEnd, this.onOut.bind(this));\r\n\t        }\r\n\t        this._previousCards = [];\r\n\t        for (var i = 0; i < 5; i++) {\r\n\t            var card = document.getElementById(\"previousCard\" + i);\r\n\t            if (card != null) {\r\n\t                this._previousCards.push(card);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.initIntro = function () {\r\n\t        this.previousCards();\r\n\t        if (this._gambleControls != null && this._gambleControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._gambleControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            this._gambleControls.style.display = \"block\";\r\n\t        }\r\n\t        PlayList_1.PlayList.loop(\"SND_GambleLoop\");\r\n\t        AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"gambleBg\", 0);\r\n\t    };\r\n\t    GambleView.prototype.onOver = function () {\r\n\t        if (this._gambleRedBtn != null && !this._gambleRedBtn.classList.contains(\"_hover\")) {\r\n\t            this._gambleRedBtn.classList.add(\"_hover\");\r\n\t        }\r\n\t        if (this._gambleBlackBtn != null && !this._gambleBlackBtn.classList.contains(\"_hover\")) {\r\n\t            this._gambleBlackBtn.classList.add(\"_hover\");\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.onOut = function () {\r\n\t        if (this._gambleRedBtn != null && this._gambleRedBtn.classList.contains(\"_hover\")) {\r\n\t            this._gambleRedBtn.classList.remove(\"_hover\");\r\n\t        }\r\n\t        if (this._gambleBlackBtn != null && this._gambleBlackBtn.classList.contains(\"_hover\")) {\r\n\t            this._gambleBlackBtn.classList.remove(\"_hover\");\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.startReceived = function () {\r\n\t        this.previousCards();\r\n\t    };\r\n\t    GambleView.prototype.selectReceived = function () {\r\n\t        if (GameManager_1.GameManager.gambleResponse.currentCard != null) {\r\n\t            if (this._gambleActualCard != null && this._gambleCardBack != null) {\r\n\t                this._gambleCardBack.classList.remove(\"_CA\");\r\n\t                this._gambleCardBack.classList.remove(\"_DA\");\r\n\t                this._gambleCardBack.classList.remove(\"_HA\");\r\n\t                this._gambleCardBack.classList.remove(\"_SA\");\r\n\t                this._gambleCardBack.classList.remove(\"_JR\");\r\n\t                this._gambleCardBack.classList.add(\"_\" + GameManager_1.GameManager.gambleResponse.currentCard);\r\n\t                this._gambleActualCard.classList.add(\"_reveal\");\r\n\t                if (GameManager_1.GameManager.gambleResponse != null && GameManager_1.GameManager.gambleResponse.currentWin > 0) {\r\n\t                    this._revealTimer.start(30);\r\n\t                }\r\n\t                else {\r\n\t                    this._revealTimer.start(60);\r\n\t                }\r\n\t                PlayList_1.PlayList.play(\"SND_GambleDraw\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.previousCards = function () {\r\n\t        if (this._previousCards != null && GameManager_1.GameManager.gambleResponse.previousCards != null) {\r\n\t            for (var i = 0; i < GameManager_1.GameManager.gambleResponse.previousCards.length; i++) {\r\n\t                var card = this._previousCards[i];\r\n\t                if (card != null) {\r\n\t                    card.classList.remove(\"_CA\");\r\n\t                    card.classList.remove(\"_DA\");\r\n\t                    card.classList.remove(\"_HA\");\r\n\t                    card.classList.remove(\"_SA\");\r\n\t                    card.classList.remove(\"_JR\");\r\n\t                    if (GameManager_1.GameManager.gambleResponse.previousCards[i] != \"XX\") {\r\n\t                        card.classList.add(\"_\" + GameManager_1.GameManager.gambleResponse.previousCards[i]);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.reAnimate = function (color) {\r\n\t        if (this._gambleActualCard != null && this._gambleActualCard.classList.contains(\"_reveal\")) {\r\n\t            this._actualColor = color;\r\n\t            this._gambleActualCard.classList.remove(\"_reveal\");\r\n\t            PlayList_1.PlayList.play(\"SND_GambleDraw\");\r\n\t            this._revealBackTimer.start(30);\r\n\t            return false;\r\n\t        }\r\n\t        else {\r\n\t            return true;\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.disabled = function () {\r\n\t        if (this._gambleControls != null && !this._gambleControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._gambleControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.intro = function () {\r\n\t        this._introDelayTimer.start(1);\r\n\t        if (this._gambleControls != null) {\r\n\t            this._gambleControls.style.display = \"block\";\r\n\t        }\r\n\t        AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"gambleBg\", 100);\r\n\t    };\r\n\t    GambleView.prototype.introDelayed = function () {\r\n\t        this._introDelayTimer.stop();\r\n\t        if (this._gambleControls != null && this._gambleControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._gambleControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_transition\");\r\n\t        this._introSoundTimer.start(30);\r\n\t    };\r\n\t    GambleView.prototype.introSoundStart = function () {\r\n\t        this._introSoundTimer.stop();\r\n\t        PlayList_1.PlayList.stop(\"SND_BaseLoop\");\r\n\t        PlayList_1.PlayList.loop(\"SND_GambleLoop\");\r\n\t        this._controller.introFinished();\r\n\t    };\r\n\t    GambleView.prototype.outro = function () {\r\n\t        this._outroDelayTimer.start(30);\r\n\t        if (this._gambleControls != null && !this._gambleControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._gambleControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_transition\");\r\n\t        PlayList_1.PlayList.stop(\"SND_GambleLoop\");\r\n\t        PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t        AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"base\", 90);\r\n\t    };\r\n\t    GambleView.prototype.outroDelayed = function () {\r\n\t        this._outroDelayTimer.stop();\r\n\t        if (this._gambleControls != null) {\r\n\t            this._gambleControls.style.display = \"none\";\r\n\t        }\r\n\t        this._controller.outroFinished();\r\n\t    };\r\n\t    GambleView.prototype.reveal = function () {\r\n\t        this._revealTimer.stop();\r\n\t        this.previousCards();\r\n\t        this._controller.winCalculationFinished();\r\n\t        if (GameManager_1.GameManager.gambleResponse != null && GameManager_1.GameManager.gambleResponse.currentWin > 0) {\r\n\t            this._gambleActualCard.classList.remove(\"_reveal\");\r\n\t            PlayList_1.PlayList.play(\"SND_GambleWin\");\r\n\t            if (this._gambleWin != null && !this._gambleWin.classList.contains(\"winAnimation\")) {\r\n\t                this._gambleWin.classList.add(\"winAnimation\");\r\n\t            }\r\n\t            if (this._gambleWin2 != null && !this._gambleWin2.classList.contains(\"winAnimation\")) {\r\n\t                this._gambleWin2.classList.add(\"winAnimation\");\r\n\t            }\r\n\t            this._winTimer.start(15);\r\n\t        }\r\n\t        else {\r\n\t            this._gambleActualCard.classList.remove(\"_reveal\");\r\n\t            this._revealBackTimer.start(30);\r\n\t            this._loseTimer.start(30);\r\n\t        }\r\n\t    };\r\n\t    GambleView.prototype.revealBack = function () {\r\n\t        this.onOut();\r\n\t        this._revealBackTimer.stop();\r\n\t    };\r\n\t    GambleView.prototype.win = function () {\r\n\t        this._winTimer.stop();\r\n\t        this._revealBackTimer.start(5);\r\n\t        if (this._gambleWin != null && this._gambleWin.classList.contains(\"winAnimation\")) {\r\n\t            this._gambleWin.classList.remove(\"winAnimation\");\r\n\t        }\r\n\t        if (this._gambleWin2 != null && this._gambleWin2.classList.contains(\"winAnimation\")) {\r\n\t            this._gambleWin2.classList.remove(\"winAnimation\");\r\n\t        }\r\n\t        this._controller.allWinsFinished();\r\n\t    };\r\n\t    GambleView.prototype.lose = function () {\r\n\t        this._loseTimer.stop();\r\n\t        this._controller.lose();\r\n\t    };\r\n\t    GambleView = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], GambleView);\r\n\t    return GambleView;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.GambleView = GambleView;\r\n\n\n/***/ },\n/* 90 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar StyleManager_1 = __webpack_require__(18);\r\n\tvar CanvasManager_1 = __webpack_require__(66);\r\n\tvar HtmlManager_1 = __webpack_require__(70);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar Attributes_1 = __webpack_require__(19);\r\n\tvar ContainerElement = (function (_super) {\r\n\t    __extends(ContainerElement, _super);\r\n\t    function ContainerElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    ContainerElement.prototype.internalDestroy = function (options) {\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs.hasOwnProperty(key)) {\r\n\t                    if (this.childs[key] instanceof PIXI.DisplayObject) {\r\n\t                        this.childs[key].destroy(options);\r\n\t                    }\r\n\t                    this.childs[key] = null;\r\n\t                }\r\n\t            }\r\n\t            this.childs = null;\r\n\t        }\r\n\t    };\r\n\t    ContainerElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(ContainerElementAttributes.STYLE)) {\r\n\t            this.style = StyleManager_1.StyleManager.Styles[node.getAttribute(ContainerElementAttributes.STYLE)];\r\n\t            if (this.style != null) {\r\n\t                if (this.childs == null) {\r\n\t                    this.childs = CanvasManager_1.CanvasManager.parseElements(this.style.node, this);\r\n\t                    HtmlManager_1.HtmlManager.parseElements(this.style.node, null);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no style with name \" + node.getAttribute(ContainerElementAttributes.STYLE));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (this.childs == null) {\r\n\t                this.childs = CanvasManager_1.CanvasManager.parseElements(node, this);\r\n\t                HtmlManager_1.HtmlManager.parseElements(node, null);\r\n\t            }\r\n\t        }\r\n\t        if (this.childs == null) {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING container element with name \" + node.nodeName + \" has no children\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ContainerElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(ContainerElementAttributes.TINT)) {\r\n\t            this.setTint(parseInt(node.getAttribute(ContainerElementAttributes.TINT), 16));\r\n\t        }\r\n\t        this.runTintTween(node);\r\n\t        var child = node.firstElementChild;\r\n\t        while (child) {\r\n\t            if (child.tagName) {\r\n\t                if (this.childs[child.tagName]) {\r\n\t                    this.childs[child.tagName].updateByNode(child);\r\n\t                }\r\n\t            }\r\n\t            child = child.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    ContainerElement.prototype.setTint = function (tintColor) {\r\n\t        if (this._tint === tintColor || isNaN(tintColor)) {\r\n\t            return;\r\n\t        }\r\n\t        this._tint = tintColor;\r\n\t        for (var child in this.childs) {\r\n\t            if (typeof this.childs[child].tint === \"number\") {\r\n\t                this.childs[child].tint = tintColor;\r\n\t            }\r\n\t            else if (typeof this.childs[child].setTint === \"function\") {\r\n\t                this.childs[child].setTint(tintColor);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(ContainerElement.prototype, \"tint\", {\r\n\t        get: function () {\r\n\t            return this._tint;\r\n\t        },\r\n\t        set: function (tintColor) {\r\n\t            this.setTint(tintColor);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ContainerElement.prototype.runTintTween = function (node) {\r\n\t        if (!node.hasAttribute(ContainerElementAttributes.TINT_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"tint\");\r\n\t        var tintTween;\r\n\t        var tintTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, ContainerElementAttributes.TINT_TWEEN_POSITION, null);\r\n\t        if (tintTweenPosition == ContainerElementAttributes.TINT_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            tintTween = node\r\n\t                .getAttribute(ContainerElementAttributes.TINT_TWEEN)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value, 16); });\r\n\t            if (tintTween.length) {\r\n\t                tintTween[0] = this.tint;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            tintTween = node\r\n\t                .getAttribute(ContainerElementAttributes.TINT_TWEEN)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value, 16); });\r\n\t        }\r\n\t        var tweenValues = tintTween || [];\r\n\t        var tween = \"tint\";\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, ContainerElementAttributes.TINT_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, ContainerElementAttributes.TINT_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(ContainerElementAttributes.TINT_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(ContainerElementAttributes.TINT_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, ContainerElementAttributes.TINT_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(ContainerElementAttributes.TINT_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(ContainerElementAttributes.TINT_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.colorTween(this, { tween: tween, tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    ContainerElement.prototype.clone = function () {\r\n\t        var element = new ContainerElement();\r\n\t        element.style = this.style;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.visible = this.visible;\r\n\t        element.name = this.name;\r\n\t        element.childs = {};\r\n\t        element.removeChildren();\r\n\t        for (var key in this.childs) {\r\n\t            element.childs[key] = this.childs[key].clone();\r\n\t            element.addChild(element.childs[key]);\r\n\t        }\r\n\t        if (this.maskSprite != null) {\r\n\t            var elementMask = new PIXI.Sprite(this.maskSprite.texture);\r\n\t            elementMask.position.x = this.maskSprite.position.x;\r\n\t            elementMask.position.y = this.maskSprite.position.y;\r\n\t            element.maskSprite = elementMask;\r\n\t            element.addChild(elementMask);\r\n\t            element.mask = elementMask;\r\n\t        }\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ContainerElement);\r\n\t    return ContainerElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.ContainerElement = ContainerElement;\r\n\tvar ContainerElementAttributes = {\r\n\t    DEBUG: \"Debug\",\r\n\t    ROTATION: \"Rotation\",\r\n\t    STYLE: \"Style\",\r\n\t    TINT: \"Tint\",\r\n\t    TINT_TWEEN: \"TintTween\",\r\n\t    TINT_TWEEN_EASE: \"TintTweenTease\",\r\n\t    TINT_TWEEN_DURATION: \"TintTweenDuration\",\r\n\t    TINT_TWEEN_DELAY: \"TintTweenDelay\",\r\n\t    TINT_TWEEN_POSITION: \"TintTweenPosition\",\r\n\t    TINT_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    TINT_TWEEN_LOOP: \"TintTweenLoop\",\r\n\t    TINT_TWEEN_KEY_TIMES: \"TintTweenKeyTimes\",\r\n\t};\r\n\n\n/***/ },\n/* 91 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar BaseActions_1 = __webpack_require__(46);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar Paytable_1 = __webpack_require__(51);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar GameActions_1 = __webpack_require__(82);\r\n\tvar BaseController_1 = __webpack_require__(92);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar LimitDialog_1 = __webpack_require__(54);\r\n\tvar ResponsibleDialog1_1 = __webpack_require__(43);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar FreeRoundBonusIcon_1 = __webpack_require__(42);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar DesktopBaseUserControls = (function (_super) {\r\n\t    __extends(DesktopBaseUserControls, _super);\r\n\t    function DesktopBaseUserControls() {\r\n\t        _super.call(this, \"base\");\r\n\t        this._wasCalclulated = true;\r\n\t        this._unColectedWin = 0;\r\n\t        this._machineStopped = true;\r\n\t        this.longIntro = false;\r\n\t    }\r\n\t    DesktopBaseUserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.registerActions();\r\n\t        this._afterWinDelay = FrameTimer_1.CreateFrameTimer(\"afterWinDelay\");\r\n\t        this._afterWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._autoplayDelay = FrameTimer_1.CreateFrameTimer(\"autoplayDelay\");\r\n\t        this._autoplayDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\r\n\t        this._unColectedWinDelay = FrameTimer_1.CreateFrameTimer(\"unColectedWinDelay\");\r\n\t        this._unColectedWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.unColectedWinDelay.bind(this));\r\n\t        this._userControls = document.getElementById(\"userControls\");\r\n\t        this._fsUserControls = document.getElementById(\"freespinsUserControls\");\r\n\t        this._prepareNewGameRound = FrameTimer_1.CreateFrameTimer(\"prepareNewGameRound\");\r\n\t        this._prepareNewGameRound.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._userControlsShowDelay = FrameTimer_1.CreateFrameTimer(\"userControlsShowDelay\");\r\n\t        this._userControlsShowDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.userControlsShowDelay.bind(this));\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(BaseController_1.BaseController.SpinReceived, this.spinReceived.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.MachineStopped, this.machineStopped.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.OutroFinished, this.outroFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.QuickWinCalculationFinished, this.quickWinCalculationFinished.bind(this));\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[BaseActions_1.BaseActions.ActionAutoplay] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBaseCollect] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBetPlus] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBetMinus] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionMaxBet] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSpin] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.initReceived = function () {\r\n\t        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\t        _super.prototype.initReceived.call(this);\r\n\t        this._controller.initReceived();\r\n\t        this._paytable = new Paytable_1.Paytable();\r\n\t        this._paytable.initialize();\r\n\t        if (GameManager_1.GameManager.gameResponse != null) {\r\n\t            if (!(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWin, GameManager_1.GameManager.gameResponse.totalWin.toString());\r\n\t            }\r\n\t        }\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t                if (this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (!this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.collectReceived = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t        neo_games_1.Platforms.Platforms.roundEnded({\r\n\t            id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t            win: this._unColectedWin,\r\n\t            balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t        });\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: GameManager_1.GameManager.gameResponse.balance.real });\r\n\t        _super.prototype.collectReceived.call(this);\r\n\t        this._wasCalclulated = true;\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        this.prepareNewGameRound();\r\n\t        if (AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin && this._unColectedWin > 0) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, this._unColectedWin.toString());\r\n\t            this.changeWinBox(true);\r\n\t        }\r\n\t        else {\r\n\t            if (!(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            }\r\n\t            this.changeWinBox();\r\n\t        }\r\n\t        this._unColectedWinDelay.stop();\r\n\t        this._unColectedWin = 0;\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            return;\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.restoreGameRound = function (collect) {\r\n\t        if (collect === void 0) { collect = false; }\r\n\t        _super.prototype.collectReceived.call(this);\r\n\t        this.changeWinBox(collect);\r\n\t        FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        if (this._unColectedWin == 0) {\r\n\t            this._controller.resetWinAnimator();\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.spinReceived = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.frbSpin();\r\n\t        if (DataManager_1.DataManager.quickspinEnabled()) {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataRoundId);\r\n\t            this._controller.stop();\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataRoundId);\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive() || ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            return;\r\n\t        }\r\n\t        if (action === GameActions_1.GameActions.ActionSpinOrStop) {\r\n\t            if (this.actions.getActionState(BaseActions_1.BaseActions.ActionSpin)) {\r\n\t                action = BaseActions_1.BaseActions.ActionSpin;\r\n\t            }\r\n\t            else if (this.actions.getActionState(BaseActions_1.BaseActions.ActionSpinStop)) {\r\n\t                action = BaseActions_1.BaseActions.ActionSpinStop;\r\n\t            }\r\n\t            else {\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (this.actions.getActionState(action)) {\r\n\t            if (action === BaseActions_1.BaseActions.ActionBaseCollect) {\r\n\t                this.changeWinBox(true);\r\n\t            }\r\n\t            else {\r\n\t                this.changeWinBox();\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            _super.prototype.dispatchAction.call(this, action);\r\n\t            switch (action) {\r\n\t                case BaseActions_1.BaseActions.ActionSpin:\r\n\t                    this.spin();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionSpinStop:\r\n\t                    this.stop();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionAutoplay:\r\n\t                    this.autoplay();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionAutoplayStop:\r\n\t                    this.autoplayStop();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionMaxBet:\r\n\t                    this.changeBet(false, true, false);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBetPlus:\r\n\t                    this.changeBet(false, false, false);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBetMinus:\r\n\t                    this.changeBet(true, false, false);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBaseCollect:\r\n\t                    this.collect();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.collect = function () {\r\n\t        if (!this._wasCalclulated) {\r\n\t            if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0) {\r\n\t                neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t            }\r\n\t        }\r\n\t        _super.prototype.collect.call(this);\r\n\t        ModuleManager_1.ModuleManager.disableGamble();\r\n\t        this.disable();\r\n\t        this.playCollectSound();\r\n\t        this._controller.collect();\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        GameManager_1.GameManager.collect(GameModules.Base);\r\n\t        if (!(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, !AppContext_1.AppContext.gameDefinition.Gamble ? \"0\" : this._unColectedWin.toString());\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.unColectedWinDelay = function () {\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.spin = function () {\r\n\t        this._machineStopped = false;\r\n\t        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.hasNewActiveOffer()) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0 && !DataManager_1.DataManager.GameRoundClosed) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            else {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (this.checkJackpotMiniGame()) {\r\n\t            return;\r\n\t        }\r\n\t        if (ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect &&\r\n\t            !(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            else {\r\n\t                GameManager_1.GameManager.canExit();\r\n\t                this.changeWinBox();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (BetHigherThanMinDialog_1.BetHigherThanMinDialog.canOpenDialog()) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            BetHigherThanMinDialog_1.BetHigherThanMinDialog.openDialog();\r\n\t            return;\r\n\t        }\r\n\t        if (Paytable_1.Paytable.shouldOpen(true, true)) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            else {\r\n\t                Paytable_1.Paytable.show();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (!DataManager_1.DataManager.Autoplay &&\r\n\t            !this._wasCalclulated &&\r\n\t            !DataManager_1.DataManager.GameRoundClosed &&\r\n\t            AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n\t            this.changeWinBox(true);\r\n\t            this.collect();\r\n\t            return;\r\n\t        }\r\n\t        else {\r\n\t            this.changeWinBox();\r\n\t            if (!this._wasCalclulated) {\r\n\t                if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0) {\r\n\t                    neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gameResponse.totalWin > 0 && !DataManager_1.DataManager.GameRoundClosed) {\r\n\t            var balanceTotal = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal));\r\n\t            var balanceAfter = parseFloat(neo_common_1.NumberUtils.add(GameManager_1.GameManager.gameResponse.totalWin, balanceTotal));\r\n\t            neo_games_1.Platforms.Platforms.roundEnded({\r\n\t                id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t                win: GameManager_1.GameManager.gameResponse.totalWin,\r\n\t                balanceAfter: balanceAfter,\r\n\t                inSpin: true,\r\n\t            });\r\n\t        }\r\n\t        if (!neo_games_1.Platforms.Platforms.canSpinOnCollect) {\r\n\t            this.autoplayStop();\r\n\t            this.changeWinBox(true);\r\n\t            this.collect();\r\n\t            return;\r\n\t        }\r\n\t        if (!BalanceManager_1.BalanceManager.hasCredit(false, true)) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            ModuleManager_1.ModuleManager.disableGamble();\r\n\t            this.prepareNewGameRound();\r\n\t            return;\r\n\t        }\r\n\t        DataManager_1.DataManager.Collectable = false;\r\n\t        ModuleManager_1.ModuleManager.disableGamble();\r\n\t        this.actions.disableAllActions();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            if (!DataManager_1.DataManager.AutoplayStarted &&\r\n\t                GameManager_1.GameManager.baseResponse != null &&\r\n\t                GameManager_1.GameManager.baseResponse.totalWin != null &&\r\n\t                GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t                DataManager_1.DataManager.updateLossLimit(GameManager_1.GameManager.baseResponse.totalWin);\r\n\t            }\r\n\t            DataManager_1.DataManager.updateLossLimit();\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionAutoplayStop, DataManager_1.DataManager.autoplayEnabled());\r\n\t        }\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this.playCollectSound();\r\n\t        DataManager_1.DataManager.updateTotalGain(true);\r\n\t        BalanceManager_1.BalanceManager.fixBalance();\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed || (FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        }\r\n\t        this._controller.spin();\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        this._wasCalclulated = false;\r\n\t        neo_games_1.Platforms.Platforms.roundStarted({\r\n\t            totalBet: BetManager_1.BetManager.Bet,\r\n\t            freeRound: FreeRoundBonus_1.FreeRoundBonus.inFrb,\r\n\t            userAction: DataManager_1.DataManager.getTrustedUserAction(BaseActions_1.BaseActions.ActionSpin),\r\n\t        });\r\n\t        neo_games_1.Platforms.Platforms.spinStarted();\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)) });\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.stop = function () {\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        DataManager_1.DataManager.quickspinStopped();\r\n\t        this._controller.stop();\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.autoplayDelayed = function () {\r\n\t        this._autoplayDelay.stop();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.autoplay = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.checkJackpotMiniGame()) {\r\n\t            return;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.AutoplayCount === \"∞\") {\r\n\t            DataManager_1.DataManager.Autoplay = true;\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t            this.spin();\r\n\t        }\r\n\t        else {\r\n\t            DataManager_1.DataManager.AutoplayCount = (parseInt(DataManager_1.DataManager.AutoplayCount) - 1).toString();\r\n\t            if (parseInt(DataManager_1.DataManager.AutoplayCount) >= 0) {\r\n\t                DataManager_1.DataManager.Autoplay = true;\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t                this.spin();\r\n\t            }\r\n\t            else {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.autoplayStop = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        neo_games_1.Platforms.Platforms.autoplayStop();\r\n\t        if (this._machineStopped) {\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t                neo_games_1.Platforms.Platforms.roundEnded();\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                    FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t                    ModuleManager_1.ModuleManager.disableBase();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionAutoplayStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionAutoplayStop, false);\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.changeBet = function (decrease, max, cycle) {\r\n\t        if (decrease === void 0) { decrease = false; }\r\n\t        if (max === void 0) { max = false; }\r\n\t        if (cycle === void 0) { cycle = false; }\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this._unColectedWin = 0;\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            this.changeWinBox();\r\n\t            this.collect();\r\n\t        }\r\n\t        else {\r\n\t            this._controller.collect();\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal);\r\n\t            LimitDialog_1.LimitDialog.closeDialog();\r\n\t        }\r\n\t        BetManager_1.BetManager.changeBet(decrease, max, cycle);\r\n\t        this._paytable.updateDataValues();\r\n\t        if (BetManager_1.BetManager.minBet) {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetMinus, false);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetMinus, false);\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t        }\r\n\t        else if (BetManager_1.BetManager.maxBet) {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetPlus, false);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetPlus, false);\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.ShowMaxBetMessage && max) {\r\n\t            var message = AppContext_1.AppContext.gameConfiguration.MaxButton\r\n\t                ? Languages_1.Languages.getRid(\"MAX_BET_MESSAGE_PL\")\r\n\t                : Languages_1.Languages.getRid(\"MAX_BET_MESSAGE\");\r\n\t            GameManager_1.GameManager.openConfirmationDialog(neo_games_1.Communication.Game.GameModules.Base, message);\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.machineStopped = function (isHighWin) {\r\n\t        this._machineStopped = true;\r\n\t        neo_games_1.Platforms.Platforms.spinEnded();\r\n\t        DataManager_1.DataManager.stopAutoplayIfLossLimit();\r\n\t        DataManager_1.DataManager.stopAutoplayIfWinLimit();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t            neo_games_1.Platforms.Platforms.roundEnded({\r\n\t                id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t                win: GameManager_1.GameManager.gameResponse.totalWin,\r\n\t                balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t            });\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        this._unColectedWinDelay.stop();\r\n\t        this._unColectedWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.pickEnabled()) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            if (DataManager_1.DataManager.AutoplayCount === 0 + \"\") {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t            }\r\n\t        }\r\n\t        if (GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            this._wasCalclulated = true;\r\n\t            DataManager_1.DataManager.Collectable = true;\r\n\t        }\r\n\t        else {\r\n\t            this._wasCalclulated = false;\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t        this._afterWinDelay.stop();\r\n\t        if (isHighWin) {\r\n\t            this._afterWinDelay.start(80);\r\n\t        }\r\n\t        else {\r\n\t            if (GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t                this._afterWinDelay.start(30);\r\n\t            }\r\n\t            else {\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        if (DataManager_1.DataManager.Autoplay && GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            this._autoplayDelay.start(15);\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                this.disableAllActions();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed &&\r\n\t                GameManager_1.GameManager.baseResponse.totalWin > 0 &&\r\n\t                GameManager_1.GameManager.baseResponse.currentWin === 0) {\r\n\t                this._controller.resetWinAnimator();\r\n\t                this.collect();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                GameManager_1.GameManager.canExit();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.quickWinCalculationFinished = function () {\r\n\t        if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t        }\r\n\t        this._wasCalclulated = true;\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.winCalculationFinished = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            neo_games_1.Platforms.Platforms.roundEnded({\r\n\t                id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t                win: GameManager_1.GameManager.gameResponse.totalWin,\r\n\t                balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t            });\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.pickEnabled()) {\r\n\t            return;\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && !(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t            DataManager_1.DataManager.updateDataElements();\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        this.prepareNewGameRound();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            if (!ModuleManager_1.ModuleManager.gambleEnabled()) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t            }\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                this.disableAllActions();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableFrbExpiration();\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.allWinsFinished = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.enableFrbExpiration();\r\n\t        if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t        }\r\n\t        this._wasCalclulated = true;\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableFreespins();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.pickEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enablePick();\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        this.prepareNewGameRound();\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        if (DataManager_1.DataManager.Autoplay && this.actions.getActionState(BaseActions_1.BaseActions.ActionAutoplayStop)) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                this._controller.resetWinAnimator();\r\n\t                FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t                this._controller.resetWinAnimator();\r\n\t                this.collect();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.initIntro = function () {\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        this._controller.initIntro();\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableFreespins();\r\n\t            this._controller.startConfigurator();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.pickEnabled()) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        this._unColectedWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        this._wasCalclulated = true;\r\n\t        this._unColectedWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        this.longIntro = long;\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal);\r\n\t            DataManager_1.DataManager.Collectable = true;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            this._controller.startConfigurator();\r\n\t        }\r\n\t        else {\r\n\t            this._controller.intro(long);\r\n\t        }\r\n\t        this._userControlsShowDelay.start(10);\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.introFinished = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            neo_games_1.Platforms.Platforms.roundEnded();\r\n\t        }\r\n\t        if (!ResponsibleDialog1_1.ResponsibleDialog1.opened) {\r\n\t            DataManager_1.DataManager.Autoplay = DataManager_1.DataManager.AutoplayAfterGamble;\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        this._prepareNewGameRound.start(30);\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        this._userControlsShowDelay.start(10);\r\n\t        if (this.longIntro &&\r\n\t            DataManager_1.DataManager.GameRoundClosed &&\r\n\t            (FreeRoundBonus_1.FreeRoundBonus.id != null || FreeRoundBonus_1.FreeRoundBonus.otherOfferes.length > 0)) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t            this.longIntro = false;\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this._prepareNewGameRound.stop();\r\n\t            FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            return;\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this._prepareNewGameRound.stop();\r\n\t                ModuleManager_1.ModuleManager.collect(GameModules.Base);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.outro = function () {\r\n\t        if (!this._wasCalclulated) {\r\n\t            if (GameManager_1.GameManager.gameResponse != null && GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.gameResponse.totalWin);\r\n\t            }\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        this._autoplayDelay.stop();\r\n\t        DataManager_1.DataManager.AutoplayAfterGamble = DataManager_1.DataManager.Autoplay;\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            DataManager_1.DataManager.AutoplayAfterGamble = false;\r\n\t            if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (this._fsUserControls != null &&\r\n\t                !this._fsUserControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._fsUserControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (this._userControls_supreme != null &&\r\n\t                !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        else if (ModuleManager_1.ModuleManager.introModule(GameModules.Pick)) {\r\n\t            ModuleManager_1.ModuleManager.introModule(GameModules.Pick);\r\n\t        }\r\n\t        this._controller.outro();\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.setAutoplayAfterFeature = function (value) {\r\n\t        DataManager_1.DataManager.AutoplayAfterGamble = value;\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.outroFinished = function () {\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (this._userControls_supreme != null &&\r\n\t                !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            ModuleManager_1.ModuleManager.introModule(GameModules.Freespins);\r\n\t        }\r\n\t        else if (ModuleManager_1.ModuleManager.pickActive()) {\r\n\t        }\r\n\t        else {\r\n\t            ModuleManager_1.ModuleManager.introModule(GameModules.Gamble);\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.prepareNewGameRound = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.prepareJackpotMiniGame()) {\r\n\t            return;\r\n\t        }\r\n\t        if (ResponsibleDialog1_1.ResponsibleDialog1.opened) {\r\n\t            return;\r\n\t        }\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.openDialog();\r\n\t        Paytable_1.Paytable.openAtStart(true);\r\n\t        if (BetHigherThanMinDialog_1.BetHigherThanMinDialog.canOpenDialog() && FreeRoundBonusDialog_1.FreeRoundBonusDialog.dialogActive()) {\r\n\t            return;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.limit();\r\n\t        }\r\n\t        else {\r\n\t            if (!DataManager_1.DataManager.Autoplay) {\r\n\t                this.actions.changeActionStates((_a = {},\r\n\t                    _a[BaseActions_1.BaseActions.ActionAutoplay] = (DataManager_1.DataManager.GameRoundClosed ||\r\n\t                        (FreeRoundBonus_1.FreeRoundBonus.inFrb &&\r\n\t                            FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\" &&\r\n\t                            !FreeRoundBonus_1.FreeRoundBonus.isLastFrb)) &&\r\n\t                        DataManager_1.DataManager.autoplayEnabled(),\r\n\t                    _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBaseCollect] = FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\"\r\n\t                        ? false\r\n\t                        : !DataManager_1.DataManager.GameRoundClosed,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBetPlus] = !BetManager_1.BetManager.maxBet,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBetMinus] = !BetManager_1.BetManager.minBet,\r\n\t                    _a[BaseActions_1.BaseActions.ActionMaxBet] = !ModuleManager_1.ModuleManager.gambleEnabled() &&\r\n\t                        !FreeRoundBonus_1.FreeRoundBonus.inFrb &&\r\n\t                        AppContext_1.AppContext.gameConfiguration.MaxBetEnabled,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSpin] = !FreeRoundBonus_1.FreeRoundBonus.isLastFrb,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                    _a\r\n\t                ));\r\n\t                if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                    neo_games_1.Platforms.Platforms.roundInit();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        var _a;\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.prepareJackpotMiniGame = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && Jackpot_1.Jackpot.hasMiniGame() && !FreeRoundBonus_1.FreeRoundBonus.inFrb) {\r\n\t            if (Jackpot_1.Jackpot.hasInitializedGame() && this._wasCalclulated) {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                this.resetWinAnimator();\r\n\t                this.disable();\r\n\t                FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t                Jackpot_1.Jackpot.startMiniGame();\r\n\t                return true;\r\n\t            }\r\n\t            else {\r\n\t                var self_1 = this;\r\n\t                if (this._wasCalclulated) {\r\n\t                    Jackpot_1.Jackpot.initMiniGame(true, function () {\r\n\t                        self_1.resetWinAnimator();\r\n\t                        self_1.disable();\r\n\t                        DataManager_1.DataManager.Autoplay = false;\r\n\t                        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t                    });\r\n\t                }\r\n\t                if (DataManager_1.DataManager.GameLimit) {\r\n\t                    DataManager_1.DataManager.Autoplay = false;\r\n\t                    this.limit();\r\n\t                }\r\n\t                if (Jackpot_1.Jackpot.waitForMiniGameInitialization()) {\r\n\t                    this.actions.disableAllActions();\r\n\t                    HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t                    return true;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.checkJackpotMiniGame = function () {\r\n\t        if (!Jackpot_1.Jackpot.hasMiniGame() || FreeRoundBonus_1.FreeRoundBonus.inFrb) {\r\n\t            return false;\r\n\t        }\r\n\t        if (Jackpot_1.Jackpot.hasInitializedGame() || Jackpot_1.Jackpot.waitForMiniGameInitialization()) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox();\r\n\t                this._wasCalclulated = true;\r\n\t                if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t                    this.collect();\r\n\t                }\r\n\t                else {\r\n\t                    this.playCollectSound();\r\n\t                    DataManager_1.DataManager.updateDataElements();\r\n\t                    this.prepareNewGameRound();\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t            return true;\r\n\t        }\r\n\t        else {\r\n\t            Jackpot_1.Jackpot.initMiniGame(false, null);\r\n\t            Jackpot_1.Jackpot.disableMiniGameAutostart();\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.limit = function () {\r\n\t        LimitDialog_1.LimitDialog.openDialog();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this.actions.changeActionStates((_a = {},\r\n\t                _a[BaseActions_1.BaseActions.ActionAutoplay] = DataManager_1.DataManager.autoplayEnabled(),\r\n\t                _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                _a[BaseActions_1.BaseActions.ActionBaseCollect] = false,\r\n\t                _a[BaseActions_1.BaseActions.ActionBetPlus] = !BetManager_1.BetManager.maxBet,\r\n\t                _a[BaseActions_1.BaseActions.ActionBetMinus] = !BetManager_1.BetManager.minBet,\r\n\t                _a[BaseActions_1.BaseActions.ActionMaxBet] = !FreeRoundBonus_1.FreeRoundBonus.inFrb && AppContext_1.AppContext.gameConfiguration.MaxBetEnabled,\r\n\t                _a[BaseActions_1.BaseActions.ActionSpin] = true,\r\n\t                _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                _a\r\n\t            ));\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionStates((_b = {},\r\n\t                _b[BaseActions_1.BaseActions.ActionAutoplay] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionBaseCollect] = true,\r\n\t                _b[BaseActions_1.BaseActions.ActionBetPlus] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionBetMinus] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionMaxBet] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionSpin] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                _b\r\n\t            ));\r\n\t        }\r\n\t        var _a, _b;\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.disable = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        this.actions.disableAllActions();\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.disableActiveIcon();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this._controller.disableBase();\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.disableAllActions = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.setActiveSceneInBasegame = function (id) { };\r\n\t    DesktopBaseUserControls.prototype.setSceneAnimations = function (sceneIndex) { };\r\n\t    DesktopBaseUserControls.prototype.updatePaytable = function () { };\r\n\t    DesktopBaseUserControls.prototype.userControlsShowDelay = function () {\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.resetWinAnimator = function () {\r\n\t        this._controller.resetWinAnimator();\r\n\t    };\r\n\t    DesktopBaseUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], DesktopBaseUserControls);\r\n\t    return DesktopBaseUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.DesktopBaseUserControls = DesktopBaseUserControls;\r\n\n\n/***/ },\n/* 92 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar BaseModel_1 = __webpack_require__(45);\r\n\tvar BaseView_1 = __webpack_require__(93);\r\n\tvar Controller_1 = __webpack_require__(87);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar BaseController = (function (_super) {\r\n\t    __extends(BaseController, _super);\r\n\t    function BaseController() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    BaseController.prototype.startInitialization = function (view) {\r\n\t        if (false) {\r\n\t            this.log(\"startInitialization\");\r\n\t        }\r\n\t        if (view instanceof BaseView_1.BaseView) {\r\n\t            this._view = view;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR view is not instance of BaseView\");\r\n\t            }\r\n\t        }\r\n\t        this._model = new BaseModel_1.BaseModel(this);\r\n\t    };\r\n\t    BaseController.prototype.start = function (id) {\r\n\t        this._model.start(id);\r\n\t    };\r\n\t    BaseController.prototype.disableLogo = function () {\r\n\t        this._view.disableLogo();\r\n\t    };\r\n\t    BaseController.prototype.initReceived = function () {\r\n\t        this._view.initReceived(this);\r\n\t    };\r\n\t    BaseController.prototype.initIntro = function () {\r\n\t        this._view.initIntro();\r\n\t    };\r\n\t    BaseController.prototype.collect = function () {\r\n\t        this._view.collect();\r\n\t    };\r\n\t    BaseController.prototype.spin = function () {\r\n\t        this._model.spin();\r\n\t        this._view.spin();\r\n\t    };\r\n\t    BaseController.prototype.stop = function () {\r\n\t        this._view.stop();\r\n\t    };\r\n\t    BaseController.prototype.end = function () {\r\n\t        this._model.end();\r\n\t    };\r\n\t    BaseController.prototype.startReceived = function () {\r\n\t        this.emit(BaseController.StartReceived, this._view.startReceived());\r\n\t    };\r\n\t    BaseController.prototype.endReceived = function () {\r\n\t        this._view.endReceived();\r\n\t        this.emit(BaseController.EndReceived);\r\n\t    };\r\n\t    BaseController.prototype.spinReceived = function () {\r\n\t        this._view.spinReceived();\r\n\t        this.emit(BaseController.SpinReceived);\r\n\t    };\r\n\t    BaseController.prototype.machineStopped = function (isHighWin) {\r\n\t        this.emit(BaseController.MachineStopped, isHighWin);\r\n\t    };\r\n\t    BaseController.prototype.quickWinCalculationFinished = function () {\r\n\t        this.emit(BaseController.QuickWinCalculationFinished);\r\n\t    };\r\n\t    BaseController.prototype.winCalculationFinished = function () {\r\n\t        this.emit(BaseController.WinCalculationFinished);\r\n\t    };\r\n\t    BaseController.prototype.allWinsFinished = function () {\r\n\t        this.emit(BaseController.AllWinsFinished);\r\n\t    };\r\n\t    BaseController.prototype.resetWinAnimator = function () {\r\n\t        this._view.resetWinAnimator();\r\n\t    };\r\n\t    BaseController.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        this._view.intro(long);\r\n\t    };\r\n\t    BaseController.prototype.introFinished = function () {\r\n\t        this.emit(BaseController.IntroFinished);\r\n\t    };\r\n\t    BaseController.prototype.outro = function () {\r\n\t        this._view.outro();\r\n\t    };\r\n\t    BaseController.prototype.outroFinished = function () {\r\n\t        this.emit(BaseController.OutroFinished);\r\n\t    };\r\n\t    BaseController.prototype.selectPayline = function () {\r\n\t        this._view.selectPayline();\r\n\t    };\r\n\t    BaseController.prototype.enable = function () {\r\n\t        this._view.enable();\r\n\t    };\r\n\t    BaseController.prototype.disable = function () {\r\n\t        this._view.disable();\r\n\t    };\r\n\t    BaseController.prototype.startConfigurator = function () {\r\n\t        this._view.startConfigurator();\r\n\t        this.emit(BaseController.ConfiguratorStart);\r\n\t    };\r\n\t    BaseController.prototype.disableBase = function () {\r\n\t        this._view.disableBase();\r\n\t    };\r\n\t    BaseController.prototype.toggleSounds = function (enable) {\r\n\t        this._view.toggleSounds(enable);\r\n\t    };\r\n\t    BaseController.SpinReceived = \"eventSpinReceived\";\r\n\t    BaseController.MachineStopped = \"eventMachineStopped\";\r\n\t    BaseController.WinCalculationFinished = \"eventWinCalculationFinished\";\r\n\t    BaseController.AllWinsFinished = \"eventAllWinsFinished\";\r\n\t    BaseController.OutroFinished = \"eventOutroFinished\";\r\n\t    BaseController.StartReceived = \"eventStartReceived\";\r\n\t    BaseController.EndReceived = \"eventEndReceived\";\r\n\t    BaseController.IntroFinished = \"eventIntroFinished\";\r\n\t    BaseController.QuickWinCalculationFinished = \"eventQuickWinCalculationFinished\";\r\n\t    BaseController.ConfiguratorStart = \"eventConfiguratorStart\";\r\n\t    BaseController.ConfiguratorContinue = \"eventConfiguratorContinue\";\r\n\t    BaseController = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Controller)\r\n\t    ], BaseController);\r\n\t    return BaseController;\r\n\t}(Controller_1.Controller));\r\n\texports.BaseController = BaseController;\r\n\n\n/***/ },\n/* 93 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Paylines_1 = __webpack_require__(94);\r\n\tvar PaylinesSelector_1 = __webpack_require__(105);\r\n\tvar Symbols_1 = __webpack_require__(106);\r\n\tvar WinAnimator_1 = __webpack_require__(108);\r\n\tvar Machine_1 = __webpack_require__(113);\r\n\tvar ContainerElement_1 = __webpack_require__(90);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar MinigameElement_1 = __webpack_require__(118);\r\n\tvar TeasingBonus_1 = __webpack_require__(119);\r\n\tvar SwitchElement_1 = __webpack_require__(97);\r\n\tvar TeasingComponent_1 = __webpack_require__(116);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar AmbientBackground_1 = __webpack_require__(61);\r\n\tvar BaseView = (function (_super) {\r\n\t    __extends(BaseView, _super);\r\n\t    function BaseView() {\r\n\t        _super.call(this);\r\n\t        this._wasFinished = false;\r\n\t        this._outroDelay = FrameTimer_1.CreateFrameTimer(\"outroDelay\");\r\n\t        this._outroDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.outroFinished.bind(this));\r\n\t        this._teasingBonus = new TeasingBonus_1.TeasingBonus();\r\n\t    }\r\n\t    BaseView.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof Paylines_1.Paylines) {\r\n\t                    this._paylines = this.childs[key];\r\n\t                }\r\n\t                if (this.childs[key] instanceof PaylinesSelector_1.PaylinesSelector) {\r\n\t                    this._paylinesSelector = this.childs[key];\r\n\t                }\r\n\t                if (this.childs[key] instanceof Symbols_1.Symbols) {\r\n\t                    this._symbols = this.childs[key];\r\n\t                    this.removeChild(this._symbols);\r\n\t                }\r\n\t                if (this.childs[key] instanceof Machine_1.Machine) {\r\n\t                    this._machine = this.childs[key];\r\n\t                }\r\n\t                if (this.childs[key] instanceof WinAnimator_1.WinAnimator) {\r\n\t                    this._winAnimator = this.childs[key];\r\n\t                }\r\n\t                if (this.childs[key] instanceof MinigameElement_1.MinigameElement) {\r\n\t                    this._minigame = this.childs[key];\r\n\t                }\r\n\t                if (key === \"TeasingComponent\" && this.childs[key] instanceof TeasingComponent_1.TeasingComponent) {\r\n\t                    this._teasingBonus = this.childs[key];\r\n\t                }\r\n\t                if (key === \"TeasingFront\" && this.childs[key] instanceof SwitchElement_1.SwitchElement) {\r\n\t                    if (this._teasingBonus != null) {\r\n\t                        this._teasingBonus.addElementInstance({ teasingFront: this.childs[key] });\r\n\t                    }\r\n\t                }\r\n\t                if (key === \"TeasingParticles\" && this.childs[key] instanceof SwitchElement_1.SwitchElement) {\r\n\t                    if (this._teasingBonus != null) {\r\n\t                        this._teasingBonus.addElementInstance({ teasingParticles: this.childs[key] });\r\n\t                    }\r\n\t                }\r\n\t                if (key === \"Transition\" && this.childs[key] instanceof SwitchElement_1.SwitchElement) {\r\n\t                    this._transition = this.childs[key];\r\n\t                }\r\n\t                if (key === \"WildContainer\" && this.childs[key] instanceof ContainerElement_1.ContainerElement) {\r\n\t                    this._wildContainer = this.childs[key];\r\n\t                }\r\n\t            }\r\n\t            if (false) {\r\n\t                if (this._paylines == null) {\r\n\t                    this.log(\"WARNING no paylines\");\r\n\t                }\r\n\t                if (this._symbols == null) {\r\n\t                    this.log(\"ERROR no symbols\");\r\n\t                }\r\n\t                if (this._machine == null) {\r\n\t                    this.log(\"ERROR no machine\");\r\n\t                }\r\n\t                if (this._winAnimator == null) {\r\n\t                    this.log(\"WARNING no winAnimator\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN)) {\r\n\t            this.transitionAlphaTween = node\r\n\t                .getAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseFloat(value); });\r\n\t        }\r\n\t        if (node.hasAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_KEY_TIMES)) {\r\n\t            this.transitionAlphaTweenKeyTimes = node\r\n\t                .getAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_KEY_TIMES)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseFloat(value); });\r\n\t        }\r\n\t        if (node.hasAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_EASE)) {\r\n\t            this.transitionAlphaTweenEase = node.getAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_EASE);\r\n\t        }\r\n\t        if (node.hasAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_DELAY)) {\r\n\t            this.transitionAlphaTweenDelay = parseInt(node.getAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_DELAY));\r\n\t        }\r\n\t        if (node.hasAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_DURATION)) {\r\n\t            this.transitionAlphaTweenDuration = parseInt(node.getAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_DURATION));\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.disableLogo = function () {\r\n\t        if (this.childs[\"Logo\"] != null) {\r\n\t            this.removeChild(this.childs[\"Logo\"]);\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.initReceived = function (controller) {\r\n\t        if (false) {\r\n\t            this.log(\"initReceived\");\r\n\t        }\r\n\t        this._controller = controller;\r\n\t        if (this._symbols != null) {\r\n\t            if (this._machine != null) {\r\n\t                if (GameManager_1.GameManager.baseResponse != null) {\r\n\t                    if (GameManager_1.GameManager.baseResponse.initData != null && GameManager_1.GameManager.baseResponse.initData.reels != null) {\r\n\t                        this._machine.on(Machine_1.Machine.ReelStopped, this.onReelStopped.bind(this));\r\n\t                        this._machine.on(Machine_1.Machine.MachineStopped, this.machineStopped.bind(this));\r\n\t                        this._machine.initialize(this._symbols, GameManager_1.GameManager.baseResponse.initData.reels);\r\n\t                        this._machine.addElementInstance({ teasing: [this._teasingBonus] });\r\n\t                    }\r\n\t                    if (GameManager_1.GameManager.baseResponse.screen != null &&\r\n\t                        GameManager_1.GameManager.baseResponse.screen.reels != null &&\r\n\t                        GameManager_1.GameManager.baseResponse.screen.reels.length !== 0) {\r\n\t                        if (this._winAnimator != null) {\r\n\t                            this._winAnimator.on(WinAnimator_1.WinAnimator.FinishWinCalculation, this.finishWinCalculation.bind(this));\r\n\t                            this._winAnimator.on(WinAnimator_1.WinAnimator.FinishWinAnimator, this.finishWinAnimator.bind(this));\r\n\t                            this._winAnimator.on(WinAnimator_1.WinAnimator.FinishQuickWinCalculation, this.finishQuickWinCalculation.bind(this));\r\n\t                            this._winAnimator.initialize(this._symbols, this._paylines, this.childs[\"NoWinContainer\"], this.childs[\"WinContainer\"], this);\r\n\t                            this._winAnimator.showSymbols(GameManager_1.GameManager.baseResponse.screen.reels);\r\n\t                            this._winAnimator.addElementInstance({ teasing: [this._teasingBonus] });\r\n\t                            this._winAnimator.addElementInstance({ wildContainer: this._wildContainer });\r\n\t                        }\r\n\t                        this._machine.setStoppedSymbolsArray(GameManager_1.GameManager.baseResponse.screen.reels);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"ERROR no reels in response\");\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no base reponse\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no machine\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no symbols\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.initIntro = function () {\r\n\t        if (GameManager_1.GameManager.baseResponse.currentWin > 0 || ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseLoop\");\r\n\t            PlayList_1.PlayList.loop(\"SND_CycleLoop\");\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.stop(\"SND_CycleLoop\");\r\n\t            PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t        }\r\n\t        this._winAnimator.showInitWins(GameManager_1.GameManager.baseResponse.wins, GameManager_1.GameManager.baseResponse.currentWin);\r\n\t        AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"base\", 20);\r\n\t        this.toggleElements(true);\r\n\t    };\r\n\t    BaseView.prototype.collect = function () {\r\n\t        PlayList_1.PlayList.stop(\"SND_FSEndLoop\");\r\n\t        PlayList_1.PlayList.stop(\"SND_CycleLoop\");\r\n\t        PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t        if (this._paylinesSelector != null) {\r\n\t            this._paylinesSelector.reset();\r\n\t        }\r\n\t        this._winAnimator.reset(true);\r\n\t    };\r\n\t    BaseView.prototype.spin = function () {\r\n\t        PlayList_1.PlayList.stop(\"SND_FSConfiguratorLoop\");\r\n\t        PlayList_1.PlayList.stop(\"SND_FSEndLoop\");\r\n\t        PlayList_1.PlayList.stop(\"SND_CycleLoop\");\r\n\t        PlayList_1.PlayList.stop(\"SND_FSLoop\");\r\n\t        PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t        if (this._paylinesSelector != null) {\r\n\t            this._paylinesSelector.reset();\r\n\t        }\r\n\t        this._machine.respin = null;\r\n\t        this._machine.spinStart(this._winAnimator.reset(false, true));\r\n\t    };\r\n\t    BaseView.prototype.stop = function () {\r\n\t        this._machine.spinStop(null, true);\r\n\t    };\r\n\t    BaseView.prototype.startReceived = function () {\r\n\t        return true;\r\n\t    };\r\n\t    BaseView.prototype.enable = function () {\r\n\t        this.visible = true;\r\n\t        this._winAnimator.show();\r\n\t        this._winAnimator.showSymbols(GameManager_1.GameManager.baseResponse.screen.reels);\r\n\t        this._controller.startConfigurator();\r\n\t        this.runTransitoinTweens();\r\n\t    };\r\n\t    BaseView.prototype.disable = function () {\r\n\t        this._winAnimator.hide();\r\n\t        this._winAnimator.reset(false);\r\n\t        this.runTransitoinTweens(true);\r\n\t    };\r\n\t    BaseView.prototype.runTransitoinTweens = function (reverse) {\r\n\t        if (reverse === void 0) { reverse = false; }\r\n\t        if (!this.transitionAlphaTween) {\r\n\t            this.alpha = reverse ? 0 : 1;\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"alpha\");\r\n\t        var alphas = reverse\r\n\t            ? this.transitionAlphaTween.slice().reverse()\r\n\t            : this.transitionAlphaTween.slice();\r\n\t        var tweenEase = this.transitionAlphaTweenEase || \"linear\";\r\n\t        var tweenDuration = this.transitionAlphaTweenDuration || 120;\r\n\t        var tweenDelay = this.transitionAlphaTweenDelay || 0;\r\n\t        var tweenLoop = false;\r\n\t        var keyTimes = this.transitionAlphaTweenKeyTimes\r\n\t            ? this.transitionAlphaTweenKeyTimes.slice()\r\n\t            : null;\r\n\t        Tweens_1.Tweens.alphaTween(this, { alphas: alphas, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    BaseView.prototype.spinReceived = function () {\r\n\t        this._machine.setStoppedSymbolsArray(GameManager_1.GameManager.baseResponse.screen.reels);\r\n\t        this._machine.spinStop(null, false, true);\r\n\t    };\r\n\t    BaseView.prototype.onReelStopped = function () {\r\n\t        this._winAnimator.onReelStopped(GameManager_1.GameManager.baseResponse.screen.reels, this._machine.actualReelStopped, this._machine.forceStop);\r\n\t    };\r\n\t    BaseView.prototype.machineStopped = function () {\r\n\t        this._wasFinished = false;\r\n\t        var isHighWin = this._winAnimator.isHighWin(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t        this._controller.machineStopped(isHighWin);\r\n\t        if (this._winAnimator.showWins(GameManager_1.GameManager.baseResponse.wins, GameManager_1.GameManager.baseResponse.currentWin)) {\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseLoop\");\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.finishQuickWinCalculation = function () {\r\n\t        this._controller.quickWinCalculationFinished();\r\n\t    };\r\n\t    BaseView.prototype.finishWinCalculation = function () {\r\n\t        this._wasFinished = true;\r\n\t        this._controller.winCalculationFinished();\r\n\t    };\r\n\t    BaseView.prototype.finishWinAnimator = function () {\r\n\t        if (!DataManager_1.DataManager.Autoplay) {\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseLoop\");\r\n\t            PlayList_1.PlayList.loop(\"SND_CycleLoop\");\r\n\t        }\r\n\t        this._controller.allWinsFinished();\r\n\t    };\r\n\t    BaseView.prototype.resetWinAnimator = function () {\r\n\t        this._winAnimator.reset(true);\r\n\t    };\r\n\t    BaseView.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        this.toggleElements(true, false);\r\n\t        if (long) {\r\n\t            if (this._transition != null) {\r\n\t                this._transition.goToCase(\"OUTRO\");\r\n\t            }\r\n\t        }\r\n\t        this.introFinished();\r\n\t    };\r\n\t    BaseView.prototype.introFinished = function () {\r\n\t        if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseLoop\");\r\n\t            if (!PlayList_1.PlayList.isPlaying(\"SND_BaseRecaploop\")) {\r\n\t                PlayList_1.PlayList.loop(\"SND_CycleLoop\");\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.stop(\"SND_CycleLoop\");\r\n\t            PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t        }\r\n\t        AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"base\", 20);\r\n\t        this._controller.introFinished();\r\n\t    };\r\n\t    BaseView.prototype.outro = function () {\r\n\t        PlayList_1.PlayList.stop(\"SND_BaseLoop\");\r\n\t        PlayList_1.PlayList.stop(\"SND_CycleLoop\");\r\n\t        if (this._paylinesSelector != null) {\r\n\t            this._paylinesSelector.reset();\r\n\t        }\r\n\t        var inHighWins = this._winAnimator.reset(true);\r\n\t        if (this._wasFinished) {\r\n\t            this.outroFinished();\r\n\t        }\r\n\t        else {\r\n\t            if (inHighWins) {\r\n\t                this._outroDelay.start(60);\r\n\t            }\r\n\t            else {\r\n\t                this._outroDelay.start(30);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.outroFinished = function () {\r\n\t        if (!ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.toggleElements(false, false);\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"color-1\", 100);\r\n\t        }\r\n\t        this._controller.outroFinished();\r\n\t    };\r\n\t    BaseView.prototype.startConfigurator = function () { };\r\n\t    BaseView.prototype.endReceived = function () { };\r\n\t    BaseView.prototype.selectPayline = function () {\r\n\t        if (this._paylinesSelector != null) {\r\n\t            this._paylinesSelector.select();\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.disableBase = function () {\r\n\t        this._winAnimator.resetTimer();\r\n\t    };\r\n\t    BaseView.prototype.toggleSounds = function (enable) {\r\n\t        PlayList_1.PlayList.stop(\"SND_FSEnd\");\r\n\t        PlayList_1.PlayList.stop(\"SND_FSMessage\");\r\n\t        if (enable) {\r\n\t            PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseLoop\");\r\n\t            PlayList_1.PlayList.stop(\"SND_CycleLoop\");\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseRecaploop\");\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.toggleElements = function (visible, long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        if (long) {\r\n\t            Tweens_1.Tweens.removeTweens(this, \"all\");\r\n\t            Tweens_1.Tweens.alphaTween(this, {\r\n\t                alphas: visible ? [0, 1] : [1, 0],\r\n\t                tweenDuration: 15,\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            this.alpha = visible ? 1 : 0;\r\n\t        }\r\n\t    };\r\n\t    BaseView = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], BaseView);\r\n\t    return BaseView;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.BaseView = BaseView;\r\n\tvar BaseViewAttributes = {\r\n\t    TRANSITION_ALPHA_TWEEN: \"TransitionAlphaTween\",\r\n\t    TRANSITION_ALPHA_TWEEN_EASE: \"TransitionAlphaTweenEase\",\r\n\t    TRANSITION_ALPHA_TWEEN_DELAY: \"TransitionAlphaTweenDelay\",\r\n\t    TRANSITION_ALPHA_TWEEN_DURATION: \"TransitionAlphaTweenDuration\",\r\n\t    TRANSITION_ALPHA_TWEEN_KEY_TIMES: \"TransitionAlphaTweenKeyTimes\",\r\n\t};\r\n\n\n/***/ },\n/* 94 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ContainerElement_1 = __webpack_require__(90);\r\n\tvar PaylinesDefinitions_1 = __webpack_require__(95);\r\n\tvar Payline_1 = __webpack_require__(96);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Paylines = (function (_super) {\r\n\t    __extends(Paylines, _super);\r\n\t    function Paylines() {\r\n\t        _super.call(this);\r\n\t        this._paylines = [];\r\n\t    }\r\n\t    Paylines.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(\"Configs\")) {\r\n\t            var configs = node.getAttribute(\"Configs\").split(\";\");\r\n\t            for (var i = 0; i < configs.length; i++) {\r\n\t                var config = Configuration_1.Configuration.Configurations[configs[i]];\r\n\t                if (config != null) {\r\n\t                    this.configurate(config);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof Payline_1.Payline) {\r\n\t                    this._paylines.push(this.childs[key]);\r\n\t                }\r\n\t            }\r\n\t            this.children.sort(function (a, b) {\r\n\t                if (a.hasOwnProperty(\"zIndex\") && b.hasOwnProperty(\"zIndex\")) {\r\n\t                    a.zIndex = a.zIndex || 0;\r\n\t                    b.zIndex = b.zIndex || 0;\r\n\t                    return a.zIndex - b.zIndex;\r\n\t                }\r\n\t                return 0;\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    Paylines.prototype.setSpecialContainer = function (container) {\r\n\t        this._specialContainer = container;\r\n\t    };\r\n\t    Paylines.prototype.configurate = function (node) {\r\n\t        if (node.hasAttribute(\"PaylineIDs\")) {\r\n\t            this._paylineIDs = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"PaylineIDs\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"PaylineDefinition\")) {\r\n\t            this.paylineDefinition = node.getAttribute(\"PaylineDefinition\");\r\n\t            PaylinesDefinitions_1.PaylinesDefinitions.initializePaylineDefinitions(node.getAttribute(\"PaylineDefinition\"));\r\n\t        }\r\n\t    };\r\n\t    Paylines.prototype.showPaylinesLabel = function () { };\r\n\t    Paylines.prototype.goToWin = function (id) {\r\n\t        if (this._paylines[id - 1] != null) {\r\n\t            this.addChild(this._paylines[id - 1]);\r\n\t            this._paylines[id - 1].goToCase(Payline_1.Payline.CaseWin);\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no payline with id: \" + (id - 1));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Paylines.prototype.reset = function () {\r\n\t        for (var i = 0; i < this._paylines.length; i++) {\r\n\t            if (this._specialContainer != null) {\r\n\t                this._specialContainer.addChild(this._paylines[i]);\r\n\t            }\r\n\t            this._paylines[i].goToCase(Payline_1.Payline.CaseNormal);\r\n\t        }\r\n\t    };\r\n\t    Paylines.prototype.goToCase = function (caseType, id) {\r\n\t        if (id) {\r\n\t            if (this._paylines[id - 1] != null) {\r\n\t                if (caseType === Payline_1.Payline.CaseWin) {\r\n\t                    this.addChild(this._paylines[id - 1]);\r\n\t                }\r\n\t                else {\r\n\t                    if (this._specialContainer != null) {\r\n\t                        this._specialContainer.addChild(this._paylines[id - 1]);\r\n\t                    }\r\n\t                }\r\n\t                this._paylines[id - 1].goToCase(caseType);\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no payline with id: \" + (id - 1));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            for (var i = 0; i < this._paylines.length; i++) {\r\n\t                if (caseType === Payline_1.Payline.CaseWin) {\r\n\t                    this.addChild(this._paylines[i]);\r\n\t                }\r\n\t                else {\r\n\t                    if (this._specialContainer != null) {\r\n\t                        this._specialContainer.addChild(this._paylines[i]);\r\n\t                    }\r\n\t                }\r\n\t                this._paylines[i].goToCase(caseType);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Paylines = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Paylines);\r\n\t    return Paylines;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.Paylines = Paylines;\r\n\n\n/***/ },\n/* 95 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar PaylinesDefinitions = (function () {\r\n\t    function PaylinesDefinitions() {\r\n\t    }\r\n\t    PaylinesDefinitions.initializePaylineDefinitions = function (paylineGroupId) {\r\n\t        var definition = {};\r\n\t        switch (paylineGroupId) {\r\n\t            case \"5x3_15\":\r\n\t                definition[1] = [1, 1, 1, 1, 1];\r\n\t                definition[2] = [0, 0, 0, 0, 0];\r\n\t                definition[3] = [2, 2, 2, 2, 2];\r\n\t                definition[4] = [0, 1, 2, 1, 0];\r\n\t                definition[5] = [2, 1, 0, 1, 2];\r\n\t                definition[6] = [0, 0, 1, 2, 2];\r\n\t                definition[7] = [2, 2, 1, 0, 0];\r\n\t                definition[8] = [1, 2, 2, 2, 1];\r\n\t                definition[9] = [1, 0, 0, 0, 1];\r\n\t                definition[10] = [0, 1, 1, 1, 0];\r\n\t                definition[11] = [2, 1, 1, 1, 2];\r\n\t                definition[12] = [1, 2, 1, 0, 1];\r\n\t                definition[13] = [1, 0, 1, 2, 1];\r\n\t                definition[14] = [0, 1, 0, 1, 0];\r\n\t                definition[15] = [2, 1, 2, 1, 2];\r\n\t                break;\r\n\t            case \"5x3\":\r\n\t                definition[1] = [1, 1, 1, 1, 1];\r\n\t                definition[2] = [0, 0, 0, 0, 0];\r\n\t                definition[3] = [2, 2, 2, 2, 2];\r\n\t                definition[4] = [0, 1, 2, 1, 0];\r\n\t                definition[5] = [2, 1, 0, 1, 2];\r\n\t                definition[6] = [1, 2, 2, 2, 1];\r\n\t                definition[7] = [1, 0, 0, 0, 1];\r\n\t                definition[8] = [2, 2, 1, 0, 0];\r\n\t                definition[9] = [0, 0, 1, 2, 2];\r\n\t                definition[10] = [2, 1, 1, 1, 0];\r\n\t                break;\r\n\t            case \"3x3_5\":\r\n\t                definition[1] = [1, 1, 1];\r\n\t                definition[2] = [0, 0, 0];\r\n\t                definition[3] = [2, 2, 2];\r\n\t                definition[4] = [0, 1, 2];\r\n\t                definition[5] = [2, 1, 0];\r\n\t                break;\r\n\t            case \"3x3\":\r\n\t                definition[1] = [0, 0, 0];\r\n\t                definition[2] = [0, 0, 1];\r\n\t                definition[3] = [0, 0, 2];\r\n\t                definition[4] = [0, 1, 0];\r\n\t                definition[5] = [0, 1, 1];\r\n\t                definition[6] = [0, 1, 2];\r\n\t                definition[7] = [0, 2, 0];\r\n\t                definition[8] = [0, 2, 1];\r\n\t                definition[9] = [0, 2, 2];\r\n\t                definition[10] = [1, 0, 0];\r\n\t                definition[11] = [1, 0, 1];\r\n\t                definition[12] = [1, 0, 2];\r\n\t                definition[13] = [1, 1, 0];\r\n\t                definition[14] = [1, 1, 1];\r\n\t                definition[15] = [1, 1, 2];\r\n\t                definition[16] = [1, 2, 0];\r\n\t                definition[17] = [1, 2, 1];\r\n\t                definition[18] = [1, 2, 2];\r\n\t                definition[19] = [2, 0, 0];\r\n\t                definition[20] = [2, 0, 1];\r\n\t                definition[21] = [2, 0, 2];\r\n\t                definition[22] = [2, 1, 0];\r\n\t                definition[23] = [2, 1, 1];\r\n\t                definition[24] = [2, 1, 2];\r\n\t                definition[25] = [2, 2, 0];\r\n\t                definition[26] = [2, 2, 1];\r\n\t                definition[27] = [2, 2, 2];\r\n\t                break;\r\n\t            case \"5x4\":\r\n\t                definition[1] = [1, 1, 1, 1, 1];\r\n\t                definition[2] = [2, 2, 2, 2, 2];\r\n\t                definition[3] = [0, 0, 0, 0, 0];\r\n\t                definition[4] = [3, 3, 3, 3, 3];\r\n\t                definition[5] = [1, 2, 3, 2, 1];\r\n\t                definition[6] = [2, 1, 0, 1, 2];\r\n\t                definition[7] = [0, 0, 1, 2, 3];\r\n\t                definition[8] = [3, 3, 2, 1, 0];\r\n\t                definition[9] = [1, 0, 0, 0, 1];\r\n\t                definition[10] = [2, 3, 3, 3, 2];\r\n\t                definition[11] = [0, 1, 2, 3, 3];\r\n\t                definition[12] = [3, 2, 1, 0, 0];\r\n\t                definition[13] = [1, 0, 1, 2, 1];\r\n\t                definition[14] = [2, 3, 2, 1, 2];\r\n\t                definition[15] = [0, 1, 0, 1, 0];\r\n\t                definition[16] = [3, 2, 3, 2, 3];\r\n\t                definition[17] = [1, 2, 1, 0, 1];\r\n\t                definition[18] = [2, 1, 2, 3, 2];\r\n\t                definition[19] = [0, 1, 1, 1, 0];\r\n\t                definition[20] = [3, 2, 2, 2, 3];\r\n\t                definition[21] = [1, 1, 2, 3, 3];\r\n\t                definition[22] = [2, 2, 1, 0, 0];\r\n\t                definition[23] = [1, 1, 0, 1, 1];\r\n\t                definition[24] = [2, 2, 3, 2, 2];\r\n\t                definition[25] = [1, 2, 2, 2, 3];\r\n\t                definition[26] = [2, 1, 1, 1, 0];\r\n\t                definition[27] = [0, 0, 1, 0, 0];\r\n\t                definition[28] = [3, 3, 2, 3, 3];\r\n\t                definition[29] = [0, 1, 2, 2, 3];\r\n\t                definition[30] = [3, 2, 1, 1, 0];\r\n\t                definition[31] = [0, 0, 0, 1, 2];\r\n\t                definition[32] = [3, 3, 3, 2, 1];\r\n\t                definition[33] = [1, 0, 0, 1, 2];\r\n\t                definition[34] = [2, 3, 3, 2, 1];\r\n\t                definition[35] = [0, 1, 1, 2, 3];\r\n\t                definition[36] = [3, 2, 2, 1, 0];\r\n\t                definition[37] = [1, 0, 1, 2, 3];\r\n\t                definition[38] = [2, 3, 2, 1, 0];\r\n\t                definition[39] = [0, 1, 2, 3, 2];\r\n\t                definition[40] = [3, 2, 1, 0, 1];\r\n\t                break;\r\n\t            case \"4x3\":\r\n\t                definition[1] = [0, 0, 0, 0];\r\n\t                definition[2] = [0, 0, 0, 1];\r\n\t                definition[3] = [0, 0, 0, 2];\r\n\t                definition[4] = [0, 0, 1, 0];\r\n\t                definition[5] = [0, 0, 1, 1];\r\n\t                definition[6] = [0, 0, 1, 2];\r\n\t                definition[7] = [0, 0, 2, 0];\r\n\t                definition[8] = [0, 0, 2, 1];\r\n\t                definition[9] = [0, 0, 2, 2];\r\n\t                definition[10] = [0, 1, 0, 0];\r\n\t                definition[11] = [0, 1, 0, 1];\r\n\t                definition[12] = [0, 1, 0, 2];\r\n\t                definition[13] = [0, 1, 1, 0];\r\n\t                definition[14] = [0, 1, 1, 1];\r\n\t                definition[15] = [0, 1, 1, 2];\r\n\t                definition[16] = [0, 1, 2, 0];\r\n\t                definition[17] = [0, 1, 2, 1];\r\n\t                definition[18] = [0, 1, 2, 2];\r\n\t                definition[19] = [0, 2, 0, 0];\r\n\t                definition[20] = [0, 2, 0, 1];\r\n\t                definition[21] = [0, 2, 0, 2];\r\n\t                definition[22] = [0, 2, 1, 0];\r\n\t                definition[23] = [0, 2, 1, 1];\r\n\t                definition[24] = [0, 2, 1, 2];\r\n\t                definition[25] = [0, 2, 2, 0];\r\n\t                definition[26] = [0, 2, 2, 1];\r\n\t                definition[27] = [0, 2, 2, 2];\r\n\t                definition[28] = [1, 0, 0, 0];\r\n\t                definition[29] = [1, 0, 0, 1];\r\n\t                definition[30] = [1, 0, 0, 2];\r\n\t                definition[31] = [1, 0, 1, 0];\r\n\t                definition[32] = [1, 0, 1, 1];\r\n\t                definition[33] = [1, 0, 1, 2];\r\n\t                definition[34] = [1, 0, 2, 0];\r\n\t                definition[35] = [1, 0, 2, 1];\r\n\t                definition[36] = [1, 0, 2, 2];\r\n\t                definition[37] = [1, 1, 0, 0];\r\n\t                definition[38] = [1, 1, 0, 1];\r\n\t                definition[39] = [1, 1, 0, 2];\r\n\t                definition[40] = [1, 1, 1, 0];\r\n\t                definition[41] = [1, 1, 1, 1];\r\n\t                definition[42] = [1, 1, 1, 2];\r\n\t                definition[43] = [1, 1, 2, 0];\r\n\t                definition[44] = [1, 1, 2, 1];\r\n\t                definition[45] = [1, 1, 2, 2];\r\n\t                definition[46] = [1, 2, 0, 0];\r\n\t                definition[47] = [1, 2, 0, 1];\r\n\t                definition[48] = [1, 2, 0, 2];\r\n\t                definition[49] = [1, 2, 1, 0];\r\n\t                definition[50] = [1, 2, 1, 1];\r\n\t                definition[51] = [1, 2, 1, 2];\r\n\t                definition[52] = [1, 2, 2, 0];\r\n\t                definition[53] = [1, 2, 2, 1];\r\n\t                definition[54] = [1, 2, 2, 2];\r\n\t                definition[55] = [2, 0, 0, 0];\r\n\t                definition[56] = [2, 0, 0, 1];\r\n\t                definition[57] = [2, 0, 0, 2];\r\n\t                definition[58] = [2, 0, 1, 0];\r\n\t                definition[59] = [2, 0, 1, 1];\r\n\t                definition[60] = [2, 0, 1, 2];\r\n\t                definition[61] = [2, 0, 2, 0];\r\n\t                definition[62] = [2, 0, 2, 1];\r\n\t                definition[63] = [2, 0, 2, 2];\r\n\t                definition[64] = [2, 1, 0, 0];\r\n\t                definition[65] = [2, 1, 0, 1];\r\n\t                definition[66] = [2, 1, 0, 2];\r\n\t                definition[67] = [2, 1, 1, 0];\r\n\t                definition[68] = [2, 1, 1, 1];\r\n\t                definition[69] = [2, 1, 1, 2];\r\n\t                definition[70] = [2, 1, 2, 0];\r\n\t                definition[71] = [2, 1, 2, 1];\r\n\t                definition[72] = [2, 1, 2, 2];\r\n\t                definition[73] = [2, 2, 0, 0];\r\n\t                definition[74] = [2, 2, 0, 1];\r\n\t                definition[75] = [2, 2, 0, 2];\r\n\t                definition[76] = [2, 2, 1, 0];\r\n\t                definition[77] = [2, 2, 1, 1];\r\n\t                definition[78] = [2, 2, 1, 2];\r\n\t                definition[79] = [2, 2, 2, 0];\r\n\t                definition[80] = [2, 2, 2, 1];\r\n\t                definition[81] = [2, 2, 2, 2];\r\n\t                break;\r\n\t            default:\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no definition for \" + paylineGroupId);\r\n\t                }\r\n\t                return;\r\n\t        }\r\n\t        this._paylineGroupsDefinitions[paylineGroupId] = definition;\r\n\t    };\r\n\t    PaylinesDefinitions.getPaylineDefinitionsById = function (paylineId, paylineGroupId) {\r\n\t        if (this._paylineGroupsDefinitions != null) {\r\n\t            if (this._paylineGroupsDefinitions[paylineGroupId] != null) {\r\n\t                if (this._paylineGroupsDefinitions[paylineGroupId][paylineId] != null) {\r\n\t                    return this._paylineGroupsDefinitions[paylineGroupId][paylineId];\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no paylineId: \" + paylineId + \" in \" + paylineGroupId);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no definition for \" + paylineGroupId);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no paylines definitions\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    PaylinesDefinitions.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"PaylineDefinitions\", s);\r\n\t        }\r\n\t    };\r\n\t    PaylinesDefinitions._paylineGroupsDefinitions = {};\r\n\t    return PaylinesDefinitions;\r\n\t}());\r\n\texports.PaylinesDefinitions = PaylinesDefinitions;\r\n\n\n/***/ },\n/* 96 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar SwitchElement_1 = __webpack_require__(97);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Attributes_1 = __webpack_require__(19);\r\n\tvar Payline = (function (_super) {\r\n\t    __extends(Payline, _super);\r\n\t    function Payline() {\r\n\t        _super.call(this);\r\n\t        this.zIndex = 0;\r\n\t    }\r\n\t    Payline.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        this.zIndex = Attributes_1.Attributes.assignFloatAttribute(node, exports.PaylineAttributes.Z_INDEX, this.zIndex);\r\n\t    };\r\n\t    Payline.CaseSelect = \"SELECT\";\r\n\t    Payline.CaseNormal = \"NORMAL\";\r\n\t    Payline.CaseNowin = \"NOWIN\";\r\n\t    Payline.CaseWin = \"WIN\";\r\n\t    Payline.CaseSingleCycle = \"SINGLE_CYCLE\";\r\n\t    Payline.CaseCycle = \"CYCLE\";\r\n\t    Payline.CaseCycleNonActive = \"CYCLE_NON_ACTIVE\";\r\n\t    Payline = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Payline);\r\n\t    return Payline;\r\n\t}(SwitchElement_1.SwitchElement));\r\n\texports.Payline = Payline;\r\n\texports.PaylineAttributes = {\r\n\t    Z_INDEX: \"Zindex\",\r\n\t};\r\n\n\n/***/ },\n/* 97 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar SwitchStyle_1 = __webpack_require__(98);\r\n\tvar StyleManager_1 = __webpack_require__(18);\r\n\tvar AnimationElement_1 = __webpack_require__(100);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ParticleElement_1 = __webpack_require__(102);\r\n\tvar SwitchElement = (function (_super) {\r\n\t    __extends(SwitchElement, _super);\r\n\t    function SwitchElement() {\r\n\t        _super.call(this);\r\n\t        this.case = \"NONE\";\r\n\t        this.center = false;\r\n\t        this.timer = FrameTimer_1.CreateFrameTimer(\"timer\");\r\n\t    }\r\n\t    Object.defineProperty(SwitchElement.prototype, \"symbolWidth\", {\r\n\t        get: function () {\r\n\t            return this._symbolWidth;\r\n\t        },\r\n\t        set: function (value) {\r\n\t            this._symbolWidth = value;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(SwitchElement.prototype, \"symbolHeight\", {\r\n\t        get: function () {\r\n\t            return this._symbolHeight;\r\n\t        },\r\n\t        set: function (value) {\r\n\t            this._symbolHeight = value;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(SwitchElement.prototype, \"hasElements\", {\r\n\t        get: function () {\r\n\t            return this.elements != null && this.elements.childs != null;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    SwitchElement.prototype.getChildElementByName = function (name) {\r\n\t        if (this.hasElements) {\r\n\t            return this.elements.childs[name];\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    SwitchElement.prototype.getChildElements = function () {\r\n\t        return this.elements.childs;\r\n\t    };\r\n\t    SwitchElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.SwitchElementAttributes.STYLE)) {\r\n\t            this.style = StyleManager_1.StyleManager.Styles[node.getAttribute(exports.SwitchElementAttributes.STYLE)];\r\n\t            if (this.style != null) {\r\n\t                if (this.style.container != null) {\r\n\t                    if (node.hasAttribute(exports.SwitchElementAttributes.CLONE) &&\r\n\t                        neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.SwitchElementAttributes.CLONE))) {\r\n\t                        this.elements = this.style.container.clone();\r\n\t                    }\r\n\t                    else {\r\n\t                        this.elements = this.style.container;\r\n\t                    }\r\n\t                    this.addChild(this.elements);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no style with name: \" + node.getAttribute(exports.SwitchElementAttributes.STYLE));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SwitchElementAttributes.CASE)) {\r\n\t            this.goToCase(node.getAttribute(exports.SwitchElementAttributes.CASE));\r\n\t        }\r\n\t    };\r\n\t    SwitchElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.SwitchElementAttributes.CASE)) {\r\n\t            this.goToCase(node.getAttribute(exports.SwitchElementAttributes.CASE));\r\n\t        }\r\n\t    };\r\n\t    SwitchElement.prototype.hasCase = function (s) {\r\n\t        return this.style != null && this.style.cases != null && this.style.cases[s];\r\n\t    };\r\n\t    SwitchElement.prototype.getCase = function (s) {\r\n\t        if (this.style != null && this.style.cases != null && this.style.cases[s]) {\r\n\t            return this.style.cases[s];\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    SwitchElement.prototype.getCurrentCase = function () {\r\n\t        return this.case;\r\n\t    };\r\n\t    SwitchElement.prototype.goToCase = function (s, emitEvent, delay) {\r\n\t        if (emitEvent === void 0) { emitEvent = false; }\r\n\t        if (emitEvent) {\r\n\t            this.animationComplete();\r\n\t        }\r\n\t        if (this.style != null && this.style.cases != null && this.case !== s) {\r\n\t            if (this.timer != null) {\r\n\t                this.timer.removeAllListeners(FrameTimer_1.FrameTimerEvents.Complete);\r\n\t                this.timer.stop();\r\n\t            }\r\n\t            if (this.hasCase(s)) {\r\n\t                var node = this.style.cases[s];\r\n\t                if (node != null) {\r\n\t                    if (false) {\r\n\t                        if (node.hasAttribute(\"Debug\") && node.getAttribute(\"Debug\") === \"true\") {\r\n\t                            debugger;\r\n\t                        }\r\n\t                    }\r\n\t                    if (node.hasAttribute(\"FinishHandler\")) {\r\n\t                        this.emit(SwitchElement.FinishAnimation);\r\n\t                    }\r\n\t                    if (delay > 0) {\r\n\t                        this.timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.goToCase.bind(this, s, emitEvent));\r\n\t                        this.timer.start(delay);\r\n\t                        return;\r\n\t                    }\r\n\t                    var element = void 0;\r\n\t                    this.case = s;\r\n\t                    var next = node.firstElementChild;\r\n\t                    var arr = [];\r\n\t                    while (next != null) {\r\n\t                        arr.push(next.nodeName);\r\n\t                        element = this.elements.childs[next.nodeName];\r\n\t                        if (element != null) {\r\n\t                            element.visible = true;\r\n\t                            element.updateByNode(next);\r\n\t                        }\r\n\t                        else {\r\n\t                            if (false) {\r\n\t                                this.log(\"WARNING no element child with name: \" +\r\n\t                                    next.nodeName +\r\n\t                                    \" in case: \" +\r\n\t                                    s +\r\n\t                                    \" in style: \" +\r\n\t                                    this.style.name);\r\n\t                            }\r\n\t                        }\r\n\t                        next = next.nextElementSibling;\r\n\t                    }\r\n\t                    for (var key in this.elements.childs) {\r\n\t                        this.elements.childs[key].removeAllListeners();\r\n\t                        var found = false;\r\n\t                        for (var i = 0; i < arr.length; i++) {\r\n\t                            if (key === arr[i]) {\r\n\t                                found = true;\r\n\t                            }\r\n\t                        }\r\n\t                        if (!found) {\r\n\t                            if (this.elements.childs[key] instanceof ParticleElement_1.ParticleElement) {\r\n\t                                this.elements.childs[key].stop();\r\n\t                            }\r\n\t                            else if (this.elements.childs[key] instanceof PIXI.DisplayObject) {\r\n\t                                this.elements.childs[key].visible = false;\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    if (node.hasAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.NEXT_CASE) &&\r\n\t                        this.hasCase(node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.NEXT_CASE))) {\r\n\t                        if (node.hasAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.TIMER)) {\r\n\t                            var random = this.getRandomDurationMultiplier(node);\r\n\t                            this.timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.goToCase.bind(this, node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.NEXT_CASE)));\r\n\t                            this.timer.start(parseInt(node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.TIMER)) * random);\r\n\t                        }\r\n\t                        else if (node.hasAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.HANDLER)) {\r\n\t                            element = this.elements.childs[node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.HANDLER)];\r\n\t                            if (element) {\r\n\t                                element.on(AnimationElement_1.AnimationElement.AnimationComplete, this.goToCase.bind(this, node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.NEXT_CASE), true));\r\n\t                            }\r\n\t                        }\r\n\t                        else {\r\n\t                            this.goToCase(node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.NEXT_CASE));\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (node.hasAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.TIMER)) {\r\n\t                            var random = this.getRandomDurationMultiplier(node);\r\n\t                            this.timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.animationComplete.bind(this));\r\n\t                            this.timer.start(parseInt(node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.TIMER)) * random);\r\n\t                        }\r\n\t                        else if (node.hasAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.HANDLER)) {\r\n\t                            element = this.elements.childs[node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.HANDLER)];\r\n\t                            if (element) {\r\n\t                                element.on(AnimationElement_1.AnimationElement.AnimationComplete, this.animationComplete.bind(this));\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no case: \" + s + \" for \" + this.name);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (emitEvent) {\r\n\t            this.animationComplete();\r\n\t        }\r\n\t    };\r\n\t    SwitchElement.prototype.getRandomDurationMultiplier = function (node) {\r\n\t        var result = 1;\r\n\t        if (node.hasAttribute(exports.SwitchElementAttributes.RANDOM)) {\r\n\t            var dataArray = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.SwitchElementAttributes.RANDOM));\r\n\t            if (dataArray.length > 0) {\r\n\t                var max = dataArray[0];\r\n\t                var min = 1;\r\n\t                if (dataArray.length == 2) {\r\n\t                    min = dataArray[0];\r\n\t                    max = min > dataArray[1] ? min : dataArray[1];\r\n\t                }\r\n\t                result = Math.round(SwitchElement.getRandom(min, max));\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    SwitchElement.getRandom = function (min, max) {\r\n\t        return Math.random() * (max - min) + min;\r\n\t    };\r\n\t    SwitchElement.prototype.animationComplete = function () {\r\n\t        this.emit(SwitchElement.AnimationComplete);\r\n\t    };\r\n\t    SwitchElement.prototype.clone = function () {\r\n\t        var element = new SwitchElement();\r\n\t        element.style = this.style;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.visible = this.visible;\r\n\t        element.elements = this.elements.clone();\r\n\t        element.addChild(element.elements);\r\n\t        element.case = this.case;\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    SwitchElement.AnimationComplete = \"animationComplete\";\r\n\t    SwitchElement.FinishAnimation = \"finishAnimation\";\r\n\t    SwitchElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], SwitchElement);\r\n\t    return SwitchElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.SwitchElement = SwitchElement;\r\n\texports.SwitchElementAttributes = {\r\n\t    CASE: \"Case\",\r\n\t    CLONE: \"Clone\",\r\n\t    DEBUG_INFO: \"DebugInfo\",\r\n\t    DEBUG: \"Debug\",\r\n\t    STYLE: \"Style\",\r\n\t    RANDOM: \"Random\",\r\n\t};\r\n\n\n/***/ },\n/* 98 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(99);\r\n\tvar ContainerElement_1 = __webpack_require__(90);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar SwitchStyle = (function (_super) {\r\n\t    __extends(SwitchStyle, _super);\r\n\t    function SwitchStyle() {\r\n\t        _super.call(this);\r\n\t        this.cases = {};\r\n\t    }\r\n\t    SwitchStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            switch (next.nodeName) {\r\n\t                case \"Elements\":\r\n\t                    this.container = new ContainerElement_1.ContainerElement();\r\n\t                    this.container.create(next);\r\n\t                    break;\r\n\t                case \"Cases\":\r\n\t                    var nextCase = next.firstElementChild;\r\n\t                    while (nextCase != null) {\r\n\t                        if (nextCase.hasAttribute(exports.SwitchStyleCaseAttributes.CASE)) {\r\n\t                            if (this.cases[nextCase.getAttribute(exports.SwitchStyleCaseAttributes.CASE)] !== null) {\r\n\t                                this.cases[nextCase.getAttribute(exports.SwitchStyleCaseAttributes.CASE)] = nextCase;\r\n\t                            }\r\n\t                            else {\r\n\t                                if (false) {\r\n\t                                    this.log(\"ERROR case \" +\r\n\t                                        nextCase.getAttribute(\"Case\") +\r\n\t                                        \" already exist in switchStyle \" +\r\n\t                                        node.nodeName);\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                        nextCase = nextCase.nextElementSibling;\r\n\t                    }\r\n\t                    break;\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    SwitchStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], SwitchStyle);\r\n\t    return SwitchStyle;\r\n\t}(Style_1.Style));\r\n\texports.SwitchStyle = SwitchStyle;\r\n\tvar SwitchStyleAttributes = {};\r\n\texports.SwitchStyleCaseAttributes = {\r\n\t    CASE: \"Case\",\r\n\t    HANDLER: \"Handler\",\r\n\t    NEXT_CASE: \"NextCase\",\r\n\t    TIMER: \"Timer\",\r\n\t};\r\n\n\n/***/ },\n/* 99 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Style = (function () {\r\n\t    function Style() {\r\n\t    }\r\n\t    Style.prototype.create = function (node) {\r\n\t        if (this.name == null) {\r\n\t            this.name = node.nodeName;\r\n\t        }\r\n\t    };\r\n\t    Style.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    Style = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], Style);\r\n\t    return Style;\r\n\t}());\r\n\texports.Style = Style;\r\n\n\n/***/ },\n/* 100 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar StyleManager_1 = __webpack_require__(18);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ShapeElement_1 = __webpack_require__(12);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar TextElement_1 = __webpack_require__(101);\r\n\tvar Attributes_1 = __webpack_require__(19);\r\n\tvar CustomUtils_1 = __webpack_require__(20);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar AnimationElement = (function (_super) {\r\n\t    __extends(AnimationElement, _super);\r\n\t    function AnimationElement() {\r\n\t        var textureArray = [PIXI.Texture.EMPTY];\r\n\t        _super.call(this, textureArray, false);\r\n\t        PIXI.ticker.shared.add(this.update, this, PIXI.UPDATE_PRIORITY.HIGH);\r\n\t        this._startFrame = 0;\r\n\t        this._randomStartFrame = false;\r\n\t        this._cloned = false;\r\n\t        this.__destroyed = false;\r\n\t        this._uid = this.componentName + \"_\" + neo_common_1.Utils.generateUuid();\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                this._uid = PerfDebug.generateElementUID(this);\r\n\t                PerfDebug.newElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t        this._delay = 0;\r\n\t        this._timerDelay = FrameTimer_1.CreateFrameTimer(\"timer\");\r\n\t        this._timerDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.animationDelay.bind(this));\r\n\t    }\r\n\t    Object.defineProperty(AnimationElement.prototype, \"tweenEngine\", {\r\n\t        get: function () {\r\n\t            return this._tweenEngine;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    AnimationElement.prototype.update = function (deltaTime) {\r\n\t        if (this.playing) {\r\n\t            _super.prototype.update.call(this, deltaTime);\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.create = function (node) {\r\n\t        this._create(node);\r\n\t    };\r\n\t    AnimationElement.prototype._create = function (node) {\r\n\t        var _this = this;\r\n\t        this.assertDestroyed(\"_create()\");\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.AnimationElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.AnimationElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"alpha\");\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        Tweens_1.Tweens.removeTweens(this, \"rotation\");\r\n\t        Tweens_1.Tweens.removeTweens(this, \"scale\");\r\n\t        if (this.name == null) {\r\n\t            this.name = node.nodeName;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.STYLE) ||\r\n\t            node.hasAttribute(exports.AnimationElementAttributes.STYLE2)) {\r\n\t            if (node.hasAttribute(exports.AnimationElementAttributes.STYLE)) {\r\n\t                this._style = StyleManager_1.StyleManager.Styles[node.getAttribute(exports.AnimationElementAttributes.STYLE)];\r\n\t            }\r\n\t            else if (node.hasAttribute(exports.AnimationElementAttributes.STYLE2)) {\r\n\t                this._style = StyleManager_1.StyleManager.Styles[node.getAttribute(exports.AnimationElementAttributes.STYLE2)];\r\n\t            }\r\n\t            if (this._style != null) {\r\n\t                if (this._style.startFrame != null) {\r\n\t                    this._startFrame = this._style.startFrame;\r\n\t                }\r\n\t                else {\r\n\t                    this._startFrame = null;\r\n\t                }\r\n\t                if (this._style.endFrame != null) {\r\n\t                    this._endFrame = this._style.endFrame;\r\n\t                }\r\n\t                else {\r\n\t                    this._endFrame = null;\r\n\t                }\r\n\t                if (this._style.stop != null) {\r\n\t                    this._stop = this._style.stop;\r\n\t                }\r\n\t                if (this._style.frames) {\r\n\t                    var texture_1;\r\n\t                    var textures_1 = [];\r\n\t                    this._style.frames.forEach(function (frameName, i) {\r\n\t                        texture_1 = PIXI.utils.TextureCache[frameName];\r\n\t                        if (texture_1 != null) {\r\n\t                            if (i == 0) {\r\n\t                                _this.texture = texture_1;\r\n\t                            }\r\n\t                            textures_1.push(texture_1);\r\n\t                        }\r\n\t                        else {\r\n\t                            if (false) {\r\n\t                                _this.log(\"WARNING: No texture\" + frameName + \" in TextureCache of AnimationElement!\");\r\n\t                            }\r\n\t                        }\r\n\t                    });\r\n\t                    this.textures = textures_1;\r\n\t                    if (this.textures.length > 0) {\r\n\t                        this.onComplete = this._movieClipComplete.bind(this);\r\n\t                        this.loop = false;\r\n\t                        this.animationSpeed = 1;\r\n\t                        this.tint = 0xffffff;\r\n\t                        this.blendMode = PIXI.BLEND_MODES.NORMAL;\r\n\t                        this.alpha = 1;\r\n\t                        this._reverse = false;\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"ERROR no frames in \" + this._style.animation);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else if (this._style.animation !== \"\") {\r\n\t                    var texture = void 0;\r\n\t                    var textures = [];\r\n\t                    if (this._endFrame != null) {\r\n\t                        for (var i = this._startFrame; i <= this._endFrame; i++) {\r\n\t                            var val = this.zerosPad(i, 4);\r\n\t                            texture = PIXI.utils.TextureCache[this._style.animation + val];\r\n\t                            if (texture != null) {\r\n\t                                if (i == this._startFrame) {\r\n\t                                    this.texture = texture;\r\n\t                                }\r\n\t                                textures.push(texture);\r\n\t                            }\r\n\t                            else {\r\n\t                                if (false) {\r\n\t                                    this.log(\"WARNING: No texture\" +\r\n\t                                        this._style.animation +\r\n\t                                        val +\r\n\t                                        \" in TextureCache of AnimationElement!\");\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING: animation has no endframe number. Use ImageElement with attribute Animation instead AnimationElement!\");\r\n\t                        }\r\n\t                        var frame = this.zerosPad(this._startFrame, 4);\r\n\t                        texture = PIXI.utils.TextureCache[this._style.animation + frame];\r\n\t                        if (texture != null) {\r\n\t                            this.texture = texture;\r\n\t                            textures.push(texture);\r\n\t                        }\r\n\t                    }\r\n\t                    this.textures = textures;\r\n\t                    if (this.textures.length > 0) {\r\n\t                        this.onComplete = this._movieClipComplete.bind(this);\r\n\t                        this.loop = false;\r\n\t                        this.animationSpeed = 1;\r\n\t                        this.tint = 0xffffff;\r\n\t                        this.blendMode = PIXI.BLEND_MODES.NORMAL;\r\n\t                        this.alpha = 1;\r\n\t                        this._reverse = false;\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"ERROR no frames in \" + this._style.animation);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR animation in style is not defined\");\r\n\t                    }\r\n\t                }\r\n\t                if (this._style.loop != null) {\r\n\t                    this.loop = this._style.loop;\r\n\t                }\r\n\t                if (this._style.speed != null) {\r\n\t                    this.animationSpeed = this._style.speed * (this._style.reverse ? -1 : 1);\r\n\t                }\r\n\t                if (this._style.tint != null) {\r\n\t                    this.tint = this._style.tint;\r\n\t                }\r\n\t                if (this._style.blendMode != null) {\r\n\t                    this.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this._style.blendMode);\r\n\t                }\r\n\t                if (this._style.alpha != null) {\r\n\t                    this.alpha = this._style.alpha;\r\n\t                }\r\n\t                if (this._style.reverse != null) {\r\n\t                    this._reverse = this._style.reverse;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR missing style: \" + node.getAttribute(exports.AnimationElementAttributes.STYLE));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._randomStartFrame = Attributes_1.Attributes.assignBooleanAttribute(node, exports.AnimationElementAttributes.RANDOM_START_FRAME, this._randomStartFrame);\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.MASK)) {\r\n\t            var next = node.parentElement.firstElementChild;\r\n\t            while (next != null) {\r\n\t                if (next.nodeName === node.getAttribute(exports.AnimationElementAttributes.MASK)) {\r\n\t                    var shapeElement = new ShapeElement_1.ShapeElement();\r\n\t                    shapeElement.create(next);\r\n\t                    this.mask = shapeElement;\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t            if (this.mask == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no element with name: \" + node.getAttribute(exports.AnimationElementAttributes.MASK));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.BITMAP_MASK)) {\r\n\t            var image = StageController_1.StageController.getTextureByResourceId(node.getAttribute(exports.AnimationElementAttributes.BITMAP_MASK));\r\n\t            if (image != null) {\r\n\t                this.maskSprite = new PIXI.Sprite(image);\r\n\t                if (node.hasAttribute(exports.AnimationElementAttributes.BITMAP_MASK_X)) {\r\n\t                    this.maskSprite.position.x = parseFloat(node.getAttribute(exports.AnimationElementAttributes.BITMAP_MASK_X));\r\n\t                }\r\n\t                if (node.hasAttribute(exports.AnimationElementAttributes.BITMAP_MASK_Y)) {\r\n\t                    this.maskSprite.position.y = parseFloat(node.getAttribute(exports.AnimationElementAttributes.BITMAP_MASK_Y));\r\n\t                }\r\n\t                if (!node.hasAttribute(exports.AnimationElementAttributes.BITMAP_MASK_SHOW)) {\r\n\t                    this.addChild(this.maskSprite);\r\n\t                    this.mask = this.maskSprite;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR\" +\r\n\t                        this.componentName +\r\n\t                        \" no image with name for mask: \" +\r\n\t                        node.getAttribute(exports.AnimationElementAttributes.BITMAP_MASK));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.createElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t        this.updateByNode(node);\r\n\t    };\r\n\t    AnimationElement.prototype.updateByNode = function (node) {\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.AnimationElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.AnimationElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        if (!node) {\r\n\t            this.logError(\"No node specified for element update!\");\r\n\t            return;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.TINT)) {\r\n\t            if (node.getAttribute(exports.AnimationElementAttributes.TINT) === \"0\") {\r\n\t                this.tint = null;\r\n\t            }\r\n\t            else if (node.getAttribute(exports.AnimationElementAttributes.TINT) === \"dynamic\") {\r\n\t                this.tint = parseInt(AnimationElement.DynamicTint, 16);\r\n\t            }\r\n\t            else {\r\n\t                this.tint = parseInt(node.getAttribute(exports.AnimationElementAttributes.TINT), 16);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.tint = 0xffffff;\r\n\t        }\r\n\t        this.alpha = Attributes_1.Attributes.assignFloatAttribute(node, exports.AnimationElementAttributes.ALPHA, this.alpha);\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.ANCHOR)) {\r\n\t            this.anchor.x = parseFloat(node.getAttribute(exports.AnimationElementAttributes.ANCHOR));\r\n\t            this.anchor.y = parseFloat(node.getAttribute(exports.AnimationElementAttributes.ANCHOR));\r\n\t        }\r\n\t        var rotation = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.ROTATION, this.rotation);\r\n\t        this.rotation = this.degrees2radians(rotation);\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.START_ROTATION)) {\r\n\t            if (node.getAttribute(exports.AnimationElementAttributes.START_ROTATION) ===\r\n\t                exports.AnimationElementAttributes.START_ROTATION) {\r\n\t                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n\t            }\r\n\t        }\r\n\t        this.scale.x = Attributes_1.Attributes.assignFloatAttribute(node, exports.AnimationElementAttributes.SCALE_X, this.scale.x);\r\n\t        this.scale.y = Attributes_1.Attributes.assignFloatAttribute(node, exports.AnimationElementAttributes.SCALE_Y, this.scale.y);\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.SCALE)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.AnimationElementAttributes.SCALE));\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.AnimationElementAttributes.SCALE));\r\n\t        }\r\n\t        this.position.x = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.X, this.position.x);\r\n\t        this.position.y = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.Y, this.position.y);\r\n\t        this.pivot.x = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.PIVOT_X, this.pivot.x);\r\n\t        this.pivot.y = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.PIVOT_Y, this.pivot.y);\r\n\t        this.visible = Attributes_1.Attributes.assignBooleanAttribute(node, exports.AnimationElementAttributes.VISIBLE, this.visible);\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.CONTINUE) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.AnimationElementAttributes.CONTINUE))) {\r\n\t            this._continue = true;\r\n\t            this.playMe();\r\n\t        }\r\n\t        else {\r\n\t            this._continue = false;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.PLAY) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.AnimationElementAttributes.PLAY))) {\r\n\t            this._stop = false;\r\n\t            this._reverse = false;\r\n\t            if (node.hasAttribute(exports.AnimationElementAttributes.REVERSE) &&\r\n\t                neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.AnimationElementAttributes.REVERSE))) {\r\n\t                this._reverse = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.AnimationElementAttributes.REVERSE));\r\n\t                this.animationSpeed = this.animationSpeed * (this._reverse ? -1 : 1);\r\n\t            }\r\n\t            if (node.hasAttribute(exports.AnimationElementAttributes.SPEED)) {\r\n\t                this.animationSpeed =\r\n\t                    parseFloat(node.getAttribute(exports.AnimationElementAttributes.SPEED)) * (this._reverse ? -1 : 1);\r\n\t            }\r\n\t            if (node.hasAttribute(exports.AnimationElementAttributes.DELAY)) {\r\n\t                var range = node\r\n\t                    .getAttribute(exports.AnimationElementAttributes.DELAY)\r\n\t                    .split(\";\")\r\n\t                    .map(function (value) { return parseInt(value); });\r\n\t                if (range.length > 1 && !isNaN(range[0]) && !isNaN(range[1])) {\r\n\t                    this._delay = range[0] + Math.random() * (range[1] - range[0]);\r\n\t                    if (this._delay < 0) {\r\n\t                        this._delay = 0;\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (!isNaN(range[0])) {\r\n\t                        this._delay = range[0];\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this._delay > 0) {\r\n\t                this._timerDelay.stop();\r\n\t                this._timerDelay.start(this._delay);\r\n\t            }\r\n\t            else {\r\n\t                this.playMe();\r\n\t            }\r\n\t        }\r\n\t        else if (this._startFrame != null && this._endFrame == null) {\r\n\t            this._stop = false;\r\n\t            if (node.hasAttribute(exports.AnimationElementAttributes.DELAY) &&\r\n\t                parseInt(node.getAttribute(exports.AnimationElementAttributes.DELAY))) {\r\n\t                this._delay = parseInt(node.getAttribute(exports.AnimationElementAttributes.DELAY));\r\n\t            }\r\n\t            if (this._delay > 0) {\r\n\t                this._timerDelay.stop();\r\n\t                this._timerDelay.start(this._delay);\r\n\t            }\r\n\t            else {\r\n\t                this.playMe();\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.STOP)) {\r\n\t            this._timerDelay.stop();\r\n\t            this._stop = true;\r\n\t            if (this.playing) {\r\n\t                var endFrame = parseInt(node.getAttribute(exports.AnimationElementAttributes.STOP));\r\n\t                this.playMe(isNaN(endFrame) ? -1 : endFrame);\r\n\t            }\r\n\t        }\r\n\t        this.runPositionTween(node);\r\n\t        this.runScaleTween(node);\r\n\t        this.runRotationTween(node);\r\n\t        this.runAlphaTween(node);\r\n\t        if (false) {\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.animationDelay = function () {\r\n\t        this.playMe();\r\n\t    };\r\n\t    AnimationElement.prototype.playMe = function (frame) {\r\n\t        if (frame === void 0) { frame = -1; }\r\n\t        if (!this._continue || !this.playing) {\r\n\t            if (this._stop) {\r\n\t                if (this._reverse) {\r\n\t                    this.gotoAndStop(this._endFrame);\r\n\t                }\r\n\t                else {\r\n\t                    if (frame !== -1) {\r\n\t                        this.gotoAndStop(frame);\r\n\t                    }\r\n\t                    else {\r\n\t                        this.gotoAndStop(this._startFrame);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (this._randomStartFrame && this._startFrame === 0 && this._endFrame != null) {\r\n\t                    this._startFrame = Math.floor(Math.random() * this._endFrame);\r\n\t                }\r\n\t                if (this._reverse) {\r\n\t                    this.gotoAndPlay(this._endFrame);\r\n\t                }\r\n\t                else {\r\n\t                    this.gotoAndPlay(this._startFrame);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.getMovieClip = function () {\r\n\t        return this;\r\n\t    };\r\n\t    AnimationElement.prototype._movieClipComplete = function () {\r\n\t        this.emit(AnimationElement.AnimationComplete);\r\n\t    };\r\n\t    AnimationElement.prototype.runPositionTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_X) ||\r\n\t            !node.hasAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_Y)) {\r\n\t            return false;\r\n\t        }\r\n\t        var positionTweenX;\r\n\t        var positionTweenY;\r\n\t        var positionTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.AnimationElementAttributes.POSITION_TWEEN_POSITION, null);\r\n\t        if (positionTweenPosition == exports.AnimationElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_X)).map(function (value) { return value + _this.position.x; });\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_Y)).map(function (value) { return value + _this.position.y; });\r\n\t        }\r\n\t        else if (positionTweenPosition == exports.AnimationElementAttributes.POSITION_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_X));\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_Y));\r\n\t            if (positionTweenX.length) {\r\n\t                positionTweenX[0] = this.position.x;\r\n\t            }\r\n\t            if (positionTweenY.length) {\r\n\t                positionTweenY[0] = this.position.y;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_X));\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_Y));\r\n\t        }\r\n\t        var tweenX = positionTweenX || [];\r\n\t        var tweenY = positionTweenY || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.AnimationElementAttributes.POSITION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.POSITION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.AnimationElementAttributes.POSITION_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.POSITION_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.positionTween(this, { tweenX: tweenX, tweenY: tweenY, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    AnimationElement.prototype.runScaleTween = function (node) {\r\n\t        var _this = this;\r\n\t        var scaleTweenX;\r\n\t        var scaleTweenY;\r\n\t        var scaleTween;\r\n\t        var tweenValues = [];\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.SCALE_TWEEN_X)) {\r\n\t            scaleTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.SCALE_TWEEN_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.SCALE_TWEEN_Y)) {\r\n\t            scaleTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.SCALE_TWEEN_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.SCALE_TWEEN)) {\r\n\t            scaleTween = AnimationElement._getPointsFromPointsAttribute(node.getAttribute(exports.AnimationElementAttributes.SCALE_TWEEN));\r\n\t        }\r\n\t        var scaleTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.AnimationElementAttributes.SCALE_TWEEN_POSITION, null);\r\n\t        if (scaleTween && scaleTween.length) {\r\n\t            if (scaleTweenPosition == exports.AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                tweenValues = scaleTween.map(function (value) {\r\n\t                    return {\r\n\t                        x: value.x + _this.scale.x,\r\n\t                        y: value.y + _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t            else if (scaleTweenPosition == exports.AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                tweenValues = scaleTween;\r\n\t                if (tweenValues.length) {\r\n\t                    tweenValues[0].x = this.scale.x;\r\n\t                    tweenValues[0].y = this.scale.y;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                tweenValues = scaleTween;\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenX && scaleTweenY) {\r\n\t            if (scaleTweenX.length === scaleTweenY.length) {\r\n\t                if (scaleTweenPosition == exports.AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                    tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                        return {\r\n\t                            x: scaleXValue + _this.scale.x,\r\n\t                            y: scaleTweenY[i] + _this.scale.y,\r\n\t                        };\r\n\t                    });\r\n\t                }\r\n\t                else if (scaleTweenPosition == exports.AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                    tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                        return {\r\n\t                            x: scaleXValue,\r\n\t                            y: scaleTweenY[i],\r\n\t                        };\r\n\t                    });\r\n\t                    if (tweenValues.length) {\r\n\t                        tweenValues[0].x = this.scale.x;\r\n\t                        tweenValues[0].y = this.scale.y;\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                        return {\r\n\t                            x: scaleXValue,\r\n\t                            y: scaleTweenY[i],\r\n\t                        };\r\n\t                    });\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenX) {\r\n\t            if (scaleTweenPosition == exports.AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue + _this.scale.x,\r\n\t                        y: _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t            else if (scaleTweenPosition == exports.AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue,\r\n\t                        y: _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t                if (tweenValues.length) {\r\n\t                    tweenValues[0].x = this.scale.x;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue,\r\n\t                        y: _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenY) {\r\n\t            if (scaleTweenPosition == exports.AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                    return {\r\n\t                        x: _this.scale.x,\r\n\t                        y: scaleYValue + _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t            else if (scaleTweenPosition == exports.AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                    return {\r\n\t                        x: _this.scale.x,\r\n\t                        y: scaleYValue,\r\n\t                    };\r\n\t                });\r\n\t                if (tweenValues.length) {\r\n\t                    tweenValues[0].y = this.scale.y;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                    return {\r\n\t                        x: _this.scale.x,\r\n\t                        y: scaleYValue,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.AnimationElementAttributes.SCALE_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.SCALE_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.SCALE_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.AnimationElementAttributes.SCALE_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.AnimationElementAttributes.SCALE_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.AnimationElementAttributes.SCALE_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.SCALE_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.scaleTween(this, { tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    AnimationElement.prototype.runRotationTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.AnimationElementAttributes.ROTATION_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        var rotationTween;\r\n\t        var rotationTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.AnimationElementAttributes.ROTATION_TWEEN_POSITION, null);\r\n\t        if (rotationTweenPosition == exports.AnimationElementAttributes.ROTATION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.ROTATION_TWEEN)).map(function (value) { return value + Tweens_1.Tweens.radians2degrees(_this.rotation); });\r\n\t        }\r\n\t        else if (rotationTweenPosition == exports.AnimationElementAttributes.ROTATION_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.ROTATION_TWEEN));\r\n\t            if (rotationTween.length) {\r\n\t                rotationTween[0] = Tweens_1.Tweens.radians2degrees(this.rotation);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.ROTATION_TWEEN));\r\n\t        }\r\n\t        var degrees = rotationTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.AnimationElementAttributes.ROTATION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.ROTATION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.ROTATION_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.AnimationElementAttributes.ROTATION_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.AnimationElementAttributes.ROTATION_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.AnimationElementAttributes.ROTATION_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.ROTATION_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.rotationTween(this, { degrees: degrees, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    AnimationElement.prototype.runAlphaTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.AnimationElementAttributes.ALPHA_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        var alphaTween;\r\n\t        var alphaTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.AnimationElementAttributes.ALPHA_TWEEN_POSITION, null);\r\n\t        if (alphaTweenPosition == exports.AnimationElementAttributes.ALPHA_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.ALPHA_TWEEN)).map(function (value) { return value + _this.alpha; });\r\n\t        }\r\n\t        else if (alphaTweenPosition == exports.AnimationElementAttributes.ALPHA_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.ALPHA_TWEEN));\r\n\t            if (alphaTween.length) {\r\n\t                alphaTween[0] = this.alpha;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.ALPHA_TWEEN));\r\n\t        }\r\n\t        var alphas = alphaTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.AnimationElementAttributes.ALPHA_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.AnimationElementAttributes.ALPHA_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.AnimationElementAttributes.ALPHA_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.AnimationElementAttributes.ALPHA_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.AnimationElementAttributes.ALPHA_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.AnimationElementAttributes.ALPHA_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.AnimationElementAttributes.ALPHA_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.alphaTween(this, { alphas: alphas, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    AnimationElement._getPointsFromPointsAttribute = function (pointsString) {\r\n\t        return pointsString\r\n\t            .replace(/\\s/g, \"\")\r\n\t            .split(\";\")\r\n\t            .map(function (valuesPair) {\r\n\t            return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\r\n\t        })\r\n\t            .map(function (valuesPair) {\r\n\t            return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n\t        });\r\n\t    };\r\n\t    AnimationElement.prototype.zerosPad = function (num, size) {\r\n\t        var s = num + \"\";\r\n\t        while (s.length < size)\r\n\t            s = \"0\" + s;\r\n\t        return s;\r\n\t    };\r\n\t    AnimationElement.prototype.clone = function () {\r\n\t        var element = new AnimationElement();\r\n\t        element._style = this._style;\r\n\t        element._startFrame = this._startFrame;\r\n\t        element._endFrame = this._endFrame;\r\n\t        element._stop = this._stop;\r\n\t        element._randomStartFrame = this._randomStartFrame;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.visible = this.visible;\r\n\t        element.blendMode = this.blendMode;\r\n\t        element.tint = this.tint;\r\n\t        element.name = this.name;\r\n\t        if (this.textures != null && this.textures.length > 0) {\r\n\t            element.texture = this.texture;\r\n\t            element.textures = this.textures;\r\n\t            element.onComplete = element._movieClipComplete.bind(element);\r\n\t            if (this._style != null && this._style.loop != null) {\r\n\t                element.loop = this._style.loop;\r\n\t            }\r\n\t            if (this.animationSpeed) {\r\n\t                element.animationSpeed = this.animationSpeed;\r\n\t            }\r\n\t        }\r\n\t        element.playMe = this.playMe.bind(element);\r\n\t        element.stop = this.stop.bind(element);\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    AnimationElement.prototype.markAsCloned = function () {\r\n\t        this._markAsCloned();\r\n\t    };\r\n\t    AnimationElement.prototype._markAsCloned = function () {\r\n\t        this.assertDestroyed(\"_markAsCloned()\");\r\n\t        this._cloned = true;\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.clone(this);\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.removeAndDestroyChildren = function () {\r\n\t        this._removeAndDestroyChildren();\r\n\t    };\r\n\t    AnimationElement.prototype._removeAndDestroyChildren = function () {\r\n\t        this.assertDestroyed(\"_removeAndDestroyChildren\");\r\n\t        var destroyOptions = {\r\n\t            children: true,\r\n\t        };\r\n\t        if (this.children != null && this.children.length > 0) {\r\n\t            for (var i = this.children.length - 1; i >= 0; i--) {\r\n\t                if (this.children[i] != null) {\r\n\t                    this.children[i].destroy(destroyOptions);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.removeChildren();\r\n\t    };\r\n\t    AnimationElement.prototype.assertDestroyed = function (method) {\r\n\t        if (false) {\r\n\t            if (this.__destroyed) {\r\n\t                throw new Error(this.componentName + \"[\" + this.uid + \"] was already destroyed, calling method '\" + method + \"'\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.destroy = function (options) {\r\n\t        this.assertDestroyed(\"destroy\");\r\n\t        if (neo_common_1.Utils.isNullOrUndefined(options)) {\r\n\t            options = AnimationElement._destroyOptions;\r\n\t        }\r\n\t        this.internalDestroy(options);\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.children)) {\r\n\t            _super.prototype.destroy.call(this);\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.destroy(this);\r\n\t            }\r\n\t        }\r\n\t        this.__destroyed = true;\r\n\t    };\r\n\t    AnimationElement.prototype.internalDestroy = function (options) {\r\n\t        this.onComplete = null;\r\n\t        this.textures = [PIXI.Texture.EMPTY];\r\n\t        Tweens_1.Tweens.removeTweens(this, \"alpha\");\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        Tweens_1.Tweens.removeTweens(this, \"rotation\");\r\n\t        Tweens_1.Tweens.removeTweens(this, \"scale\");\r\n\t    };\r\n\t    AnimationElement.prototype.getDebugInfo = function () {\r\n\t        if (false) {\r\n\t            var debugInfoFn = this.debugInfo;\r\n\t            return debugInfoFn ? debugInfoFn.call(this) : this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    AnimationElement.prototype.debugInfo = function () {\r\n\t        if (false) {\r\n\t            var result = this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t            var animation = this._style ? this._style.animation : \"\";\r\n\t            if (!neo_common_1.StringUtils.isNullOrEmpty(animation)) {\r\n\t                result += \"\\nAnimation: \" + animation;\r\n\t            }\r\n\t            return result;\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    Object.defineProperty(AnimationElement.prototype, \"cloned\", {\r\n\t        get: function () {\r\n\t            return this._cloned;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AnimationElement.prototype, \"destroyed\", {\r\n\t        get: function () {\r\n\t            return this.__destroyed;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AnimationElement.prototype, \"uid\", {\r\n\t        get: function () {\r\n\t            return this._uid;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AnimationElement.prototype, \"componentName\", {\r\n\t        get: function () {\r\n\t            return this.__componentName__;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    AnimationElement.prototype.degrees2radians = function (degrees) {\r\n\t        return degrees * (Math.PI / 180);\r\n\t    };\r\n\t    AnimationElement.prototype.changeAnimationSpeed = function (speed) {\r\n\t        this.animationSpeed = speed;\r\n\t    };\r\n\t    AnimationElement.prototype._printDebugInfo = function (text, node) {\r\n\t        if (false) {\r\n\t            if (this.getChildByName(exports.AnimationElementAttributes.DEBUG_INFO) != null) {\r\n\t                this.removeChild(this.getChildByName(exports.AnimationElementAttributes.DEBUG_INFO));\r\n\t            }\r\n\t            if (node == undefined ||\r\n\t                (node.hasAttribute(exports.AnimationElementAttributes.DEBUG_INFO) &&\r\n\t                    node.getAttribute(exports.AnimationElementAttributes.DEBUG_INFO) === \"true\")) {\r\n\t                var textInfo = new TextElement_1.TextElement();\r\n\t                textInfo.name = exports.AnimationElementAttributes.DEBUG_INFO;\r\n\t                textInfo.x = textInfo.y = 0;\r\n\t                textInfo.style.fill = 0xffffff;\r\n\t                textInfo.style.fontSize = 12;\r\n\t                textInfo.text = JSON.stringify(text, null, 4);\r\n\t                this.addChild(textInfo);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.prototype.logError = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.errorGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    AnimationElement.AnimationComplete = \"animationComplete\";\r\n\t    AnimationElement.DynamicTint = \"ff0000\";\r\n\t    AnimationElement._destroyOptions = {\r\n\t        children: true,\r\n\t    };\r\n\t    AnimationElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], AnimationElement);\r\n\t    return AnimationElement;\r\n\t}(PIXI.extras.AnimatedSprite));\r\n\texports.AnimationElement = AnimationElement;\r\n\texports.AnimationElementAttributes = {\r\n\t    ALPHA: \"Alpha\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    ALPHA_TWEEN_KEY_TIMES: \"AlphaTweenKeyTimes\",\r\n\t    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\r\n\t    ALPHA_TWEEN_POSITION: \"AlphaTweenPosition\",\r\n\t    ALPHA_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    ANCHOR: \"Anchor\",\r\n\t    BITMAP_MASK: \"BitmapMask\",\r\n\t    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\r\n\t    BITMAP_MASK_X: \"BitmapMaskX\",\r\n\t    BITMAP_MASK_Y: \"BitmapMaskY\",\r\n\t    CONTINUE: \"Continue\",\r\n\t    DEBUG_INFO: \"DebugInfo\",\r\n\t    DEBUG: \"Debug\",\r\n\t    MASK: \"Mask\",\r\n\t    PIVOT_X: \"PivotX\",\r\n\t    PIVOT_Y: \"PivotY\",\r\n\t    PLAY: \"Play\",\r\n\t    DELAY: \"Delay\",\r\n\t    POSITION_TWEEN_X: \"PositionTweenX\",\r\n\t    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n\t    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n\t    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n\t    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\r\n\t    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n\t    POSITION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\r\n\t    POSITION_TWEEN_KEY_TIMES: \"PositionTweenKeyTimes\",\r\n\t    RANDOM_START_FRAME: \"RandomStartFrame\",\r\n\t    REVERSE: \"Reverse\",\r\n\t    ROTATION: \"Rotation\",\r\n\t    ROTATION_TWEEN: \"RotationTween\",\r\n\t    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n\t    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n\t    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\t    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\r\n\t    ROTATION_TWEEN_KEY_TIMES: \"RotationTweenKeyTimes\",\r\n\t    ROTATION_TWEEN_POSITION: \"RotationTweenPosition\",\r\n\t    ROTATION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    SCALE_TWEEN: \"ScaleTween\",\r\n\t    SCALE_TWEEN_X: \"ScaleTweenX\",\r\n\t    SCALE_TWEEN_Y: \"ScaleTweenY\",\r\n\t    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n\t    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\r\n\t    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n\t    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\r\n\t    SCALE_TWEEN_KEY_TIMES: \"ScaleTweenKeyTimes\",\r\n\t    SCALE_TWEEN_POSITION: \"ScaleTweenPosition\",\r\n\t    SCALE_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    SCALE_X: \"ScaleX\",\r\n\t    SCALE_Y: \"ScaleY\",\r\n\t    SCALE: \"Scale\",\r\n\t    START_ROTATION: \"StartRotation\",\r\n\t    SPEED: \"Speed\",\r\n\t    STOP: \"Stop\",\r\n\t    STYLE: \"Style\",\r\n\t    STYLE2: \"Style2\",\r\n\t    TINT: \"Tint\",\r\n\t    VISIBLE: \"Visible\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t};\r\n\n\n/***/ },\n/* 101 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ComponentAttributes_1 = __webpack_require__(68);\r\n\tvar TextElement = (function (_super) {\r\n\t    __extends(TextElement, _super);\r\n\t    function TextElement() {\r\n\t        _super.call(this);\r\n\t        this.text = \"\";\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                this._uid = PerfDebug.generateElementUID(this);\r\n\t                PerfDebug.newElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    TextElement.prototype.create = function (node) {\r\n\t        if (this.name == null) {\r\n\t            this.name = node.nodeName;\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.FONT)) {\r\n\t            this.style.fontFamily = node.getAttribute(ComponentAttributes_1.TextElementAttributes.FONT);\r\n\t        }\r\n\t        this.updateByNode(node);\r\n\t    };\r\n\t    TextElement.prototype.updateByNode = function (node) {\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.TEXT)) {\r\n\t            this.text = node.getAttribute(ComponentAttributes_1.TextElementAttributes.TEXT);\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.TEXT_ALIGN)) {\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.TEXT_BASELINE)) {\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.SIZE)) {\r\n\t            this.style.fontSize = parseInt(node.getAttribute(ComponentAttributes_1.TextElementAttributes.SIZE));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.ALPHA)) {\r\n\t            this.alpha = parseFloat(node.getAttribute(ComponentAttributes_1.TextElementAttributes.ALPHA));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.ROTATION)) {\r\n\t            this.rotation = parseInt(node.getAttribute(ComponentAttributes_1.TextElementAttributes.ROTATION));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.START_ROTATION)) {\r\n\t            if (node.getAttribute(ComponentAttributes_1.TextElementAttributes.START_ROTATION) === ComponentAttributes_1.TextElementAttributes.START_ROTATION) {\r\n\t                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.SCALE_X)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(ComponentAttributes_1.TextElementAttributes.SCALE_X));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.SCALE_Y)) {\r\n\t            this.scale.y = parseFloat(node.getAttribute(ComponentAttributes_1.TextElementAttributes.SCALE_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.SCALE)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(ComponentAttributes_1.TextElementAttributes.SCALE));\r\n\t            this.scale.y = parseFloat(node.getAttribute(ComponentAttributes_1.TextElementAttributes.SCALE));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.X)) {\r\n\t            this.position.x = parseInt(node.getAttribute(ComponentAttributes_1.TextElementAttributes.X));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.Y)) {\r\n\t            this.position.y = parseInt(node.getAttribute(ComponentAttributes_1.TextElementAttributes.Y));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.PIVOT_X)) {\r\n\t            this.pivot.x = parseInt(node.getAttribute(ComponentAttributes_1.TextElementAttributes.PIVOT_X));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.PIVOT_Y)) {\r\n\t            this.pivot.y = parseInt(node.getAttribute(ComponentAttributes_1.TextElementAttributes.PIVOT_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.VISIBLE)) {\r\n\t            this.visible = neo_common_1.StringUtils.parseBoolean(node.getAttribute(ComponentAttributes_1.TextElementAttributes.VISIBLE));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.TextElementAttributes.TINT)) {\r\n\t            if (node.getAttribute(ComponentAttributes_1.TextElementAttributes.TINT) === \"0\") {\r\n\t                this.style.fill = null;\r\n\t            }\r\n\t            else {\r\n\t                this.style.fill = parseInt(node.getAttribute(ComponentAttributes_1.TextElementAttributes.TINT), 16);\r\n\t            }\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TextElement.prototype.markAsCloned = function () {\r\n\t        this._markAsCloned();\r\n\t    };\r\n\t    TextElement.prototype._markAsCloned = function () {\r\n\t        this.assertDestroyed(\"markAsCloned()\");\r\n\t        this._cloned = true;\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.clone(this);\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TextElement.prototype.assertDestroyed = function (method) {\r\n\t        if (false) {\r\n\t            if (this.__destroyed) {\r\n\t                throw new Error(this.componentName + \"[\" + this.uid + \"] was already destroyed, calling method '\" + method + \"'\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(TextElement.prototype, \"componentName\", {\r\n\t        get: function () {\r\n\t            return this.__componentName__;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(TextElement.prototype, \"uid\", {\r\n\t        get: function () {\r\n\t            return this._uid;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    TextElement.prototype.getDebugInfo = function () {\r\n\t        if (false) {\r\n\t            var debugInfoFn = this.debugInfo;\r\n\t            return debugInfoFn ? debugInfoFn.call(this) : this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    TextElement.prototype.debugInfo = function () {\r\n\t        if (false) {\r\n\t            var result = this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t            return result;\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    TextElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], TextElement);\r\n\t    return TextElement;\r\n\t}(PIXI.Text));\r\n\texports.TextElement = TextElement;\r\n\n\n/***/ },\n/* 102 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ImageElement_1 = __webpack_require__(103);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar StyleManager_1 = __webpack_require__(18);\r\n\tvar ParticleStyle_1 = __webpack_require__(104);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar CustomUtils_1 = __webpack_require__(20);\r\n\tvar AnimationElement_1 = __webpack_require__(100);\r\n\tvar ParticleElement = (function (_super) {\r\n\t    __extends(ParticleElement, _super);\r\n\t    function ParticleElement() {\r\n\t        _super.call(this);\r\n\t        this._pool = [];\r\n\t        this._timer = FrameTimer_1.CreateFrameTimer(\"particleTimer\");\r\n\t        this._timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.addParticles.bind(this));\r\n\t        this._blendMode = 0;\r\n\t        this._created = false;\r\n\t        this._stopping = false;\r\n\t        this._stop = true;\r\n\t        this._emitOnce = false;\r\n\t        this._preGenerate = false;\r\n\t        this._startType = \"\";\r\n\t        this._randomStartFrame = false;\r\n\t        this._maxEmit = 1;\r\n\t        this.visible = false;\r\n\t        this._target = this;\r\n\t    }\r\n\t    ParticleElement.prototype.createByNode = function (node) {\r\n\t        if (!this._created) {\r\n\t            _super.prototype.createByNode.call(this, node);\r\n\t            if (node.hasAttribute(exports.ParticleElementAttributes.EMIT_ONCE)) {\r\n\t                this._emitOnce = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.EMIT_ONCE));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.ParticleElementAttributes.PRE_GENERATE)) {\r\n\t                this._preGenerate = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.PRE_GENERATE));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.ParticleElementAttributes.BLEND_MODE)) {\r\n\t                this._blendMode = parseInt(node.getAttribute(exports.ParticleElementAttributes.BLEND_MODE));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.ParticleElementAttributes.RANDOM_START_FRAME)) {\r\n\t                this._randomStartFrame = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.RANDOM_START_FRAME));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.ParticleElementAttributes.STYLE) ||\r\n\t                node.hasAttribute(exports.ParticleElementAttributes.STYLE2)) {\r\n\t                if (node.hasAttribute(exports.ParticleElementAttributes.STYLE)) {\r\n\t                    this._style = (StyleManager_1.StyleManager.Styles[node.getAttribute(exports.ParticleElementAttributes.STYLE)]);\r\n\t                }\r\n\t                else {\r\n\t                    this._style = (StyleManager_1.StyleManager.Styles[node.getAttribute(exports.ParticleElementAttributes.STYLE2)]);\r\n\t                }\r\n\t                this._styleName = this._style.name;\r\n\t            }\r\n\t            this.createParticles();\r\n\t            this._created = true;\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.updateByNode = function (node) {\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.ParticleElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.ParticleElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.ParticleElementAttributes.MAX_EMIT)) {\r\n\t            this._maxEmit = parseInt(node.getAttribute(exports.ParticleElementAttributes.MAX_EMIT));\r\n\t            this._maxEmit = this._maxEmit * 0.01;\r\n\t            if (this._maxEmit > 1) {\r\n\t                this._maxEmit = 1;\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ParticleElementAttributes.START_TYPE)) {\r\n\t            this._startType = node.getAttribute(exports.ParticleElementAttributes.START_TYPE);\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ParticleElementAttributes.START) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.START))) {\r\n\t            this.start(this._emitOnce, this._startType);\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ParticleElementAttributes.STOPPING) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.STOPPING))) {\r\n\t            this.stopping();\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ParticleElementAttributes.STOP) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.STOP))) {\r\n\t            this.stop();\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ParticleElementAttributes.RESET) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.RESET))) {\r\n\t            this.reset();\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ParticleElementAttributes.CLEAR) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ParticleElementAttributes.CLEAR))) {\r\n\t            this.clear();\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.createParticles = function () {\r\n\t        if (this._style != null) {\r\n\t            if (this._style.images != null && this._style.images.length > 0) {\r\n\t                var count = this._emitOnce ? this._style.count : this._style.calculateElements();\r\n\t                for (var i = 0; i < count; i++) {\r\n\t                    var particle = this.createParticle();\r\n\t                    this._pool.push(particle);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.createParticle = function () {\r\n\t        var particle;\r\n\t        particle = this.createParticleResource();\r\n\t        this.setupParticle(particle);\r\n\t        if (this._preGenerate) {\r\n\t            this.setupPosition(particle);\r\n\t            this.addBehaviour(particle);\r\n\t        }\r\n\t        this.addChild(particle);\r\n\t        return particle;\r\n\t    };\r\n\t    ParticleElement.prototype.createParticleResource = function () {\r\n\t        if (this._style != null) {\r\n\t            var resource = null;\r\n\t            var resourceId = this.getRandomResource();\r\n\t            if (resourceId.indexOf(\"GFX_\") > -1) {\r\n\t                resource = new ImageElement_1.ImageElement(StageController_1.StageController.getTextureByResourceId(resourceId));\r\n\t                resource.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this._blendMode);\r\n\t            }\r\n\t            else if (resourceId.indexOf(\"ANI_\") > -1) {\r\n\t                var node = document.createElement(\"Animation\");\r\n\t                node.setAttribute(\"Style2\", resourceId);\r\n\t                node.setAttribute(\"RandomStartFrame\", this._randomStartFrame.toString());\r\n\t                resource = new AnimationElement_1.AnimationElement();\r\n\t                resource.create(node);\r\n\t            }\r\n\t            var localBounds = resource.getLocalBounds();\r\n\t            resource.pivot.set(localBounds.width / 2, localBounds.height / 2);\r\n\t            return resource;\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ParticleElement.prototype.getRandomResource = function () {\r\n\t        return this._style.images[Math.floor(Math.random() * this._style.images.length)];\r\n\t    };\r\n\t    ParticleElement.prototype.setupParticle = function (particle) {\r\n\t        this.setVisibility(particle, false);\r\n\t        particle.usedInPool = false;\r\n\t        return particle;\r\n\t    };\r\n\t    ParticleElement.prototype.setVisibility = function (particle, visible) {\r\n\t        particle.visible = visible;\r\n\t        if (particle instanceof AnimationElement_1.AnimationElement) {\r\n\t            if (visible) {\r\n\t                particle.playMe();\r\n\t            }\r\n\t            else {\r\n\t                particle.stop();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.setupPosition = function (particle) {\r\n\t        var startX = 0;\r\n\t        var startY = 0;\r\n\t        switch (this._style.positionZone.type) {\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneRectangle:\r\n\t                startX = this._style.positionZone.x + Math.random() * this._style.positionZone.width;\r\n\t                startY = this._style.positionZone.y + Math.random() * this._style.positionZone.height;\r\n\t                if (this._style.positionZone.innerWidth != -1 && this._style.positionZone.innerHeight != -1) {\r\n\t                    var centerX = this._style.positionZone.x + this._style.positionZone.width / 2;\r\n\t                    var centerY = this._style.positionZone.y + this._style.positionZone.height / 2;\r\n\t                    var innerCenterX = this._style.positionZone.innerX + this._style.positionZone.innerWidth / 2;\r\n\t                    var innerCenterY = this._style.positionZone.innerY + this._style.positionZone.innerHeight / 2;\r\n\t                    var correctX = Math.random() > 0.5;\r\n\t                    if (correctX) {\r\n\t                        if (startX > centerX) {\r\n\t                            startX = this.getRandom(innerCenterX + this._style.positionZone.innerWidth * 0.5, centerX + this._style.positionZone.width * 0.5);\r\n\t                        }\r\n\t                        else {\r\n\t                            startX = this.getRandom(0, innerCenterX - this._style.positionZone.innerWidth * 0.5);\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (startY > centerY) {\r\n\t                            startY = this.getRandom(innerCenterY + this._style.positionZone.innerHeight * 0.5, centerY + this._style.positionZone.height * 0.5);\r\n\t                        }\r\n\t                        else {\r\n\t                            startY = this.getRandom(0, innerCenterY - this._style.positionZone.innerHeight * 0.5);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                particle.x = startX;\r\n\t                particle.y = startY;\r\n\t                break;\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneTarget:\r\n\t                startX =\r\n\t                    this._target.x +\r\n\t                        Math.random() * this._style.positionZone.width -\r\n\t                        this._style.positionZone.width / 2;\r\n\t                startY =\r\n\t                    this._target.y +\r\n\t                        Math.random() * this._style.positionZone.height -\r\n\t                        this._style.positionZone.height / 2;\r\n\t                particle.x = startX;\r\n\t                particle.y = startY;\r\n\t                break;\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneLine:\r\n\t                break;\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneEllipse:\r\n\t                startX = this._style.positionZone.x;\r\n\t                startY = this._style.positionZone.y;\r\n\t                var radianDegrees = Math.floor(this.getRandom(this._style.positionZone.startAngle, this._style.positionZone.angle));\r\n\t                var radian = this.degrees2radians(radianDegrees);\r\n\t                if (this._style.positionZone.innerRadius > 0) {\r\n\t                    var radius = this.getRandom(this._style.positionZone.minInnerRadius, this._style.positionZone.innerRadius);\r\n\t                    var radiusB = this.getRandom(this._style.positionZone.minInnerRadiusB, this._style.positionZone.innerRadiusB);\r\n\t                    startX = Math.floor(this._style.positionZone.innerX + radius * Math.cos(radian));\r\n\t                    startY = Math.floor(this._style.positionZone.innerY + radiusB * Math.sin(radian));\r\n\t                }\r\n\t                particle.x = startX;\r\n\t                particle.y = startY;\r\n\t                particle.rotation = radian;\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.setTargetElement = function (element) {\r\n\t        this._target = element;\r\n\t    };\r\n\t    ParticleElement.prototype.addBehaviour = function (particle) {\r\n\t        var particleLife = Math.floor(Math.random() * (this._style.maxLife - this._style.minLife)) + this._style.minLife;\r\n\t        this.addPathBehaviour(particle, particleLife);\r\n\t        this.addScaleBehaviour(particle, particleLife);\r\n\t        this.addRotationBehaviour(particle, particleLife);\r\n\t        this.addAlphaBehaviour(particle, particleLife);\r\n\t    };\r\n\t    ParticleElement.prototype.addPathBehaviour = function (particle, life) {\r\n\t        switch (this._style.positionZone.type) {\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneRectangle:\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneTarget:\r\n\t                this.addRectanglePathBehavior(particle, life);\r\n\t                break;\r\n\t            case ParticleStyle_1.ParticleStyle.ZoneEllipse:\r\n\t                this.addEllipsePathBehavior(particle, life);\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.addRectanglePathBehavior = function (particle, life) {\r\n\t        if (this._style.pathValues != null) {\r\n\t            var pointsX = [];\r\n\t            var pointsY = [];\r\n\t            for (var i = 0; i < this._style.pathValues.length; i++) {\r\n\t                if (this._style.pathValues[i] != null &&\r\n\t                    this._style.pathValues[i].x != null &&\r\n\t                    this._style.pathValues[i].y != null) {\r\n\t                    var valueX = this._style.pathValues[i].x;\r\n\t                    var valueY = this._style.pathValues[i].y;\r\n\t                    if (this._style.pathValues[i].randomX != null) {\r\n\t                        valueX += Math.floor((Math.random() - 0.5) * this._style.pathValues[i].randomX);\r\n\t                    }\r\n\t                    if (this._style.pathValues[i].relative && pointsX.length > 0) {\r\n\t                        valueX += pointsX[pointsX.length - 1];\r\n\t                    }\r\n\t                    if (this._style.pathValues[i].randomY != null) {\r\n\t                        valueY += Math.floor((Math.random() - 0.5) * this._style.pathValues[i].randomY);\r\n\t                    }\r\n\t                    if (this._style.pathValues[i].relative && pointsY.length > 0) {\r\n\t                        valueY += pointsY[pointsY.length - 1];\r\n\t                    }\r\n\t                    pointsX.push(particle.x + valueX);\r\n\t                    pointsY.push(particle.y + valueY);\r\n\t                }\r\n\t            }\r\n\t            if (pointsX.length >= 2) {\r\n\t                Tweens_1.Tweens.positionTween(particle, {\r\n\t                    tweenEase: this._style.pathEase,\r\n\t                    tweenX: pointsX,\r\n\t                    tweenY: pointsY,\r\n\t                    tweenDuration: life,\r\n\t                    keyTimes: this._style.pathKeyTimes,\r\n\t                    paused: false,\r\n\t                    callbackFunction: this.removeFromPool,\r\n\t                    callbackParams: [particle],\r\n\t                    callbackScope: null,\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.addEllipsePathBehavior = function (particle, life) {\r\n\t        var radius = this.getRandom(this._style.positionZone.minRadius, this._style.positionZone.radius);\r\n\t        var radiusB = this.getRandom(this._style.positionZone.minRadiusB, this._style.positionZone.radiusB);\r\n\t        var finalX = Math.floor(this._style.positionZone.x + radius * Math.cos(particle.rotation));\r\n\t        var finalY = Math.floor(this._style.positionZone.y + radiusB * Math.sin(particle.rotation));\r\n\t        if (this._style.pathValues != null && this._style.pathValues.length > 0) {\r\n\t            var pointsX = [];\r\n\t            var pointsY = [];\r\n\t            if (this._style.pathValues.length == 1) {\r\n\t                this._style.pathValues[1] = this._style.pathValues[0];\r\n\t            }\r\n\t            for (var i = 0; i < this._style.pathValues.length; i++) {\r\n\t                if (this._style.pathValues[i] != null &&\r\n\t                    this._style.pathValues[i].x != null &&\r\n\t                    this._style.pathValues[i].y != null) {\r\n\t                    var valueX = this._style.pathValues[i].x;\r\n\t                    var valueY = this._style.pathValues[i].y;\r\n\t                    var ratio = i / (this._style.pathValues.length - 1);\r\n\t                    if (this._style.pathValues[i].randomX != null) {\r\n\t                        valueX += Math.floor((Math.random() - 0.5) * this._style.pathValues[i].randomX);\r\n\t                    }\r\n\t                    if (this._style.pathValues[i].relative && pointsX.length > 0) {\r\n\t                        valueX += pointsX[pointsX.length - 1];\r\n\t                    }\r\n\t                    if (this._style.pathValues[i].randomY != null) {\r\n\t                        valueY += Math.floor((Math.random() - 0.5) * this._style.pathValues[i].randomY);\r\n\t                    }\r\n\t                    if (this._style.pathValues[i].relative && pointsY.length > 0) {\r\n\t                        valueY += pointsY[pointsY.length - 1];\r\n\t                    }\r\n\t                    var adjustedX = particle.x + (finalX - particle.x) * ratio + valueX;\r\n\t                    var adjustedY = particle.y + (finalY - particle.y) * ratio + valueY;\r\n\t                    pointsX.push(adjustedX);\r\n\t                    pointsY.push(adjustedY);\r\n\t                }\r\n\t            }\r\n\t            if (pointsX.length > 1) {\r\n\t                Tweens_1.Tweens.positionTween(particle, {\r\n\t                    tweenX: pointsX,\r\n\t                    tweenY: pointsY,\r\n\t                    tweenEase: this._style.pathEase,\r\n\t                    tweenDuration: life,\r\n\t                    keyTimes: this._style.pathKeyTimes,\r\n\t                    paused: false,\r\n\t                    callbackFunction: this.removeFromPool,\r\n\t                    callbackParams: [particle],\r\n\t                    callbackScope: null,\r\n\t                });\r\n\t            }\r\n\t            else if (pointsX.length === 1) {\r\n\t                Tweens_1.Tweens.positionTween(particle, {\r\n\t                    tweenX: [particle.x, pointsX[0]],\r\n\t                    tweenY: [particle.y, pointsY[0]],\r\n\t                    tweenEase: this._style.pathEase,\r\n\t                    tweenDuration: life,\r\n\t                    keyTimes: this._style.pathKeyTimes,\r\n\t                    paused: false,\r\n\t                    callbackFunction: this.removeFromPool,\r\n\t                    callbackParams: [particle],\r\n\t                    callbackScope: null,\r\n\t                });\r\n\t            }\r\n\t            else if (pointsX.length === 0) {\r\n\t                Tweens_1.Tweens.positionTween(particle, {\r\n\t                    tweenX: [particle.x, finalX],\r\n\t                    tweenY: [particle.y, finalY],\r\n\t                    tweenEase: this._style.pathEase,\r\n\t                    tweenDuration: life,\r\n\t                    keyTimes: this._style.pathKeyTimes,\r\n\t                    paused: false,\r\n\t                    callbackFunction: this.removeFromPool,\r\n\t                    callbackParams: [particle],\r\n\t                    callbackScope: null,\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            Tweens_1.Tweens.positionTween(particle, {\r\n\t                tweenX: [particle.x, finalX],\r\n\t                tweenY: [particle.y, finalY],\r\n\t                tweenEase: this._style.pathEase,\r\n\t                tweenDuration: life,\r\n\t                keyTimes: this._style.pathKeyTimes,\r\n\t                paused: false,\r\n\t                callbackFunction: this.removeFromPool,\r\n\t                callbackParams: [particle],\r\n\t                callbackScope: null,\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.addScaleBehaviour = function (particle, life) {\r\n\t        if (this._style.scaleValues != null) {\r\n\t            var scalePoints = [];\r\n\t            for (var i = 0; i < this._style.scaleValues.length; i++) {\r\n\t                var valueX = this._style.scaleValues[i].x;\r\n\t                var valueY = this._style.scaleValues[i].y;\r\n\t                if (this._style.scaleValues[i].randomX != null) {\r\n\t                    valueX += (Math.random() - 0.5) * this._style.scaleValues[i].randomX;\r\n\t                }\r\n\t                if (this._style.scaleValues[i].relative && scalePoints.length > 0) {\r\n\t                    valueX += scalePoints[scalePoints.length - 1].x;\r\n\t                }\r\n\t                if (this._style.scaleValues[i].y === null) {\r\n\t                    valueY = valueX;\r\n\t                }\r\n\t                else {\r\n\t                    if (this._style.scaleValues[i].randomY != null) {\r\n\t                        valueY += (Math.random() - 0.5) * this._style.scaleValues[i].randomY;\r\n\t                    }\r\n\t                    if (this._style.scaleValues[i].relative && scalePoints.length > 0) {\r\n\t                        valueY += scalePoints[scalePoints.length - 1].y;\r\n\t                    }\r\n\t                }\r\n\t                scalePoints.push(new PIXI.Point(valueX, valueY));\r\n\t            }\r\n\t            if (scalePoints.length === 1) {\r\n\t                particle.scale.x = scalePoints[0].x;\r\n\t                particle.scale.y = scalePoints[0].y;\r\n\t            }\r\n\t            else if (scalePoints.length > 1) {\r\n\t                Tweens_1.Tweens.scaleTween(particle, {\r\n\t                    tweenValues: scalePoints,\r\n\t                    tweenEase: this._style.scaleEase,\r\n\t                    tweenDuration: life,\r\n\t                    keyTimes: this._style.scaleKeyTimes,\r\n\t                    paused: false,\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.addRotationBehaviour = function (particle, life) {\r\n\t        if (this._style.rotationValues != null && this._style.rotationValues.length > 1) {\r\n\t            var points = [];\r\n\t            for (var i = 0; i < this._style.rotationValues.length; i++) {\r\n\t                if (this._style.rotationValues[i] != null && this._style.rotationValues[i].value != null) {\r\n\t                    var value = this._style.rotationValues[i].value;\r\n\t                    if (this._style.rotationValues[i].randomValue != null) {\r\n\t                        value += Math.floor((Math.random() - 0.5) * this._style.rotationValues[i].randomValue);\r\n\t                    }\r\n\t                    if (this._style.rotationValues[i].relative && points.length > 0) {\r\n\t                        value += points[points.length - 1];\r\n\t                    }\r\n\t                    points.push(value);\r\n\t                }\r\n\t            }\r\n\t            Tweens_1.Tweens.rotationTween(particle, {\r\n\t                degrees: points,\r\n\t                tweenDuration: life,\r\n\t                tweenEase: this._style.rotationEase,\r\n\t                keyTimes: this._style.rotationKeyTimes,\r\n\t                paused: false,\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.addAlphaBehaviour = function (particle, life) {\r\n\t        if (this._style.alphaValues != null) {\r\n\t            var alphas = [];\r\n\t            for (var i = 0; i < this._style.alphaValues.length; i++) {\r\n\t                if (this._style.alphaValues[i] != null && this._style.alphaValues[i].value != null) {\r\n\t                    var value = this._style.alphaValues[i].value;\r\n\t                    if (this._style.alphaValues[i].randomValue != null) {\r\n\t                        value += Math.floor((Math.random() - 0.5) * this._style.alphaValues[i].randomValue);\r\n\t                    }\r\n\t                    if (this._style.alphaValues[i].relative && alphas.length > 0) {\r\n\t                        value += alphas[alphas.length - 1];\r\n\t                    }\r\n\t                    alphas.push(value);\r\n\t                }\r\n\t            }\r\n\t            Tweens_1.Tweens.alphaTween(particle, {\r\n\t                alphas: alphas,\r\n\t                tweenDuration: life,\r\n\t                tweenEase: this._style.alphaEase,\r\n\t                keyTimes: this._style.alphaKeyTimes,\r\n\t                paused: false,\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.addParticles = function () {\r\n\t        if (!this._stop) {\r\n\t            var tabActive = true;\r\n\t            if (document.visibilityState != null && document.visibilityState === \"hidden\") {\r\n\t                tabActive = false;\r\n\t            }\r\n\t            if (tabActive) {\r\n\t                this.getFromPool();\r\n\t            }\r\n\t            if (!this._stopping) {\r\n\t                this._timer.start(this._style.time);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.getFreeParticleIndex = function () {\r\n\t        for (var i = 0; i < this._pool.length; i++) {\r\n\t            if (!this._pool[i].usedInPool) {\r\n\t                return i;\r\n\t            }\r\n\t        }\r\n\t        return -1;\r\n\t    };\r\n\t    ParticleElement.prototype.getFromPool = function () {\r\n\t        var count = Math.floor(this._style.count * this._maxEmit);\r\n\t        for (var i = 0; i < count; i++) {\r\n\t            var particle = void 0;\r\n\t            var index = this.getFreeParticleIndex();\r\n\t            if (index == -1) {\r\n\t                particle = this.createParticle();\r\n\t                this._pool.push(particle);\r\n\t            }\r\n\t            else {\r\n\t                particle = this._pool[index];\r\n\t            }\r\n\t            if (particle != null) {\r\n\t                particle.usedInPool = true;\r\n\t                this.setVisibility(particle, true);\r\n\t                if (this._preGenerate) {\r\n\t                    Tweens_1.Tweens.restartTweens(particle.uid);\r\n\t                }\r\n\t                else {\r\n\t                    Tweens_1.Tweens.removeTweens(particle);\r\n\t                    this.setupPosition(particle);\r\n\t                    this.addBehaviour(particle);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.start = function (emitOnce, startType) {\r\n\t        if (emitOnce === void 0) { emitOnce = false; }\r\n\t        if (startType === void 0) { startType = \"\"; }\r\n\t        this.visible = true;\r\n\t        if (this._style != null) {\r\n\t            this._timer.stop();\r\n\t            this._emitOnce = emitOnce;\r\n\t            this._startType = startType;\r\n\t            this._stopping = emitOnce;\r\n\t            this._stop = false;\r\n\t            if (!this._emitOnce) {\r\n\t                this._timer.start(this._style.time);\r\n\t                if (this._startType === \"now\") {\r\n\t                    this.addParticles();\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (this._startType === \"now\") {\r\n\t                    this.addParticles();\r\n\t                }\r\n\t                else {\r\n\t                    this._timer.start(this._style.time);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.stopping = function () {\r\n\t        this._stopping = true;\r\n\t    };\r\n\t    ParticleElement.prototype.stop = function () {\r\n\t        this._stopping = false;\r\n\t        this._stop = true;\r\n\t        this._timer.stop();\r\n\t        this.visible = false;\r\n\t    };\r\n\t    ParticleElement.prototype.reset = function () {\r\n\t        for (var i = 0; i < this._pool.length; i++) {\r\n\t            this.setupPosition(this._pool[i]);\r\n\t            this.setVisibility(this._pool[i], false);\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.clear = function () {\r\n\t        this._stopping = false;\r\n\t        this._stop = true;\r\n\t        this._timer.stop();\r\n\t        this.visible = false;\r\n\t        this.removeAllFromPool();\r\n\t    };\r\n\t    ParticleElement.prototype.removeFromPool = function (particle) {\r\n\t        particle.visible = false;\r\n\t        if (particle instanceof AnimationElement_1.AnimationElement) {\r\n\t            particle.stop();\r\n\t        }\r\n\t        particle.usedInPool = false;\r\n\t    };\r\n\t    ParticleElement.prototype.removeAllFromPool = function () {\r\n\t        for (var i = 0; i < this._pool.length; i++) {\r\n\t            this.setVisibility(this._pool[i], false);\r\n\t            Tweens_1.Tweens.removeTweens(this._pool[i]);\r\n\t            this._pool[i].usedInPool = false;\r\n\t        }\r\n\t    };\r\n\t    ParticleElement.prototype.getRandom = function (min, max) {\r\n\t        return Math.random() * (max - min) + min;\r\n\t    };\r\n\t    ParticleElement.prototype.clone = function () {\r\n\t        var element = new ParticleElement();\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.visible = this.visible;\r\n\t        element._target = this._target;\r\n\t        element._blendMode = this._blendMode;\r\n\t        element._emitOnce = this._emitOnce;\r\n\t        element._preGenerate = this._preGenerate;\r\n\t        var node = document.createElement(this.name);\r\n\t        node.setAttribute(\"Style2\", this._styleName);\r\n\t        element.create(node);\r\n\t        element._markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ParticleElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ParticleElement);\r\n\t    return ParticleElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.ParticleElement = ParticleElement;\r\n\texports.ParticleElementAttributes = {\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    DEBUG: \"Debug\",\r\n\t    RANDOM_START_FRAME: \"RandomStartFrame\",\r\n\t    SPEED: \"Speed\",\r\n\t    EMIT_ONCE: \"EmitOnce\",\r\n\t    START_TYPE: \"StartType\",\r\n\t    PRE_GENERATE: \"PreGenerate\",\r\n\t    MAX_EMIT: \"MaxEmit\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    ROTATION_TWEEN: \"RotationTween\",\r\n\t    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n\t    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n\t    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\t    SCALE_TWEEN: \"ScaleTween\",\r\n\t    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n\t    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n\t    STYLE: \"Style\",\r\n\t    STYLE2: \"Style2\",\r\n\t    EXTEND_STYLE: \"ExtendStyle\",\r\n\t    START: \"Start\",\r\n\t    STOPPING: \"Stopping\",\r\n\t    STOP: \"Stop\",\r\n\t    RESET: \"Reset\",\r\n\t    CLEAR: \"Clear\",\r\n\t    IMAGE: \"Image\",\r\n\t    TINT: \"Tint\",\r\n\t    ATTR_COUNT: \"Count\",\r\n\t    ATTR_TIME: \"Time\",\r\n\t    ATTR_MIN: \"Min\",\r\n\t    ATTR_MAX: \"Max\",\r\n\t    ATTR_FROM_FRAME: \"FromFrame\",\r\n\t    ATTR_IMAGES: \"Images\",\r\n\t    ATTR_TYPE: \"Type\",\r\n\t    ATTR_X: \"X\",\r\n\t    ATTR_Y: \"Y\",\r\n\t    ATTR_RANDOM_X: \"RandomX\",\r\n\t    ATTR_RANDOM_Y: \"RandomY\",\r\n\t    ATTR_WIDTH: \"Width\",\r\n\t    ATTR_HEIGHT: \"Height\",\r\n\t    ATTR_RADIUS: \"Radius\",\r\n\t    ATTR_POSITION_RADIUS: \"PositionRadius\",\r\n\t    ATTR_RANDOM_POSITION_ANGLE: \"RandomPositionAngle\",\r\n\t    ATTR_MIN_RADIUS: \"MinRadius\",\r\n\t    ATTR_INNER_RADIUS: \"InnerRadius\",\r\n\t    ATTR_ANGLE: \"Angle\",\r\n\t    ATTR_SHOW_ANGLE: \"ShowAngle\",\r\n\t    ATTR_VALUES: \"Values\",\r\n\t    ATTR_VALUE: \"Value\",\r\n\t    IMAGE_MASK: \"ImageMask\",\r\n\t};\r\n\n\n/***/ },\n/* 103 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar ShapeElement_1 = __webpack_require__(12);\r\n\tvar Attributes_1 = __webpack_require__(19);\r\n\tvar TextElement_1 = __webpack_require__(101);\r\n\tvar CustomUtils_1 = __webpack_require__(20);\r\n\tvar ImageElement = (function (_super) {\r\n\t    __extends(ImageElement, _super);\r\n\t    function ImageElement(texture) {\r\n\t        _super.call(this, texture);\r\n\t        this.zIndex = 0;\r\n\t        this._cache = false;\r\n\t        this.usedInPool = false;\r\n\t        this._uid = this.componentName + \"_\" + neo_common_1.Utils.generateUuid();\r\n\t        this.tint = 0xffffff;\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                this._uid = PerfDebug.generateElementUID(this);\r\n\t                PerfDebug.newElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    Object.defineProperty(ImageElement.prototype, \"tweenEngine\", {\r\n\t        get: function () {\r\n\t            return this._tweenEngine;\r\n\t        },\r\n\t        set: function (engine) {\r\n\t            this._tweenEngine = engine;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ImageElement.prototype.create = function (node) {\r\n\t        this.createByNode(node);\r\n\t        this.updateByNode(node);\r\n\t    };\r\n\t    ImageElement.prototype.createByNode = function (node) {\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.ImageElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.ImageElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"alpha\");\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        Tweens_1.Tweens.removeTweens(this, \"rotation\");\r\n\t        Tweens_1.Tweens.removeTweens(this, \"scale\");\r\n\t        Tweens_1.Tweens.removeTweens(this, \"skew\");\r\n\t        if (this.name == null) {\r\n\t            this.name = node.nodeName;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.IMAGE)) {\r\n\t            this.texture = StageController_1.StageController.getTextureByResourceId(node.getAttribute(exports.ImageElementAttributes.IMAGE));\r\n\t        }\r\n\t        else if (node.hasAttribute(exports.ImageElementAttributes.FROM_FRAME)) {\r\n\t            if (node.hasAttribute(exports.ImageElementAttributes.FRAME)) {\r\n\t                var frame = parseInt(node.getAttribute(exports.ImageElementAttributes.FRAME));\r\n\t                var frameStr = frame < 10 ? \"0\" + frame : frame;\r\n\t                this.texture = StageController_1.StageController.getTextureByResourceId(node.getAttribute(exports.ImageElementAttributes.FROM_FRAME) + \"00\" + frameStr);\r\n\t            }\r\n\t            else {\r\n\t                this.texture = StageController_1.StageController.getTextureByResourceId(node.getAttribute(exports.ImageElementAttributes.FROM_FRAME));\r\n\t            }\r\n\t        }\r\n\t        else if (node.hasAttribute(exports.ImageElementAttributes.ANIMATION)) {\r\n\t            var frame = 0;\r\n\t            if (node.hasAttribute(exports.ImageElementAttributes.FRAME)) {\r\n\t                frame = parseInt(node.getAttribute(exports.ImageElementAttributes.FRAME));\r\n\t            }\r\n\t            var frameStr = frame < 10 ? \"0\" + frame : frame;\r\n\t            this.texture = StageController_1.StageController.getTextureByResourceId(node.getAttribute(exports.ImageElementAttributes.ANIMATION) + \"00\" + frameStr);\r\n\t        }\r\n\t        if (this.texture) {\r\n\t            if (node.hasAttribute(exports.ImageElementAttributes.ANCHOR)) {\r\n\t                var anchorPoints = node.getAttribute(exports.ImageElementAttributes.ANCHOR).split(\";\");\r\n\t                if (anchorPoints.length === 1) {\r\n\t                    this.anchor.x = parseFloat(anchorPoints[0]);\r\n\t                    this.anchor.y = parseFloat(anchorPoints[0]);\r\n\t                }\r\n\t                else if (anchorPoints.length === 2) {\r\n\t                    this.anchor.x = parseFloat(anchorPoints[0]);\r\n\t                    this.anchor.y = parseFloat(anchorPoints[1]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                if (!(this.texture && this.texture.baseTexture)) {\r\n\t                    this.log(\"ERROR Image has no texture\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.TWEEN_ENGINE)) {\r\n\t            this._tweenEngine = node.getAttribute(exports.ImageElementAttributes.TWEEN_ENGINE);\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.createElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t        this.updateByNode(node);\r\n\t    };\r\n\t    ImageElement.prototype.updateByNode = function (node) {\r\n\t        if (!node) {\r\n\t            this.logError(\"No node specified for element update!\");\r\n\t            return;\r\n\t        }\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.ImageElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.ImageElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        if (!node.hasAttribute(exports.ImageElementAttributes.TWEEN_PERSISTENT) ||\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ImageElementAttributes.TWEEN_PERSISTENT)) != true) {\r\n\t            Tweens_1.Tweens.removeTweens(this);\r\n\t        }\r\n\t        this._cache = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ImageElementAttributes.CACHE, this._cache);\r\n\t        this.visible = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ImageElementAttributes.VISIBLE, this.visible);\r\n\t        this.alpha = Attributes_1.Attributes.assignFloatAttribute(node, exports.ImageElementAttributes.ALPHA, this.alpha);\r\n\t        this.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this.getBlendModeByString(Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.BLEND_MODE, this.blendMode)));\r\n\t        this.pivot.x = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.PIVOT_X, this.pivot.x);\r\n\t        this.pivot.y = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.PIVOT_Y, this.pivot.y);\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.ROTATION)) {\r\n\t            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(exports.ImageElementAttributes.ROTATION)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.START_ROTATION)) {\r\n\t            if (node.getAttribute(exports.ImageElementAttributes.START_ROTATION) === exports.ImageElementAttributes.START_ROTATION) {\r\n\t                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n\t            }\r\n\t        }\r\n\t        this.position.x = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.X, this.position.x);\r\n\t        this.position.y = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.Y, this.position.y);\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SCALE_X)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.ImageElementAttributes.SCALE_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SCALE_Y)) {\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.ImageElementAttributes.SCALE_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SKEW_X)) {\r\n\t            this.skew.x = this.degrees2radians(parseFloat(node.getAttribute(exports.ImageElementAttributes.SKEW_X)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SKEW_Y)) {\r\n\t            this.skew.y = this.degrees2radians(parseFloat(node.getAttribute(exports.ImageElementAttributes.SKEW_Y)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SCALE)) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(exports.ImageElementAttributes.SCALE));\r\n\t            this.scale.y = parseFloat(node.getAttribute(exports.ImageElementAttributes.SCALE));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.CLEAR_MASK)) {\r\n\t            if (this.maskSprite) {\r\n\t                this.removeChild(this.maskSprite);\r\n\t                this.maskSprite = null;\r\n\t            }\r\n\t            if (this.maskImage) {\r\n\t                this.removeChild(this.maskImage);\r\n\t                this.maskImage = null;\r\n\t            }\r\n\t            if (this.mask) {\r\n\t                this.mask = null;\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.MASK)) {\r\n\t            var next = node.parentElement.firstElementChild;\r\n\t            while (next != null) {\r\n\t                if (next.nodeName === node.getAttribute(exports.ImageElementAttributes.MASK)) {\r\n\t                    var doNotHide = next.getAttribute(exports.ImageElementAttributes.SHOW_MASK) == \"true\";\r\n\t                    if (this.mask && this.maskImage) {\r\n\t                        next.setAttribute(\"Visible\", \"true\");\r\n\t                        this.maskImage.updateByNode(next);\r\n\t                        if (!doNotHide) {\r\n\t                            next.setAttribute(\"Visible\", \"false\");\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        switch (next.getAttribute(\"Class\")) {\r\n\t                            case \"ImageElement\":\r\n\t                                this.maskImage = new ImageElement();\r\n\t                                next.setAttribute(\"Visible\", \"true\");\r\n\t                                this.maskImage.create(next);\r\n\t                                if (!doNotHide) {\r\n\t                                    next.setAttribute(\"Visible\", \"false\");\r\n\t                                }\r\n\t                                this.addChild(this.maskImage);\r\n\t                                this.mask = this.maskImage;\r\n\t                                break;\r\n\t                            default:\r\n\t                                var shapeElement = new ShapeElement_1.ShapeElement();\r\n\t                                shapeElement.create(next);\r\n\t                                this.mask = shapeElement;\r\n\t                                break;\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t            if (this.mask == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no element with name: \" + node.getAttribute(exports.ImageElementAttributes.MASK));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.BITMAP_MASK)) {\r\n\t            var image = StageController_1.StageController.getTextureByResourceId(node.getAttribute(exports.ImageElementAttributes.BITMAP_MASK));\r\n\t            if (image != null) {\r\n\t                this.maskSprite = new PIXI.Sprite(image);\r\n\t                if (node.hasAttribute(exports.ImageElementAttributes.BITMAP_MASK_X)) {\r\n\t                    this.maskSprite.position.x = parseFloat(node.getAttribute(exports.ImageElementAttributes.BITMAP_MASK_X));\r\n\t                }\r\n\t                if (node.hasAttribute(exports.ImageElementAttributes.BITMAP_MASK_Y)) {\r\n\t                    this.maskSprite.position.y = parseFloat(node.getAttribute(exports.ImageElementAttributes.BITMAP_MASK_Y));\r\n\t                }\r\n\t                if (!node.hasAttribute(exports.ImageElementAttributes.BITMAP_MASK_SHOW)) {\r\n\t                    this.addChild(this.maskSprite);\r\n\t                    this.mask = this.maskSprite;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR\" +\r\n\t                        this.componentName +\r\n\t                        \" no image with name for mask: \" +\r\n\t                        node.getAttribute(exports.ImageElementAttributes.BITMAP_MASK));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.TINT)) {\r\n\t            var spr = void 0;\r\n\t            if (node.getAttribute(exports.ImageElementAttributes.TINT) === \"0\") {\r\n\t                this.tint = null;\r\n\t            }\r\n\t            else if (node.getAttribute(exports.ImageElementAttributes.TINT) === \"dynamic\") {\r\n\t                this.tint = parseInt(ImageElement.DynamicTint, 16);\r\n\t            }\r\n\t            else {\r\n\t                this.tint = parseInt(node.getAttribute(exports.ImageElementAttributes.TINT), 16);\r\n\t                if (this.children != null && this.children[0] != null && this.children[0] instanceof PIXI.Sprite) {\r\n\t                    spr = this.children[0];\r\n\t                    spr.tint = this.tint;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t        }\r\n\t        this.runPositionTween(node);\r\n\t        this.runScaleTween(node);\r\n\t        this.runRotationTween(node);\r\n\t        this.runAlphaTween(node);\r\n\t        this.runSkewTween(node);\r\n\t        this.runTintTween(node);\r\n\t        this.runTween(node);\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t        return this;\r\n\t    };\r\n\t    ImageElement.prototype.runAlphaTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.ImageElementAttributes.ALPHA_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"alpha\");\r\n\t        var alphaTween;\r\n\t        var alphaTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.ALPHA_TWEEN_POSITION, null);\r\n\t        if (alphaTweenPosition == exports.ImageElementAttributes.ALPHA_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.ALPHA_TWEEN)).map(function (value) { return value + _this.alpha; });\r\n\t        }\r\n\t        else if (alphaTweenPosition == exports.ImageElementAttributes.ALPHA_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.ALPHA_TWEEN));\r\n\t            if (alphaTween.length) {\r\n\t                alphaTween[0] = this.alpha;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.ALPHA_TWEEN));\r\n\t        }\r\n\t        var alphas = alphaTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.ALPHA_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.ALPHA_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.ALPHA_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.ImageElementAttributes.ALPHA_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ImageElementAttributes.ALPHA_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.ImageElementAttributes.ALPHA_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.ALPHA_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.alphaTween(this, { alphas: alphas, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    ImageElement.prototype.runPositionTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.ImageElementAttributes.POSITION_TWEEN_X) ||\r\n\t            !node.hasAttribute(exports.ImageElementAttributes.POSITION_TWEEN_Y)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        var positionTweenX;\r\n\t        var positionTweenY;\r\n\t        var positionTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.POSITION_TWEEN_POSITION, null);\r\n\t        if (positionTweenPosition === exports.ImageElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_X)).map(function (value) { return value + _this.position.x; });\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_Y)).map(function (value) { return value + _this.position.y; });\r\n\t        }\r\n\t        else if (positionTweenPosition == exports.ImageElementAttributes.POSITION_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_X));\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_Y));\r\n\t            if (positionTweenX.length) {\r\n\t                positionTweenX[0] = this.position.x;\r\n\t            }\r\n\t            if (positionTweenY.length) {\r\n\t                positionTweenY[0] = this.position.y;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            positionTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_X));\r\n\t            positionTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_Y));\r\n\t        }\r\n\t        var tweenX = positionTweenX || [];\r\n\t        var tweenY = positionTweenY || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.POSITION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.POSITION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.POSITION_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ImageElementAttributes.POSITION_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.ImageElementAttributes.POSITION_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        var bezierType;\r\n\t        var bezierCurviness;\r\n\t        var bezierPoints;\r\n\t        var bezierObject;\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.POSITION_TWEEN_BEZIER_POINTS)) {\r\n\t            bezierType = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.POSITION_TWEEN_BEZIER_TYPE, \"thru\");\r\n\t            bezierCurviness = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.POSITION_TWEEN_BEZIER_CURVINESS, 1.0);\r\n\t            bezierPoints = this.formatPoints(node.getAttribute(exports.ImageElementAttributes.POSITION_TWEEN_BEZIER_POINTS));\r\n\t            if (bezierType && bezierCurviness && bezierPoints) {\r\n\t                bezierObject = { type: bezierType, curviness: bezierCurviness, values: bezierPoints };\r\n\t            }\r\n\t        }\r\n\t        Tweens_1.Tweens.positionTween(this, {\r\n\t            bezier: bezierObject,\r\n\t            tweenX: tweenX,\r\n\t            tweenY: tweenY,\r\n\t            tweenEase: tweenEase,\r\n\t            tweenDuration: tweenDuration,\r\n\t            tweenDelay: tweenDelay,\r\n\t            tweenLoop: tweenLoop,\r\n\t            keyTimes: keyTimes,\r\n\t        });\r\n\t    };\r\n\t    ImageElement.prototype.runSkewTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.ImageElementAttributes.SKEW_TWEEN_X) &&\r\n\t            !node.hasAttribute(exports.ImageElementAttributes.SKEW_TWEEN_Y)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"skew\");\r\n\t        var skewTweenX;\r\n\t        var skewTweenY;\r\n\t        var skewTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.SKEW_TWEEN_POSITION, null);\r\n\t        if (skewTweenPosition === exports.ImageElementAttributes.SKEW_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            skewTweenX = node.hasAttribute(exports.ImageElementAttributes.SKEW_TWEEN_X)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.SKEW_TWEEN_X)).map(function (value) { return Tweens_1.Tweens.degrees2radians(value) + _this.skew.x; })\r\n\t                : null;\r\n\t            skewTweenY = node.hasAttribute(exports.ImageElementAttributes.SKEW_TWEEN_Y)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.SKEW_TWEEN_Y)).map(function (value) { return Tweens_1.Tweens.degrees2radians(value) + _this.skew.y; })\r\n\t                : null;\r\n\t        }\r\n\t        else if (skewTweenPosition == exports.ImageElementAttributes.SKEW_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            skewTweenX = node.hasAttribute(exports.ImageElementAttributes.SKEW_TWEEN_X)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.SKEW_TWEEN_X)).map(function (value) {\r\n\t                    return Tweens_1.Tweens.degrees2radians(value);\r\n\t                })\r\n\t                : null;\r\n\t            skewTweenY = node.hasAttribute(exports.ImageElementAttributes.SKEW_TWEEN_Y)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.SKEW_TWEEN_Y)).map(function (value) {\r\n\t                    return Tweens_1.Tweens.degrees2radians(value);\r\n\t                })\r\n\t                : null;\r\n\t            if (skewTweenX && skewTweenX.length) {\r\n\t                skewTweenX[0] = this.skew.x;\r\n\t            }\r\n\t            if (skewTweenY && skewTweenY.length) {\r\n\t                skewTweenY[0] = this.skew.y;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            skewTweenX = node.hasAttribute(exports.ImageElementAttributes.SKEW_TWEEN_X)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.SKEW_TWEEN_X)).map(function (value) {\r\n\t                    return Tweens_1.Tweens.degrees2radians(value);\r\n\t                })\r\n\t                : null;\r\n\t            skewTweenY = node.hasAttribute(exports.ImageElementAttributes.SKEW_TWEEN_Y)\r\n\t                ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.SKEW_TWEEN_Y)).map(function (value) {\r\n\t                    return Tweens_1.Tweens.degrees2radians(value);\r\n\t                })\r\n\t                : null;\r\n\t        }\r\n\t        var tweenX = skewTweenX || [];\r\n\t        var tweenY = skewTweenY || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.SKEW_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.SKEW_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SKEW_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.ImageElementAttributes.SKEW_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ImageElementAttributes.SKEW_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.ImageElementAttributes.SKEW_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.SKEW_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.skewTween(this, { tweenX: tweenX, tweenY: tweenY, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    ImageElement.prototype.runRotationTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.ImageElementAttributes.ROTATION_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"rotation\");\r\n\t        var rotationTween;\r\n\t        var rotationTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.ROTATION_TWEEN_POSITION, null);\r\n\t        if (rotationTweenPosition == exports.ImageElementAttributes.ROTATION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.ROTATION_TWEEN)).map(function (value) { return value + Tweens_1.Tweens.radians2degrees(_this.rotation); });\r\n\t        }\r\n\t        else if (rotationTweenPosition == exports.ImageElementAttributes.ROTATION_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.ROTATION_TWEEN));\r\n\t            if (rotationTween.length) {\r\n\t                rotationTween[0] = Tweens_1.Tweens.radians2degrees(this.rotation);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            rotationTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.ROTATION_TWEEN));\r\n\t        }\r\n\t        var degrees = rotationTween || [];\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.ROTATION_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.ROTATION_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.ROTATION_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.ImageElementAttributes.ROTATION_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ImageElementAttributes.ROTATION_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.ImageElementAttributes.ROTATION_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.ROTATION_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.rotationTween(this, { degrees: degrees, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    ImageElement.prototype.runTintTween = function (node) {\r\n\t        if (!node.hasAttribute(exports.ImageElementAttributes.TINT_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"tint\");\r\n\t        var tintTween;\r\n\t        var tintTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.TINT_TWEEN_POSITION, null);\r\n\t        if (tintTweenPosition == exports.ImageElementAttributes.TINT_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t            tintTween = node\r\n\t                .getAttribute(exports.ImageElementAttributes.TINT_TWEEN)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value, 16); });\r\n\t            if (tintTween.length) {\r\n\t                tintTween[0] = this.tint;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            tintTween = node\r\n\t                .getAttribute(exports.ImageElementAttributes.TINT_TWEEN)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value, 16); });\r\n\t        }\r\n\t        var tweenValues = tintTween || [];\r\n\t        var tween = \"tint\";\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.TINT_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.TINT_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.TINT_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.ImageElementAttributes.TINT_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ImageElementAttributes.TINT_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.ImageElementAttributes.TINT_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.TINT_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.colorTween(this, { tween: tween, tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    ImageElement.prototype.runScaleTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.ImageElementAttributes.SCALE_TWEEN_X) &&\r\n\t            !node.hasAttribute(exports.ImageElementAttributes.SCALE_TWEEN_Y) &&\r\n\t            !node.hasAttribute(exports.ImageElementAttributes.SCALE_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"scale\");\r\n\t        var scaleTweenX;\r\n\t        var scaleTweenY;\r\n\t        var scaleTween;\r\n\t        var tweenValues = [];\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SCALE_TWEEN_X)) {\r\n\t            scaleTweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.SCALE_TWEEN_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SCALE_TWEEN_Y)) {\r\n\t            scaleTweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.SCALE_TWEEN_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SCALE_TWEEN)) {\r\n\t            scaleTween = ImageElement._getPointsFromPointsAttribute(node.getAttribute(exports.ImageElementAttributes.SCALE_TWEEN));\r\n\t        }\r\n\t        var scaleTweenPosition = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.SCALE_TWEEN_POSITION, null);\r\n\t        if (scaleTween && scaleTween.length) {\r\n\t            if (scaleTweenPosition == exports.ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                tweenValues = scaleTween.map(function (value) {\r\n\t                    return {\r\n\t                        x: value.x + _this.scale.x,\r\n\t                        y: value.y + _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t            else if (scaleTweenPosition == exports.ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                tweenValues = scaleTween;\r\n\t                if (tweenValues.length) {\r\n\t                    tweenValues[0].x = this.scale.x;\r\n\t                    tweenValues[0].y = this.scale.y;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                tweenValues = scaleTween;\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenX && scaleTweenY) {\r\n\t            if (scaleTweenX.length === scaleTweenY.length) {\r\n\t                if (scaleTweenPosition == exports.ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                    tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                        return {\r\n\t                            x: scaleXValue + _this.scale.x,\r\n\t                            y: scaleTweenY[i] + _this.scale.y,\r\n\t                        };\r\n\t                    });\r\n\t                }\r\n\t                else if (scaleTweenPosition == exports.ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                    tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                        return {\r\n\t                            x: scaleXValue,\r\n\t                            y: scaleTweenY[i],\r\n\t                        };\r\n\t                    });\r\n\t                    if (tweenValues.length) {\r\n\t                        tweenValues[0].x = this.scale.x;\r\n\t                        tweenValues[0].y = this.scale.y;\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                        return {\r\n\t                            x: scaleXValue,\r\n\t                            y: scaleTweenY[i],\r\n\t                        };\r\n\t                    });\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenX) {\r\n\t            if (scaleTweenPosition == exports.ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue + _this.scale.x,\r\n\t                        y: _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t            else if (scaleTweenPosition == exports.ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue,\r\n\t                        y: _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t                if (tweenValues.length) {\r\n\t                    tweenValues[0].x = this.scale.x;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                tweenValues = scaleTweenX.map(function (scaleXValue, i) {\r\n\t                    return {\r\n\t                        x: scaleXValue,\r\n\t                        y: _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        else if (scaleTweenY) {\r\n\t            if (scaleTweenPosition == exports.ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t                tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                    return {\r\n\t                        x: _this.scale.x,\r\n\t                        y: scaleYValue + _this.scale.y,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t            else if (scaleTweenPosition == exports.ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                    return {\r\n\t                        x: _this.scale.x,\r\n\t                        y: scaleYValue,\r\n\t                    };\r\n\t                });\r\n\t                if (tweenValues.length) {\r\n\t                    tweenValues[0].y = this.scale.y;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                tweenValues = scaleTweenY.map(function (scaleYValue, i) {\r\n\t                    return {\r\n\t                        x: _this.scale.x,\r\n\t                        y: scaleYValue,\r\n\t                    };\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t        var tweenEase = Attributes_1.Attributes.assignStringAttribute(node, exports.ImageElementAttributes.SCALE_TWEEN_EASE, null);\r\n\t        var tweenDuration = Attributes_1.Attributes.assignIntAttribute(node, exports.ImageElementAttributes.SCALE_TWEEN_DURATION, 120);\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(exports.ImageElementAttributes.SCALE_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(exports.ImageElementAttributes.SCALE_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.ImageElementAttributes.SCALE_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.ImageElementAttributes.SCALE_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.SCALE_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.scaleTween(this, { tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    ImageElement.prototype.runTween = function (node) {\r\n\t        if (node.hasAttribute(Tweens_1.TweensAttributes.TWEEN)) {\r\n\t            var tweens = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN));\r\n\t            for (var i = 0; i < tweens.length; i++) {\r\n\t                if (!node.hasAttribute(Tweens_1.TweensAttributes.TWEEN_VALUES + i)) {\r\n\t                    return false;\r\n\t                }\r\n\t                var tweenValues = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_VALUES + i));\r\n\t                var tweenDuration = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DURATION + i) || \"120\");\r\n\t                var tweenEase = neo_common_1.ArrayUtils.stringArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_EASE + i) || \"linear\");\r\n\t                var tweenDelay = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Tweens_1.TweensAttributes.TWEEN_DELAY + i) || \"0\");\r\n\t                var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, Tweens_1.TweensAttributes.TWEEN_LOOP + i, null);\r\n\t                var tween = tweens[i];\r\n\t                Tweens_1.Tweens.removeTweens(this, tween);\r\n\t                if (tween == \"scale\") {\r\n\t                    tween = \"scale.x\";\r\n\t                    tweens[i] = \"scale.y\";\r\n\t                    i--;\r\n\t                }\r\n\t                Tweens_1.Tweens.customTween(this, { tween: tween, tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ImageElement.prototype.clone = function () {\r\n\t        var element = new ImageElement();\r\n\t        element.removeChildren();\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.anchor = this.anchor;\r\n\t        element.tint = this.tint;\r\n\t        element.blendMode = this.blendMode;\r\n\t        element.name = this.name;\r\n\t        element._cache = this._cache;\r\n\t        element._tweenEngine = this._tweenEngine;\r\n\t        if (this.texture != null) {\r\n\t            element.texture = this.texture;\r\n\t        }\r\n\t        if (element._cache) {\r\n\t        }\r\n\t        else {\r\n\t        }\r\n\t        if (this.maskSprite != null) {\r\n\t            var elementMask = new PIXI.Sprite(this.maskSprite.texture);\r\n\t            elementMask.position.x = this.maskSprite.position.x;\r\n\t            elementMask.position.y = this.maskSprite.position.y;\r\n\t            element.maskSprite = elementMask;\r\n\t            element.addChild(elementMask);\r\n\t            element.mask = elementMask;\r\n\t        }\r\n\t        if (this.maskImage != null) {\r\n\t            element.maskImage = this.maskImage.clone();\r\n\t            element.addChild(element.maskImage);\r\n\t            element.mask = element.maskImage;\r\n\t        }\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ImageElement.prototype.internalDestroy = function (options) {\r\n\t        Tweens_1.Tweens.removeTweens(this, \"alpha\");\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        Tweens_1.Tweens.removeTweens(this, \"rotation\");\r\n\t        Tweens_1.Tweens.removeTweens(this, \"scale\");\r\n\t        Tweens_1.Tweens.removeTweens(this, \"skew\");\r\n\t        this.texture = null;\r\n\t    };\r\n\t    ImageElement.prototype.getDebugInfo = function () {\r\n\t        if (false) {\r\n\t            var debugInfoFn = this.debugInfo;\r\n\t            return debugInfoFn ? debugInfoFn.call(this) : this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    ImageElement.prototype.debugInfo = function () {\r\n\t        if (false) {\r\n\t            var result = this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t            var imgurl = this.texture && this.texture.baseTexture ? this.texture.baseTexture.imageUrl : \"\";\r\n\t            if (!neo_common_1.StringUtils.isNullOrEmpty(imgurl)) {\r\n\t                result += \"\\nUrl: \" + imgurl;\r\n\t            }\r\n\t            return result;\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    Object.defineProperty(ImageElement.prototype, \"cloned\", {\r\n\t        get: function () {\r\n\t            return this._cloned;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ImageElement.prototype, \"destroyed\", {\r\n\t        get: function () {\r\n\t            return this.__destroyed;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ImageElement.prototype, \"uid\", {\r\n\t        get: function () {\r\n\t            return this._uid;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ImageElement.prototype, \"componentName\", {\r\n\t        get: function () {\r\n\t            return this.__componentName__;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ImageElement.prototype.destroy = function (options) {\r\n\t        this.assertDestroyed(\"destroy\");\r\n\t        if (neo_common_1.Utils.isNullOrUndefined(options)) {\r\n\t            options = ImageElement._destroyOptions;\r\n\t        }\r\n\t        this.internalDestroy(options);\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.children)) {\r\n\t            _super.prototype.destroy.call(this, options);\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.destroy(this);\r\n\t            }\r\n\t        }\r\n\t        this.__destroyed = true;\r\n\t    };\r\n\t    ImageElement.prototype.assertDestroyed = function (method) {\r\n\t        if (false) {\r\n\t            if (this.__destroyed) {\r\n\t                throw new Error(this.componentName + \"[\" + this.uid + \"] was already destroyed, calling method '\" + method + \"'\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageElement._getPointsFromPointsAttribute = function (pointsString) {\r\n\t        if (!pointsString) {\r\n\t            return [];\r\n\t        }\r\n\t        return pointsString\r\n\t            .replace(/\\s/g, \"\")\r\n\t            .split(\";\")\r\n\t            .map(function (valuesPair) {\r\n\t            return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\r\n\t        })\r\n\t            .map(function (valuesPair) {\r\n\t            return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n\t        });\r\n\t    };\r\n\t    ImageElement.prototype._markAsCloned = function () {\r\n\t        this.markAsCloned();\r\n\t    };\r\n\t    ImageElement.prototype.markAsCloned = function () {\r\n\t        this._assertDestroyed(\"markAsCloned()\");\r\n\t        this._cloned = true;\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.clone(this);\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageElement.prototype._assertDestroyed = function (method) {\r\n\t        if (false) {\r\n\t            if (this.__destroyed) {\r\n\t                throw new Error(this.componentName + \"[\" + this.uid + \"] was already destroyed, calling method '\" + method + \"'\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageElement.prototype.removeAndDestroyChildren = function () {\r\n\t        this._removeAndDestroyChildren();\r\n\t    };\r\n\t    ImageElement.prototype._removeAndDestroyChildren = function () {\r\n\t        this._assertDestroyed(\"_removeAndDestroyChildren\");\r\n\t        var destroyOptions = {\r\n\t            children: true,\r\n\t        };\r\n\t        if (this.children != null && this.children.length > 0) {\r\n\t            for (var i = this.children.length - 1; i >= 0; i--) {\r\n\t                if (this.children[i] != null) {\r\n\t                    this.children[i].destroy(destroyOptions);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.removeChildren();\r\n\t    };\r\n\t    ImageElement.prototype.degrees2radians = function (degrees) {\r\n\t        return degrees * (Math.PI / 180);\r\n\t    };\r\n\t    ImageElement.prototype.getBlendModeByString = function (mode) {\r\n\t        mode = mode.toString();\r\n\t        switch (mode) {\r\n\t            case \"0\":\r\n\t            case \"normal\":\r\n\t                return PIXI.BLEND_MODES.NORMAL;\r\n\t            case \"1\":\r\n\t            case \"add\":\r\n\t                return PIXI.BLEND_MODES.ADD;\r\n\t            case \"2\":\r\n\t            case \"multiply\":\r\n\t                return PIXI.BLEND_MODES.MULTIPLY;\r\n\t            case \"3\":\r\n\t            case \"screen\":\r\n\t                return PIXI.BLEND_MODES.SCREEN;\r\n\t            case \"4\":\r\n\t            case \"overlay\":\r\n\t                return PIXI.BLEND_MODES.OVERLAY;\r\n\t            case \"5\":\r\n\t            case \"darken\":\r\n\t                return PIXI.BLEND_MODES.DARKEN;\r\n\t            case \"6\":\r\n\t            case \"lighten\":\r\n\t                return PIXI.BLEND_MODES.LIGHTEN;\r\n\t            case \"7\":\r\n\t            case \"color_dodge\":\r\n\t                return PIXI.BLEND_MODES.COLOR_DODGE;\r\n\t            case \"8\":\r\n\t            case \"color_burn\":\r\n\t                return PIXI.BLEND_MODES.COLOR_BURN;\r\n\t            case \"9\":\r\n\t            case \"hard_light\":\r\n\t                return PIXI.BLEND_MODES.HARD_LIGHT;\r\n\t            case \"10\":\r\n\t            case \"soft_light\":\r\n\t                return PIXI.BLEND_MODES.SOFT_LIGHT;\r\n\t            case \"11\":\r\n\t            case \"difference\":\r\n\t                return PIXI.BLEND_MODES.DIFFERENCE;\r\n\t            case \"12\":\r\n\t            case \"exclusion\":\r\n\t                return PIXI.BLEND_MODES.EXCLUSION;\r\n\t            case \"13\":\r\n\t            case \"hue\":\r\n\t                return PIXI.BLEND_MODES.HUE;\r\n\t            case \"14\":\r\n\t            case \"saturation\":\r\n\t                return PIXI.BLEND_MODES.SATURATION;\r\n\t            case \"15\":\r\n\t            case \"color\":\r\n\t                return PIXI.BLEND_MODES.COLOR;\r\n\t            case \"16\":\r\n\t            case \"luminosity\":\r\n\t                return PIXI.BLEND_MODES.LUMINOSITY;\r\n\t            default:\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR Unknown blending mode \" + mode + \". Used default mode NORMAL.\");\r\n\t                }\r\n\t                return PIXI.BLEND_MODES.NORMAL;\r\n\t        }\r\n\t    };\r\n\t    ImageElement.prototype._printDebugInfo = function (text, node) {\r\n\t        if (false) {\r\n\t            if (this.getChildByName(exports.ImageElementAttributes.DEBUG_INFO) != null) {\r\n\t                this.removeChild(this.getChildByName(exports.ImageElementAttributes.DEBUG_INFO));\r\n\t            }\r\n\t            if (node == undefined ||\r\n\t                (node.hasAttribute(exports.ImageElementAttributes.DEBUG_INFO) &&\r\n\t                    node.getAttribute(exports.ImageElementAttributes.DEBUG_INFO) === \"true\")) {\r\n\t                var textInfo = new TextElement_1.TextElement();\r\n\t                textInfo.name = exports.ImageElementAttributes.DEBUG_INFO;\r\n\t                textInfo.x = textInfo.y = 0;\r\n\t                textInfo.style.fill = 0xff0000;\r\n\t                textInfo.style.fontSize = 10;\r\n\t                textInfo.text = JSON.stringify(text, null, 4);\r\n\t                this.addChild(textInfo);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    ImageElement.prototype.logError = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.errorGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    ImageElement.prototype.formatPoint = function (value, id, useGlobal) {\r\n\t        if (useGlobal === void 0) { useGlobal = false; }\r\n\t        var result;\r\n\t        if (value == \"c\") {\r\n\t            result = this[id];\r\n\t        }\r\n\t        else {\r\n\t            if (useGlobal) {\r\n\t                result = this[id] + (parseInt(value) - this.getGlobalPosition()[id]);\r\n\t            }\r\n\t            else {\r\n\t                result = parseInt(value);\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    ImageElement.prototype.formatPoints = function (points, useGlobal) {\r\n\t        if (useGlobal === void 0) { useGlobal = false; }\r\n\t        var result = [];\r\n\t        var regex = /\\[(.*?)\\]/g;\r\n\t        var data = points.match(regex);\r\n\t        for (var i = 0; i < data.length; i++) {\r\n\t            var pointArray = data[i].substring(1, data[i].length - 1).split(\",\");\r\n\t            if (pointArray.length == 2) {\r\n\t                var x = this.formatPoint(pointArray[0], \"x\", useGlobal);\r\n\t                var y = this.formatPoint(pointArray[1], \"y\", useGlobal);\r\n\t                var objectPoint = { x: x, y: y };\r\n\t                result.push(objectPoint);\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    ImageElement.DynamicTint = \"ff0000\";\r\n\t    ImageElement._destroyOptions = {\r\n\t        children: true,\r\n\t    };\r\n\t    ImageElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ImageElement);\r\n\t    return ImageElement;\r\n\t}(PIXI.Sprite));\r\n\texports.ImageElement = ImageElement;\r\n\texports.ImageElementAttributes = {\r\n\t    ALPHA: \"Alpha\",\r\n\t    ALPHA_TWEEN: \"AlphaTween\",\r\n\t    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n\t    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n\t    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\t    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\r\n\t    ALPHA_TWEEN_KEY_TIMES: \"AlphaTweenKeyTimes\",\r\n\t    ALPHA_TWEEN_POSITION: \"AlphaTweenPosition\",\r\n\t    ALPHA_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    ANCHOR: \"Anchor\",\r\n\t    ANIMATION: \"Animation\",\r\n\t    BITMAP_MASK: \"BitmapMask\",\r\n\t    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\r\n\t    BITMAP_MASK_X: \"BitmapMaskX\",\r\n\t    BITMAP_MASK_Y: \"BitmapMaskY\",\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    CACHE: \"Cache\",\r\n\t    DEBUG_INFO: \"DebugInfo\",\r\n\t    DEBUG: \"Debug\",\r\n\t    FRAME: \"Frame\",\r\n\t    FROM_FRAME: \"FromFrame\",\r\n\t    IMAGE: \"Image\",\r\n\t    MASK: \"Mask\",\r\n\t    CLEAR_MASK: \"ClearMask\",\r\n\t    SHOW_MASK: \"ShowMask\",\r\n\t    PIVOT_X: \"PivotX\",\r\n\t    PIVOT_Y: \"PivotY\",\r\n\t    POSITION_TWEEN_X: \"PositionTweenX\",\r\n\t    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n\t    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n\t    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n\t    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\r\n\t    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n\t    POSITION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\r\n\t    POSITION_TWEEN_KEY_TIMES: \"PositionTweenKeyTimes\",\r\n\t    POSITION_TWEEN_BEZIER_TYPE: \"PositionTweenBezierType\",\r\n\t    POSITION_TWEEN_BEZIER_CURVINESS: \"PositionTweenBezierCurviness\",\r\n\t    POSITION_TWEEN_BEZIER_POINTS: \"PositionTweenBezierPoints\",\r\n\t    ROTATION: \"Rotation\",\r\n\t    ROTATION_TWEEN: \"RotationTween\",\r\n\t    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n\t    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n\t    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\t    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\r\n\t    ROTATION_TWEEN_KEY_TIMES: \"RotationTweenKeyTimes\",\r\n\t    ROTATION_TWEEN_POSITION: \"RotationTweenPosition\",\r\n\t    ROTATION_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    SCALE_TWEEN: \"ScaleTween\",\r\n\t    SCALE_TWEEN_X: \"ScaleTweenX\",\r\n\t    SCALE_TWEEN_Y: \"ScaleTweenY\",\r\n\t    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n\t    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\r\n\t    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n\t    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\r\n\t    SCALE_TWEEN_KEY_TIMES: \"ScaleTweenKeyTimes\",\r\n\t    SCALE_TWEEN_POSITION: \"ScaleTweenPosition\",\r\n\t    SCALE_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    SCALE: \"Scale\",\r\n\t    SCALE_X: \"ScaleX\",\r\n\t    SCALE_Y: \"ScaleY\",\r\n\t    SKEW_X: \"SkewX\",\r\n\t    SKEW_Y: \"SkewY\",\r\n\t    SKEW_TWEEN_X: \"SkewTweenX\",\r\n\t    SKEW_TWEEN_Y: \"SkewTweenY\",\r\n\t    SKEW_TWEEN_EASE: \"SkewTweenEase\",\r\n\t    SKEW_TWEEN_DURATION: \"SkewTweenDuration\",\r\n\t    SKEW_TWEEN_DELAY: \"SkewTweenDelay\",\r\n\t    SKEW_TWEEN_POSITION: \"SkewTweenPosition\",\r\n\t    SKEW_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        RELATIVE: \"relative\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    SKEW_TWEEN_LOOP: \"SkewTweenLoop\",\r\n\t    SKEW_TWEEN_KEY_TIMES: \"SkewTweenKeyTimes\",\r\n\t    START_ROTATION: \"StartRotation\",\r\n\t    TINT: \"Tint\",\r\n\t    TINT_TWEEN: \"TintTween\",\r\n\t    TINT_TWEEN_EASE: \"TintTweenTease\",\r\n\t    TINT_TWEEN_DURATION: \"TintTweenDuration\",\r\n\t    TINT_TWEEN_DELAY: \"TintTweenDelay\",\r\n\t    TINT_TWEEN_POSITION: \"TintTweenPosition\",\r\n\t    TINT_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    TINT_TWEEN_LOOP: \"TintTweenLoop\",\r\n\t    TINT_TWEEN_KEY_TIMES: \"TintTweenKeyTimes\",\r\n\t    TWEEN_ENGINE: \"TweenEngine\",\r\n\t    TWEEN_PERSISTENT: \"TweenPersistent\",\r\n\t    VISIBLE: \"Visible\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t};\r\n\n\n/***/ },\n/* 104 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(99);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar StyleManager_1 = __webpack_require__(18);\r\n\tvar ParticleElement_1 = __webpack_require__(102);\r\n\tvar ParticleStyle = (function (_super) {\r\n\t    __extends(ParticleStyle, _super);\r\n\t    function ParticleStyle() {\r\n\t        _super.call(this);\r\n\t        this._count = 1;\r\n\t        this._time = 60;\r\n\t        this._minLife = 60;\r\n\t        this._maxLife = 120;\r\n\t        this._images = [];\r\n\t        this._randomStartFrame = false;\r\n\t        this._subParticleStyle = \"\";\r\n\t        this._positionZone = {\r\n\t            type: ParticleStyle.ZoneRectangle,\r\n\t            x: 0,\r\n\t            y: 0,\r\n\t            innerX: 0,\r\n\t            innerY: 0,\r\n\t            width: StageController_1.StageController.Width,\r\n\t            height: StageController_1.StageController.Height,\r\n\t            innerWidth: -1,\r\n\t            innerHeight: -1,\r\n\t            radius: 0,\r\n\t            minRadius: 0,\r\n\t            radiusB: 0,\r\n\t            minRadiusB: 0,\r\n\t            innerRadius: 0,\r\n\t            minInnerRadius: 0,\r\n\t            innerRadiusB: 0,\r\n\t            minInnerRadiusB: 0,\r\n\t            angle: 360,\r\n\t            startAngle: 0,\r\n\t        };\r\n\t        this._pathEase = \"linear\";\r\n\t        this._pathValues = [];\r\n\t        this._pathKeyTimes = null;\r\n\t        this._scaleEase = \"linear\";\r\n\t        this._scaleValues = [];\r\n\t        this._scaleKeyTimes = null;\r\n\t        this._rotationEase = \"linear\";\r\n\t        this._rotationValues = [];\r\n\t        this._rotationKeyTimes = null;\r\n\t        this._alphaEase = \"linear\";\r\n\t        this._alphaValues = [];\r\n\t        this._alphaKeyTimes = null;\r\n\t    }\r\n\t    ParticleStyle.prototype.create = function (node) {\r\n\t        this.node = node;\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.EXTEND_STYLE)) {\r\n\t            var extendStyle = (StyleManager_1.StyleManager.Styles[node.getAttribute(ParticleElement_1.ParticleElementAttributes.EXTEND_STYLE)]);\r\n\t            if (extendStyle != null && extendStyle.node != null) {\r\n\t                this.parseChildrenNodes(extendStyle.node);\r\n\t            }\r\n\t        }\r\n\t        this.parseChildrenNodes(node);\r\n\t    };\r\n\t    ParticleStyle.prototype.parseChildrenNodes = function (node) {\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            switch (next.nodeName) {\r\n\t                case ParticleStyle.NodeCount:\r\n\t                    this.initializeCount(next);\r\n\t                    break;\r\n\t                case ParticleStyle.NodeLife:\r\n\t                    this.initializeLife(next);\r\n\t                    break;\r\n\t                case ParticleStyle.NodeImages:\r\n\t                    this.initializeImages(next);\r\n\t                    break;\r\n\t                case ParticleStyle.NodePosition:\r\n\t                    this.initializePosition(next);\r\n\t                    break;\r\n\t                case ParticleStyle.NodePath:\r\n\t                    this.initializePath(next);\r\n\t                    break;\r\n\t                case ParticleStyle.NodeScale:\r\n\t                    this.initializeScale(next);\r\n\t                    break;\r\n\t                case ParticleStyle.NodeRotation:\r\n\t                    this.initializeRotation(next);\r\n\t                    break;\r\n\t                case ParticleStyle.NodeAlpha:\r\n\t                    this.initializeAlpha(next);\r\n\t                    break;\r\n\t                default:\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING unknown node in particle style \" + next.nodeName);\r\n\t                    }\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"count\", {\r\n\t        get: function () {\r\n\t            return this._count;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"time\", {\r\n\t        get: function () {\r\n\t            return this._time;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"minLife\", {\r\n\t        get: function () {\r\n\t            return this._minLife;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"maxLife\", {\r\n\t        get: function () {\r\n\t            return this._maxLife;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"images\", {\r\n\t        get: function () {\r\n\t            return this._images;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"randomStartFrame\", {\r\n\t        get: function () {\r\n\t            return this._randomStartFrame;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"subParticleStyle\", {\r\n\t        get: function () {\r\n\t            return this._subParticleStyle;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"positionZone\", {\r\n\t        get: function () {\r\n\t            return this._positionZone;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"pathValues\", {\r\n\t        get: function () {\r\n\t            return this._pathValues;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"scaleValues\", {\r\n\t        get: function () {\r\n\t            return this._scaleValues;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"rotationValues\", {\r\n\t        get: function () {\r\n\t            return this._rotationValues;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"alphaValues\", {\r\n\t        get: function () {\r\n\t            return this._alphaValues;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"pathEase\", {\r\n\t        get: function () {\r\n\t            return this._pathEase;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"scaleEase\", {\r\n\t        get: function () {\r\n\t            return this._scaleEase;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"rotationEase\", {\r\n\t        get: function () {\r\n\t            return this._rotationEase;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"alphaEase\", {\r\n\t        get: function () {\r\n\t            return this._alphaEase;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"pathKeyTimes\", {\r\n\t        get: function () {\r\n\t            return this._pathKeyTimes;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"scaleKeyTimes\", {\r\n\t        get: function () {\r\n\t            return this._scaleKeyTimes;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"rotationKeyTimes\", {\r\n\t        get: function () {\r\n\t            return this._rotationKeyTimes;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ParticleStyle.prototype, \"alphaKeyTimes\", {\r\n\t        get: function () {\r\n\t            return this._alphaKeyTimes;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ParticleStyle.prototype.calculateElements = function () {\r\n\t        var elementsPerSecond = (StageController_1.StageController.FPS / this._time) * this._count;\r\n\t        var elementsWithLife = (this._maxLife / StageController_1.StageController.FPS) * elementsPerSecond;\r\n\t        return elementsWithLife;\r\n\t    };\r\n\t    ParticleStyle.prototype.initializeCount = function (node) {\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_COUNT)) {\r\n\t            this._count = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_COUNT));\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_TIME)) {\r\n\t            this._time = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_TIME));\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.prototype.initializeLife = function (node) {\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN)) {\r\n\t            this._minLife = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_MIN));\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_MAX)) {\r\n\t            this._maxLife = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_MAX));\r\n\t        }\r\n\t        if (this._minLife > this._maxLife) {\r\n\t            this._maxLife = this._minLife;\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.prototype.initializeImages = function (node) {\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_FROM_FRAME)) {\r\n\t            this._images = node.getAttribute(ParticleStyleAttributes.ATTR_FROM_FRAME).split(\";\");\r\n\t            for (var i = 0; i < this._images.length; i++) {\r\n\t                this._images[i] = this._images[i] + \"0000\";\r\n\t            }\r\n\t        }\r\n\t        else if (node.hasAttribute(ParticleStyleAttributes.ATTR_IMAGES)) {\r\n\t            this._images = node.getAttribute(ParticleStyleAttributes.ATTR_IMAGES).split(\";\");\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_START_FRAME)) {\r\n\t            this._randomStartFrame = neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_START_FRAME));\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_SUB_PARTICLE_STYLE)) {\r\n\t            this._subParticleStyle = node.getAttribute(ParticleStyleAttributes.ATTR_SUB_PARTICLE_STYLE);\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.prototype.initializePosition = function (node) {\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_TYPE)) {\r\n\t            this._positionZone.type = node.getAttribute(ParticleStyleAttributes.ATTR_TYPE);\r\n\t            switch (this._positionZone.type) {\r\n\t                case ParticleStyle.ZoneRectangle:\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\r\n\t                        this._positionZone.x = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_X));\r\n\t                        this._positionZone.innerX = this._positionZone.x;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\r\n\t                        this._positionZone.y = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_Y));\r\n\t                        this._positionZone.innerY = this._positionZone.y;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_X)) {\r\n\t                        this._positionZone.innerX = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_X));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_Y)) {\r\n\t                        this._positionZone.innerY = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_Y));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_WIDTH)) {\r\n\t                        this._positionZone.width = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_WIDTH));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_HEIGHT)) {\r\n\t                        this._positionZone.height = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_HEIGHT));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_WIDTH)) {\r\n\t                        this._positionZone.innerWidth = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_WIDTH));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_HEIGHT)) {\r\n\t                        this._positionZone.innerHeight = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_HEIGHT));\r\n\t                    }\r\n\t                    break;\r\n\t                case ParticleStyle.ZoneTarget:\r\n\t                    this._positionZone.width = 0;\r\n\t                    this._positionZone.height = 0;\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_WIDTH)) {\r\n\t                        this._positionZone.width = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_WIDTH));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_HEIGHT)) {\r\n\t                        this._positionZone.height = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_HEIGHT));\r\n\t                    }\r\n\t                    break;\r\n\t                case ParticleStyle.ZoneDynamic:\r\n\t                    break;\r\n\t                case ParticleStyle.ZoneLine:\r\n\t                    break;\r\n\t                case ParticleStyle.ZoneEllipse:\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\r\n\t                        this._positionZone.x = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_X));\r\n\t                        this._positionZone.innerX = this._positionZone.x;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\r\n\t                        this._positionZone.y = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_Y));\r\n\t                        this._positionZone.innerY = this._positionZone.y;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_X)) {\r\n\t                        this._positionZone.innerX = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_X));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_Y)) {\r\n\t                        this._positionZone.innerY = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_Y));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_RADIUS)) {\r\n\t                        var radius = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_RADIUS));\r\n\t                        this._positionZone.radius = radius;\r\n\t                        this._positionZone.radiusB = radius;\r\n\t                        this._positionZone.minRadius = radius;\r\n\t                        this._positionZone.minRadiusB = radius;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS)) {\r\n\t                        this._positionZone.minRadius = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS));\r\n\t                        this._positionZone.minRadiusB = this._positionZone.minRadius;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_RADIUS_B)) {\r\n\t                        this._positionZone.radiusB = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_RADIUS_B));\r\n\t                        this._positionZone.minRadiusB = this._positionZone.radiusB;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS_B)) {\r\n\t                        this._positionZone.minRadiusB = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS_B));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS)) {\r\n\t                        var innerRadius = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS));\r\n\t                        this._positionZone.innerRadius = innerRadius;\r\n\t                        this._positionZone.innerRadiusB = innerRadius;\r\n\t                        this._positionZone.minInnerRadius = innerRadius;\r\n\t                        this._positionZone.minInnerRadiusB = innerRadius;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS)) {\r\n\t                        this._positionZone.minInnerRadius = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS));\r\n\t                        this._positionZone.minInnerRadiusB = this._positionZone.minInnerRadius;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS_B)) {\r\n\t                        this._positionZone.innerRadiusB = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS_B));\r\n\t                        this._positionZone.minInnerRadiusB = this._positionZone.innerRadiusB;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS_B)) {\r\n\t                        this._positionZone.minInnerRadiusB = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS_B));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_START_ANGLE)) {\r\n\t                        var startAngle = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_START_ANGLE));\r\n\t                        this._positionZone.startAngle = startAngle;\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_ANGLE)) {\r\n\t                        var angle = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_ANGLE));\r\n\t                        this._positionZone.angle = angle;\r\n\t                    }\r\n\t                    break;\r\n\t                default:\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING unknown zone \" + this._positionZone.type);\r\n\t                    }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.prototype.initializePath = function (node) {\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_EASE)) {\r\n\t            this._pathEase = node.getAttribute(ParticleStyleAttributes.ATTR_EASE);\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES)) {\r\n\t            this._pathKeyTimes = neo_common_1.ArrayUtils.numberArray(node.getAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES));\r\n\t        }\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            if (next.nodeName === ParticleStyle.NodeValue) {\r\n\t                var path = { x: null, y: null, randomX: null, randomY: null, relative: false };\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\r\n\t                    path.x = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_X));\r\n\t                }\r\n\t                else {\r\n\t                    path.x = 0;\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\r\n\t                    path.y = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_Y));\r\n\t                }\r\n\t                else {\r\n\t                    path.y = 0;\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_X)) {\r\n\t                    path.randomX = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_X));\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_Y)) {\r\n\t                    path.randomY = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_Y));\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RELATIVE)) {\r\n\t                    path.relative = neo_common_1.StringUtils.parseBoolean(next.getAttribute(ParticleStyleAttributes.ATTR_RELATIVE));\r\n\t                }\r\n\t                this._pathValues.push(path);\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.prototype.initializeScale = function (node) {\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_EASE)) {\r\n\t            this._scaleEase = node.getAttribute(ParticleStyleAttributes.ATTR_EASE);\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES)) {\r\n\t            this._scaleKeyTimes = neo_common_1.ArrayUtils.numberArray(node.getAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES));\r\n\t        }\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            if (next.nodeName === ParticleStyle.NodeValue) {\r\n\t                var coordinates = {\r\n\t                    x: null,\r\n\t                    y: null,\r\n\t                    randomX: null,\r\n\t                    randomY: null,\r\n\t                    relative: false,\r\n\t                };\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUES)) {\r\n\t                    var arr = neo_common_1.ArrayUtils.numberArray(next.getAttribute(ParticleStyleAttributes.ATTR_VALUES));\r\n\t                    if (arr.length > 1) {\r\n\t                        coordinates.x = (arr[1] - arr[0]) / 2 + arr[0];\r\n\t                        coordinates.randomX = arr[1] - arr[0];\r\n\t                    }\r\n\t                    else {\r\n\t                        coordinates.x = arr[0];\r\n\t                    }\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE)) {\r\n\t                    coordinates.x = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE));\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE_RANDOM)) {\r\n\t                    coordinates.randomX = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE_RANDOM));\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\r\n\t                    coordinates.x = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_X));\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_X)) {\r\n\t                    coordinates.randomX = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_X));\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\r\n\t                    coordinates.y = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_Y));\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_Y)) {\r\n\t                    coordinates.randomY = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_Y));\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RELATIVE)) {\r\n\t                    coordinates.relative = neo_common_1.StringUtils.parseBoolean(next.getAttribute(ParticleStyleAttributes.ATTR_RELATIVE));\r\n\t                }\r\n\t                this._scaleValues.push(coordinates);\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.prototype.initializeRotation = function (node) {\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_EASE)) {\r\n\t            this._rotationEase = node.getAttribute(ParticleStyleAttributes.ATTR_EASE);\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES)) {\r\n\t            this._rotationKeyTimes = neo_common_1.ArrayUtils.numberArray(node.getAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES));\r\n\t        }\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            if (next.nodeName === ParticleStyle.NodeValue) {\r\n\t                var coordinates = { value: null, randomValue: null, relative: false };\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUES)) {\r\n\t                    var arr = neo_common_1.ArrayUtils.numberArray(next.getAttribute(ParticleStyleAttributes.ATTR_VALUES));\r\n\t                    if (arr.length > 1) {\r\n\t                        coordinates.value = (arr[1] - arr[0]) / 2 + arr[0];\r\n\t                        coordinates.randomValue = arr[1] - arr[0];\r\n\t                    }\r\n\t                    else {\r\n\t                        coordinates.value = arr[0];\r\n\t                    }\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE)) {\r\n\t                    coordinates.value = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE));\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE_RANDOM)) {\r\n\t                    coordinates.randomValue = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE_RANDOM));\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RELATIVE)) {\r\n\t                    coordinates.relative = neo_common_1.StringUtils.parseBoolean(next.getAttribute(ParticleStyleAttributes.ATTR_RELATIVE));\r\n\t                }\r\n\t                this._rotationValues.push(coordinates);\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.prototype.initializeAlpha = function (node) {\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_EASE)) {\r\n\t            this._alphaEase = node.getAttribute(ParticleStyleAttributes.ATTR_EASE);\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES)) {\r\n\t            this._alphaKeyTimes = neo_common_1.ArrayUtils.numberArray(node.getAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES));\r\n\t        }\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            if (next.nodeName === ParticleStyle.NodeValue) {\r\n\t                var coordinates = { value: null, randomValue: null, relative: false };\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE)) {\r\n\t                    coordinates.value = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE));\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE_RANDOM)) {\r\n\t                    coordinates.randomValue = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE_RANDOM));\r\n\t                }\r\n\t                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RELATIVE)) {\r\n\t                    coordinates.relative = neo_common_1.StringUtils.parseBoolean(next.getAttribute(ParticleStyleAttributes.ATTR_RELATIVE));\r\n\t                }\r\n\t                this._alphaValues.push(coordinates);\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    ParticleStyle.ElementsReserve = 0.5;\r\n\t    ParticleStyle.ZoneRectangle = \"Rectangle\";\r\n\t    ParticleStyle.ZoneLine = \"Line\";\r\n\t    ParticleStyle.ZoneEllipse = \"Ellipse\";\r\n\t    ParticleStyle.ZoneTarget = \"Target\";\r\n\t    ParticleStyle.ZoneDynamic = \"Dynamic\";\r\n\t    ParticleStyle.NodeCount = \"Count\";\r\n\t    ParticleStyle.NodeLife = \"Life\";\r\n\t    ParticleStyle.NodeImages = \"Images\";\r\n\t    ParticleStyle.NodePosition = \"Position\";\r\n\t    ParticleStyle.NodePath = \"Path\";\r\n\t    ParticleStyle.NodeScale = \"Scale\";\r\n\t    ParticleStyle.NodeRotation = \"Rotation\";\r\n\t    ParticleStyle.NodeAlpha = \"Alpha\";\r\n\t    ParticleStyle.NodeValue = \"Value\";\r\n\t    ParticleStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], ParticleStyle);\r\n\t    return ParticleStyle;\r\n\t}(Style_1.Style));\r\n\texports.ParticleStyle = ParticleStyle;\r\n\tvar ParticleStyleAttributes = {\r\n\t    ATTR_COUNT: \"Count\",\r\n\t    ATTR_TIME: \"Time\",\r\n\t    ATTR_MIN: \"Min\",\r\n\t    ATTR_MAX: \"Max\",\r\n\t    ATTR_FROM_FRAME: \"FromFrame\",\r\n\t    ATTR_IMAGES: \"Images\",\r\n\t    ATTR_TYPE: \"Type\",\r\n\t    ATTR_X: \"X\",\r\n\t    ATTR_Y: \"Y\",\r\n\t    ATTR_RELATIVE: \"Relative\",\r\n\t    ATTR_INNER_X: \"InnerX\",\r\n\t    ATTR_INNER_Y: \"InnerY\",\r\n\t    ATTR_RADIUS: \"Radius\",\r\n\t    ATTR_MIN_RADIUS: \"MinRadius\",\r\n\t    ATTR_RADIUS_B: \"RadiusB\",\r\n\t    ATTR_MIN_RADIUS_B: \"MinRadiusB\",\r\n\t    ATTR_INNER_RADIUS: \"InnerRadius\",\r\n\t    ATTR_MIN_INNER_RADIUS: \"MinInnerRadius\",\r\n\t    ATTR_INNER_RADIUS_B: \"InnerRadiusB\",\r\n\t    ATTR_MIN_INNER_RADIUS_B: \"MinInnerRadiusB\",\r\n\t    ATTR_ANGLE: \"Angle\",\r\n\t    ATTR_START_ANGLE: \"StartAngle\",\r\n\t    ATTR_RANDOM_X: \"RandomX\",\r\n\t    ATTR_RANDOM_Y: \"RandomY\",\r\n\t    ATTR_VALUE_RANDOM: \"RandomValue\",\r\n\t    ATTR_WIDTH: \"Width\",\r\n\t    ATTR_HEIGHT: \"Height\",\r\n\t    ATTR_INNER_WIDTH: \"InnerWidth\",\r\n\t    ATTR_INNER_HEIGHT: \"InnerHeight\",\r\n\t    ATTR_VALUES: \"Values\",\r\n\t    ATTR_VALUE: \"Value\",\r\n\t    ATTR_RANDOM_START_FRAME: \"RandomStartFrame\",\r\n\t    ATTR_SUB_PARTICLE_STYLE: \"SubParticleStyle\",\r\n\t    ATTR_EASE: \"Ease\",\r\n\t    ATTR_KEY_TIMES: \"KeyTimes\",\r\n\t    ATTR_RANDOM_PASSES: \"RandomPasses\",\r\n\t};\r\n\n\n/***/ },\n/* 105 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ContainerElement_1 = __webpack_require__(90);\r\n\tvar Payline_1 = __webpack_require__(96);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar PaylinesSelector = (function (_super) {\r\n\t    __extends(PaylinesSelector, _super);\r\n\t    function PaylinesSelector() {\r\n\t        _super.call(this);\r\n\t        this._paylines = [];\r\n\t    }\r\n\t    PaylinesSelector.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(\"Configs\")) {\r\n\t            var configs = node.getAttribute(\"Configs\").split(\";\");\r\n\t            for (var i = 0; i < configs.length; i++) {\r\n\t                var config = Configuration_1.Configuration.Configurations[configs[i]];\r\n\t                if (config != null) {\r\n\t                    this.configurate(config);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof Payline_1.Payline) {\r\n\t                    this._paylines.push(this.childs[key]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PaylinesSelector.prototype.configurate = function (node) {\r\n\t        if (node.hasAttribute(\"PaylineIDs\")) {\r\n\t            this._paylineIDs = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"PaylineIDs\"));\r\n\t        }\r\n\t    };\r\n\t    PaylinesSelector.prototype.reset = function () {\r\n\t        this.visible = false;\r\n\t    };\r\n\t    PaylinesSelector.prototype.select = function () {\r\n\t        this.visible = true;\r\n\t        for (var i = 0; i < this._paylines.length; i++) {\r\n\t            this._paylines[i].goToCase(Payline_1.Payline.CaseSelect);\r\n\t        }\r\n\t    };\r\n\t    PaylinesSelector = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], PaylinesSelector);\r\n\t    return PaylinesSelector;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.PaylinesSelector = PaylinesSelector;\r\n\n\n/***/ },\n/* 106 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ContainerElement_1 = __webpack_require__(90);\r\n\tvar Symbol_1 = __webpack_require__(107);\r\n\tvar StyleManager_1 = __webpack_require__(18);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar Symbols = (function (_super) {\r\n\t    __extends(Symbols, _super);\r\n\t    function Symbols() {\r\n\t        _super.call(this);\r\n\t        this.symbols = [];\r\n\t        this.symbolsData = [];\r\n\t    }\r\n\t    Symbols.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        var configs;\r\n\t        if (node.hasAttribute(\"Configs\")) {\r\n\t            configs = node.getAttribute(\"Configs\").split(\";\");\r\n\t        }\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof Symbol_1.Symbol) {\r\n\t                    if (configs != null) {\r\n\t                        for (var i = 0; i < configs.length; i++) {\r\n\t                            this.childs[key].configurate(Configuration_1.Configuration.Configurations[configs[i]]);\r\n\t                        }\r\n\t                    }\r\n\t                    this.symbols.push(this.childs[key]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this.symbols != null) {\r\n\t            this.createSymbolsData();\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no symbols\");\r\n\t            }\r\n\t        }\r\n\t        this.removeChildren();\r\n\t        this.visible = false;\r\n\t        this.createObjectPool();\r\n\t    };\r\n\t    Symbols.prototype.createSymbolsData = function () {\r\n\t        if (false) {\r\n\t            this.log(\"createSymbolsData\");\r\n\t        }\r\n\t        for (var i = 1; i <= this.symbols.length; i++) {\r\n\t            if (this.symbols[i - 1].hasElements) {\r\n\t                var caseElement = void 0;\r\n\t                var rotationBitmap = null;\r\n\t                var blurBitmap = null;\r\n\t                if (this.symbols[i - 1].hasCase(Symbol_1.Symbol.CaseRotation)) {\r\n\t                    caseElement = this.symbols[i - 1].getCase(Symbol_1.Symbol.CaseRotation);\r\n\t                }\r\n\t                else {\r\n\t                    if (this.symbols[i - 1].hasCase(Symbol_1.Symbol.CaseBlur)) {\r\n\t                        caseElement = this.symbols[i - 1].getCase(Symbol_1.Symbol.CaseBlur);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (this.symbols[i - 1].hasCase(Symbol_1.Symbol.CaseNormal)) {\r\n\t                            caseElement = this.symbols[i - 1].getCase(Symbol_1.Symbol.CaseNormal);\r\n\t                        }\r\n\t                        else {\r\n\t                            if (false) {\r\n\t                                this.log(\"ERROR Symbol has no CaseRotation, CaseBlur nor CaseNormal. Symbol ID: \" + i);\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                rotationBitmap = this._getBitmapByCaseElement(caseElement);\r\n\t                if (rotationBitmap == null) {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no style, animation or image of symbol with ID: \" +\r\n\t                            i +\r\n\t                            \" case: \" +\r\n\t                            Symbol_1.Symbol.CaseRotation);\r\n\t                    }\r\n\t                }\r\n\t                if (this.symbols[i - 1].hasCase(Symbol_1.Symbol.CaseBlur)) {\r\n\t                    caseElement = this.symbols[i - 1].getCase(Symbol_1.Symbol.CaseBlur);\r\n\t                }\r\n\t                blurBitmap = this._getBitmapByCaseElement(caseElement);\r\n\t                if (blurBitmap == null) {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no style, animation or image of symbol with ID: \" + i + \" case: \" + Symbol_1.Symbol.CaseBlur);\r\n\t                    }\r\n\t                }\r\n\t                var object = {};\r\n\t                if (rotationBitmap != null) {\r\n\t                    object[Symbol_1.Symbol.CaseRotation] = rotationBitmap;\r\n\t                }\r\n\t                if (blurBitmap != null) {\r\n\t                    object[Symbol_1.Symbol.CaseBlur] = blurBitmap;\r\n\t                }\r\n\t                else {\r\n\t                    if (rotationBitmap != null) {\r\n\t                        object[Symbol_1.Symbol.CaseBlur] = rotationBitmap;\r\n\t                    }\r\n\t                }\r\n\t                if (object != null) {\r\n\t                    object[\"zIndex\"] = this.symbols[i - 1].zIndex;\r\n\t                    this.symbolsData.push(object);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Symbols.prototype._getBitmapByCaseElement = function (caseElement) {\r\n\t        if (caseElement != null) {\r\n\t            if (caseElement.firstElementChild.hasAttribute(\"Style\")) {\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING Please use Animation attribute! Node: \" +\r\n\t                        caseElement.parentNode.parentNode.nodeName +\r\n\t                        \", Case: \" +\r\n\t                        caseElement.getAttribute(\"Case\"));\r\n\t                }\r\n\t                if (StyleManager_1.StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")] != null) {\r\n\t                    if ((StyleManager_1.StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")].animation) != null) {\r\n\t                        return StageController_1.StageController.getTextureByResourceId((StyleManager_1.StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")].animation) + \"0000\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else if (caseElement.firstElementChild.hasAttribute(\"FromFrame\")) {\r\n\t                if (caseElement.firstElementChild.getAttribute(\"FromFrame\") != null) {\r\n\t                    return StageController_1.StageController.getTextureByResourceId(caseElement.firstElementChild.getAttribute(\"FromFrame\"));\r\n\t                }\r\n\t            }\r\n\t            else if (caseElement.firstElementChild.hasAttribute(\"Image\")) {\r\n\t                return StageController_1.StageController.getTextureByResourceId(caseElement.firstElementChild.getAttribute(\"Image\"));\r\n\t            }\r\n\t            else {\r\n\t                return null;\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    Symbols.prototype.createObjectPool = function () {\r\n\t        this.objectPool = [];\r\n\t        for (var i = 0; i < this.symbols.length; i++) {\r\n\t            this.objectPool.push([]);\r\n\t        }\r\n\t        this.objectContainer = new ContainerElement_1.ContainerElement();\r\n\t        this.objectContainer.name = \"ObjectContainer\";\r\n\t    };\r\n\t    Symbols.prototype.getSymbol = function (id, caseType) {\r\n\t        var symbol;\r\n\t        if (this.objectPool[id].length === 0) {\r\n\t            symbol = this.symbols[id].clone();\r\n\t            symbol.name = \"Symbol\" + id;\r\n\t            symbol.id = id;\r\n\t        }\r\n\t        else {\r\n\t            symbol = this.objectPool[id].pop();\r\n\t        }\r\n\t        symbol.visible = true;\r\n\t        symbol.goToCase(caseType);\r\n\t        return symbol;\r\n\t    };\r\n\t    Symbols.prototype.returnSymbol = function (symbol) {\r\n\t        symbol.visible = false;\r\n\t        symbol.goToCase(Symbol_1.Symbol.CaseEmpty);\r\n\t        this.objectContainer.addChild(symbol);\r\n\t        this.objectPool[symbol.id].push(symbol);\r\n\t    };\r\n\t    Symbols = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Symbols);\r\n\t    return Symbols;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.Symbols = Symbols;\r\n\n\n/***/ },\n/* 107 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar SwitchElement_1 = __webpack_require__(97);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Attributes_1 = __webpack_require__(19);\r\n\tvar Symbol = (function (_super) {\r\n\t    __extends(Symbol, _super);\r\n\t    function Symbol() {\r\n\t        _super.call(this);\r\n\t        this.zIndex = 0;\r\n\t        this.offsetX = 0;\r\n\t        this.offsetY = 0;\r\n\t        this.center = true;\r\n\t        this.usedInPool = false;\r\n\t        this.id = -1;\r\n\t        this.hasWinFrame = true;\r\n\t    }\r\n\t    Symbol.prototype.create = function (node) {\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.SymbolAttributes.DEBUG) && node.getAttribute(exports.SymbolAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.offsetX = Attributes_1.Attributes.assignFloatAttribute(node, exports.SymbolAttributes.OFFSET_X, this.offsetX);\r\n\t        this.offsetY = Attributes_1.Attributes.assignFloatAttribute(node, exports.SymbolAttributes.OFFSET_Y, this.offsetY);\r\n\t        if (node.hasAttribute(exports.SymbolAttributes.OFFSET)) {\r\n\t            this.offsetX = parseFloat(node.getAttribute(exports.SymbolAttributes.OFFSET));\r\n\t            this.offsetY = parseFloat(node.getAttribute(exports.SymbolAttributes.OFFSET));\r\n\t        }\r\n\t        this.zIndex = Attributes_1.Attributes.assignFloatAttribute(node, exports.SymbolAttributes.Z_INDEX, this.zIndex);\r\n\t        this.type = Attributes_1.Attributes.assignStringAttribute(node, exports.SymbolAttributes.TYPE, this.type);\r\n\t        this.hasWinFrame = Attributes_1.Attributes.assignBooleanAttribute(node, \"HasWinFrame\", this.hasWinFrame);\r\n\t    };\r\n\t    Symbol.prototype.configurate = function (node) {\r\n\t        if (node.hasAttribute(\"SymbolWidth\")) {\r\n\t            this.symbolWidth = parseInt(node.getAttribute(\"SymbolWidth\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"SymbolHeight\")) {\r\n\t            this.symbolHeight = parseInt(node.getAttribute(\"SymbolHeight\"));\r\n\t        }\r\n\t    };\r\n\t    Symbol.prototype.clone = function () {\r\n\t        var element = new Symbol();\r\n\t        element.elements = this.elements.clone();\r\n\t        element.addChild(element.elements);\r\n\t        element.style = this.style;\r\n\t        element.offsetX = this.offsetX;\r\n\t        element.offsetY = this.offsetY;\r\n\t        element.symbolWidth = this.symbolWidth;\r\n\t        element.symbolHeight = this.symbolHeight;\r\n\t        element.visible = this.visible;\r\n\t        element.case = this.case;\r\n\t        element.style = this.style;\r\n\t        element.zIndex = this.zIndex;\r\n\t        element.type = this.type;\r\n\t        element.hasWinFrame = this.hasWinFrame;\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    Symbol.CaseRotation = \"ROTATION\";\r\n\t    Symbol.CaseBlur = \"BLUR\";\r\n\t    Symbol.CaseEmpty = \"EMPTY\";\r\n\t    Symbol.CaseNormal = \"NORMAL\";\r\n\t    Symbol.CaseIdle = \"IDLE\";\r\n\t    Symbol.CaseNowin = \"NOWIN\";\r\n\t    Symbol.CaseWin = \"WIN\";\r\n\t    Symbol.CaseCycle = \"CYCLE\";\r\n\t    Symbol.CaseWinAll = \"WIN_ALL\";\r\n\t    Symbol.CaseTeasing = \"TEASING\";\r\n\t    Symbol.CaseStart = \"START\";\r\n\t    Symbol.CaseImpact = \"IMPACT\";\r\n\t    Symbol.CaseImpactNowin = \"IMPACT_NOWIN\";\r\n\t    Symbol.CaseImpactTease = \"IMPACT_TEASE\";\r\n\t    Symbol.CaseTeaser = \"TEASER\";\r\n\t    Symbol = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Symbol);\r\n\t    return Symbol;\r\n\t}(SwitchElement_1.SwitchElement));\r\n\texports.Symbol = Symbol;\r\n\texports.SymbolAttributes = {\r\n\t    DEBUG: \"Debug\",\r\n\t    OFFSET_X: \"OffsetX\",\r\n\t    OFFSET_Y: \"OffsetY\",\r\n\t    OFFSET: \"Offset\",\r\n\t    Z_INDEX: \"Zindex\",\r\n\t    TYPE: \"Type\",\r\n\t};\r\n\n\n/***/ },\n/* 108 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar Payline_1 = __webpack_require__(96);\r\n\tvar PaylinesDefinitions_1 = __webpack_require__(95);\r\n\tvar Symbol_1 = __webpack_require__(107);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar ContainerElement_1 = __webpack_require__(90);\r\n\tvar TimelineElement_1 = __webpack_require__(109);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ImageTextCounterElement_1 = __webpack_require__(110);\r\n\tvar WinAnimator = (function (_super) {\r\n\t    __extends(WinAnimator, _super);\r\n\t    function WinAnimator() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    WinAnimator.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (node.hasAttribute(exports.WinAnimatorAttributes.CONFIGS)) {\r\n\t            var configs = node.getAttribute(exports.WinAnimatorAttributes.CONFIGS).split(\";\");\r\n\t            for (var i = 0; i < configs.length; i++) {\r\n\t                this.configure(Configuration_1.Configuration.Configurations[configs[i]]);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.configure = function (node) {\r\n\t        if (node.hasAttribute(\"ReelCount\")) {\r\n\t            this.reelCount = parseInt(node.getAttribute(\"ReelCount\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"ReelX\")) {\r\n\t            this.reelX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"ReelX\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"ReelY\")) {\r\n\t            this.reelY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"ReelY\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"VisibleSymbolCount\")) {\r\n\t            this.symbolCount = parseInt(node.getAttribute(\"VisibleSymbolCount\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"SymbolWidth\")) {\r\n\t            this.symbolWidth = parseInt(node.getAttribute(\"SymbolWidth\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"SymbolHeight\")) {\r\n\t            this.symbolHeight = parseInt(node.getAttribute(\"SymbolHeight\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"WinsMultipliers\")) {\r\n\t            this.multipliers = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"WinsMultipliers\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"WinsAnimations\")) {\r\n\t            this.animationNames = node.getAttribute(\"WinsAnimations\").split(\";\");\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.initialize = function (symbols, paylines, noWinSymbolsContainer, symbolsContainer) {\r\n\t        this.createTimer();\r\n\t        this.createSymbols(symbols, noWinSymbolsContainer, symbolsContainer);\r\n\t        this.createPaylines(paylines);\r\n\t        this.createAnimations();\r\n\t    };\r\n\t    WinAnimator.prototype.onReelStopped = function (reelsData, reelIndex) {\r\n\t        this.currentReels = reelsData;\r\n\t        for (var i = 0; i < reelsData[reelIndex].symbols.length; i++) {\r\n\t            this.removeCurrentSymbol(reelIndex, i);\r\n\t        }\r\n\t        for (var i = reelsData[reelIndex].symbols.length - 1; i >= 0; i--) {\r\n\t            this.addCurrentSymbol(reelIndex, i);\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.showSymbols = function (reelsData) {\r\n\t        this.currentReels = reelsData;\r\n\t        for (var i = 0; i < reelsData.length; i++) {\r\n\t            for (var j = 0; j < reelsData[i].symbols.length; j++) {\r\n\t                this.removeCurrentSymbol(i, j);\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < reelsData.length; i++) {\r\n\t            for (var j = reelsData[i].symbols.length - 1; j >= 0; j--) {\r\n\t                this.addCurrentSymbol(i, j);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.showWins = function (wins, win) {\r\n\t        this.currentWins = wins;\r\n\t        this.currentWin = win;\r\n\t        this.resetAnimations();\r\n\t        if (wins != null && wins.length > 0) {\r\n\t            this.currentMultiplierIndex = 0;\r\n\t            for (var i = 0; i < this.multipliers.length; i++) {\r\n\t                if (this.currentWin / BetManager_1.BetManager.Bet >= this.multipliers[i]) {\r\n\t                    this.currentMultiplierIndex = i;\r\n\t                }\r\n\t            }\r\n\t            if (!this.showCustomWin()) {\r\n\t                this.showFirstWins();\r\n\t            }\r\n\t            return this.currentMultiplierIndex >= 3;\r\n\t        }\r\n\t        else {\r\n\t            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.showCustomWin = function () {\r\n\t        return false;\r\n\t    };\r\n\t    WinAnimator.prototype.showFirstWins = function () {\r\n\t        this.allSymbolsGoToCase(Symbol_1.Symbol.CaseNowin, true);\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNowin);\r\n\t        for (var i = 0; i < this.currentWins.length; i++) {\r\n\t            this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseWin, false);\r\n\t            this.winPaylineGoToCase(i, Payline_1.Payline.CaseWin);\r\n\t        }\r\n\t        this.startAnimation();\r\n\t    };\r\n\t    WinAnimator.prototype.finishFirstWins = function () {\r\n\t        this.emit(WinAnimator.FinishWinAnimator);\r\n\t        this.currentCycle = 0;\r\n\t        this.cycleWins();\r\n\t    };\r\n\t    WinAnimator.prototype.showInitWins = function (wins, win) {\r\n\t        this.currentWins = wins;\r\n\t        this.currentWin = win;\r\n\t        this.resetAnimations();\r\n\t        if (wins != null && wins.length > 0) {\r\n\t            this.showCustomInitWin();\r\n\t            this.showFirstInitWins();\r\n\t            this.finishFirstInitWins();\r\n\t        }\r\n\t        else {\r\n\t            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.showCustomInitWin = function () { };\r\n\t    WinAnimator.prototype.showFirstInitWins = function () {\r\n\t        this.allSymbolsGoToCase(Symbol_1.Symbol.CaseNowin, true);\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNowin);\r\n\t        for (var i = 0; i < this.currentWins.length; i++) {\r\n\t            this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseWin, false);\r\n\t            this.winPaylineGoToCase(i, Payline_1.Payline.CaseWin);\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.finishFirstInitWins = function () {\r\n\t        this.currentCycle = 0;\r\n\t        this.cycleWins();\r\n\t    };\r\n\t    WinAnimator.prototype.cycleWins = function () {\r\n\t        if (this.currentWins == null) {\r\n\t            return;\r\n\t        }\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNowin);\r\n\t        for (var i = 0; i < this.currentWins.length; i++) {\r\n\t            this.winPaylineGoToCase(i, Payline_1.Payline.CaseNormal);\r\n\t        }\r\n\t        this.winSymbolsGoToCase(this.currentCycle, Symbol_1.Symbol.CaseCycle, true);\r\n\t        this.winPaylineGoToCase(this.currentCycle, Payline_1.Payline.CaseCycle);\r\n\t        this.currentCycle = (this.currentCycle + 1) % this.currentWins.length;\r\n\t        this.startTimer(WinAnimator.CycleWins, this.getCycleWinsDelay());\r\n\t    };\r\n\t    WinAnimator.prototype.getCycleWinsDelay = function () {\r\n\t        return 120;\r\n\t    };\r\n\t    WinAnimator.prototype.reset = function (showLastSymbols) {\r\n\t        this.stopTimer();\r\n\t        this.allSymbolsGoToCase(showLastSymbols ? Symbol_1.Symbol.CaseNormal : Symbol_1.Symbol.CaseEmpty, false);\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNormal);\r\n\t        if (showLastSymbols) {\r\n\t            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\r\n\t        }\r\n\t        if (this.value) {\r\n\t            this.value.visible = false;\r\n\t        }\r\n\t        var lastMultiplierIndex = this.currentMultiplierIndex;\r\n\t        this.currentMultiplierIndex = -1;\r\n\t        if (this.currentAnimationIndex != null) {\r\n\t            if (this.currentAnimationFinished) {\r\n\t                this.resetAnimations();\r\n\t                this.currentWins = null;\r\n\t                this.currentWin = null;\r\n\t                return false;\r\n\t            }\r\n\t            else {\r\n\t                this.stopAnimation();\r\n\t                this.currentWins = null;\r\n\t                this.currentWin = null;\r\n\t                return lastMultiplierIndex >= 2;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.currentWins = null;\r\n\t            this.currentWin = null;\r\n\t            return lastMultiplierIndex >= 2;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.createTimer = function () {\r\n\t        this.timerStatus = \"\";\r\n\t        this.timer = FrameTimer_1.CreateFrameTimer(\"timer\");\r\n\t        this.timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.onTimerComplete.bind(this));\r\n\t    };\r\n\t    WinAnimator.prototype.startTimer = function (status, duration) {\r\n\t        this.timerStatus = status;\r\n\t        this.timer.start(duration);\r\n\t    };\r\n\t    WinAnimator.prototype.stopTimer = function () {\r\n\t        if (this.timer != null) {\r\n\t            this.timer.stop();\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.resetTimer = function () {\r\n\t        this.stopTimer();\r\n\t        if (!this.currentAnimationFinished) {\r\n\t            this.stopAnimation();\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.onTimerComplete = function () {\r\n\t        this.timer.stop();\r\n\t        switch (this.timerStatus) {\r\n\t            case WinAnimator.Idle:\r\n\t                this.idle();\r\n\t                break;\r\n\t            case WinAnimator.CycleWins:\r\n\t                this.cycleWins();\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.createSymbols = function (symbols, noWinSymbolsContainer, symbolsContainer) {\r\n\t        this.symbols = symbols;\r\n\t        if (noWinSymbolsContainer != null) {\r\n\t            this.noWinSymbolsContainer = noWinSymbolsContainer;\r\n\t        }\r\n\t        else {\r\n\t            this.noWinSymbolsContainer = new ContainerElement_1.ContainerElement();\r\n\t            this.noWinSymbolsContainer.name = \"NoWinSymbols\";\r\n\t            this.addChild(this.noWinSymbolsContainer);\r\n\t        }\r\n\t        if (symbolsContainer != null) {\r\n\t            this.symbolsContainer = symbolsContainer;\r\n\t        }\r\n\t        else {\r\n\t            this.symbolsContainer = new ContainerElement_1.ContainerElement();\r\n\t            this.symbolsContainer.name = \"Symbols\";\r\n\t            this.addChild(this.symbolsContainer);\r\n\t        }\r\n\t        this.currentSymbols = [];\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            this.currentSymbols.push([]);\r\n\t            for (var j = 0; j < this.symbolCount; j++) {\r\n\t                this.currentSymbols[i].push(null);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.addCurrentSymbol = function (reelIndex, symbolIndex) {\r\n\t        if (this.currentSymbols[reelIndex][symbolIndex] === null) {\r\n\t            var id = this.currentReels[reelIndex].symbols[symbolIndex];\r\n\t            var symbol = this.symbols.getSymbol(id - 1, Symbol_1.Symbol.CaseNormal);\r\n\t            symbol.position.x = this.reelX[reelIndex] - symbol.offsetX;\r\n\t            symbol.position.y = this.reelY[reelIndex] + this.symbolHeight * symbolIndex - symbol.offsetY;\r\n\t            this.symbolsContainer.addChild(symbol);\r\n\t            this.currentSymbols[reelIndex][symbolIndex] = symbol;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.removeCurrentSymbol = function (reelIndex, symbolIndex) {\r\n\t        if (this.currentSymbols[reelIndex][symbolIndex] !== null) {\r\n\t            this.symbols.returnSymbol(this.currentSymbols[reelIndex][symbolIndex]);\r\n\t            this.currentSymbols[reelIndex][symbolIndex] = null;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.allSymbolsGoToReset = function () {\r\n\t        var caseType = Symbol_1.Symbol.CaseNormal;\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            for (var j = this.currentSymbols[i].length - 1; j >= 0; j--) {\r\n\t                var symbol = this.currentSymbols[i][j];\r\n\t                if (symbol !== null && this.allowSymbolGoToCase(i, j, caseType)) {\r\n\t                    var currentCaseType = symbol.getCurrentCase();\r\n\t                    if (caseType !== currentCaseType && currentCaseType.indexOf(Symbol_1.Symbol.CaseIdle) === -1) {\r\n\t                        symbol.goToCase(caseType);\r\n\t                    }\r\n\t                    this.symbolsContainer.addChild(symbol);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.allSymbolsGoToCase = function (caseType, noWin) {\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            for (var j = this.currentSymbols[i].length - 1; j >= 0; j--) {\r\n\t                var symbol = this.currentSymbols[i][j];\r\n\t                if (symbol !== null && this.allowSymbolGoToCase(i, j, caseType)) {\r\n\t                    symbol.goToCase(caseType);\r\n\t                    if (noWin) {\r\n\t                        this.noWinSymbolsContainer.addChild(symbol);\r\n\t                    }\r\n\t                    else {\r\n\t                        this.symbolsContainer.addChild(symbol);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.winSymbolsGoToCase = function (winIndex, caseType, useValue) {\r\n\t        var win = this.currentWins[winIndex];\r\n\t        var symbols = [];\r\n\t        switch (win.trigger) {\r\n\t            case neo_games_1.Communication.Game.WinTrigger.Payline:\r\n\t                symbols = this.winSymbolsGoToCaseAsPayline(winIndex, caseType);\r\n\t                break;\r\n\t            case neo_games_1.Communication.Game.WinTrigger.Scatter:\r\n\t                symbols = this.winSymbolsGoToCaseAsScatter(winIndex, caseType);\r\n\t                break;\r\n\t            case neo_games_1.Communication.Game.WinTrigger.Way:\r\n\t                symbols = this.winSymbolsGoToCaseAsWay(winIndex, caseType);\r\n\t                break;\r\n\t            default:\r\n\t                symbols = this.winSymbolsGoToCaseAsCustom(winIndex, caseType);\r\n\t                break;\r\n\t        }\r\n\t        if (useValue && this.value && symbols.length > 0 && win.amount > 0) {\r\n\t            this.value.visible = true;\r\n\t            this.value.position.x = symbols[0].position.x + symbols[0].offsetX;\r\n\t            this.value.position.y = symbols[0].position.y + symbols[0].offsetY;\r\n\t            if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                ImageTextCounterElement_1.ImageTextCounterElement.Round = true;\r\n\t                this.value.play(parseInt(neo_common_1.NumberUtils.devide(win.amount, BetManager_1.BetManager.CoinSize).toString()));\r\n\t            }\r\n\t            else {\r\n\t                ImageTextCounterElement_1.ImageTextCounterElement.Round = false;\r\n\t                this.value.play(parseFloat(Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, win.amount.toString())));\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (this.value) {\r\n\t                this.value.visible = false;\r\n\t            }\r\n\t        }\r\n\t        return symbols;\r\n\t    };\r\n\t    WinAnimator.prototype.winSymbolsGoToCaseAsPayline = function (winIndex, caseType) {\r\n\t        var win = this.currentWins[winIndex];\r\n\t        var symbols = [];\r\n\t        if (this.paylines != null) {\r\n\t            var definition = PaylinesDefinitions_1.PaylinesDefinitions.getPaylineDefinitionsById(win.paylineId, this.paylines.paylineDefinition);\r\n\t            for (var i = 0; i < definition.length; i++) {\r\n\t                if (win.mask[i] === 1 && this.allowSymbolGoToCase(i, definition[i], caseType)) {\r\n\t                    var symbol = this.currentSymbols[i][definition[i]];\r\n\t                    symbol.goToCase(caseType);\r\n\t                    this.symbolsContainer.addChild(symbol);\r\n\t                    symbols.push(symbol);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return symbols;\r\n\t    };\r\n\t    WinAnimator.prototype.winSymbolsGoToCaseAsScatter = function (winIndex, caseType) {\r\n\t        var win = this.currentWins[winIndex];\r\n\t        var symbols = [];\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            for (var j = 0; j < this.symbolCount; j++) {\r\n\t                if ((win.mask[i] & (1 << j)) !== 0 && this.allowSymbolGoToCase(i, j, caseType)) {\r\n\t                    var symbol = this.currentSymbols[i][j];\r\n\t                    symbol.goToCase(caseType);\r\n\t                    this.symbolsContainer.addChild(symbol);\r\n\t                    symbols.push(symbol);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return symbols;\r\n\t    };\r\n\t    WinAnimator.prototype.winSymbolsGoToCaseAsWay = function (winIndex, caseType) {\r\n\t        var win = this.currentWins[winIndex];\r\n\t        var symbols = [];\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            for (var j = 0; j < this.symbolCount; j++) {\r\n\t                if ((win.mask[i] & (1 << j)) !== 0 && this.allowSymbolGoToCase(i, j, caseType)) {\r\n\t                    var symbol = this.currentSymbols[i][j];\r\n\t                    symbol.goToCase(caseType);\r\n\t                    this.symbolsContainer.addChild(symbol);\r\n\t                    symbols.push(symbol);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return symbols;\r\n\t    };\r\n\t    WinAnimator.prototype.winSymbolsGoToCaseAsCustom = function (winIndex, caseType) {\r\n\t        return [];\r\n\t    };\r\n\t    WinAnimator.prototype.allowSymbolGoToCase = function (reelIndex, symbolIndex, caseType) {\r\n\t        return true;\r\n\t    };\r\n\t    WinAnimator.prototype.createPaylines = function (paylines) {\r\n\t        this.paylines = paylines;\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNormal);\r\n\t    };\r\n\t    WinAnimator.prototype.allPaylinesGoToCase = function (caseType) {\r\n\t        if (this.paylines != null) {\r\n\t            this.paylines.goToCase(caseType);\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.winPaylineGoToCase = function (winIndex, caseType) {\r\n\t        if (this.paylines != null) {\r\n\t            var win = this.currentWins[winIndex];\r\n\t            if (win.trigger === neo_games_1.Communication.Game.WinTrigger.Payline) {\r\n\t                if (caseType === Payline_1.Payline.CaseCycle && this.currentWins.length === 1) {\r\n\t                    this.paylines.goToCase(Payline_1.Payline.CaseSingleCycle, win.paylineId);\r\n\t                }\r\n\t                else {\r\n\t                    this.paylines.goToCase(caseType, win.paylineId);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.createAnimations = function () {\r\n\t        this.animationsContainer = new ContainerElement_1.ContainerElement();\r\n\t        this.animationsContainer.name = \"Animations\";\r\n\t        this.addChild(this.animationsContainer);\r\n\t        if (this.childs[\"Value\"]) {\r\n\t            this.value = this.childs[\"Value\"];\r\n\t            this.animationsContainer.addChild(this.value);\r\n\t        }\r\n\t        this.animations = [];\r\n\t        for (var i = 0; i < this.animationNames.length; i++) {\r\n\t            if (this.childs[this.animationNames[i]]) {\r\n\t                var animation = this.childs[this.animationNames[i]];\r\n\t                animation.visible = false;\r\n\t                animation.on(\"finished\", this.onAnimationFinished.bind(this));\r\n\t                animation.on(TimelineElement_1.TimelineElement.AnimationComplete, this.onAnimationComplete.bind(this));\r\n\t                animation.on(\"calculationFinished\", this.onCalculationFinished.bind(this));\r\n\t                this.animations.push(animation);\r\n\t                this.animationsContainer.addChild(animation);\r\n\t            }\r\n\t        }\r\n\t        this.currentAnimationIndex = null;\r\n\t        this.currentAnimationFinished = true;\r\n\t    };\r\n\t    WinAnimator.prototype.resetAnimations = function () {\r\n\t        this.currentAnimationIndex = null;\r\n\t        this.currentAnimationFinished = true;\r\n\t        for (var i = 0; i < this.animations.length; i++) {\r\n\t            var animation = this.animations[i];\r\n\t            animation.visible = false;\r\n\t            animation.stop();\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.startAnimation = function () {\r\n\t        this.currentAnimationIndex = this.getAnimationIndex();\r\n\t        this.currentAnimationFinished = false;\r\n\t        var animation = this.animations[this.currentAnimationIndex];\r\n\t        animation.visible = true;\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            ImageTextCounterElement_1.ImageTextCounterElement.Round = true;\r\n\t            animation.play(parseInt(neo_common_1.NumberUtils.devide(this.currentWin, BetManager_1.BetManager.CoinSize).toString()));\r\n\t        }\r\n\t        else {\r\n\t            ImageTextCounterElement_1.ImageTextCounterElement.Round = false;\r\n\t            animation.play(this.currentWin);\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.stopAnimation = function () {\r\n\t        if (this.currentAnimationIndex != null) {\r\n\t            var animation = this.animations[this.currentAnimationIndex];\r\n\t            animation.visible = true;\r\n\t            if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                ImageTextCounterElement_1.ImageTextCounterElement.Round = true;\r\n\t                animation.goToOutro(parseInt(neo_common_1.NumberUtils.devide(this.currentWin, BetManager_1.BetManager.CoinSize).toString()));\r\n\t            }\r\n\t            else {\r\n\t                ImageTextCounterElement_1.ImageTextCounterElement.Round = false;\r\n\t                animation.goToOutro(this.currentWin);\r\n\t            }\r\n\t            this.currentAnimationIndex = null;\r\n\t            this.currentAnimationFinished = true;\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.getAnimationIndex = function () {\r\n\t        return this.currentMultiplierIndex;\r\n\t    };\r\n\t    WinAnimator.prototype.onCalculationFinished = function () {\r\n\t        this.emit(WinAnimator.FinishQuickWinCalculation);\r\n\t    };\r\n\t    WinAnimator.prototype.onAnimationFinished = function () {\r\n\t        this.currentAnimationFinished = true;\r\n\t        this.emit(WinAnimator.FinishWinCalculation);\r\n\t    };\r\n\t    WinAnimator.prototype.onAnimationComplete = function () {\r\n\t        this.currentAnimationIndex = null;\r\n\t        this.finishFirstWins();\r\n\t    };\r\n\t    WinAnimator.prototype.idle = function () {\r\n\t        for (var reelIndex = 0; reelIndex < this.currentSymbols.length; reelIndex++) {\r\n\t            for (var symbolIndex = 0; symbolIndex < this.currentSymbols[reelIndex].length; symbolIndex++) {\r\n\t                var symbol = this.currentSymbols[reelIndex][symbolIndex];\r\n\t                if (symbol.getCurrentCase() === Symbol_1.Symbol.CaseNormal &&\r\n\t                    symbol.hasCase(Symbol_1.Symbol.CaseIdle) &&\r\n\t                    symbol.getCurrentCase() !== Symbol_1.Symbol.CaseIdle) {\r\n\t                    symbol.goToCase(Symbol_1.Symbol.CaseIdle);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.startTimer(WinAnimator.Idle, this.getIdleDelay());\r\n\t    };\r\n\t    WinAnimator.prototype.getInitialIdleDelay = function () {\r\n\t        return 1;\r\n\t    };\r\n\t    WinAnimator.prototype.getIdleDelay = function () {\r\n\t        return 60;\r\n\t    };\r\n\t    WinAnimator.prototype.getIdleActiveElementsCount = function () {\r\n\t        return 2;\r\n\t    };\r\n\t    WinAnimator.FinishWinCalculation = \"eventFinishWinCalculation\";\r\n\t    WinAnimator.FinishWinAnimator = \"eventFinishWinAnimator\";\r\n\t    WinAnimator.FinishQuickWinCalculation = \"eventFinishQuickWinCalculation\";\r\n\t    WinAnimator.Idle = \"idle\";\r\n\t    WinAnimator.CycleWins = \"cycleWins\";\r\n\t    WinAnimator = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], WinAnimator);\r\n\t    return WinAnimator;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.WinAnimator = WinAnimator;\r\n\texports.WinAnimatorAttributes = {\r\n\t    CONFIGS: \"Configs\",\r\n\t};\r\n\n\n/***/ },\n/* 109 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar StyleManager_1 = __webpack_require__(18);\r\n\tvar ImageTextCounterElement_1 = __webpack_require__(110);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar Song_1 = __webpack_require__(112);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar TimelineElement = (function (_super) {\r\n\t    __extends(TimelineElement, _super);\r\n\t    function TimelineElement() {\r\n\t        _super.call(this);\r\n\t        this._frameCounter = 0;\r\n\t        this._loop = false;\r\n\t        this._timer = FrameTimer_1.CreateFrameTimer(\"TimelineElement\");\r\n\t        this._timer.on(FrameTimer_1.FrameTimerEvents.Complete, this.animate.bind(this));\r\n\t        this._outroDelayPlay = FrameTimer_1.CreateFrameTimer(\"outroDelayPlay\");\r\n\t        this._outroDelayPlay.on(FrameTimer_1.FrameTimerEvents.Complete, this.outroDelayPlay.bind(this));\r\n\t    }\r\n\t    TimelineElement.prototype.internalDestroy = function (options) {\r\n\t        this._timer.stop();\r\n\t        if (this._elements.childs != null) {\r\n\t            for (var key in this._elements.childs) {\r\n\t                if (this._elements.childs.hasOwnProperty(key)) {\r\n\t                    if (this._elements.childs[key] instanceof PIXI.DisplayObject) {\r\n\t                        this._elements.childs[key].destroy(options);\r\n\t                    }\r\n\t                    this._elements.childs[key] = null;\r\n\t                }\r\n\t            }\r\n\t            this._elements.childs = null;\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(TimelineElement.prototype, \"winValue\", {\r\n\t        get: function () {\r\n\t            return this._winValue;\r\n\t        },\r\n\t        set: function (value) {\r\n\t            this._winValue = value;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(TimelineElement.prototype, \"winValueFrom\", {\r\n\t        get: function () {\r\n\t            return this._winValueFrom;\r\n\t        },\r\n\t        set: function (value) {\r\n\t            this._winValueFrom = value;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    TimelineElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.TimelineElementAttributes.LOOP)) {\r\n\t            this._loop = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.TimelineElementAttributes.LOOP));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TimelineElementAttributes.STYLE)) {\r\n\t            this._style = StyleManager_1.StyleManager.Styles[node.getAttribute(exports.TimelineElementAttributes.STYLE)];\r\n\t            if (this._style != null) {\r\n\t                if (this._style.container != null) {\r\n\t                    if (node.hasAttribute(exports.TimelineElementAttributes.CLONE) &&\r\n\t                        neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.TimelineElementAttributes.CLONE))) {\r\n\t                        this._elements = this._style.container.clone();\r\n\t                    }\r\n\t                    else {\r\n\t                        this._elements = this._style.container;\r\n\t                    }\r\n\t                    this.addChild(this._elements);\r\n\t                    if (this._style.frames != null) {\r\n\t                        this._framesArray = [];\r\n\t                        for (var key in this._style.frames) {\r\n\t                            this._framesArray.push(parseInt(key));\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING no timeline\");\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no children\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no style with name: \" + node.getAttribute(exports.TimelineElementAttributes.STYLE));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.TimelineElementAttributes.TINT)) {\r\n\t            if (this._elements != null && this._elements.children != null && this._elements.children.length > 0) {\r\n\t                for (var i = 0; i < this._elements.children.length; i++) {\r\n\t                    var child = this._elements.children[i];\r\n\t                    if (child instanceof PIXI.DisplayObject) {\r\n\t                        if (child.children != null && child.children.length > 0) {\r\n\t                            for (var j = 0; j < child.children.length; j++) {\r\n\t                                var childOfChild = child.children[j];\r\n\t                                if (childOfChild instanceof PIXI.Sprite ||\r\n\t                                    childOfChild instanceof PIXI.extras.AnimatedSprite) {\r\n\t                                    if (node.getAttribute(exports.TimelineElementAttributes.TINT) === \"0\") {\r\n\t                                        childOfChild.tint = 0xffffff;\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        childOfChild.tint = parseInt(node.getAttribute(exports.TimelineElementAttributes.TINT), 16);\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TimelineElementAttributes.PLAY) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.TimelineElementAttributes.PLAY))) {\r\n\t            if (this._framesArray != null) {\r\n\t                this.startAnimate();\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING can't play because movieClip is null\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"GoToOutro\") && neo_common_1.StringUtils.parseBoolean(node.getAttribute(\"GoToOutro\"))) {\r\n\t            this.goToOutro();\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.play = function (winValue, winValueFrom) {\r\n\t        if (winValue != null) {\r\n\t            this._winValue = winValue;\r\n\t        }\r\n\t        this._winValueFrom = winValueFrom || 0;\r\n\t        if (this._framesArray != null) {\r\n\t            this.startAnimate();\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.stop = function () {\r\n\t        if (this._elements.childs != null) {\r\n\t            for (var key in this._elements.childs) {\r\n\t                if (this._elements.childs.hasOwnProperty(key)) {\r\n\t                    Tweens_1.Tweens.removeTweens(this._elements.childs[key], \"all\");\r\n\t                    this._elements.childs[key].visible = false;\r\n\t                    if (this._elements.childs[key] instanceof ImageTextCounterElement_1.ImageTextCounterElement) {\r\n\t                        this._elements.childs[key].stop();\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.stopAnimate();\r\n\t    };\r\n\t    TimelineElement.prototype.goToOutro = function (winValue) {\r\n\t        if (winValue != null) {\r\n\t            this._winValue = winValue;\r\n\t        }\r\n\t        this._timer.stop();\r\n\t        if (this._style != null && this._style.outro != null) {\r\n\t            var node = this._style.outro;\r\n\t            if (node != null) {\r\n\t                if (node.hasAttribute(\"Emit\")) {\r\n\t                    this.emit(node.getAttribute(\"Emit\"));\r\n\t                }\r\n\t                var next = node.firstElementChild;\r\n\t                if (next != null) {\r\n\t                    while (next != null) {\r\n\t                        var element = this._elements.childs[next.nodeName];\r\n\t                        if (element != null) {\r\n\t                            element.updateByNode(next);\r\n\t                            if (element instanceof ImageTextCounterElement_1.ImageTextCounterElement) {\r\n\t                                if (this._winValue != null) {\r\n\t                                    element.start(this._winValueFrom || 0, this._winValue, 0);\r\n\t                                }\r\n\t                                else {\r\n\t                                    element.force();\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                        next = next.nextElementSibling;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this._style != null && this._style.outroSounds != null) {\r\n\t                var node2 = this._style.outroSounds;\r\n\t                if (node2 != null) {\r\n\t                    var next = node2.firstElementChild;\r\n\t                    if (next != null) {\r\n\t                        while (next != null) {\r\n\t                            if (next.hasAttribute(Song_1.SongAttributes.SONG)) {\r\n\t                                if (next.hasAttribute(Song_1.SongAttributes.PLAY)) {\r\n\t                                    var value = next.getAttribute(Song_1.SongAttributes.PLAY);\r\n\t                                    var intValue = parseInt(value);\r\n\t                                    if (value === \"true\") {\r\n\t                                        if (next.hasAttribute(Song_1.SongAttributes.FADEIN)) {\r\n\t                                            PlayList_1.PlayList.play(next.getAttribute(Song_1.SongAttributes.SONG), parseInt(next.getAttribute(Song_1.SongAttributes.FADEIN)));\r\n\t                                        }\r\n\t                                        else {\r\n\t                                            PlayList_1.PlayList.play(next.getAttribute(Song_1.SongAttributes.SONG));\r\n\t                                        }\r\n\t                                    }\r\n\t                                    else if (!isNaN(intValue)) {\r\n\t                                        this._delayPlayElement = next;\r\n\t                                        this._outroDelayPlay.stop();\r\n\t                                        this._outroDelayPlay.start(intValue);\r\n\t                                    }\r\n\t                                }\r\n\t                                if (next.hasAttribute(Song_1.SongAttributes.LOOP)) {\r\n\t                                    if (next.hasAttribute(Song_1.SongAttributes.FADEIN)) {\r\n\t                                        PlayList_1.PlayList.loop(next.getAttribute(Song_1.SongAttributes.SONG), parseInt(next.getAttribute(Song_1.SongAttributes.FADEIN)));\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        PlayList_1.PlayList.loop(next.getAttribute(Song_1.SongAttributes.SONG));\r\n\t                                    }\r\n\t                                }\r\n\t                                if (next.hasAttribute(Song_1.SongAttributes.STOP)) {\r\n\t                                    if (next.hasAttribute(Song_1.SongAttributes.FADEOUT)) {\r\n\t                                        PlayList_1.PlayList.stop(next.getAttribute(Song_1.SongAttributes.SONG), parseInt(next.getAttribute(Song_1.SongAttributes.FADEOUT)));\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        PlayList_1.PlayList.stop(next.getAttribute(Song_1.SongAttributes.SONG));\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                            next = next.nextElementSibling;\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.outroDelayPlay = function () {\r\n\t        if (this._delayPlayElement != null) {\r\n\t            if (this._delayPlayElement.hasAttribute(Song_1.SongAttributes.FADEIN)) {\r\n\t                PlayList_1.PlayList.play(this._delayPlayElement.getAttribute(Song_1.SongAttributes.SONG), parseInt(this._delayPlayElement.getAttribute(Song_1.SongAttributes.FADEIN)));\r\n\t            }\r\n\t            else {\r\n\t                PlayList_1.PlayList.play(this._delayPlayElement.getAttribute(Song_1.SongAttributes.SONG));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.startAnimate = function () {\r\n\t        this._timer.stop();\r\n\t        this._frameCounter = 0;\r\n\t        if (this.children != null) {\r\n\t            if (this._framesArray[0] === 0) {\r\n\t                this.animate();\r\n\t            }\r\n\t            else {\r\n\t                this._timer.start(this._framesArray[0]);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.reset = function () {\r\n\t        this.startAnimate();\r\n\t    };\r\n\t    TimelineElement.prototype.stopAnimate = function () {\r\n\t        this._timer.stop();\r\n\t    };\r\n\t    TimelineElement.prototype.animate = function () {\r\n\t        if (this._framesArray != null) {\r\n\t            if (this._framesArray[this._frameCounter] != null) {\r\n\t                this.goToFrame(this._framesArray[this._frameCounter]);\r\n\t            }\r\n\t            else {\r\n\t                this._timer.stop();\r\n\t                if (this._loop) {\r\n\t                    this.reset();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._frameCounter++;\r\n\t        if (this._framesArray[this._frameCounter] != null) {\r\n\t            this._timer.stop();\r\n\t            this._timer.start(this._framesArray[this._frameCounter] - this._framesArray[this._frameCounter - 1]);\r\n\t        }\r\n\t        else {\r\n\t            this.emit(TimelineElement.AnimationComplete);\r\n\t            this._timer.stop();\r\n\t            if (this._loop) {\r\n\t                this.reset();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.goToFrame = function (frame) {\r\n\t        if (this._style != null && this._style.frames != null) {\r\n\t            var node = this._style.frames[frame.toString()];\r\n\t            if (node.hasAttribute(\"Emit\")) {\r\n\t                this.emit(node.getAttribute(\"Emit\"));\r\n\t            }\r\n\t            if (node != null && node.childElementCount > 0) {\r\n\t                var next = node.firstElementChild;\r\n\t                if (next != null) {\r\n\t                    while (next != null) {\r\n\t                        var element = this._elements.childs[next.nodeName];\r\n\t                        if (element != null) {\r\n\t                            element.updateByNode(next);\r\n\t                            if (element instanceof ImageTextCounterElement_1.ImageTextCounterElement && this._winValue != null) {\r\n\t                                if (element.visible) {\r\n\t                                    element.start(this._winValueFrom || 0, this._winValue);\r\n\t                                    this._winValue = null;\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                        next = next.nextElementSibling;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this._style != null && this._style.framesSounds != null) {\r\n\t                var node2 = this._style.framesSounds[frame.toString()];\r\n\t                if (node2 != null) {\r\n\t                    var next = node2.firstElementChild;\r\n\t                    if (next != null) {\r\n\t                        while (next != null) {\r\n\t                            if (next.hasAttribute(Song_1.SongAttributes.SONG)) {\r\n\t                                if (next.hasAttribute(Song_1.SongAttributes.PLAY)) {\r\n\t                                    if (next.hasAttribute(Song_1.SongAttributes.FADEIN)) {\r\n\t                                        PlayList_1.PlayList.play(next.getAttribute(Song_1.SongAttributes.SONG), parseInt(next.getAttribute(Song_1.SongAttributes.FADEIN)));\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        PlayList_1.PlayList.play(next.getAttribute(Song_1.SongAttributes.SONG));\r\n\t                                    }\r\n\t                                }\r\n\t                                if (next.hasAttribute(Song_1.SongAttributes.LOOP)) {\r\n\t                                    if (next.hasAttribute(Song_1.SongAttributes.FADEIN)) {\r\n\t                                        PlayList_1.PlayList.loop(next.getAttribute(Song_1.SongAttributes.SONG), parseInt(next.getAttribute(Song_1.SongAttributes.FADEIN)));\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        PlayList_1.PlayList.loop(next.getAttribute(Song_1.SongAttributes.SONG));\r\n\t                                    }\r\n\t                                }\r\n\t                                if (next.hasAttribute(Song_1.SongAttributes.STOP)) {\r\n\t                                    if (next.hasAttribute(Song_1.SongAttributes.FADEOUT)) {\r\n\t                                        PlayList_1.PlayList.stop(next.getAttribute(Song_1.SongAttributes.SONG), parseInt(next.getAttribute(Song_1.SongAttributes.FADEOUT)));\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        PlayList_1.PlayList.stop(next.getAttribute(Song_1.SongAttributes.SONG));\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                            next = next.nextElementSibling;\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TimelineElement.prototype.destroy = function (options) {\r\n\t        this._timer.stop();\r\n\t        _super.prototype.destroy.call(this, options);\r\n\t    };\r\n\t    TimelineElement.prototype.clone = function () {\r\n\t        var element = new TimelineElement();\r\n\t        element._elements = this._elements.clone();\r\n\t        element.addChild(element._elements);\r\n\t        element._style = this._style;\r\n\t        element._framesArray = this._framesArray;\r\n\t        element._loop = this._loop;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.visible = this.visible;\r\n\t        if (this.maskSprite != null) {\r\n\t            var elementMask = new PIXI.Sprite(this.maskSprite.texture);\r\n\t            elementMask.position.x = this.maskSprite.position.x;\r\n\t            elementMask.position.y = this.maskSprite.position.y;\r\n\t            element.maskSprite = elementMask;\r\n\t            element.addChild(elementMask);\r\n\t            element.mask = elementMask;\r\n\t        }\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    TimelineElement.prototype.setTint = function (tintColor) {\r\n\t        if (this._tint === tintColor || isNaN(tintColor)) {\r\n\t            return;\r\n\t        }\r\n\t        this._tint = tintColor;\r\n\t        for (var child in this._elements.childs) {\r\n\t            if (typeof this._elements.childs[child].tint === \"number\") {\r\n\t                this._elements.childs[child].tint = tintColor;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(TimelineElement.prototype, \"tint\", {\r\n\t        get: function () {\r\n\t            return this._tint;\r\n\t        },\r\n\t        set: function (tintColor) {\r\n\t            this.setTint(tintColor);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    TimelineElement.AnimationComplete = \"animationComplete\";\r\n\t    TimelineElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], TimelineElement);\r\n\t    return TimelineElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.TimelineElement = TimelineElement;\r\n\texports.TimelineElementAttributes = {\r\n\t    CLONE: \"Clone\",\r\n\t    DEBUG: \"Debug\",\r\n\t    EMIT: \"Emit\",\r\n\t    LOOP: \"Loop\",\r\n\t    PLAY: \"Play\",\r\n\t    SOUNDS: \"Sounds\",\r\n\t    STYLE: \"Style\",\r\n\t    TINT: \"Tint\",\r\n\t};\r\n\n\n/***/ },\n/* 110 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ImageTextElement_1 = __webpack_require__(111);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ImageTextCounterElement = (function (_super) {\r\n\t    __extends(ImageTextCounterElement, _super);\r\n\t    function ImageTextCounterElement() {\r\n\t        _super.call(this);\r\n\t        this.from = 0;\r\n\t        this.to = 0;\r\n\t        this.duration = 0;\r\n\t        this.round = false;\r\n\t        this.currentValue = 0;\r\n\t        this.finalValue = 0;\r\n\t    }\r\n\t    ImageTextCounterElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.ImageTextCounterElementAttributes.FROM)) {\r\n\t            this.from = parseFloat(node.getAttribute(exports.ImageTextCounterElementAttributes.FROM));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageTextCounterElementAttributes.TO)) {\r\n\t            this.to = parseFloat(node.getAttribute(exports.ImageTextCounterElementAttributes.TO));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageTextCounterElementAttributes.DURATION)) {\r\n\t            this.duration = parseInt(node.getAttribute(exports.ImageTextCounterElementAttributes.DURATION));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageTextCounterElementAttributes.ROUND)) {\r\n\t            this.round = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.ImageTextCounterElementAttributes.ROUND));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageTextCounterElementAttributes.ACTION)) {\r\n\t            switch (node.getAttribute(exports.ImageTextCounterElementAttributes.ACTION)) {\r\n\t                case exports.ImageTextCounterElementAttributes.ACTION_VALUE.START:\r\n\t                    this.start(this.from, this.to, this.duration);\r\n\t                    break;\r\n\t                case exports.ImageTextCounterElementAttributes.ACTION_VALUE.STOP:\r\n\t                    this.stop();\r\n\t                    break;\r\n\t                case exports.ImageTextCounterElementAttributes.ACTION_VALUE.FORCE:\r\n\t                    this.force();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageTextCounterElement.prototype.start = function (from, to, duration) {\r\n\t        var d = duration != null ? duration : this.duration;\r\n\t        if (d <= 0 || from === to) {\r\n\t            this.currentValue = to;\r\n\t            this.finalValue = to;\r\n\t            this.onCountTo();\r\n\t        }\r\n\t        else {\r\n\t            this.currentValue = from;\r\n\t            this.finalValue = from;\r\n\t            this.onCountTo();\r\n\t            this.finalValue = to;\r\n\t            Tweens_1.Tweens.customTween(this, {\r\n\t                tween: \"currentValue\",\r\n\t                tweenValues: [this.currentValue, this.finalValue],\r\n\t                tweenDuration: [d],\r\n\t                callbackType: \"onUpdate\",\r\n\t                callbackFunction: this.onCountTo,\r\n\t                callbackScope: this,\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    ImageTextCounterElement.prototype.onCountTo = function () {\r\n\t        if (this.currentValue === this.finalValue) {\r\n\t            Tweens_1.Tweens.removeTweens(this, \"currentValue\");\r\n\t            this.bitmapText.text = neo_common_1.NumberUtils.valueToNumber(this.finalValue, this.round || ImageTextCounterElement.Round ? 0 : AppContext_1.AppContext.gameConfiguration.ShowDecimalPlaces);\r\n\t            this.realign();\r\n\t            return;\r\n\t        }\r\n\t        this.bitmapText.text = neo_common_1.NumberUtils.valueToNumber(this.currentValue, this.round || ImageTextCounterElement.Round ? 0 : AppContext_1.AppContext.gameConfiguration.ShowDecimalPlaces);\r\n\t        this.realign();\r\n\t    };\r\n\t    ImageTextCounterElement.prototype.stop = function () {\r\n\t        Tweens_1.Tweens.removeTweens(this, \"currentValue\");\r\n\t    };\r\n\t    ImageTextCounterElement.prototype.force = function () {\r\n\t        this.currentValue = this.finalValue;\r\n\t        this.onCountTo();\r\n\t    };\r\n\t    ImageTextCounterElement.prototype.clone = function () {\r\n\t        var element = new ImageTextCounterElement();\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.font = this.font;\r\n\t        element.text = this.text;\r\n\t        element.textAlign = this.textAlign;\r\n\t        element.textBaseline = this.textBaseline;\r\n\t        element.from = this.from;\r\n\t        element.to = this.to;\r\n\t        element.duration = this.duration;\r\n\t        element.round = this.round;\r\n\t        element.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\r\n\t        element.addChild(element.bitmapText);\r\n\t        element.realign();\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    Object.defineProperty(ImageTextCounterElement.prototype, \"tint\", {\r\n\t        get: function () {\r\n\t            return this.bitmapText.tint;\r\n\t        },\r\n\t        set: function (tintColor) {\r\n\t            this.bitmapText.tint = tintColor;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ImageTextCounterElement.Round = false;\r\n\t    ImageTextCounterElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ImageTextCounterElement);\r\n\t    return ImageTextCounterElement;\r\n\t}(ImageTextElement_1.ImageTextElement));\r\n\texports.ImageTextCounterElement = ImageTextCounterElement;\r\n\texports.ImageTextCounterElementAttributes = {\r\n\t    ROUND: \"Round\",\r\n\t    DURATION: \"Duration\",\r\n\t    FROM: \"From\",\r\n\t    TO: \"To\",\r\n\t    ACTION: \"Action\",\r\n\t    ACTION_VALUE: {\r\n\t        START: \"Start\",\r\n\t        STOP: \"Stop\",\r\n\t        FORCE: \"Force\",\r\n\t    },\r\n\t};\r\n\n\n/***/ },\n/* 111 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ImageTextElement = (function (_super) {\r\n\t    __extends(ImageTextElement, _super);\r\n\t    function ImageTextElement() {\r\n\t        _super.call(this);\r\n\t        this.textAlign = exports.ImageTextElementAttributes.TEXT_ALIGN_VALUE.LEFT;\r\n\t        this.textBaseline = exports.ImageTextElementAttributes.TEXT_BASELINE_VALUE.TOP;\r\n\t        this.text = \"\";\r\n\t    }\r\n\t    ImageTextElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (this.bitmapText == null) {\r\n\t            if (node.hasAttribute(exports.ImageTextElementAttributes.FONT)) {\r\n\t                if (node.hasAttribute(exports.ImageTextElementAttributes.TEXT)) {\r\n\t                    this.text = node.getAttribute(exports.ImageTextElementAttributes.TEXT);\r\n\t                }\r\n\t                this.font = node.getAttribute(exports.ImageTextElementAttributes.FONT);\r\n\t                this.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\r\n\t                this.addChild(this.bitmapText);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageTextElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.ImageTextElementAttributes.TEXT_ALIGN)) {\r\n\t            this.textAlign = node.getAttribute(exports.ImageTextElementAttributes.TEXT_ALIGN);\r\n\t            this.realign();\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageTextElementAttributes.TEXT_BASELINE)) {\r\n\t            this.textBaseline = node.getAttribute(exports.ImageTextElementAttributes.TEXT_BASELINE);\r\n\t            this.realign();\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageTextElementAttributes.TINT)) {\r\n\t            var val = parseInt(node.getAttribute(exports.ImageTextElementAttributes.TINT), 16);\r\n\t            if (!isNaN(val)) {\r\n\t                this.bitmapText.tint = val;\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageTextElementAttributes.TEXT)) {\r\n\t            if (this.bitmapText) {\r\n\t                this.bitmapText.text = node.getAttribute(exports.ImageTextElementAttributes.TEXT);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageTextElement.prototype.realign = function () {\r\n\t        switch (this.textAlign) {\r\n\t            case exports.ImageTextElementAttributes.TEXT_ALIGN_VALUE.RIGHT:\r\n\t                this.bitmapText.position.x = -this.bitmapText.width;\r\n\t                break;\r\n\t            case exports.ImageTextElementAttributes.TEXT_ALIGN_VALUE.CENTER:\r\n\t                this.bitmapText.position.x = -this.bitmapText.width * 0.5;\r\n\t                break;\r\n\t            default:\r\n\t                this.bitmapText.position.x = 0;\r\n\t                break;\r\n\t        }\r\n\t        switch (this.textBaseline) {\r\n\t            case exports.ImageTextElementAttributes.TEXT_BASELINE_VALUE.BOTTOM:\r\n\t                this.bitmapText.position.y = -this.bitmapText.height;\r\n\t                break;\r\n\t            case exports.ImageTextElementAttributes.TEXT_BASELINE_VALUE.MIDDLE:\r\n\t                this.bitmapText.position.y = -this.bitmapText.height * 0.5;\r\n\t                break;\r\n\t            default:\r\n\t                this.bitmapText.position.y = 0;\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    ImageTextElement.prototype.clone = function () {\r\n\t        var element = new ImageTextElement();\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.font = this.font;\r\n\t        element.text = this.text;\r\n\t        element.textAlign = this.textAlign;\r\n\t        element.textBaseline = this.textBaseline;\r\n\t        element.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\r\n\t        element.bitmapText.tint = this.bitmapText.tint;\r\n\t        element.addChild(element.bitmapText);\r\n\t        element.realign();\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ImageTextElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ImageTextElement);\r\n\t    return ImageTextElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.ImageTextElement = ImageTextElement;\r\n\texports.ImageTextElementAttributes = {\r\n\t    TEXT: \"Text\",\r\n\t    FONT: \"Font\",\r\n\t    TEXT_ALIGN: \"TextAlign\",\r\n\t    TEXT_ALIGN_VALUE: {\r\n\t        LEFT: \"left\",\r\n\t        CENTER: \"center\",\r\n\t        RIGHT: \"right\",\r\n\t    },\r\n\t    TEXT_BASELINE: \"TextBaseline\",\r\n\t    TEXT_BASELINE_VALUE: {\r\n\t        TOP: \"top\",\r\n\t        MIDDLE: \"middle\",\r\n\t        BOTTOM: \"bottom\",\r\n\t    },\r\n\t    TINT: \"Tint\",\r\n\t};\r\n\n\n/***/ },\n/* 112 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Song = (function () {\r\n\t    function Song() {\r\n\t    }\r\n\t    Song.prototype.create = function (node) {\r\n\t        this.id = node.nodeName;\r\n\t        this.alias = node.hasAttribute(exports.SongAttributes.ALIAS) ? node.getAttribute(exports.SongAttributes.ALIAS) : null;\r\n\t        this.instance = null;\r\n\t        this.group = node.hasAttribute(exports.SongAttributes.GROUP) ? node.getAttribute(exports.SongAttributes.GROUP) : null;\r\n\t        this.volume = node.hasAttribute(exports.SongAttributes.VOLUME)\r\n\t            ? parseFloat(node.getAttribute(exports.SongAttributes.VOLUME))\r\n\t            : 1;\r\n\t        this.pan = node.hasAttribute(exports.SongAttributes.PAN) ? parseFloat(node.getAttribute(exports.SongAttributes.PAN)) : 0;\r\n\t        this.fade = 0;\r\n\t        this.fadeStartTime = 0;\r\n\t        this.fadeEndTime = 0;\r\n\t        if (node.hasAttribute(exports.SongAttributes.SONG)) {\r\n\t            if (PIXI.sound.exists(node.getAttribute(exports.SongAttributes.SONG))) {\r\n\t                this.sound = PIXI.sound.find(node.getAttribute(exports.SongAttributes.SONG));\r\n\t            }\r\n\t            else {\r\n\t                this.sound = null;\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no sound with id: \" + node.getAttribute(\"Song\"));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.sound = null;\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no attribute: Song\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.play = function (loop, fadeIn, reset, onProgress) {\r\n\t        if (onProgress === void 0) { onProgress = null; }\r\n\t        if (this.group === \"BackgroundMusic\" && !AppContext_1.AppContext.current.isBackgroundMusicEnabled) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.sound !== null && (reset || this.instance === null)) {\r\n\t            this.sound.filters = this.pan === 0 ? null : [new PIXI.sound.filters.StereoFilter(this.pan)];\r\n\t            if (fadeIn > 0) {\r\n\t                this.fade = 1;\r\n\t                this.fadeStartTime = new Date().getTime();\r\n\t                this.fadeEndTime = this.fadeStartTime + fadeIn * 16.7;\r\n\t            }\r\n\t            else {\r\n\t                this.fade = 0;\r\n\t                this.fadeStartTime = 0;\r\n\t                this.fadeEndTime = 0;\r\n\t            }\r\n\t            this.playInstance(loop, onProgress);\r\n\t        }\r\n\t        if (this.instance != null && this.group === \"BackgroundMusic\" && !DataManager_1.DataManager.BackSoundsPlayingFromGame) {\r\n\t            this.instance.volume = 0;\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.playInstance = function (loop, onProgress) {\r\n\t        if (loop === void 0) { loop = true; }\r\n\t        if (onProgress === void 0) { onProgress = null; }\r\n\t        this.stopInstance();\r\n\t        this.instance = (this.sound.play(this.alias !== null ? { sprite: this.alias, volume: this.volume } : { volume: this.volume }));\r\n\t        this.instance.on(\"end\", loop ? this.playInstance : this.stopInstance, this);\r\n\t        if (this.fade !== 0) {\r\n\t            this.instance.on(\"progress\", this.fade === 1 ? this.onFadeIn : this.onFadeOut, this);\r\n\t        }\r\n\t        if (onProgress) {\r\n\t            this.instance.on(\"progress\", onProgress, this);\r\n\t        }\r\n\t        if (this.instance != null && this.group === \"BackgroundMusic\" && !DataManager_1.DataManager.BackSoundsPlayingFromGame) {\r\n\t            this.instance.volume = 0;\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.isPlaying = function () {\r\n\t        return this.sound.isPlaying;\r\n\t    };\r\n\t    Song.prototype.onFadeIn = function () {\r\n\t        var duration = this.fadeEndTime - this.fadeStartTime;\r\n\t        var progress = new Date().getTime() - this.fadeStartTime;\r\n\t        var volume = this.volume * Math.min(progress / duration, 1);\r\n\t        if (this.group === \"BackgroundMusic\" && !DataManager_1.DataManager.BackSoundsPlayingFromGame) {\r\n\t            this.instance.volume = 0;\r\n\t        }\r\n\t        else {\r\n\t            try {\r\n\t                this.instance.volume = volume;\r\n\t            }\r\n\t            catch (e) { }\r\n\t        }\r\n\t        if (volume === this.volume) {\r\n\t            this.instance.off(\"progress\", this.onFadeIn, this);\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.toggleGroup = function (group, toggle) {\r\n\t        if (toggle === void 0) { toggle = false; }\r\n\t        if (this.group === group && this.instance != null) {\r\n\t            if (toggle) {\r\n\t                this.instance.volume = this.volume;\r\n\t            }\r\n\t            else {\r\n\t                this.instance.volume = 0;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.stop = function (fadeOut) {\r\n\t        if (this.instance != null) {\r\n\t            if (fadeOut > 0) {\r\n\t                this.fade = -1;\r\n\t                this.fadeStartTime = new Date().getTime();\r\n\t                this.fadeEndTime = this.fadeStartTime + fadeOut * 16.7;\r\n\t                this.instance.off(\"progress\", this.onFadeIn, this);\r\n\t                this.instance.on(\"progress\", this.onFadeOut, this);\r\n\t            }\r\n\t            else {\r\n\t                this.stopInstance();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.pause = function () {\r\n\t        if (this.instance != null) {\r\n\t            this.sound.pause();\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.resume = function () {\r\n\t        if (this.instance != null) {\r\n\t            this.sound.resume();\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.stopInstance = function () {\r\n\t        if (this.instance != null) {\r\n\t            this.instance.off(\"progress\", this.onFadeIn, this);\r\n\t            this.instance.off(\"progress\", this.onFadeOut, this);\r\n\t            this.instance.off(\"end\", this.playInstance, this);\r\n\t            this.instance.off(\"end\", this.stopInstance, this);\r\n\t            this.instance.stop();\r\n\t            this.instance = null;\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.onFadeOut = function () {\r\n\t        var duration = this.fadeEndTime - this.fadeStartTime;\r\n\t        var progress = new Date().getTime() - this.fadeStartTime;\r\n\t        var volume = this.volume - this.volume * Math.min(progress / duration, 1);\r\n\t        if (this.group === \"BackgroundMusic\" && !DataManager_1.DataManager.BackSoundsPlayingFromGame) {\r\n\t            this.instance.volume = 0;\r\n\t        }\r\n\t        else {\r\n\t            try {\r\n\t                this.instance.volume = volume;\r\n\t            }\r\n\t            catch (e) { }\r\n\t        }\r\n\t        if (volume === 0) {\r\n\t            this.stopInstance();\r\n\t        }\r\n\t    };\r\n\t    Song.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    Song = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Song)\r\n\t    ], Song);\r\n\t    return Song;\r\n\t}());\r\n\texports.Song = Song;\r\n\texports.SongAttributes = {\r\n\t    SONG: \"Song\",\r\n\t    ALIAS: \"Alias\",\r\n\t    GROUP: \"Group\",\r\n\t    VOLUME: \"Volume\",\r\n\t    PAN: \"Pan\",\r\n\t    PLAY: \"Play\",\r\n\t    LOOP: \"Loop\",\r\n\t    STOP: \"Stop\",\r\n\t    FADEIN: \"FadeIn\",\r\n\t    FADEOUT: \"FadeOut\",\r\n\t};\r\n\n\n/***/ },\n/* 113 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar Reel_1 = __webpack_require__(114);\r\n\tvar Reel2_1 = __webpack_require__(115);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar TeasingComponent_1 = __webpack_require__(116);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar Machine = (function (_super) {\r\n\t    __extends(Machine, _super);\r\n\t    function Machine() {\r\n\t        _super.call(this);\r\n\t        this.elementInstance = [];\r\n\t        this._reels = [];\r\n\t        this._stoppedSymbolsArray = [];\r\n\t        this._stoppedFromServer = false;\r\n\t        this._stoppedFromMachine = false;\r\n\t        this._stoppedFromLegal = false;\r\n\t        this._stoppedReelIndexes = 0;\r\n\t        this._stopTimer = FrameTimer_1.CreateFrameTimer(\"Machine\");\r\n\t        this._stopTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.spinStop.bind(this));\r\n\t        this.actualReelStopped = -1;\r\n\t        this._reelsContainer = new PIXI.Container();\r\n\t        this.addChild(this._reelsContainer);\r\n\t    }\r\n\t    Machine.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (this.maskSprite != null && this._reelsContainer != null) {\r\n\t            this._reelsContainer.addChild(this.maskSprite);\r\n\t            this._reelsContainer.mask = this.maskSprite;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.MachineAttributes.CONFIGS)) {\r\n\t            var configs = node.getAttribute(exports.MachineAttributes.CONFIGS).split(\";\");\r\n\t            for (var i = 0; i < configs.length; i++) {\r\n\t                var config = Configuration_1.Configuration.Configurations[configs[i]];\r\n\t                if (config != null) {\r\n\t                    this.configurate(config);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Machine.prototype.configurate = function (node) {\r\n\t        if (node.hasAttribute(\"ReelCount\")) {\r\n\t            this._reelCount = parseInt(node.getAttribute(\"ReelCount\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"ReelX\")) {\r\n\t            this._reelX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"ReelX\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"ReelY\")) {\r\n\t            this._reelY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"ReelY\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"SymbolWidth\")) {\r\n\t            this._symbolWidth = parseInt(node.getAttribute(\"SymbolWidth\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"SymbolHeight\")) {\r\n\t            this._symbolHeight = parseInt(node.getAttribute(\"SymbolHeight\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"VisibleSymbolCount\")) {\r\n\t            this._visibleSymbolCount = parseInt(node.getAttribute(\"VisibleSymbolCount\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"MinSpinRotation\")) {\r\n\t            this._minSpinRotation = parseInt(node.getAttribute(\"MinSpinRotation\"));\r\n\t        }\r\n\t        else {\r\n\t            this._minSpinRotation = 40;\r\n\t        }\r\n\t        if (node.hasAttribute(\"MinSpinRotationLong\")) {\r\n\t            this._minSpinRotationLong = parseInt(node.getAttribute(\"MinSpinRotationLong\"));\r\n\t        }\r\n\t        else {\r\n\t            this._minSpinRotationLong = 100;\r\n\t        }\r\n\t        if (node.hasAttribute(\"StartDelay\")) {\r\n\t            this._startDelay = parseInt(node.getAttribute(\"StartDelay\"));\r\n\t        }\r\n\t        else {\r\n\t            this._startDelay = 3;\r\n\t        }\r\n\t        if (node.hasAttribute(\"StopDelay\")) {\r\n\t            this._stopDelay = parseInt(node.getAttribute(\"StopDelay\"));\r\n\t        }\r\n\t        else {\r\n\t            this._stopDelay = 10;\r\n\t        }\r\n\t        if (node.hasAttribute(\"ReelConfiguration\")) {\r\n\t            this._reelConfiguration = node.getAttribute(\"ReelConfiguration\");\r\n\t        }\r\n\t    };\r\n\t    Machine.prototype.createReels = function (reels) {\r\n\t        for (var i = 0; i < this._reelCount; i++) {\r\n\t            this._reels.push(new Reel2_1.Reel2());\r\n\t        }\r\n\t        for (var i = 0; i < this._reelCount; i++) {\r\n\t            var reel = this._reels[i];\r\n\t            if (this._reelConfiguration != null) {\r\n\t                var configs = this._reelConfiguration.split(\";\");\r\n\t                for (var j = 0; j < configs.length; j++) {\r\n\t                    reel.configure(Configuration_1.Configuration.Configurations[configs[j]]);\r\n\t                }\r\n\t            }\r\n\t            reel.visible = false;\r\n\t            reel.initialize(i > 0 ? this._reels[i - 1] : null, i < this._reelCount - 1 ? this._reels[i + 1] : null, i, this._symbols, reels[i], this._reelX[i], this._reelY[i], this._visibleSymbolCount, 2, 1, this._symbolWidth, this._symbolHeight, this._startDelay * i, this._stopDelay * i);\r\n\t            reel.on(Reel_1.Reel.ReelStopped, this.onReelStopped.bind(this));\r\n\t            this._reelsContainer.addChild(reel);\r\n\t        }\r\n\t        this._reelsContainer.visible = false;\r\n\t    };\r\n\t    Machine.prototype.initialize = function (symbols, reels, teasingComponent) {\r\n\t        if (teasingComponent != null) {\r\n\t            this._teasingComponent = teasingComponent;\r\n\t        }\r\n\t        else {\r\n\t            this._teasingComponent = new TeasingComponent_1.TeasingComponent();\r\n\t        }\r\n\t        this._symbols = symbols;\r\n\t        this.createReels(reels);\r\n\t    };\r\n\t    Machine.prototype.addElementInstance = function (element) {\r\n\t        this.elementInstance[Object.keys(element)[0]] = element[Object.keys(element)[0]];\r\n\t    };\r\n\t    Machine.prototype.setStoppedSymbolsArray = function (value) {\r\n\t        this._stoppedSymbolsArray = value;\r\n\t    };\r\n\t    Machine.prototype.showSymbols = function (reelsData) {\r\n\t        if (false) {\r\n\t            this.log(\"showSymbols\");\r\n\t        }\r\n\t        this.actualReelStopped = -1;\r\n\t        if (this._reels != null) {\r\n\t            for (var i = 0; i < this._reelCount; i++) {\r\n\t                if (reelsData[i] != null) {\r\n\t                    if (this._reels[i] != null) {\r\n\t                        this._reels[i].visible = true;\r\n\t                        this._reels[i].setData(reelsData[i]);\r\n\t                        this._reels[i].showSymbols();\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"ERROR no reel with index: \" + i);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no reelsData with index: \" + i);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no reels\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Machine.prototype.spinStart = function (longRotation) {\r\n\t        if (false) {\r\n\t            this.log(\"spinStart\");\r\n\t        }\r\n\t        this._stoppedFromServer = false;\r\n\t        this._stoppedFromMachine = false;\r\n\t        this._stoppedFromLegal = false;\r\n\t        this._startSpinTime = Date.now();\r\n\t        this.visible = true;\r\n\t        this._reelsContainer.visible = true;\r\n\t        this.actualReelStopped = -1;\r\n\t        this._stoppedReelIndexes = 0;\r\n\t        var delay = 0;\r\n\t        if (this._reels != null) {\r\n\t            for (var i = 0; i < this._reelCount; i++) {\r\n\t                if (this.respin != null) {\r\n\t                    if (i === 0 && this.respin !== 1) {\r\n\t                        continue;\r\n\t                    }\r\n\t                    if (i === 1 && this.respin !== 2) {\r\n\t                        continue;\r\n\t                    }\r\n\t                    if (i === 2 && this.respin !== 4) {\r\n\t                        continue;\r\n\t                    }\r\n\t                }\r\n\t                if (this._reels[i] != null) {\r\n\t                    if (this._stoppedSymbolsArray.length > 0) {\r\n\t                        this._reels[i].visible = true;\r\n\t                        this._reels[i].setData(this._stoppedSymbolsArray[i]);\r\n\t                        this._reels[i].showSymbols();\r\n\t                        this._reels[i].spinStart(delay);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"ERROR no stopped symbols\");\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no reel with index: \" + i);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (longRotation != null && longRotation) {\r\n\t                this._stopTimer.start(this._minSpinRotationLong);\r\n\t            }\r\n\t            else {\r\n\t                this._stopTimer.start(this._minSpinRotation);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no reels\");\r\n\t            }\r\n\t        }\r\n\t        if (delay > 0) {\r\n\t            setTimeout(function () {\r\n\t                PlayList_1.PlayList.play(\"SND_BaseRespinStart\");\r\n\t                PlayList_1.PlayList.loop(\"SND_BaseRespinLoop\");\r\n\t                PlayList_1.PlayList.loop(\"SND_BaseRiser\");\r\n\t                PlayList_1.PlayList.play(\"SND_BaseRotationStart\");\r\n\t            }, delay);\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.play(\"SND_BaseRotationStart\");\r\n\t        }\r\n\t    };\r\n\t    Machine.prototype.verifyMinGameRoundDurationConditions = function () {\r\n\t        return ((AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration > 0 ||\r\n\t            AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan > 0) &&\r\n\t            !ModuleManager_1.ModuleManager.freespinsActive());\r\n\t    };\r\n\t    Machine.prototype.spinStop = function (event, force, fromServer, legal) {\r\n\t        var _this = this;\r\n\t        if (force === void 0) { force = false; }\r\n\t        if (fromServer === void 0) { fromServer = false; }\r\n\t        if (legal === void 0) { legal = false; }\r\n\t        if (fromServer) {\r\n\t            this._stoppedFromServer = true;\r\n\t            if (this._legalStopTimer != null) {\r\n\t                clearTimeout(this._legalStopTimer);\r\n\t            }\r\n\t            if (this.verifyMinGameRoundDurationConditions()) {\r\n\t                this._legalStopTimer = setTimeout(function () { return _this.spinStop(null, false, false, true); }, this.getLegalRemainingSpinDuration());\r\n\t            }\r\n\t            else {\r\n\t                this._stoppedFromLegal = true;\r\n\t            }\r\n\t        }\r\n\t        else if (legal) {\r\n\t            if (this._legalStopTimer != null) {\r\n\t                clearTimeout(this._legalStopTimer);\r\n\t            }\r\n\t            this._stoppedFromLegal = true;\r\n\t        }\r\n\t        else {\r\n\t            this._stopTimer.stop();\r\n\t            this._stoppedFromMachine = true;\r\n\t        }\r\n\t        if (force) {\r\n\t            if (this._legalStopTimer != null) {\r\n\t                clearTimeout(this._legalStopTimer);\r\n\t            }\r\n\t            this._stoppedFromLegal = true;\r\n\t            this._stopTimer.stop();\r\n\t            this._stoppedFromMachine = true;\r\n\t        }\r\n\t        if (false) {\r\n\t            this.log(\"spinStop \" + force);\r\n\t        }\r\n\t        if (this._stoppedFromServer && this._stoppedFromMachine && this._stoppedFromLegal) {\r\n\t            if (!ModuleManager_1.ModuleManager.freespinsActive() &&\r\n\t                !(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, \"0\");\r\n\t            }\r\n\t            var rta_1;\r\n\t            if (this.elementInstance[\"teasing\"] != null) {\r\n\t                this.elementInstance[\"teasing\"].forEach(function (teasingComponent) {\r\n\t                    var reelTeasingAttributes = teasingComponent.checkOnInit({\r\n\t                        force: force,\r\n\t                        stoppedSymbols: _this._stoppedSymbolsArray,\r\n\t                    });\r\n\t                    if (teasingComponent.teasingEnabled) {\r\n\t                        rta_1 = reelTeasingAttributes;\r\n\t                    }\r\n\t                }, this);\r\n\t            }\r\n\t            if (this._reels != null) {\r\n\t                for (var i = 0; i < this._reelCount; i++) {\r\n\t                    if (this._reels[i] != null) {\r\n\t                        if (this._stoppedSymbolsArray.length !== 0) {\r\n\t                            this._reels[i].setData(this._stoppedSymbolsArray[i]);\r\n\t                            if (typeof rta_1 !== \"undefined\") {\r\n\t                                this._reels[i].spinStop(force, rta_1[i].stopDelay);\r\n\t                            }\r\n\t                            else {\r\n\t                                this._reels[i].spinStop(force);\r\n\t                            }\r\n\t                        }\r\n\t                        else {\r\n\t                            if (false) {\r\n\t                                this.log(\"ERROR no stopped symbols\");\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"ERROR no reel with index: \" + i);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no reels\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Machine.prototype.getLegalRemainingSpinDuration = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan > 0) {\r\n\t            return this.calculateRemainingSpinDuration(AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan);\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration > 0) {\r\n\t            return AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration;\r\n\t        }\r\n\t        return 0;\r\n\t    };\r\n\t    Machine.prototype.calculateRemainingSpinDuration = function (minTime) {\r\n\t        var now = Date.now();\r\n\t        var diff = now - this._startSpinTime;\r\n\t        var reelStopDuration = this.getReelStopDuration();\r\n\t        return Math.max(minTime - diff - reelStopDuration, 0);\r\n\t    };\r\n\t    Machine.prototype.getReelStopDuration = function () {\r\n\t        return (this._reels[this._reelCount - 1].getStopDuration() / 60) * 1000;\r\n\t    };\r\n\t    Machine.prototype.onReelStopped = function (reelIndex) {\r\n\t        if (this.respin == null) {\r\n\t            if (this._stoppedSymbolsArray[reelIndex].symbols.indexOf(7) !== -1) {\r\n\t                var count = 1;\r\n\t                for (var i = 0; i < reelIndex; i++) {\r\n\t                    if (this._stoppedSymbolsArray[i].symbols.indexOf(7) !== -1) {\r\n\t                        count++;\r\n\t                    }\r\n\t                }\r\n\t                if (count > 0) {\r\n\t                    PlayList_1.PlayList.play(\"SND_BaseIceTeasing\" + count);\r\n\t                }\r\n\t            }\r\n\t            if (this._stoppedSymbolsArray[reelIndex].symbols.indexOf(8) !== -1) {\r\n\t                var count = 1;\r\n\t                for (var i = 0; i < reelIndex; i++) {\r\n\t                    if (this._stoppedSymbolsArray[i].symbols.indexOf(8) !== -1) {\r\n\t                        count++;\r\n\t                    }\r\n\t                }\r\n\t                if (count > 0) {\r\n\t                    PlayList_1.PlayList.play(\"SND_BaseIceTeasing\" + count);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_BaseRotationEnd\" + reelIndex);\r\n\t        this._stoppedReelIndexes++;\r\n\t        this.actualReelStopped = reelIndex;\r\n\t        this._reels[reelIndex].visible = false;\r\n\t        this.emit(Machine.ReelStopped);\r\n\t        if (this._stoppedReelIndexes === this._reelCount || this.respin != null) {\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseRotation\", 10);\r\n\t            if (this._legalStopTimer != null) {\r\n\t                clearTimeout(this._legalStopTimer);\r\n\t            }\r\n\t            this._stopTimer.stop();\r\n\t            this._reelsContainer.visible = false;\r\n\t            if (false) {\r\n\t                var old = AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration;\r\n\t                var current = AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan;\r\n\t                var minDuration = current > 0 ? current : old > 0 ? old : 0;\r\n\t                var spinDuration = Date.now() - this._startSpinTime;\r\n\t                if (spinDuration > minDuration || !this.verifyMinGameRoundDurationConditions()) {\r\n\t                    this.log(\"Spin time duration: \" + spinDuration + \" ms\");\r\n\t                }\r\n\t                else {\r\n\t                    console.log(\"%cError spin time duration:\" + spinDuration + \" ms\", \"color: #ff9900\");\r\n\t                }\r\n\t            }\r\n\t            this.emit(Machine.MachineStopped);\r\n\t        }\r\n\t    };\r\n\t    Machine.MachineStopped = \"machineStopped\";\r\n\t    Machine.ReelStopped = \"onReelStopped\";\r\n\t    Machine = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Machine);\r\n\t    return Machine;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.Machine = Machine;\r\n\texports.MachineAttributes = {\r\n\t    CONFIGS: \"Configs\",\r\n\t};\r\n\n\n/***/ },\n/* 114 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Symbol_1 = __webpack_require__(107);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar Reel = (function (_super) {\r\n\t    __extends(Reel, _super);\r\n\t    function Reel() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Reel.prototype.configure = function (node) {\r\n\t        this.preRoll = node.hasAttribute(\"PreRoll\") ? parseInt(node.getAttribute(\"PreRoll\")) : 180;\r\n\t        this.preRollSpeed = node.hasAttribute(\"PreRollSpeed\") ? parseInt(node.getAttribute(\"PreRollSpeed\")) : 10;\r\n\t        this.postRoll = node.hasAttribute(\"PostRoll\") ? parseInt(node.getAttribute(\"PostRoll\")) : 180;\r\n\t        this.postRollSpeed = node.hasAttribute(\"PostRollSpeed\") ? parseInt(node.getAttribute(\"PostRollSpeed\")) : 5;\r\n\t        this.speed = node.hasAttribute(\"Speed\") ? parseInt(node.getAttribute(\"Speed\")) : 3;\r\n\t        this.forceSpeed = node.hasAttribute(\"ForceSpeed\") ? parseInt(node.getAttribute(\"ForceSpeed\")) : 2;\r\n\t    };\r\n\t    Reel.prototype.initialize = function (previousReel, nextReel, index, symbols, strip, positionX, positionY, symbolCount, symbolTopCount, symbolBottomCount, symbolWidth, symbolHeight, startDelay, stopDelay) {\r\n\t        this.previousReel = previousReel;\r\n\t        this.nextReel = nextReel;\r\n\t        this.index = index;\r\n\t        this.symbols = symbols;\r\n\t        this.strip = strip;\r\n\t        this.positionX = positionX;\r\n\t        this.positionY = positionY;\r\n\t        this.symbolCount = symbolCount;\r\n\t        this.symbolTopCount = symbolTopCount;\r\n\t        this.symbolBottomCount = symbolBottomCount;\r\n\t        this.symbolWidth = symbolWidth;\r\n\t        this.symbolHeight = symbolHeight;\r\n\t        this.startDelay = startDelay;\r\n\t        this.stopDelay = stopDelay;\r\n\t        this.stopTimer = FrameTimer_1.CreateFrameTimer(\"reel\");\r\n\t        this.stopTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.onStopTimerComplete.bind(this));\r\n\t        this.currentSymbols = [];\r\n\t    };\r\n\t    Reel.prototype.setData = function (data) {\r\n\t        this.data = data;\r\n\t    };\r\n\t    Reel.prototype.showSymbols = function () {\r\n\t        this.shouldBeStopping = false;\r\n\t        this.isStopping = false;\r\n\t        this.stoppingCounter = 0;\r\n\t        this.isTeasing = false;\r\n\t        this.teasingSymbols = [];\r\n\t        this.x = this.positionX;\r\n\t        this.y = this.positionY;\r\n\t        while (this.currentSymbols.length > 0) {\r\n\t            this.returnSymbol(this.currentSymbols.pop());\r\n\t        }\r\n\t        for (var i = 0; i < this.symbolBottomCount + this.symbolCount + this.symbolTopCount; i++) {\r\n\t            var symbolId = void 0;\r\n\t            var symbolCase = void 0;\r\n\t            if (i < this.symbolBottomCount) {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase = i === this.symbolBottomCount - 1 ? Symbol_1.Symbol.CaseRotation : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            else if (i < this.symbolBottomCount + this.symbolCount) {\r\n\t                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - i - 1];\r\n\t                symbolCase = Symbol_1.Symbol.CaseRotation;\r\n\t            }\r\n\t            else {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase = i === this.symbolBottomCount + this.symbolCount ? Symbol_1.Symbol.CaseRotation : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            if (symbolId == 10 && symbolCase == Symbol_1.Symbol.CaseRotation) {\r\n\t                symbolCase = \"ROTATION_NO_BACKGROUND\";\r\n\t            }\r\n\t            this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\t            this.addChild(this.currentSymbols[0]);\r\n\t        }\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var symbol = this.currentSymbols[i];\r\n\t            symbol.x = -symbol.offsetX;\r\n\t            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\r\n\t        }\r\n\t    };\r\n\t    Reel.prototype.spinStart = function () {\r\n\t        this.shouldBeStopping = false;\r\n\t        this.isStopping = false;\r\n\t        this.stoppingCounter = 0;\r\n\t        this.isTeasing = false;\r\n\t        this.teasingSymbols = [];\r\n\t        this.rollSpeed = this.speed;\r\n\t        this.stripIndex = (this.data.index - this.symbolTopCount + this.strip.length) % this.strip.length;\r\n\t        this.spinPreRoll();\r\n\t    };\r\n\t    Reel.prototype.spinStop = function (force, customDelay) {\r\n\t        if (force === void 0) { force = false; }\r\n\t        if (customDelay === void 0) { customDelay = 0; }\r\n\t        this.stopTimer.stop();\r\n\t        if (force) {\r\n\t            this.shouldBeStopping = true;\r\n\t            this.rollSpeed = this.forceSpeed;\r\n\t            this.emit(Reel.ReelStopping, this.index);\r\n\t        }\r\n\t        else {\r\n\t            this.stopTimer.start(customDelay !== 0 ? customDelay : this.stopDelay);\r\n\t        }\r\n\t    };\r\n\t    Reel.prototype.onStopTimerComplete = function () {\r\n\t        this.emit(Reel.ReelStopping, this.index);\r\n\t        this.shouldBeStopping = true;\r\n\t        this.isStopping = true;\r\n\t    };\r\n\t    Reel.prototype.getStopDuration = function () {\r\n\t        var stoppingSymbols = this.symbolTopCount + this.symbolCount + this.symbolBottomCount - 1;\r\n\t        return this.stopDelay + stoppingSymbols * this.speed + this.postRollSpeed * 2;\r\n\t    };\r\n\t    Reel.prototype.spinTease = function (symbols, customDelay) {\r\n\t        if (customDelay === void 0) { customDelay = 0; }\r\n\t        this.shouldBeStopping = false;\r\n\t        this.isStopping = false;\r\n\t        this.stoppingCounter = 0;\r\n\t        this.isTeasing = true;\r\n\t        this.teasingSymbols = symbols;\r\n\t        this.stopTimer.stop();\r\n\t        this.stopTimer.start(customDelay !== 0 ? customDelay : this.stopDelay);\r\n\t    };\r\n\t    Reel.prototype.spinPreRoll = function () {\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        Tweens_1.Tweens.positionTween(this, {\r\n\t            tweenX: [this.positionX, this.positionX, this.positionX],\r\n\t            tweenY: [this.positionY, this.positionY - this.preRoll, this.positionY],\r\n\t            tweenDuration: this.preRollSpeed * 2,\r\n\t            tweenDelay: this.startDelay,\r\n\t            callbackFunction: this.spinRoll,\r\n\t            callbackScope: this,\r\n\t        });\r\n\t    };\r\n\t    Reel.prototype.spinRoll = function () {\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        Tweens_1.Tweens.positionTween(this, {\r\n\t            tweenX: [this.positionX, this.positionX],\r\n\t            tweenY: [this.positionY, this.positionY + this.symbolHeight],\r\n\t            tweenDuration: this.rollSpeed,\r\n\t            callbackFunction: this.updateReel,\r\n\t            callbackScope: this,\r\n\t        });\r\n\t    };\r\n\t    Reel.prototype.updateReel = function () {\r\n\t        this.returnSymbol(this.currentSymbols.pop());\r\n\t        if (this.shouldBeStopping && !this.isStopping) {\r\n\t            if (this.previousReel === null) {\r\n\t                this.isStopping = true;\r\n\t            }\r\n\t            else if (this.previousReel.isStopping) {\r\n\t                this.isStopping = true;\r\n\t            }\r\n\t        }\r\n\t        this.stripIndex = (this.stripIndex - 1 + this.strip.length) % this.strip.length;\r\n\t        var symbolId = this.strip[this.stripIndex];\r\n\t        var symbolCase = Symbol_1.Symbol.CaseBlur;\r\n\t        if (this.isStopping) {\r\n\t            if (this.stoppingCounter < this.symbolBottomCount) {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index +\r\n\t                        this.symbolBottomCount +\r\n\t                        this.symbolCount -\r\n\t                        this.stoppingCounter -\r\n\t                        1 +\r\n\t                        this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase =\r\n\t                    this.stoppingCounter === this.symbolBottomCount - 1 ? Symbol_1.Symbol.CaseRotation : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            else if (this.stoppingCounter < this.symbolBottomCount + this.symbolCount) {\r\n\t                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - this.stoppingCounter - 1];\r\n\t                symbolCase = Symbol_1.Symbol.CaseRotation;\r\n\t            }\r\n\t            else {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index +\r\n\t                        this.symbolBottomCount +\r\n\t                        this.symbolCount -\r\n\t                        this.stoppingCounter -\r\n\t                        1 +\r\n\t                        this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase =\r\n\t                    this.stoppingCounter === this.symbolBottomCount + this.symbolCount\r\n\t                        ? Symbol_1.Symbol.CaseRotation\r\n\t                        : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            this.stoppingCounter++;\r\n\t        }\r\n\t        this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\t        this.addChild(this.currentSymbols[0]);\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var symbol = this.currentSymbols[i];\r\n\t            symbol.x = -symbol.offsetX;\r\n\t            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\r\n\t        }\r\n\t        if (this.isStopping &&\r\n\t            this.stoppingCounter === this.symbolBottomCount + this.symbolCount + this.symbolTopCount) {\r\n\t            this.spinPostRoll();\r\n\t        }\r\n\t        else {\r\n\t            this.spinRoll();\r\n\t        }\r\n\t    };\r\n\t    Reel.prototype.spinPostRoll = function () {\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        Tweens_1.Tweens.positionTween(this, {\r\n\t            tweenX: [this.positionX, this.positionX, this.positionX],\r\n\t            tweenY: [this.positionY, this.positionY + this.postRoll, this.positionY],\r\n\t            tweenDuration: this.postRollSpeed * 2,\r\n\t            callbackFunction: this.spinComplete,\r\n\t            callbackScope: this,\r\n\t        });\r\n\t    };\r\n\t    Reel.prototype.spinComplete = function () {\r\n\t        Tweens_1.Tweens.removeTweens(this, \"position\");\r\n\t        while (this.currentSymbols.length > 0) {\r\n\t            this.returnSymbol(this.currentSymbols.pop());\r\n\t        }\r\n\t        this.emit(Reel.ReelStopped, this.index);\r\n\t    };\r\n\t    Reel.prototype.getSymbol = function (symbolId, symbolCase) {\r\n\t        return this.symbols.getSymbol(symbolId, symbolCase);\r\n\t    };\r\n\t    Reel.prototype.returnSymbol = function (symbol) {\r\n\t        this.symbols.returnSymbol(symbol);\r\n\t    };\r\n\t    Reel.prototype.isReelStopping = function () {\r\n\t        return this.isStopping;\r\n\t    };\r\n\t    Reel.ReelStopped = \"reelStopped\";\r\n\t    Reel.ReelStopping = \"reelStopping\";\r\n\t    Reel = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Reel);\r\n\t    return Reel;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.Reel = Reel;\r\n\n\n/***/ },\n/* 115 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Reel_1 = __webpack_require__(114);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Reel2 = (function (_super) {\r\n\t    __extends(Reel2, _super);\r\n\t    function Reel2() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Reel2.prototype.spinStart = function (delay) {\r\n\t        var _this = this;\r\n\t        this.shouldBeStopping = false;\r\n\t        this.isStopping = false;\r\n\t        this.stoppingCounter = 0;\r\n\t        this.isTeasing = false;\r\n\t        this.teasingSymbols = [];\r\n\t        this.rollSpeed = this.speed;\r\n\t        this.stripIndex = (this.data.index - this.symbolTopCount + this.strip.length) % this.strip.length;\r\n\t        if (delay > 0) {\r\n\t            setTimeout(function () {\r\n\t                _this.spinPreRoll();\r\n\t            }, delay);\r\n\t        }\r\n\t        else {\r\n\t            this.spinPreRoll();\r\n\t        }\r\n\t    };\r\n\t    Reel2 = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Reel2);\r\n\t    return Reel2;\r\n\t}(Reel_1.Reel));\r\n\texports.Reel2 = Reel2;\r\n\n\n/***/ },\n/* 116 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Settings_1 = __webpack_require__(117);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\texports.ReelTeasingActions = {\r\n\t    DO_NOTHING: 0,\r\n\t    SPIN_STOP: 1,\r\n\t    TEASE: 2,\r\n\t    FORCE_SPIN_STOP: 3,\r\n\t};\r\n\texports.SymbolTeasingActions = {\r\n\t    NO_CHANGE: -1,\r\n\t    NOWIN: 0,\r\n\t    NORMAL: 1,\r\n\t    IMPACT: 2,\r\n\t    IMPACT_NOWIN: 3,\r\n\t    TEASE: 4,\r\n\t    IMPACT_TEASE: 5,\r\n\t};\r\n\tvar TeasingComponent = (function () {\r\n\t    function TeasingComponent() {\r\n\t        this.teasingSymbol = -1;\r\n\t        this.impactSymbols = [];\r\n\t        this.elementInstance = [];\r\n\t        this.teasingEnabled = false;\r\n\t        this.teasingEnabledForce = false;\r\n\t        this.force = false;\r\n\t        this.reelsTeasingAttributes = [];\r\n\t        this.symbolsTeasingAttributes = [];\r\n\t        this.reelCount = 5;\r\n\t        this.teasingStopDelay = 90;\r\n\t        this.minimumSymbolsForTeasing = 2;\r\n\t        this.countSymbolsOnReelsAndRows = 0;\r\n\t        this.canPlayTeaserSound = false;\r\n\t        this.wasPlayedTeaserSound = false;\r\n\t        this.wasPlayedTeaserWinSound = false;\r\n\t        this.wasPlayedTeaserFailSound = false;\r\n\t        this.finishTeasing = this.finishTeasing.bind(this);\r\n\t        var configs = [\"GeneralConfiguration\", \"MachineConfiguration\"];\r\n\t        for (var i = 0; i < configs.length; i++) {\r\n\t            var config = Configuration_1.Configuration.Configurations[configs[i]];\r\n\t            if (config != null) {\r\n\t                this.configurate(config);\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            this.reelsTeasingAttributes[i] = { action: exports.ReelTeasingActions.DO_NOTHING, stopping: false };\r\n\t        }\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            if (this.symbolsTeasingAttributes[i] == null) {\r\n\t                this.symbolsTeasingAttributes[i] = [];\r\n\t            }\r\n\t            for (var j = 0; j < this._visibleSymbolCount; j++) {\r\n\t                this.symbolsTeasingAttributes[i][j] = { teasable: false, action: exports.SymbolTeasingActions.NOWIN };\r\n\t            }\r\n\t        }\r\n\t        this._customData = [];\r\n\t    }\r\n\t    Object.defineProperty(TeasingComponent.prototype, \"customData\", {\r\n\t        set: function (value) {\r\n\t            this._customData = value;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    TeasingComponent.prototype.create = function (node) {\r\n\t        if (node.hasAttribute(TeasingComponentAttributes.CONFIGS)) {\r\n\t            var configs = node.getAttribute(TeasingComponentAttributes.CONFIGS).split(\";\");\r\n\t            for (var i = 0; i < configs.length; i++) {\r\n\t                var config = Configuration_1.Configuration.Configurations[configs[i]];\r\n\t                if (config != null) {\r\n\t                    this.configurate(config);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TeasingComponent.prototype.configurate = function (node) {\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_COUNT)) {\r\n\t            this.reelCount = parseInt(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_COUNT));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.VISIBLE_SYMBOL_COUNT)) {\r\n\t            this._visibleSymbolCount = parseInt(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.VISIBLE_SYMBOL_COUNT));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.MachineConfigurationAttributes.TEASING_STOP_DELAY)) {\r\n\t            this.teasingStopDelay = parseInt(node.getAttribute(Configuration_1.MachineConfigurationAttributes.TEASING_STOP_DELAY));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_X)) {\r\n\t            this.reelX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_X));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_Y)) {\r\n\t            this.reelY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.MachineConfigurationAttributes.STOP_DELAY)) {\r\n\t            this.stopDelay = parseInt(node.getAttribute(Configuration_1.MachineConfigurationAttributes.STOP_DELAY));\r\n\t        }\r\n\t    };\r\n\t    TeasingComponent.prototype.addElementInstance = function (element) {\r\n\t        this.elementInstance[Object.keys(element)[0]] = element[Object.keys(element)[0]];\r\n\t    };\r\n\t    TeasingComponent.prototype.checkOnInit = function (options) {\r\n\t        this.stoppedSymbolsArray = options.stoppedSymbols;\r\n\t        this.force = options.force;\r\n\t        return this.reelsTeasingAttributes;\r\n\t    };\r\n\t    TeasingComponent.prototype.isEnoughtForStartTeasing = function (reelIndexStart, reelIndexStop) {\r\n\t        if (reelIndexStart === void 0) { reelIndexStart = 0; }\r\n\t        return (this.countSymbols(reelIndexStart, reelIndexStop, Settings_1.Settings.SymbolTeasing) >= this.minimumSymbolsForTeasing);\r\n\t    };\r\n\t    TeasingComponent.prototype.countSymbols = function (reelIndexStart, reelIndexStop, symbolId) {\r\n\t        if (reelIndexStart === void 0) { reelIndexStart = 0; }\r\n\t        var count = 0;\r\n\t        for (var i = reelIndexStart; i <= reelIndexStop; i++) {\r\n\t            if (this.stoppedSymbolsArray[i].symbols.indexOf(symbolId) !== -1) {\r\n\t                count++;\r\n\t            }\r\n\t        }\r\n\t        return count;\r\n\t    };\r\n\t    TeasingComponent.prototype.isReelTeasable = function (reelIndex) {\r\n\t        return this.teasingEnabled;\r\n\t    };\r\n\t    TeasingComponent.prototype.firstOccurrenceOfSymbol = function (reelIndexStart, reelIndexStop) {\r\n\t        if (reelIndexStart === void 0) { reelIndexStart = 0; }\r\n\t        for (var i = reelIndexStart; i <= reelIndexStop; i++) {\r\n\t            if (this.stoppedSymbolsArray[i].symbols.indexOf(Settings_1.Settings.SymbolTeasing) !== -1) {\r\n\t                return i;\r\n\t            }\r\n\t        }\r\n\t        return -1;\r\n\t    };\r\n\t    TeasingComponent.prototype.precedingReelsWithSymbols = function (reelIndex, symbolId) {\r\n\t        var count = 0;\r\n\t        for (var i = 0; i < reelIndex; i++) {\r\n\t            if (this.stoppedSymbolsArray[i].symbols.indexOf(symbolId) !== -1) {\r\n\t                count++;\r\n\t            }\r\n\t        }\r\n\t        return count;\r\n\t    };\r\n\t    TeasingComponent.prototype.getCountSymbolsOnReelsAndRows = function (reelIndexStart, reelIndexStop, symbolId) {\r\n\t        if (reelIndexStart === void 0) { reelIndexStart = 0; }\r\n\t        this.countSymbolsOnReelsAndRows = 0;\r\n\t        for (var i = reelIndexStart; i <= reelIndexStop; i++) {\r\n\t            for (var j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\r\n\t                if (this.stoppedSymbolsArray[i].symbols[j]) {\r\n\t                    if (this.stoppedSymbolsArray[i].symbols[j] === symbolId) {\r\n\t                        this.countSymbolsOnReelsAndRows++;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return this.countSymbolsOnReelsAndRows;\r\n\t    };\r\n\t    TeasingComponent.prototype.getTeasingSymbol = function () {\r\n\t        return this.teasingSymbol;\r\n\t    };\r\n\t    TeasingComponent.prototype.checkSymbolsPerReel = function (reelIndex) {\r\n\t        if (this.teasingEnabled) {\r\n\t            var countOfSymbol = this.getCountSymbolsOnReelsAndRows(0, reelIndex, Settings_1.Settings.SymbolTeasing);\r\n\t            switch (reelIndex) {\r\n\t                case 0:\r\n\t                    if (countOfSymbol > 1) {\r\n\t                        for (var j = 0; j < this.stoppedSymbolsArray[reelIndex].symbols.length; j++) {\r\n\t                            if (this.stoppedSymbolsArray[reelIndex].symbols[j]) {\r\n\t                                if (this.stoppedSymbolsArray[reelIndex].symbols[j] === Settings_1.Settings.SymbolTeasing) {\r\n\t                                    this.symbolsTeasingAttributes[reelIndex][j].action = exports.SymbolTeasingActions.TEASE;\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else if (countOfSymbol == 1) {\r\n\t                        for (var j = 0; j < this.stoppedSymbolsArray[reelIndex].symbols.length; j++) {\r\n\t                            if (this.stoppedSymbolsArray[reelIndex].symbols[j]) {\r\n\t                                if (this.stoppedSymbolsArray[reelIndex].symbols[j] === Settings_1.Settings.SymbolTeasing) {\r\n\t                                    this.symbolsTeasingAttributes[reelIndex][j].action = exports.SymbolTeasingActions.IMPACT;\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        for (var j = 0; j < this.stoppedSymbolsArray[reelIndex].symbols.length; j++) {\r\n\t                            if (this.stoppedSymbolsArray[reelIndex].symbols[j]) {\r\n\t                                if (this.stoppedSymbolsArray[reelIndex].symbols[j] === Settings_1.Settings.SymbolTeasing) {\r\n\t                                    this.symbolsTeasingAttributes[reelIndex][j].action = exports.SymbolTeasingActions.NORMAL;\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case 1:\r\n\t                    if (countOfSymbol > 1) {\r\n\t                        for (var i = 0; i <= reelIndex; i++) {\r\n\t                            for (var j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\r\n\t                                if (this.stoppedSymbolsArray[i].symbols[j]) {\r\n\t                                    if (this.stoppedSymbolsArray[i].symbols[j] === Settings_1.Settings.SymbolTeasing) {\r\n\t                                        this.symbolsTeasingAttributes[i][j].action = exports.SymbolTeasingActions.IMPACT_TEASE;\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        for (var i = 0; i <= reelIndex; i++) {\r\n\t                            for (var j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\r\n\t                                if (this.stoppedSymbolsArray[i].symbols[j]) {\r\n\t                                    if (this.stoppedSymbolsArray[i].symbols[j] === Settings_1.Settings.SymbolTeasing) {\r\n\t                                        this.symbolsTeasingAttributes[i][j].action = exports.SymbolTeasingActions.NOWIN;\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case 2:\r\n\t                    if (countOfSymbol > 2) {\r\n\t                        for (var i = 0; i <= reelIndex; i++) {\r\n\t                            for (var j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\r\n\t                                if (this.stoppedSymbolsArray[i].symbols[j]) {\r\n\t                                    if (this.stoppedSymbolsArray[i].symbols[j] === Settings_1.Settings.SymbolTeasing) {\r\n\t                                        if (i == reelIndex) {\r\n\t                                            this.symbolsTeasingAttributes[i][j].action =\r\n\t                                                exports.SymbolTeasingActions.IMPACT_TEASE;\r\n\t                                        }\r\n\t                                        else {\r\n\t                                            this.symbolsTeasingAttributes[i][j].action = exports.SymbolTeasingActions.TEASE;\r\n\t                                        }\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        this.teasingEnabled = false;\r\n\t                        for (var i = 0; i <= reelIndex; i++) {\r\n\t                            for (var j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\r\n\t                                if (this.stoppedSymbolsArray[i].symbols[j]) {\r\n\t                                    this.symbolsTeasingAttributes[i][j].action = exports.SymbolTeasingActions.NORMAL;\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case 3:\r\n\t                    if (countOfSymbol > 3) {\r\n\t                        for (var i = 0; i <= reelIndex; i++) {\r\n\t                            for (var j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\r\n\t                                if (this.stoppedSymbolsArray[i].symbols[j]) {\r\n\t                                    if (this.stoppedSymbolsArray[i].symbols[j] === Settings_1.Settings.SymbolTeasing) {\r\n\t                                        if (i == reelIndex) {\r\n\t                                            this.symbolsTeasingAttributes[i][j].action =\r\n\t                                                exports.SymbolTeasingActions.IMPACT_TEASE;\r\n\t                                        }\r\n\t                                        else {\r\n\t                                            this.symbolsTeasingAttributes[i][j].action = exports.SymbolTeasingActions.TEASE;\r\n\t                                        }\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else if (countOfSymbol == 3) {\r\n\t                        for (var i = 0; i <= reelIndex; i++) {\r\n\t                            for (var j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\r\n\t                                if (this.stoppedSymbolsArray[i].symbols[j]) {\r\n\t                                    if (this.stoppedSymbolsArray[i].symbols[j] === Settings_1.Settings.SymbolTeasing) {\r\n\t                                        this.symbolsTeasingAttributes[i][j].action = exports.SymbolTeasingActions.TEASE;\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        for (var i = 0; i <= reelIndex; i++) {\r\n\t                            for (var j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\r\n\t                                if (this.stoppedSymbolsArray[i].symbols[j]) {\r\n\t                                    this.symbolsTeasingAttributes[i][j].action = exports.SymbolTeasingActions.NORMAL;\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case 4:\r\n\t                    if (countOfSymbol > 4) {\r\n\t                        for (var i = 0; i <= reelIndex; i++) {\r\n\t                            for (var j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\r\n\t                                if (this.stoppedSymbolsArray[i].symbols[j]) {\r\n\t                                    if (this.stoppedSymbolsArray[i].symbols[j] === Settings_1.Settings.SymbolTeasing) {\r\n\t                                        if (i == reelIndex) {\r\n\t                                            this.symbolsTeasingAttributes[i][j].action =\r\n\t                                                exports.SymbolTeasingActions.IMPACT_TEASE;\r\n\t                                        }\r\n\t                                        else {\r\n\t                                            this.symbolsTeasingAttributes[i][j].action = exports.SymbolTeasingActions.TEASE;\r\n\t                                        }\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else if (countOfSymbol == 3 || countOfSymbol == 4) {\r\n\t                        for (var i = 0; i <= reelIndex; i++) {\r\n\t                            for (var j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\r\n\t                                if (this.stoppedSymbolsArray[i].symbols[j]) {\r\n\t                                    if (this.stoppedSymbolsArray[i].symbols[j] === Settings_1.Settings.SymbolTeasing) {\r\n\t                                        this.symbolsTeasingAttributes[i][j].action = exports.SymbolTeasingActions.TEASE;\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        for (var i = 0; i <= reelIndex; i++) {\r\n\t                            for (var j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\r\n\t                                if (this.stoppedSymbolsArray[i].symbols[j]) {\r\n\t                                    this.symbolsTeasingAttributes[i][j].action = exports.SymbolTeasingActions.NORMAL;\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            for (var i = 0; i <= reelIndex; i++) {\r\n\t                for (var j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\r\n\t                    this.symbolsTeasingAttributes[i][j].action = exports.SymbolTeasingActions.NORMAL;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return this.symbolsTeasingAttributes;\r\n\t    };\r\n\t    TeasingComponent.prototype.animateTeasing = function (reelIndex) { };\r\n\t    TeasingComponent.prototype.finishTeasing = function () {\r\n\t        for (var i = 0; i <= this.reelCount - 1; i++) {\r\n\t            for (var j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\r\n\t                if (this.stoppedSymbolsArray[i].symbols[j]) {\r\n\t                    this.symbolsTeasingAttributes[i][j].action = exports.SymbolTeasingActions.NORMAL;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.canPlayTeaserSound = false;\r\n\t        this.wasPlayedTeaserSound = false;\r\n\t        this.wasPlayedTeaserWinSound = false;\r\n\t        this.wasPlayedTeaserFailSound = false;\r\n\t    };\r\n\t    TeasingComponent.prototype.removeTeasing = function (noWin) {\r\n\t        if (noWin) {\r\n\t        }\r\n\t    };\r\n\t    TeasingComponent.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    return TeasingComponent;\r\n\t}());\r\n\texports.TeasingComponent = TeasingComponent;\r\n\tvar TeasingComponentAttributes = {\r\n\t    CONFIGS: \"Configs\",\r\n\t};\r\n\n\n/***/ },\n/* 117 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar Settings = (function () {\r\n\t    function Settings() {\r\n\t    }\r\n\t    Settings.SymbolTeasing = 11;\r\n\t    Settings.SymbolsImpact = [11];\r\n\t    Settings.SymbolsNoTrim = [5, 6, 7, 8, 9, 10, 11];\r\n\t    return Settings;\r\n\t}());\r\n\texports.Settings = Settings;\r\n\n\n/***/ },\n/* 118 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ContainerElement_1 = __webpack_require__(90);\r\n\tvar SwitchElement_1 = __webpack_require__(97);\r\n\tvar TimelineElement_1 = __webpack_require__(109);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar MinigameElement = (function (_super) {\r\n\t    __extends(MinigameElement, _super);\r\n\t    function MinigameElement() {\r\n\t        _super.apply(this, arguments);\r\n\t        this._data = [];\r\n\t        this.boardElements = [];\r\n\t        this.boardCounters = [];\r\n\t        this.boardButtons = [];\r\n\t        this.introElements = [];\r\n\t        this.outroElements = [];\r\n\t        this.activeElements = [];\r\n\t    }\r\n\t    MinigameElement.prototype.createByNode = function (node) {\r\n\t        var _this = this;\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (this.style) {\r\n\t            for (var attribute in MinigameElementAttributes) {\r\n\t                var name_1 = MinigameElementAttributes[attribute];\r\n\t                if (this.style.node.hasAttribute(name_1)) {\r\n\t                    node.setAttribute(name_1, this.style.node.getAttribute(name_1));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(MinigameElementAttributes.ACTIVE_ELEMENTS)) {\r\n\t            var names = node.getAttribute(MinigameElementAttributes.ACTIVE_ELEMENTS).split(\";\");\r\n\t            names.forEach(function (name) {\r\n\t                if (_this.childs[name]) {\r\n\t                    _this.activeElements.push(_this.childs[name]);\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t        if (node.hasAttribute(MinigameElementAttributes.BOARD_CONTAINER)) {\r\n\t            var el = this.childs[node.getAttribute(MinigameElementAttributes.BOARD_CONTAINER)];\r\n\t            if (el && el instanceof BaseElement_1.BaseElement) {\r\n\t                this.board = el;\r\n\t            }\r\n\t            else {\r\n\t                this.board = new ContainerElement_1.ContainerElement();\r\n\t                this.addChild(this.board);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.board = new ContainerElement_1.ContainerElement();\r\n\t            this.addChild(this.board);\r\n\t        }\r\n\t        if (node.hasAttribute(MinigameElementAttributes.BOARD_ELEMENT_NAMES)) {\r\n\t            var boardElementNames = node.getAttribute(MinigameElementAttributes.BOARD_ELEMENT_NAMES).split(\";\");\r\n\t            this.boardElements = [];\r\n\t            boardElementNames.forEach(function (name, index) {\r\n\t                if (_this.childs[name] && _this.childs[name] instanceof SwitchElement_1.SwitchElement) {\r\n\t                    _this.boardElements[index] = _this.childs[name];\r\n\t                    _this.board.addChild(_this.childs[name]);\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t        if (node.hasAttribute(MinigameElementAttributes.BOARD_COUNTER_NAMES)) {\r\n\t            var boardCounterNames = node.getAttribute(MinigameElementAttributes.BOARD_COUNTER_NAMES).split(\";\");\r\n\t            this.boardCounters = [];\r\n\t            boardCounterNames.forEach(function (name, index) {\r\n\t                if (_this.childs[name] && _this.childs[name] instanceof SwitchElement_1.SwitchElement) {\r\n\t                    _this.boardCounters[index] = _this.childs[name];\r\n\t                    _this.board.addChild(_this.childs[name]);\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t        if (node.hasAttribute(MinigameElementAttributes.INTRO_ELEMENT_NAME)) {\r\n\t            var names = node.getAttribute(MinigameElementAttributes.INTRO_ELEMENT_NAME).split(\";\");\r\n\t            names.forEach(function (name) {\r\n\t                var element = _this.childs[name];\r\n\t                if (element instanceof TimelineElement_1.TimelineElement) {\r\n\t                    _this.introElements.push(element);\r\n\t                    element.on(\"board\", _this.showBoard.bind(_this));\r\n\t                    element.on(\"finished\", function () {\r\n\t                        this.emit(MinigameElement.EventIntroFinished);\r\n\t                    }.bind(_this));\r\n\t                    element.visible = false;\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t        if (node.hasAttribute(MinigameElementAttributes.OUTRO_ELEMENT_NAME)) {\r\n\t            var names = node.getAttribute(MinigameElementAttributes.OUTRO_ELEMENT_NAME).split(\";\");\r\n\t            names.forEach(function (name) {\r\n\t                var element = _this.childs[name];\r\n\t                if (element instanceof TimelineElement_1.TimelineElement) {\r\n\t                    _this.outroElements.push(element);\r\n\t                    element.on(\"board\", _this.hideBoard.bind(_this));\r\n\t                    element.on(\"finished\", function () {\r\n\t                        this.visible = false;\r\n\t                        this.emit(MinigameElement.EventOutroFinished);\r\n\t                        if (this.callback) {\r\n\t                            this.callback();\r\n\t                            this.callback = null;\r\n\t                        }\r\n\t                    }.bind(_this));\r\n\t                    element.visible = false;\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t        if (node.hasAttribute(MinigameElementAttributes.HTML_ELEMENT_NAME)) {\r\n\t            var htmlElement = document.getElementById(node.getAttribute(MinigameElementAttributes.HTML_ELEMENT_NAME));\r\n\t            if (htmlElement) {\r\n\t                this._htmlElement = htmlElement;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MinigameElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.getAttribute(MinigameElementAttributes.DATA_RESET) == \"true\") {\r\n\t            this._data = null;\r\n\t        }\r\n\t    };\r\n\t    MinigameElement.prototype.internalDestroy = function (options) {\r\n\t        _super.prototype.internalDestroy.call(this, options);\r\n\t        this.boardElements = null;\r\n\t        this.boardCounters = null;\r\n\t    };\r\n\t    MinigameElement.prototype.setData = function (data, silent) {\r\n\t        for (var i = 0; i < data.length; i++) {\r\n\t            var val = data[i];\r\n\t            var element = this.boardElements[i];\r\n\t            if (val) {\r\n\t                if (element.getCurrentCase() === MinigameElement.CaseNormal) {\r\n\t                    var counter = this.boardCounters[i + (val.type === \"multiplier\" ? 9 : 0)];\r\n\t                    counter.visible = true;\r\n\t                    if (val.type === \"end\") {\r\n\t                        if (!silent) {\r\n\t                            element.goToCase(MinigameElement.CaseEnd);\r\n\t                            counter.goToCase(MinigameElement.CaseEnd);\r\n\t                        }\r\n\t                        else {\r\n\t                            element.goToCase(MinigameElement.CaseEndSilent);\r\n\t                            counter.goToCase(MinigameElement.CaseEndSilent);\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (val.type === \"multiplier\") {\r\n\t                            var counterText = counter.getChildElementByName(\"WinCounter\");\r\n\t                            if (counterText && counterText.bitmapText) {\r\n\t                                counterText.bitmapText.text = \"x\" + val.count.toString();\r\n\t                            }\r\n\t                            if (!val.failed) {\r\n\t                                if (!silent) {\r\n\t                                    element.goToCase(MinigameElement.CaseWinSilver);\r\n\t                                    counter.goToCase(MinigameElement.CaseOn);\r\n\t                                }\r\n\t                                else {\r\n\t                                    element.goToCase(MinigameElement.CaseWinSilverSilent);\r\n\t                                    counter.goToCase(MinigameElement.CaseOnSilent);\r\n\t                                }\r\n\t                                var flareMulti = this.getActiveElementByName(\"FlareMulti\");\r\n\t                                if (!silent && flareMulti) {\r\n\t                                    if (flareMulti.hasCase((i + 1).toString())) {\r\n\t                                        flareMulti.goToCase((i + 1).toString());\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                            else {\r\n\t                                if (!silent) {\r\n\t                                    element.goToCase(MinigameElement.CaseNoWinSilver);\r\n\t                                    counter.goToCase(MinigameElement.CaseFailed);\r\n\t                                }\r\n\t                                else {\r\n\t                                    element.goToCase(MinigameElement.CaseNoWinSilverSilent);\r\n\t                                    counter.goToCase(MinigameElement.CaseFailedSilent);\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                        else if (val.type === \"freespins\") {\r\n\t                            var counterText = counter.getChildElementByName(\"WinCounter\");\r\n\t                            if (counterText && counterText.bitmapText) {\r\n\t                                counterText.bitmapText.text = \"+\" + val.count.toString();\r\n\t                            }\r\n\t                            if (!val.failed) {\r\n\t                                if (!silent) {\r\n\t                                    element.goToCase(MinigameElement.CaseWinGold);\r\n\t                                    counter.goToCase(MinigameElement.CaseOn);\r\n\t                                }\r\n\t                                else {\r\n\t                                    element.goToCase(MinigameElement.CaseWinGoldSilent);\r\n\t                                    counter.goToCase(MinigameElement.CaseOnSilent);\r\n\t                                }\r\n\t                                var flareCount = this.getActiveElementByName(\"FlareCount\");\r\n\t                                if (!silent && flareCount) {\r\n\t                                    if (flareCount.hasCase((i + 1).toString())) {\r\n\t                                        flareCount.goToCase((i + 1).toString());\r\n\t                                    }\r\n\t                                }\r\n\t                            }\r\n\t                            else {\r\n\t                                if (!silent) {\r\n\t                                    element.goToCase(MinigameElement.CaseNoWinGold);\r\n\t                                    counter.goToCase(MinigameElement.CaseFailed);\r\n\t                                }\r\n\t                                else {\r\n\t                                    element.goToCase(MinigameElement.CaseNoWinGoldSilent);\r\n\t                                    counter.goToCase(MinigameElement.CaseFailedSilent);\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                        else {\r\n\t                            element.goToCase(MinigameElement.CaseNormal);\r\n\t                            counter.goToCase(MinigameElement.CaseOff);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                element.goToCase(MinigameElement.CaseNormal);\r\n\t                this.boardCounters[i].visible = false;\r\n\t                this.boardCounters[i + 9].visible = false;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MinigameElement.prototype.intro = function (data) {\r\n\t        if (data) {\r\n\t            if (this._data) {\r\n\t                this._data = null;\r\n\t            }\r\n\t            this.setData(data, true);\r\n\t        }\r\n\t        if (this.introElements.length) {\r\n\t            this.hideBoard();\r\n\t            this.introElements.forEach(function (element) {\r\n\t                element.visible = true;\r\n\t                element.play();\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            this.showBoard();\r\n\t        }\r\n\t        this.visible = true;\r\n\t        this.setActiveElementCase(MinigameElement.CaseOn);\r\n\t    };\r\n\t    MinigameElement.prototype.outro = function (score, callback) {\r\n\t        if (callback) {\r\n\t            this.callback = callback;\r\n\t        }\r\n\t        else {\r\n\t            this.callback = null;\r\n\t        }\r\n\t        if (this.outroElements.length) {\r\n\t            this.outroElements.forEach(function (element, index) {\r\n\t                element.visible = true;\r\n\t                element.play(score && score[index] ? score[index] : null);\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            this.hideBoard();\r\n\t            if (this.callback) {\r\n\t                this.callback();\r\n\t                this.callback = null;\r\n\t            }\r\n\t        }\r\n\t        this.setActiveElementCase(MinigameElement.CaseOff);\r\n\t    };\r\n\t    MinigameElement.prototype.showBoard = function () {\r\n\t        this.board.visible = true;\r\n\t    };\r\n\t    MinigameElement.prototype.hideBoard = function () {\r\n\t        this.board.visible = false;\r\n\t    };\r\n\t    MinigameElement.prototype.hideScore = function () {\r\n\t        this.boardCounters.forEach(function (element) {\r\n\t            element.visible = false;\r\n\t        });\r\n\t    };\r\n\t    MinigameElement.prototype.setActiveElementCase = function (s, emitEvent, delay) {\r\n\t        if (emitEvent === void 0) { emitEvent = false; }\r\n\t        this.activeElementsCase = s;\r\n\t        this.activeElements.forEach(function (element) {\r\n\t            if (element.hasCase(s)) {\r\n\t                element.goToCase(s, emitEvent, delay);\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    MinigameElement.prototype.getActiveElementByName = function (name) {\r\n\t        var s;\r\n\t        this.activeElements.forEach(function (element) {\r\n\t            if (element.name === name) {\r\n\t                s = element;\r\n\t            }\r\n\t        });\r\n\t        return s;\r\n\t    };\r\n\t    MinigameElement.CaseNormal = \"NORMAL\";\r\n\t    MinigameElement.CaseWinGold = \"WIN_GOLD\";\r\n\t    MinigameElement.CaseWinGoldSilent = \"WIN_GOLD_SILENT\";\r\n\t    MinigameElement.CaseWinSilver = \"WIN_SILVER\";\r\n\t    MinigameElement.CaseWinSilverSilent = \"WIN_SILVER_SILENT\";\r\n\t    MinigameElement.CaseNoWinGold = \"NO_WIN_GOLD\";\r\n\t    MinigameElement.CaseNoWinGoldSilent = \"NO_WIN_GOLD_SILENT\";\r\n\t    MinigameElement.CaseNoWinSilver = \"NO_WIN_SILVER\";\r\n\t    MinigameElement.CaseNoWinSilverSilent = \"NO_WIN_SILVER_SILENT\";\r\n\t    MinigameElement.CaseOn = \"ON\";\r\n\t    MinigameElement.CaseOnSilent = \"ON_SILENT\";\r\n\t    MinigameElement.CaseOff = \"OFF\";\r\n\t    MinigameElement.CaseFailed = \"FAILED\";\r\n\t    MinigameElement.CaseFailedSilent = \"FAILED_SILENT\";\r\n\t    MinigameElement.CaseEnd = \"END\";\r\n\t    MinigameElement.CaseEndSilent = \"END_SILENT\";\r\n\t    MinigameElement.EventButtonAction = \"buttonAction\";\r\n\t    MinigameElement.EventIntroFinished = \"introFinished\";\r\n\t    MinigameElement.EventOutroFinished = \"outroFinished\";\r\n\t    MinigameElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], MinigameElement);\r\n\t    return MinigameElement;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.MinigameElement = MinigameElement;\r\n\tvar MinigameElementAttributes = {\r\n\t    ACTIVE_ELEMENTS: \"ActiveElements\",\r\n\t    BOARD_CONTAINER: \"BoardContainer\",\r\n\t    BOARD_BUTTON_NAMES: \"BoardButtons\",\r\n\t    BOARD_COUNTER_NAMES: \"BoardCounters\",\r\n\t    BOARD_ELEMENT_NAMES: \"BoardElements\",\r\n\t    DATA: \"Data\",\r\n\t    DATA_RESET: \"DataReset\",\r\n\t    HTML_ELEMENT_NAME: \"HTMLElement\",\r\n\t    INTRO_ELEMENT_NAME: \"IntroElement\",\r\n\t    OUTRO_ELEMENT_NAME: \"OutroElement\",\r\n\t};\r\n\n\n/***/ },\n/* 119 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar Settings_1 = __webpack_require__(117);\r\n\tvar TeasingComponent_1 = __webpack_require__(116);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar TeasingBonus = (function (_super) {\r\n\t    __extends(TeasingBonus, _super);\r\n\t    function TeasingBonus() {\r\n\t        _super.call(this);\r\n\t        this.minimumSymbolsForTeasing = 2;\r\n\t        this.teasingSymbol = Settings_1.Settings.SymbolTeasing;\r\n\t        this.impactSymbols = Settings_1.Settings.SymbolsImpact;\r\n\t        this._impactScatterCounter = 0;\r\n\t        this._stopScatterCounter = 0;\r\n\t        this._delayedTeasingFaildSound = FrameTimer_1.CreateFrameTimer(\"delayedTeasingFaildSound\");\r\n\t        this._delayedTeasingFaildSound.on(FrameTimer_1.FrameTimerEvents.Complete, this.delayedTeasingFaildSound.bind(this));\r\n\t    }\r\n\t    Object.defineProperty(TeasingBonus.prototype, \"customData\", {\r\n\t        set: function (value) { },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    TeasingBonus.prototype.checkOnInit = function (options) {\r\n\t        this.stoppedSymbolsArray = options.stoppedSymbols;\r\n\t        this.force = options.force;\r\n\t        var additionalDelay = 0;\r\n\t        this.teasingEnabled = false;\r\n\t        this.teasingEnabledForce = false;\r\n\t        for (var reelIndex = 0; reelIndex < this.reelCount; reelIndex++) {\r\n\t            if (this.precedingReelsWithSymbols(reelIndex, this.teasingSymbol) >= 2 && reelIndex > 3) {\r\n\t                if (!options.force) {\r\n\t                    this.teasingEnabled = true;\r\n\t                }\r\n\t                else {\r\n\t                    this.teasingEnabledForce = true;\r\n\t                }\r\n\t                additionalDelay += this.teasingStopDelay;\r\n\t                this.reelsTeasingAttributes[reelIndex].action = TeasingComponent_1.ReelTeasingActions.TEASE;\r\n\t            }\r\n\t            else {\r\n\t                this.reelsTeasingAttributes[reelIndex].action = TeasingComponent_1.ReelTeasingActions.SPIN_STOP;\r\n\t            }\r\n\t            this.reelsTeasingAttributes[reelIndex].stopDelay = reelIndex * this.stopDelay + additionalDelay;\r\n\t        }\r\n\t        return this.reelsTeasingAttributes;\r\n\t    };\r\n\t    TeasingBonus.prototype.isEnoughtForStartTeasing = function (reelIndexStart, reelIndexStop) {\r\n\t        if (reelIndexStart === void 0) { reelIndexStart = 0; }\r\n\t        return this.countSymbols(reelIndexStart, reelIndexStop, this.teasingSymbol) >= this.minimumSymbolsForTeasing;\r\n\t    };\r\n\t    TeasingBonus.prototype.checkSymbolsPerReel = function (reelIndex) {\r\n\t        var countOfSymbol = this.getCountSymbolsOnReelsAndRows(0, reelIndex, this.teasingSymbol);\r\n\t        var preceeding = this.precedingReelsWithSymbols(reelIndex + 1, this.teasingSymbol);\r\n\t        var bonus = preceeding == 3 && reelIndex + 1 == this.stoppedSymbolsArray.length;\r\n\t        for (var reelNo = 0; reelNo < this.stoppedSymbolsArray.length; reelNo++) {\r\n\t            for (var symbolNo = 0; symbolNo < this.stoppedSymbolsArray[reelNo].symbols.length; symbolNo++) {\r\n\t                if (reelNo === reelIndex) {\r\n\t                    if (this.stoppedSymbolsArray[reelNo].symbols[symbolNo] === this.teasingSymbol) {\r\n\t                        if (countOfSymbol > 0 && reelNo - this._impactScatterCounter === 2) {\r\n\t                            if (reelNo + 1 == this.stoppedSymbolsArray.length) {\r\n\t                                this.symbolsTeasingAttributes[reelNo][symbolNo].action = TeasingComponent_1.SymbolTeasingActions.NORMAL;\r\n\t                            }\r\n\t                            else {\r\n\t                                this.symbolsTeasingAttributes[reelNo][symbolNo].action =\r\n\t                                    TeasingComponent_1.SymbolTeasingActions.IMPACT_TEASE;\r\n\t                            }\r\n\t                            PlayList_1.PlayList.play(\"SND_BaseRotationEndScatter\" + ++this._stopScatterCounter);\r\n\t                        }\r\n\t                        else {\r\n\t                            if (preceeding >= 2 && reelIndex >= 3 && reelIndex - preceeding === 1) {\r\n\t                                this.symbolsTeasingAttributes[reelNo][symbolNo].action =\r\n\t                                    TeasingComponent_1.SymbolTeasingActions.IMPACT_NOWIN;\r\n\t                            }\r\n\t                            else {\r\n\t                                this.symbolsTeasingAttributes[reelNo][symbolNo].action = TeasingComponent_1.SymbolTeasingActions.IMPACT;\r\n\t                            }\r\n\t                        }\r\n\t                        this._impactScatterCounter++;\r\n\t                    }\r\n\t                    else {\r\n\t                        if (preceeding >= 2 && reelIndex >= 3 && reelIndex - preceeding === 1) {\r\n\t                            this.symbolsTeasingAttributes[reelNo][symbolNo].action = TeasingComponent_1.SymbolTeasingActions.IMPACT_NOWIN;\r\n\t                        }\r\n\t                        else {\r\n\t                            this.symbolsTeasingAttributes[reelNo][symbolNo].action = TeasingComponent_1.SymbolTeasingActions.IMPACT;\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (reelIndex - preceeding > 1) {\r\n\t                        if (this.stoppedSymbolsArray[reelNo].symbols[symbolNo] === this.teasingSymbol) {\r\n\t                            this.symbolsTeasingAttributes[reelNo][symbolNo].action = TeasingComponent_1.SymbolTeasingActions.NO_CHANGE;\r\n\t                        }\r\n\t                        else {\r\n\t                            this.symbolsTeasingAttributes[reelNo][symbolNo].action = TeasingComponent_1.SymbolTeasingActions.NORMAL;\r\n\t                        }\r\n\t                    }\r\n\t                    else if (preceeding == 2 &&\r\n\t                        reelIndex >= 3 &&\r\n\t                        this.stoppedSymbolsArray[reelNo].symbols[symbolNo] !== this.teasingSymbol) {\r\n\t                        this.symbolsTeasingAttributes[reelNo][symbolNo].action = TeasingComponent_1.SymbolTeasingActions.NOWIN;\r\n\t                    }\r\n\t                    else if (preceeding == 3 && reelIndex + 1 == this.stoppedSymbolsArray.length) {\r\n\t                        this.symbolsTeasingAttributes[reelNo][symbolNo].action = TeasingComponent_1.SymbolTeasingActions.NORMAL;\r\n\t                    }\r\n\t                    else {\r\n\t                        this.symbolsTeasingAttributes[reelNo][symbolNo].action = TeasingComponent_1.SymbolTeasingActions.NO_CHANGE;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (reelIndex === this.reelCount - 1) {\r\n\t            this._impactScatterCounter = 0;\r\n\t            this._stopScatterCounter = 0;\r\n\t        }\r\n\t        return this.symbolsTeasingAttributes;\r\n\t    };\r\n\t    TeasingBonus.prototype.animateTeasing = function (reelIndex) {\r\n\t        if (this.teasingEnabled) {\r\n\t            if (this.reelsTeasingAttributes[reelIndex + 1] != null) {\r\n\t                if (this.reelsTeasingAttributes[reelIndex + 1].action == TeasingComponent_1.ReelTeasingActions.TEASE) {\r\n\t                    if (this.elementInstance[\"teasingFront\"] != null) {\r\n\t                        this.elementInstance[\"teasingFront\"].alpha = 1;\r\n\t                        this.elementInstance[\"teasingFront\"].visible = true;\r\n\t                        this.elementInstance[\"teasingFront\"].x = this.reelX[reelIndex + 1];\r\n\t                        this.elementInstance[\"teasingFront\"].y = this.reelY[reelIndex + 1];\r\n\t                        this.elementInstance[\"teasingFront\"].goToCase(\"INIT\");\r\n\t                    }\r\n\t                    if (this.elementInstance[\"teasingParticles\"] != null) {\r\n\t                        this.elementInstance[\"teasingParticles\"].alpha = 1;\r\n\t                        this.elementInstance[\"teasingParticles\"].visible = true;\r\n\t                        if (this.elementInstance[\"teasingParticles\"].getCurrentCase() == \"LOOP\" &&\r\n\t                            this.elementInstance[\"teasingParticles\"].hasCase(\"CONTINUE_\" + reelIndex)) {\r\n\t                            this.elementInstance[\"teasingParticles\"].x = 0;\r\n\t                            this.elementInstance[\"teasingParticles\"].y = 0;\r\n\t                            this.elementInstance[\"teasingParticles\"].goToCase(\"CONTINUE_\" + reelIndex);\r\n\t                        }\r\n\t                        else if (this.elementInstance[\"teasingParticles\"].hasCase(\"INIT_\" + reelIndex)) {\r\n\t                            this.elementInstance[\"teasingParticles\"].x = 0;\r\n\t                            this.elementInstance[\"teasingParticles\"].y = 0;\r\n\t                            this.elementInstance[\"teasingParticles\"].goToCase(\"INIT_\" + reelIndex);\r\n\t                        }\r\n\t                        else {\r\n\t                            this.elementInstance[\"teasingParticles\"].x = this.reelX[reelIndex + 1];\r\n\t                            this.elementInstance[\"teasingParticles\"].y = this.reelY[reelIndex + 1];\r\n\t                            this.elementInstance[\"teasingParticles\"].goToCase(\"INIT\");\r\n\t                        }\r\n\t                    }\r\n\t                    if (!this.wasPlayedTeaserSound) {\r\n\t                        this.wasPlayedTeaserSound = true;\r\n\t                    }\r\n\t                }\r\n\t                else if (this.reelsTeasingAttributes[reelIndex + 1].action == TeasingComponent_1.ReelTeasingActions.SPIN_STOP) {\r\n\t                    this.removeTeasing(false);\r\n\t                    return false;\r\n\t                }\r\n\t                return true;\r\n\t            }\r\n\t            var countSymbolsOnReelsAndRows = this.getCountSymbolsOnReelsAndRows(0, reelIndex, this.teasingSymbol);\r\n\t            var countSymbolsOnCurrentReel = this.getCountSymbolsOnReelsAndRows(reelIndex, reelIndex, this.teasingSymbol);\r\n\t        }\r\n\t        else {\r\n\t            this.removeTeasing(false);\r\n\t            return false;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    TeasingBonus.prototype.removeTeasing = function (noWin) {\r\n\t        if (noWin) {\r\n\t            PlayList_1.PlayList.play(\"SND_BaseFSTeaserFail\");\r\n\t        }\r\n\t        if (this.wasPlayedTeaserSound) {\r\n\t            if (this.countSymbolsOnReelsAndRows > this.minimumSymbolsForTeasing) {\r\n\t                if (!this.wasPlayedTeaserWinSound) {\r\n\t                    this.wasPlayedTeaserWinSound = true;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (!this.wasPlayedTeaserFailSound) {\r\n\t                    PlayList_1.PlayList.play(\"SND_BaseFSTeaserFail\");\r\n\t                    this.wasPlayedTeaserFailSound = true;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this.elementInstance[\"teasingFront\"] != null) {\r\n\t            if (this.elementInstance[\"teasingFront\"].getCurrentCase() !== \"NORMAL\" &&\r\n\t                this.elementInstance[\"teasingFront\"].getCurrentCase() !== \"OUTRO\") {\r\n\t                this.elementInstance[\"teasingFront\"].goToCase(\"OUTRO\");\r\n\t            }\r\n\t        }\r\n\t        if (this.elementInstance[\"teasingParticles\"] != null) {\r\n\t            if (this.elementInstance[\"teasingParticles\"].getCurrentCase() !== \"NORMAL\" &&\r\n\t                this.elementInstance[\"teasingParticles\"].getCurrentCase() !== \"OUTRO\") {\r\n\t                this.elementInstance[\"teasingParticles\"].goToCase(\"OUTRO\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TeasingBonus.prototype.finishTeasing = function (reelIndex) {\r\n\t        var countSymbolsOnReelsAndRows = this.getCountSymbolsOnReelsAndRows(0, this.reelCount - 1, this.teasingSymbol);\r\n\t        if (this.wasPlayedTeaserSound || (reelIndex == this.reelCount - 1 && this.teasingEnabledForce)) {\r\n\t            if (countSymbolsOnReelsAndRows > this.minimumSymbolsForTeasing) {\r\n\t            }\r\n\t            else {\r\n\t                this._delayedTeasingFaildSound.start(30);\r\n\t            }\r\n\t        }\r\n\t        _super.prototype.finishTeasing.call(this);\r\n\t        this.canPlayTeaserSound = false;\r\n\t        this.wasPlayedTeaserSound = false;\r\n\t        if (this.elementInstance[\"teasingFront\"] != null) {\r\n\t            if (this.elementInstance[\"teasingFront\"].getCurrentCase() !== \"NORMAL\" &&\r\n\t                this.elementInstance[\"teasingFront\"].getCurrentCase() !== \"OUTRO\") {\r\n\t                this.elementInstance[\"teasingFront\"].goToCase(\"OUTRO\");\r\n\t            }\r\n\t        }\r\n\t        if (this.elementInstance[\"teasingParticles\"] != null) {\r\n\t            if (this.elementInstance[\"teasingParticles\"].getCurrentCase() !== \"NORMAL\" &&\r\n\t                this.elementInstance[\"teasingParticles\"].getCurrentCase() !== \"OUTRO\") {\r\n\t                this.elementInstance[\"teasingParticles\"].goToCase(\"OUTRO\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TeasingBonus.prototype.delayedTeasingFaildSound = function () {\r\n\t        if (!this.force) {\r\n\t            PlayList_1.PlayList.play(\"SND_BaseFSTeaserFail\", 0, true);\r\n\t            this.wasPlayedTeaserFailSound = true;\r\n\t        }\r\n\t    };\r\n\t    return TeasingBonus;\r\n\t}(TeasingComponent_1.TeasingComponent));\r\n\texports.TeasingBonus = TeasingBonus;\r\n\n\n/***/ },\n/* 120 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar GameActions_1 = __webpack_require__(82);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar LimitDialog_1 = __webpack_require__(54);\r\n\tvar FreespinsController_1 = __webpack_require__(121);\r\n\tvar FreespinsActions_1 = __webpack_require__(80);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar gsap_1 = __webpack_require__(16);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar WinType = neo_games_1.Communication.Game.WinType;\r\n\tvar DesktopFreespinsUserControls = (function (_super) {\r\n\t    __extends(DesktopFreespinsUserControls, _super);\r\n\t    function DesktopFreespinsUserControls() {\r\n\t        _super.call(this, \"freespins\");\r\n\t        this._wasCalclulated = true;\r\n\t    }\r\n\t    DesktopFreespinsUserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.registerActions();\r\n\t        this._afterWinDelay = FrameTimer_1.CreateFrameTimer(\"afterWinDelay\");\r\n\t        this._afterWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._autoplayDelay = FrameTimer_1.CreateFrameTimer(\"autoplayDelay\");\r\n\t        this._autoplayDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\r\n\t        this._backDelay = FrameTimer_1.CreateFrameTimer(\"backDelay\");\r\n\t        this._backDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.back.bind(this));\r\n\t        this._backButtonDelay = FrameTimer_1.CreateFrameTimer(\"backButtonDelay\");\r\n\t        this._backButtonDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.backButton.bind(this));\r\n\t        this._prepareNewGameRound = FrameTimer_1.CreateFrameTimer(\"prepareNewGameRound\");\r\n\t        this._prepareNewGameRound.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._userControls = document.getElementById(\"freespinsUserControls\");\r\n\t        this._userControlsShowDelay = FrameTimer_1.CreateFrameTimer(\"userControlsShowDelay\");\r\n\t        this._userControlsShowDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.userControlsShowDelay.bind(this));\r\n\t        this._baseUserControlsShowDelay = FrameTimer_1.CreateFrameTimer(\"userControlsShowDelay\");\r\n\t        this._baseUserControlsShowDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.baseUserControlsShowDelay.bind(this));\r\n\t        this._fsEnterEnableDelay = FrameTimer_1.CreateFrameTimer(\"fsEnterEnableDelay\");\r\n\t        this._fsEnterEnableDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.fsEnterEnableDelay.bind(this));\r\n\t        this._fsBoards = [document.getElementById(\"fsCount\"), document.getElementById(\"fsMultiplier\")];\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.StartReceived, this.startReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.ConfirmReceived, this.confirmReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.SpinReceived, this.spinReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.EndReceived, this.endReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.MachineStopped, this.machineStopped.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.OutroFinished, this.outroFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.QuickWinCalculationFinished, this.quickWinCalculationFinished.bind(this));\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpin] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.initReceived = function () {\r\n\t        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\t        this._baseUserControls = document.getElementById(\"userControls\");\r\n\t        _super.prototype.initReceived.call(this);\r\n\t        this._controller.initReceived();\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.restoreGameRound = function () {\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.startReceived = function (finished) {\r\n\t        if (this._baseUserControls != null &&\r\n\t            !this._baseUserControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._baseUserControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Pick);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.confirmReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Base);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.spinReceived = function () {\r\n\t        var fsCount = document.querySelector(\"#fsCount .value\");\r\n\t        var hide = gsap_1.TweenLite.to(fsCount, 0.1, { alpha: 0 });\r\n\t        hide.eventCallback(\"onComplete\", function () {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t            gsap_1.TweenLite.to(fsCount, 0.1, { alpha: 1 });\r\n\t        });\r\n\t        if (DataManager_1.DataManager.quickspinEnabled()) {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t            this._controller.stop();\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.endReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Freespins);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (action === GameActions_1.GameActions.ActionSpinOrStop) {\r\n\t            if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionBack)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionBack;\r\n\t            }\r\n\t            else if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionSpin)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionSpin;\r\n\t            }\r\n\t            else if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionSpinStop;\r\n\t            }\r\n\t            else {\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (this.actions.getActionState(action)) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            _super.prototype.dispatchAction.call(this, action);\r\n\t            switch (action) {\r\n\t                case FreespinsActions_1.FreespinsActions.ActionStart:\r\n\t                    this.start();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionBack:\r\n\t                    this.back();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionSpin:\r\n\t                    this.spin();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionSpinStop:\r\n\t                    this.stop();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionAutoplay:\r\n\t                    this.autoplay();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionAutoplayStop:\r\n\t                    this.autoplayStop();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.start = function (id) {\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this._controller.start(id);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.spin = function () {\r\n\t        if (!this._wasCalclulated) {\r\n\t            if (GameManager_1.GameManager.freespinsResponse != null && GameManager_1.GameManager.freespinsResponse.currentWin > 0) {\r\n\t                neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.freespinsResponse.currentWin);\r\n\t            }\r\n\t        }\r\n\t        this.actions.disableAllActions();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, DataManager_1.DataManager.autoplayEnabled());\r\n\t        }\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this._controller.spin();\r\n\t        neo_games_1.Platforms.Platforms.spinStarted();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.back = function () {\r\n\t        this._backDelay.stop();\r\n\t        this.disable();\r\n\t        ModuleManager_1.ModuleManager.endFreespins();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.stop = function () {\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        DataManager_1.DataManager.quickspinStopped();\r\n\t        this._controller.stop();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.end = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null && GameManager_1.GameManager.freespinsResponse.totalWin > 0) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.freespinsResponse.totalWin, true);\r\n\t        }\r\n\t        this._controller.end();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.autoplayDelayed = function () {\r\n\t        this._autoplayDelay.stop();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.autoplay = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (DataManager_1.DataManager.AutoplayCount === \"∞\") {\r\n\t            DataManager_1.DataManager.Autoplay = true;\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t            this.spin();\r\n\t        }\r\n\t        else {\r\n\t            DataManager_1.DataManager.AutoplayCount = (parseInt(DataManager_1.DataManager.AutoplayCount) - 1).toString();\r\n\t            if (parseInt(DataManager_1.DataManager.AutoplayCount) >= 0) {\r\n\t                DataManager_1.DataManager.Autoplay = true;\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t                this.spin();\r\n\t            }\r\n\t            else {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.autoplayStop = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, false);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.backButton = function () {\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionBack, true);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionBack, true);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.machineStopped = function (isHighWin) {\r\n\t        neo_games_1.Platforms.Platforms.spinEnded();\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            this._wasCalclulated = true;\r\n\t        }\r\n\t        else {\r\n\t            this._wasCalclulated = false;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin > 0) {\r\n\t            var hasScatterFreespinWin = false;\r\n\t            for (var i = 0; i < GameManager_1.GameManager.freespinsResponse.wins.length; i++) {\r\n\t                if (GameManager_1.GameManager.freespinsResponse.wins[i].trigger === neo_games_1.Communication.Game.WinTrigger.Scatter) {\r\n\t                    if (GameManager_1.GameManager.freespinsResponse.wins[i].type === neo_games_1.Communication.Game.WinType.freeSpins) {\r\n\t                        hasScatterFreespinWin = true;\r\n\t                    }\r\n\t                }\r\n\t                else if (GameManager_1.GameManager.freespinsResponse.wins[i].trigger === neo_games_1.Communication.Game.WinTrigger.Way) {\r\n\t                    if (GameManager_1.GameManager.freespinsResponse.wins[i].type === neo_games_1.Communication.Game.WinType.Cash) {\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            this._afterWinDelay.stop();\r\n\t            if (isHighWin) {\r\n\t                this._afterWinDelay.start(80);\r\n\t            }\r\n\t            else {\r\n\t                if (GameManager_1.GameManager.freespinsResponse.totalWin > 0) {\r\n\t                    this._afterWinDelay.start(30);\r\n\t                }\r\n\t                else {\r\n\t                    this.prepareNewGameRound();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this.isLastFreespin()) {\r\n\t            this._afterWinDelay.stop();\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t                if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t                }\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t                if (this.getRetriggerCount() > 0 && !DataManager_1.DataManager.GameLimit) {\r\n\t                    this._backDelay.start(15);\r\n\t                }\r\n\t                else {\r\n\t                    this._backButtonDelay.start(60);\r\n\t                }\r\n\t            }\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        if (DataManager_1.DataManager.Autoplay && GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            this._autoplayDelay.start(15);\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.quickWinCalculationFinished = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.currentWin > 0 &&\r\n\t            !this._wasCalclulated) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.freespinsResponse.currentWin);\r\n\t        }\r\n\t        this._wasCalclulated = true;\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.winCalculationFinished = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        if (this.isLastFreespin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.allWinsFinished = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.currentWin > 0 &&\r\n\t            !this._wasCalclulated) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.freespinsResponse.currentWin);\r\n\t        }\r\n\t        this._wasCalclulated = true;\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.isLastFreespin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            if (this.getRetriggerCount() > 0 && !DataManager_1.DataManager.GameLimit) {\r\n\t                this.back();\r\n\t            }\r\n\t            else {\r\n\t                this._backButtonDelay.start(60);\r\n\t            }\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.initIntro = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsMultiplier, GameManager_1.GameManager.freespinsResponse.freeSpins.multiplier.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        this._controller.initIntro();\r\n\t        neo_games_1.Platforms.Platforms.featureInit({ type: neo_games_1.Communication.Game.GameModules.Freespins });\r\n\t        if (this.isLastFreespin()) {\r\n\t            this.actions.disableAllActions();\r\n\t            if (this.getRetriggerCount() > 0 && !DataManager_1.DataManager.GameLimit) {\r\n\t                this._backDelay.start(15);\r\n\t            }\r\n\t            else {\r\n\t                this._backButtonDelay.start(60);\r\n\t            }\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsCount, GameManager_1.GameManager.freespinsResponse.freeSpins.totalCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsMultiplier, GameManager_1.GameManager.freespinsResponse.freeSpins.multiplier.toString());\r\n\t        for (var _i = 0, _a = this._fsBoards; _i < _a.length; _i++) {\r\n\t            var item = _a[_i];\r\n\t            item.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        this._controller.intro(long);\r\n\t        this._userControlsShowDelay.start(100);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.introFinished = function () {\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        this._prepareNewGameRound.start(120);\r\n\t        this._userControlsShowDelay.start(100);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.outro = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        this._controller.outro();\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.outroFinished = function () {\r\n\t        ModuleManager_1.ModuleManager.introModule(GameModules.Base, true);\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.prepareNewGameRound = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.limit();\r\n\t        }\r\n\t        else {\r\n\t            if (!DataManager_1.DataManager.Autoplay) {\r\n\t                this.actions.changeActionStates((_a = {},\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = !DataManager_1.DataManager.Autoplay && DataManager_1.DataManager.autoplayEnabled(),\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = DataManager_1.DataManager.Autoplay && DataManager_1.DataManager.autoplayEnabled(),\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionSpin] = true,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t                    _a\r\n\t                ));\r\n\t            }\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        var _a;\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.limit = function () {\r\n\t        LimitDialog_1.LimitDialog.openDialog();\r\n\t        this.actions.changeActionStates((_a = {},\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpin] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.fsEnterEnableDelay = function () {\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionStart, true);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionStart, true);\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.enable = function () {\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsCount, GameManager_1.GameManager.freespinsResponse.freeSpins.totalCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsMultiplier, GameManager_1.GameManager.freespinsResponse.freeSpins.multiplier.toString());\r\n\t        this._fsEnterEnableDelay.start(30);\r\n\t        this._controller.enable();\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.disable = function () {\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.isLastFreespin = function () {\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            this.limit();\r\n\t            return true;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.freespinsResponse.freeSpins != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount === 0) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.getRetriggerCount = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse.hasOwnProperty(\"customData\") &&\r\n\t            GameManager_1.GameManager.freespinsResponse.customData[\"retriggerCount\"] != null) {\r\n\t            return GameManager_1.GameManager.freespinsResponse.customData[\"retriggerCount\"];\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.userControlsShowDelay = function () {\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.baseUserControlsShowDelay = function () {\r\n\t        if (this._baseUserControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._baseUserControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.overlayFsBoard = function () {\r\n\t        for (var _i = 0, _a = this._fsBoards; _i < _a.length; _i++) {\r\n\t            var item = _a[_i];\r\n\t            if (item != null && !item.classList.contains(\"_overlayed\")) {\r\n\t                item.classList.add(\"_overlayed\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls.prototype.removeOverlayFsBoard = function () {\r\n\t        for (var _i = 0, _a = this._fsBoards; _i < _a.length; _i++) {\r\n\t            var item = _a[_i];\r\n\t            if (item != null && item.classList.contains(\"_overlayed\")) {\r\n\t                item.classList.remove(\"_overlayed\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopFreespinsUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], DesktopFreespinsUserControls);\r\n\t    return DesktopFreespinsUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.DesktopFreespinsUserControls = DesktopFreespinsUserControls;\r\n\n\n/***/ },\n/* 121 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Controller_1 = __webpack_require__(87);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar FreespinsView_1 = __webpack_require__(122);\r\n\tvar FreespinsModel_1 = __webpack_require__(123);\r\n\tvar FreespinsController = (function (_super) {\r\n\t    __extends(FreespinsController, _super);\r\n\t    function FreespinsController() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    FreespinsController.prototype.startInitialization = function (view) {\r\n\t        if (false) {\r\n\t            this.log(\"startInitialization\");\r\n\t        }\r\n\t        if (view instanceof FreespinsView_1.FreespinsView) {\r\n\t            this._view = view;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR view is not instance of BaseView\");\r\n\t            }\r\n\t        }\r\n\t        this._model = new FreespinsModel_1.FreespinsModel(this);\r\n\t    };\r\n\t    FreespinsController.prototype.initReceived = function () {\r\n\t        this._view.initReceived(this);\r\n\t    };\r\n\t    FreespinsController.prototype.disableLogo = function () {\r\n\t        this._view.disableLogo();\r\n\t    };\r\n\t    FreespinsController.prototype.initIntro = function () {\r\n\t        this._view.initIntro();\r\n\t    };\r\n\t    FreespinsController.prototype.start = function (id) {\r\n\t        this._model.start(id);\r\n\t    };\r\n\t    FreespinsController.prototype.confirm = function () {\r\n\t        this._model.confirm();\r\n\t    };\r\n\t    FreespinsController.prototype.spin = function () {\r\n\t        this._model.spin();\r\n\t        this._view.spin();\r\n\t    };\r\n\t    FreespinsController.prototype.end = function () {\r\n\t        this._model.end();\r\n\t    };\r\n\t    FreespinsController.prototype.stop = function () {\r\n\t        this._view.stop();\r\n\t    };\r\n\t    FreespinsController.prototype.startReceived = function () {\r\n\t        this.emit(FreespinsController.StartReceived, this._view.startReceived());\r\n\t    };\r\n\t    FreespinsController.prototype.confirmReceived = function () {\r\n\t        this.emit(FreespinsController.ConfirmReceived, this._view.confirmReceived());\r\n\t    };\r\n\t    FreespinsController.prototype.spinReceived = function () {\r\n\t        this._view.spinReceived();\r\n\t        this.emit(FreespinsController.SpinReceived);\r\n\t    };\r\n\t    FreespinsController.prototype.endReceived = function () {\r\n\t        this._view.endReceived();\r\n\t        this.emit(FreespinsController.EndReceived);\r\n\t    };\r\n\t    FreespinsController.prototype.machineStopped = function (isHighWin) {\r\n\t        this.emit(FreespinsController.MachineStopped, isHighWin);\r\n\t    };\r\n\t    FreespinsController.prototype.quickWinCalculationFinished = function () {\r\n\t        this.emit(FreespinsController.QuickWinCalculationFinished);\r\n\t    };\r\n\t    FreespinsController.prototype.winCalculationFinished = function () {\r\n\t        this.emit(FreespinsController.WinCalculationFinished);\r\n\t    };\r\n\t    FreespinsController.prototype.allWinsFinished = function () {\r\n\t        this.emit(FreespinsController.AllWinsFinished);\r\n\t    };\r\n\t    FreespinsController.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        this._view.intro(long);\r\n\t    };\r\n\t    FreespinsController.prototype.introFinished = function () {\r\n\t        this.emit(FreespinsController.IntroFinished);\r\n\t    };\r\n\t    FreespinsController.prototype.outro = function () {\r\n\t        this._view.outro();\r\n\t    };\r\n\t    FreespinsController.prototype.outroFinished = function () {\r\n\t        this.emit(FreespinsController.OutroFinished);\r\n\t    };\r\n\t    FreespinsController.prototype.enable = function () {\r\n\t        this._view.enable();\r\n\t    };\r\n\t    FreespinsController.StartReceived = \"eventStartReceived\";\r\n\t    FreespinsController.ConfirmReceived = \"eventConfirmReceived\";\r\n\t    FreespinsController.SpinReceived = \"eventSpinReceived\";\r\n\t    FreespinsController.EndReceived = \"eventEndReceived\";\r\n\t    FreespinsController.MachineStopped = \"eventMachineStopped\";\r\n\t    FreespinsController.WinCalculationFinished = \"eventWinCalculationFinished\";\r\n\t    FreespinsController.AllWinsFinished = \"eventAllWinsFinished\";\r\n\t    FreespinsController.IntroFinished = \"eventIntroFinished\";\r\n\t    FreespinsController.OutroFinished = \"eventOutroFinished\";\r\n\t    FreespinsController.QuickWinCalculationFinished = \"eventQuickWinCalculationFinished\";\r\n\t    FreespinsController.ConfiguratorStart = \"eventConfiguratorStart\";\r\n\t    FreespinsController.ConfiguratorContinue = \"eventConfiguratorContinue\";\r\n\t    FreespinsController = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Controller)\r\n\t    ], FreespinsController);\r\n\t    return FreespinsController;\r\n\t}(Controller_1.Controller));\r\n\texports.FreespinsController = FreespinsController;\r\n\n\n/***/ },\n/* 122 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ContainerElement_1 = __webpack_require__(90);\r\n\tvar SwitchElement_1 = __webpack_require__(97);\r\n\tvar WinAnimator_1 = __webpack_require__(108);\r\n\tvar Machine_1 = __webpack_require__(113);\r\n\tvar Symbols_1 = __webpack_require__(106);\r\n\tvar TeasingComponent_1 = __webpack_require__(116);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar TeasingBonus_1 = __webpack_require__(119);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar Paylines_1 = __webpack_require__(94);\r\n\tvar PaylinesSelector_1 = __webpack_require__(105);\r\n\tvar AmbientBackground_1 = __webpack_require__(61);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar FreespinsView = (function (_super) {\r\n\t    __extends(FreespinsView, _super);\r\n\t    function FreespinsView() {\r\n\t        _super.call(this);\r\n\t        this._wasFinished = false;\r\n\t        this._actualFsCount = 0;\r\n\t        this._actualFsMultiplier = 0;\r\n\t        this._fsMessageHideDelay = FrameTimer_1.CreateFrameTimer(\"fsMessageHideDelay\");\r\n\t        this._fsMessageHideDelay.on(FrameTimer_1.FrameTimerEvents.Complete, function () {\r\n\t            if (this._fsMessageStart != null &&\r\n\t                !this._fsMessageStart.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._fsMessageStart.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }.bind(this));\r\n\t        this._fsConfiguratorText = document.getElementById(\"fsConfiguratorText\");\r\n\t        this._outroDelay = FrameTimer_1.CreateFrameTimer(\"outroDelay\");\r\n\t        this._outroDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.outroFinished.bind(this));\r\n\t        this._timerDelayUpdateCountMulti = FrameTimer_1.CreateFrameTimer(\"timerDelayUpdateCountMulti\");\r\n\t        this._timerDelayUpdateCountMulti.on(FrameTimer_1.FrameTimerEvents.Complete, this.updateNumberCountAndMultiplier.bind(this));\r\n\t        this._timerDelayEnableConfiguration = FrameTimer_1.CreateFrameTimer(\"_timerDelayEnableConfiguration\");\r\n\t        this._timerDelayEnableConfiguration.on(FrameTimer_1.FrameTimerEvents.Complete, this.enableConfiguration.bind(this));\r\n\t        this._teasingBonus = new TeasingBonus_1.TeasingBonus();\r\n\t        this._userControls = document.getElementById(\"freespinsUserControls\");\r\n\t        this._baseUserControls = document.getElementById(\"userControls\");\r\n\t        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\t    }\r\n\t    FreespinsView.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof Paylines_1.Paylines) {\r\n\t                    this._paylines = this.childs[key];\r\n\t                }\r\n\t                if (this.childs[key] instanceof PaylinesSelector_1.PaylinesSelector) {\r\n\t                    this._paylinesSelector = this.childs[key];\r\n\t                }\r\n\t                if (this.childs[key] instanceof Symbols_1.Symbols) {\r\n\t                    this._symbols = this.childs[key];\r\n\t                    this.removeChild(this._symbols);\r\n\t                }\r\n\t                if (this.childs[key] instanceof Machine_1.Machine) {\r\n\t                    this._machine = this.childs[key];\r\n\t                }\r\n\t                if (this.childs[key] instanceof WinAnimator_1.WinAnimator) {\r\n\t                    this._winAnimator = this.childs[key];\r\n\t                }\r\n\t                if (key === \"NoWinContainer\" && this.childs[key] instanceof ContainerElement_1.ContainerElement) {\r\n\t                    this._noWinContainer = this.childs[key];\r\n\t                }\r\n\t                if (key === \"TeasingComponent\" && this.childs[key] instanceof TeasingComponent_1.TeasingComponent) {\r\n\t                    this._teasingBonus = this.childs[key];\r\n\t                }\r\n\t                if (key === \"TeasingFront\" && this.childs[key] instanceof SwitchElement_1.SwitchElement) {\r\n\t                    if (this._teasingBonus != null) {\r\n\t                        this._teasingBonus.addElementInstance({ teasingFront: this.childs[key] });\r\n\t                    }\r\n\t                }\r\n\t                if (key === \"TeasingParticles\" && this.childs[key] instanceof SwitchElement_1.SwitchElement) {\r\n\t                    if (this._teasingBonus != null) {\r\n\t                        this._teasingBonus.addElementInstance({ teasingParticles: this.childs[key] });\r\n\t                    }\r\n\t                }\r\n\t                if (key === \"Transition\" && this.childs[key] instanceof SwitchElement_1.SwitchElement) {\r\n\t                    this._transition = this.childs[key];\r\n\t                }\r\n\t                if (key === \"WildContainer\" && this.childs[key] instanceof ContainerElement_1.ContainerElement) {\r\n\t                    this._wildContainer = this.childs[key];\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._fsCounter = document.getElementById(\"fsCount\");\r\n\t        if (this._fsCounter == null) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no fsCounter\");\r\n\t            }\r\n\t        }\r\n\t        this._fsMultiplier = document.getElementById(\"fsMultiplier\");\r\n\t        if (this._fsMultiplier == null) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no fsMultiplier\");\r\n\t            }\r\n\t        }\r\n\t        this._fsMessageEnd = document.getElementById(\"fsMessageEnd\");\r\n\t        if (this._fsMessageEnd == null) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no fsMessageEnd\");\r\n\t            }\r\n\t        }\r\n\t        this._fsMessageEndNoWin = document.getElementById(\"fsMessageEndNoWin\");\r\n\t        if (this._fsMessageEndNoWin == null) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no fsMessageEndNoWin\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN)) {\r\n\t            this.transitionAlphaTween = node\r\n\t                .getAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseFloat(value); });\r\n\t        }\r\n\t        if (node.hasAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_KEY_TIMES)) {\r\n\t            this.transitionAlphaTweenKeyTimes = node\r\n\t                .getAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_KEY_TIMES)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseFloat(value); });\r\n\t        }\r\n\t        if (node.hasAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_EASE)) {\r\n\t            this.transitionAlphaTweenEase = node.getAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_EASE);\r\n\t        }\r\n\t        if (node.hasAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_DELAY)) {\r\n\t            this.transitionAlphaTweenDelay = parseInt(node.getAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_DELAY));\r\n\t        }\r\n\t        if (node.hasAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_DURATION)) {\r\n\t            this.transitionAlphaTweenDuration = parseInt(node.getAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_DURATION));\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.initReceived = function (controller) {\r\n\t        if (false) {\r\n\t            this.log(\"initReceived\");\r\n\t        }\r\n\t        this._controller = controller;\r\n\t        if (this._symbols != null) {\r\n\t            if (this._machine != null) {\r\n\t                if (GameManager_1.GameManager.freespinsResponse != null) {\r\n\t                    if (GameManager_1.GameManager.freespinsResponse.initData != null &&\r\n\t                        GameManager_1.GameManager.freespinsResponse.initData.reels != null) {\r\n\t                        this._machine.on(Machine_1.Machine.ReelStopped, this.onReelStopped.bind(this));\r\n\t                        this._machine.on(Machine_1.Machine.MachineStopped, this.machineStopped.bind(this));\r\n\t                        this._machine.initialize(this._symbols, GameManager_1.GameManager.freespinsResponse.initData.reels);\r\n\t                        this._machine.addElementInstance({ teasing: [this._teasingBonus] });\r\n\t                    }\r\n\t                    if (this._winAnimator != null) {\r\n\t                        this._winAnimator.on(WinAnimator_1.WinAnimator.FinishWinCalculation, this.finishWinCalculation.bind(this));\r\n\t                        this._winAnimator.on(WinAnimator_1.WinAnimator.FinishWinAnimator, this.finishWinAnimator.bind(this));\r\n\t                        this._winAnimator.on(WinAnimator_1.WinAnimator.FinishQuickWinCalculation, this.finishQuickWinCalculation.bind(this));\r\n\t                        this._winAnimator.initialize(this._symbols, this._paylines, this.childs[\"NoWinContainer\"], this.childs[\"WinContainer\"], this);\r\n\t                        this._winAnimator.showSymbols(GameManager_1.GameManager.baseResponse.screen.reels);\r\n\t                        this._winAnimator.addElementInstance({ teasing: [this._teasingBonus] });\r\n\t                        this._winAnimator.addElementInstance({ wildContainer: this._wildContainer });\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no freespins reponse\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no machine\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no symbols\");\r\n\t            }\r\n\t        }\r\n\t        this.toggleElements(false);\r\n\t    };\r\n\t    FreespinsView.prototype.disableLogo = function () {\r\n\t        if (this.childs[\"Logo\"] != null) {\r\n\t            this.removeChild(this.childs[\"Logo\"]);\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.initIntro = function () {\r\n\t        this._machine.setStoppedSymbolsArray(GameManager_1.GameManager.freespinsResponse.screen.reels);\r\n\t        this._winAnimator.showSymbols(GameManager_1.GameManager.freespinsResponse.screen.reels);\r\n\t        this._winAnimator.setCustomData(GameManager_1.GameManager.freespinsResponse.customData);\r\n\t        this._winAnimator.showInitWins(GameManager_1.GameManager.freespinsResponse.wins, GameManager_1.GameManager.freespinsResponse.currentWin);\r\n\t        this.toggleElements(true);\r\n\t        this.showCounterMultiplier();\r\n\t        this.visible = true;\r\n\t        AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"color-1\", 0);\r\n\t        if (this.isLastFreespin()) {\r\n\t            PlayList_1.PlayList.stop(\"SND_FSConfiguratorLoop\");\r\n\t            PlayList_1.PlayList.stop(\"SND_FSEndLoop\");\r\n\t            PlayList_1.PlayList.stop(\"SND_CycleLoop\");\r\n\t            PlayList_1.PlayList.stop(\"SND_FSLoop\");\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseLoop\");\r\n\t            PlayList_1.PlayList.loop(\"SND_FSEnd\");\r\n\t            if (GameManager_1.GameManager.freespinsResponse.totalWin > 0) {\r\n\t                if (this._fsMessageEnd != null && this._fsMessageEnd.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    this._fsMessageEnd.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (this._fsMessageEndNoWin != null &&\r\n\t                    this._fsMessageEndNoWin.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    this._fsMessageEndNoWin.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.loop(\"SND_FSLoop\");\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.spin = function () {\r\n\t        PlayList_1.PlayList.stop(\"SND_FSConfiguratorLoop\");\r\n\t        PlayList_1.PlayList.stop(\"SND_FSEndLoop\");\r\n\t        PlayList_1.PlayList.stop(\"SND_CycleLoop\");\r\n\t        PlayList_1.PlayList.stop(\"SND_BaseLoop\");\r\n\t        PlayList_1.PlayList.loop(\"SND_FSLoop\");\r\n\t        if (this._paylinesSelector != null) {\r\n\t            this._paylinesSelector.reset();\r\n\t        }\r\n\t        this._machine.respin = null;\r\n\t        this._machine.spinStart(this._winAnimator.reset(false, true));\r\n\t    };\r\n\t    FreespinsView.prototype.stop = function () {\r\n\t        this._machine.spinStop(null, true);\r\n\t    };\r\n\t    FreespinsView.prototype.spinReceived = function () {\r\n\t        this._machine.setStoppedSymbolsArray(GameManager_1.GameManager.freespinsResponse.screen.reels);\r\n\t        this._machine.spinStop(null, false, true);\r\n\t    };\r\n\t    FreespinsView.prototype.endReceived = function () { };\r\n\t    FreespinsView.prototype.onReelStopped = function () {\r\n\t        this._winAnimator.onReelStopped(GameManager_1.GameManager.freespinsResponse.screen.reels, this._machine.actualReelStopped, this._machine.forceStop);\r\n\t    };\r\n\t    FreespinsView.prototype.machineStopped = function () {\r\n\t        this._wasFinished = false;\r\n\t        var isHighWin = this._winAnimator.isHighWin(GameManager_1.GameManager.freespinsResponse.currentWin);\r\n\t        this._controller.machineStopped(isHighWin);\r\n\t        if (this._winAnimator.showWins(GameManager_1.GameManager.freespinsResponse.wins, GameManager_1.GameManager.freespinsResponse.currentWin)) {\r\n\t        }\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            if (this.isLastFreespin()) {\r\n\t                PlayList_1.PlayList.stop(\"SND_FSLoop\");\r\n\t                PlayList_1.PlayList.loop(\"SND_FSEnd\");\r\n\t                this.fsMessageEnd();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.finishQuickWinCalculation = function () {\r\n\t        this._controller.quickWinCalculationFinished();\r\n\t    };\r\n\t    FreespinsView.prototype.finishWinCalculation = function () {\r\n\t        this._wasFinished = true;\r\n\t        this._controller.winCalculationFinished();\r\n\t    };\r\n\t    FreespinsView.prototype.finishWinAnimator = function () {\r\n\t        if (!DataManager_1.DataManager.Autoplay) {\r\n\t        }\r\n\t        if (this.isLastFreespin()) {\r\n\t            PlayList_1.PlayList.stop(\"SND_FSLoop\", 60);\r\n\t            PlayList_1.PlayList.loop(\"SND_FSEnd\");\r\n\t            this.fsMessageEnd();\r\n\t        }\r\n\t        this._controller.allWinsFinished();\r\n\t    };\r\n\t    FreespinsView.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        this.toggleElements(true, false);\r\n\t        this.introFinished();\r\n\t    };\r\n\t    FreespinsView.prototype.introFinished = function () {\r\n\t        this.visible = true;\r\n\t        this._controller.introFinished();\r\n\t    };\r\n\t    FreespinsView.prototype.outro = function () {\r\n\t        var _this = this;\r\n\t        if (this._fsMessageEnd != null && !this._fsMessageEnd.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._fsMessageEnd.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsCounter) {\r\n\t            this._fsCounter.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsMultiplier) {\r\n\t            this._fsMultiplier.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsMessageEndNoWin != null &&\r\n\t            !this._fsMessageEndNoWin.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._fsMessageEndNoWin.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.stop(\"SND_FSLoop\");\r\n\t        PlayList_1.PlayList.stop(\"SND_FSEnd\");\r\n\t        PlayList_1.PlayList.play(\"SND_FStransition\");\r\n\t        this._transition.goToCase(\"RESET\");\r\n\t        this.hideCounterMultiplier();\r\n\t        this._transition.once(SwitchElement_1.SwitchElement.AnimationComplete, function () {\r\n\t            if (_this._paylinesSelector != null) {\r\n\t                _this._paylinesSelector.reset();\r\n\t            }\r\n\t            var inHighWins = _this._winAnimator.reset(true);\r\n\t            if (_this._wasFinished) {\r\n\t                _this.outroFinished();\r\n\t            }\r\n\t            else {\r\n\t                if (inHighWins) {\r\n\t                    _this._outroDelay.start(60);\r\n\t                }\r\n\t                else {\r\n\t                    _this._outroDelay.start(30);\r\n\t                }\r\n\t            }\r\n\t        });\r\n\t        this._transition.goToCase(\"INIT_2\");\r\n\t    };\r\n\t    FreespinsView.prototype.outroFinished = function () {\r\n\t        this.toggleElements(false, false);\r\n\t        this.hideCounterMultiplier();\r\n\t        this._controller.outroFinished();\r\n\t    };\r\n\t    FreespinsView.prototype.enable = function () { };\r\n\t    FreespinsView.prototype.updateNumberCountAndMultiplier = function () {\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, this._actualFsCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsMultiplier, this._actualFsMultiplier.toString());\r\n\t    };\r\n\t    FreespinsView.prototype.startReceived = function () {\r\n\t        this.visible = true;\r\n\t        this.alpha = 1;\r\n\t        this._winAnimator.showSymbols(GameManager_1.GameManager.freespinsResponse.screen.reels);\r\n\t        this._machine.setStoppedSymbolsArray(GameManager_1.GameManager.freespinsResponse.screen.reels);\r\n\t        this._winAnimator.showSymbols(GameManager_1.GameManager.freespinsResponse.screen.reels);\r\n\t        this._winAnimator.setCustomData(GameManager_1.GameManager.freespinsResponse.customData);\r\n\t        this._winAnimator.showInitWins(GameManager_1.GameManager.freespinsResponse.wins, GameManager_1.GameManager.freespinsResponse.currentWin);\r\n\t        if (GameManager_1.GameManager.freespinsResponse.freeSpins) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsMultiplier, GameManager_1.GameManager.freespinsResponse.freeSpins.multiplier.toString());\r\n\t        }\r\n\t        if (this._baseUserControls != null && this._baseUserControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._baseUserControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsCounter) {\r\n\t            this._fsCounter.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsMultiplier) {\r\n\t            this._fsMultiplier.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._transition) {\r\n\t            this._transition.goToCase(\"RESET\");\r\n\t        }\r\n\t        this._paylines.visible = true;\r\n\t        return ModuleManager_1.ModuleManager.freespinsActive();\r\n\t    };\r\n\t    FreespinsView.prototype.enableConfiguration = function () {\r\n\t        ModuleManager_1.ModuleManager.freeSpinsConfiguratorContinue();\r\n\t    };\r\n\t    FreespinsView.prototype.confirmReceived = function () {\r\n\t        console.warn(\"!\");\r\n\t        return ModuleManager_1.ModuleManager.freespinsActive();\r\n\t    };\r\n\t    FreespinsView.prototype.showCounterMultiplier = function () {\r\n\t        if (this._fsCounter != null && this._fsMultiplier != null) {\r\n\t            this._fsCounter.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            this._fsMultiplier.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.hideCounterMultiplier = function () {\r\n\t        if (this._fsCounter != null && this._fsMultiplier != null) {\r\n\t            this._fsCounter.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            this._fsMultiplier.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.fsMessageEnd = function () {\r\n\t        PlayList_1.PlayList.play(\"SND_FSMessage\");\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin > 0) {\r\n\t            if (this._fsMessageEnd != null && this._fsMessageEnd.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._fsMessageEnd.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (this._fsMessageEndNoWin != null &&\r\n\t                this._fsMessageEndNoWin.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._fsMessageEndNoWin.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.prototype.isLastFreespin = function () {\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            return true;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.freespinsResponse.freeSpins != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount === 0) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    FreespinsView.prototype.toggleElements = function (visible, long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        if (long) {\r\n\t            Tweens_1.Tweens.removeTweens(this, \"all\");\r\n\t            Tweens_1.Tweens.alphaTween(this, {\r\n\t                alphas: visible ? [0, 1] : [1, 0],\r\n\t                tweenDuration: 15,\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            this.alpha = visible ? 1 : 0;\r\n\t        }\r\n\t    };\r\n\t    FreespinsView.DELAY_NUMBER_FS_COUNT_AND_MULTIPLIER = 30;\r\n\t    FreespinsView.DELAY_SHOW_NOWIN_CHESTS = 100;\r\n\t    FreespinsView.DELAY_CLICK_CHESTS = 30;\r\n\t    FreespinsView.DELAY_FS_START_MESSAGE = 180;\r\n\t    FreespinsView = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], FreespinsView);\r\n\t    return FreespinsView;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.FreespinsView = FreespinsView;\r\n\tvar FreespinsViewAttributes = {\r\n\t    TRANSITION_ALPHA_TWEEN: \"TransitionAlphaTween\",\r\n\t    TRANSITION_ALPHA_TWEEN_EASE: \"TransitionAlphaTweenEase\",\r\n\t    TRANSITION_ALPHA_TWEEN_DELAY: \"TransitionAlphaTweenDelay\",\r\n\t    TRANSITION_ALPHA_TWEEN_DURATION: \"TransitionAlphaTweenDuration\",\r\n\t    TRANSITION_ALPHA_TWEEN_KEY_TIMES: \"TransitionAlphaTweenKeyTimes\",\r\n\t};\r\n\n\n/***/ },\n/* 123 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar MessageManager_1 = __webpack_require__(44);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar FreespinsModel = (function () {\r\n\t    function FreespinsModel(controller) {\r\n\t        this.controller = controller;\r\n\t    }\r\n\t    FreespinsModel.prototype.start = function (id) {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        GameManager_1.GameManager.gameClient.start(neo_games_1.Communication.Game.GameModules.Freespins).then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.startReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    FreespinsModel.prototype.confirm = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        GameManager_1.GameManager.gameClient\r\n\t            .start(neo_games_1.Communication.Game.GameModules.Freespins, { confirm: true })\r\n\t            .then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.confirmReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    FreespinsModel.prototype.spin = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        GameManager_1.GameManager.gameClient.freespin(neo_games_1.Communication.Game.GameModules.Freespins).then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.spinReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    FreespinsModel.prototype.end = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        GameManager_1.GameManager.gameClient.endFreespin().then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.endReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    FreespinsModel.prototype.startReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            neo_games_1.Platforms.Platforms.featureStarted({ type: neo_games_1.Communication.Game.GameModules.Freespins });\r\n\t            this.controller.startReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    FreespinsModel.prototype.confirmReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            this.controller.confirmReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    FreespinsModel.prototype.spinReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            this.controller.spinReceived();\r\n\t            neo_games_1.Platforms.Platforms.spinReceived({\r\n\t                balance: parseFloat(neo_common_1.NumberUtils.add(response.balance.real, response.balance.bonus)),\r\n\t                win: GameManager_1.GameManager.freespinsResponse.currentWin,\r\n\t                totalBet: BetManager_1.BetManager.createBetForSpin().totalBet,\r\n\t                roundId: response.roundId,\r\n\t            });\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    FreespinsModel.prototype.endReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            neo_games_1.Platforms.Platforms.featureFinished({ type: neo_games_1.Communication.Game.GameModules.Freespins });\r\n\t            this.controller.endReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    return FreespinsModel;\r\n\t}());\r\n\texports.FreespinsModel = FreespinsModel;\r\n\n\n/***/ },\n/* 124 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar GambleUserControls_1 = __webpack_require__(85);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar DesktopGambleUserControls = (function (_super) {\r\n\t    __extends(DesktopGambleUserControls, _super);\r\n\t    function DesktopGambleUserControls() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    DesktopGambleUserControls.prototype.initIntro = function () {\r\n\t        ModuleManager_1.ModuleManager.setActiveSceneBackground(GameModules.Base, 0);\r\n\t        _super.prototype.initIntro.call(this);\r\n\t    };\r\n\t    DesktopGambleUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], DesktopGambleUserControls);\r\n\t    return DesktopGambleUserControls;\r\n\t}(GambleUserControls_1.GambleUserControls));\r\n\texports.DesktopGambleUserControls = DesktopGambleUserControls;\r\n\n\n/***/ },\n/* 125 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GameActions_1 = __webpack_require__(82);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar PickActions_1 = __webpack_require__(83);\r\n\tvar PickController_1 = __webpack_require__(126);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar gsap_1 = __webpack_require__(16);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar GameStatuses = neo_games_1.Communication.Game.GameModuleStatus;\r\n\tvar DesktopPickUserControls = (function (_super) {\r\n\t    __extends(DesktopPickUserControls, _super);\r\n\t    function DesktopPickUserControls() {\r\n\t        _super.call(this, \"pick\");\r\n\t    }\r\n\t    DesktopPickUserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.registerActions();\r\n\t        this._userControls = document.getElementById(\"pickUserControls\");\r\n\t        this._fsConfiguratorText = document.getElementById(\"fsConfiguratorText\");\r\n\t        this._backDelay = FrameTimer_1.CreateFrameTimer(\"backDelay\");\r\n\t        this._backDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.back.bind(this));\r\n\t        this._backButtonDelay = FrameTimer_1.CreateFrameTimer(\"backButtonDelay\");\r\n\t        this._backButtonDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.backButton.bind(this));\r\n\t        this._pickCount = document.getElementById(\"pickCount\");\r\n\t        if (this._pickCount == null) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no pickCount\");\r\n\t            }\r\n\t        }\r\n\t        this._pickMultiplier = document.getElementById(\"pickMultiplier\");\r\n\t        if (this._pickMultiplier == null) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no pickMultiplier\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(PickController_1.PickController.StartReceived, this.startReceived.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.SelectReceived, this.selectReceived.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.EndReceived, this.endReceived.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.UpdateCounters, this.updateCounter.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.UpdateCountersValues, this.updateCounterValues.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.SelectComplete, this.selectComplete.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.Intro, this.intro.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.OutroFinished, this.outroFinished.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.Outro, this.outro.bind(this));\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 0] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 1] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 2] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 3] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 4] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 5] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 6] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 7] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 8] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.initReceived = function () {\r\n\t        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\t        this._baseUserControls = document.getElementById(\"userControls\");\r\n\t        this._fsCount = document.getElementById(\"fsCount\");\r\n\t        this._fsMultiplier = document.getElementById(\"fsMultiplier\");\r\n\t        _super.prototype.initReceived.call(this);\r\n\t        this._controller.initReceived();\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"none\";\r\n\t        }\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.startReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Base);\r\n\t        ModuleManager_1.ModuleManager.setAutoplayAfterFeature(false);\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.selectReceived = function () {\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.endReceived = function () {\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableFreespins();\r\n\t        }\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (ModuleManager_1.ModuleManager.pickEnabled() || ModuleManager_1.ModuleManager.pickActive()) {\r\n\t            if (action === GameActions_1.GameActions.ActionSpinOrStop) {\r\n\t                return;\r\n\t            }\r\n\t            if (this.actions.getActionState(action)) {\r\n\t                _super.prototype.dispatchAction.call(this, action);\r\n\t                if (action.substr(0, PickActions_1.PickActions.ActionSpot.length) === PickActions_1.PickActions.ActionSpot) {\r\n\t                    var id = parseInt(action.substr(PickActions_1.PickActions.ActionSpot.length, action.length));\r\n\t                    this._controller.select(id);\r\n\t                }\r\n\t                this.actions.disableAllActions();\r\n\t            }\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        }\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.start = function () {\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this._controller.start();\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.back = function () {\r\n\t        this._backDelay.stop();\r\n\t        this.disable();\r\n\t        ModuleManager_1.ModuleManager.endPick();\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.end = function () {\r\n\t        if (GameManager_1.GameManager.pickResponse.count != null && GameManager_1.GameManager.pickResponse.multiplier != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinsCountMultiplier, GameManager_1.GameManager.pickResponse.count.toString() + \";\" + GameManager_1.GameManager.pickResponse.multiplier.toString());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsCountMultiplier, GameManager_1.GameManager.pickResponse.count.toString() + \";\" + GameManager_1.GameManager.pickResponse.multiplier.toString());\r\n\t        }\r\n\t        this._controller.end();\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.backButton = function () {\r\n\t        this.actions.changeActionState(PickActions_1.PickActions.ActionBack, true);\r\n\t        HtmlController_1.HtmlController.updateActionElement(PickActions_1.PickActions.ActionBack, true);\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.allWinsFinished = function () {\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.initIntro = function () {\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        this._controller.initIntro();\r\n\t        neo_games_1.Platforms.Platforms.featureInit({ type: neo_games_1.Communication.Game.GameModules.Pick });\r\n\t        this.prepareNewGameRound(true);\r\n\t        if (this._fsConfiguratorText) {\r\n\t            this._fsConfiguratorText.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsCount) {\r\n\t            this._fsCount.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsMultiplier) {\r\n\t            this._fsMultiplier.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._baseUserControls != null) {\r\n\t            this._baseUserControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        if (ModuleManager_1.ModuleManager.pickEnabled()) {\r\n\t            if (this._userControls != null) {\r\n\t                this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (this._userControls_supreme != null) {\r\n\t                this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (this._baseUserControls != null) {\r\n\t                this._baseUserControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.introFinished = function () {\r\n\t        this.prepareNewGameRound();\r\n\t        if (this._fsConfiguratorText) {\r\n\t            this._fsConfiguratorText.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsCount) {\r\n\t            this._fsCount.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsMultiplier) {\r\n\t            this._fsMultiplier.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._baseUserControls != null) {\r\n\t            this._baseUserControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.outro = function () {\r\n\t        if (this._fsConfiguratorText) {\r\n\t            this._fsConfiguratorText.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsCount) {\r\n\t            this._fsCount.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsMultiplier) {\r\n\t            this._fsMultiplier.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._baseUserControls != null) {\r\n\t            this._baseUserControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        this._controller.outro();\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.outroFinished = function () {\r\n\t        ModuleManager_1.ModuleManager.introModule(GameModules.Freespins, true);\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.prepareNewGameRound = function (init) {\r\n\t        if (init === void 0) { init = false; }\r\n\t        this.actions.changeActionStates((_a = {},\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 0] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 1] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 2] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 3] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 4] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 5] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 6] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 7] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 8] = false,\r\n\t            _a\r\n\t        ));\r\n\t        if (GameManager_1.GameManager.pickResponse != null &&\r\n\t            GameManager_1.GameManager.pickResponse.round != null &&\r\n\t            GameManager_1.GameManager.pickResponse.round.spots != null) {\r\n\t            if (GameManager_1.GameManager.pickResponse.round.remainingPicks === 0) {\r\n\t                if (!ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t                    this.end();\r\n\t                }\r\n\t                else {\r\n\t                    if (GameManager_1.GameManager.pickResponse.count != null && GameManager_1.GameManager.pickResponse.multiplier != null) {\r\n\t                        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinsCountMultiplier, GameManager_1.GameManager.pickResponse.count.toString() +\r\n\t                            \";\" +\r\n\t                            GameManager_1.GameManager.pickResponse.multiplier.toString());\r\n\t                        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsCountMultiplier, GameManager_1.GameManager.pickResponse.count.toString() +\r\n\t                            \";\" +\r\n\t                            GameManager_1.GameManager.pickResponse.multiplier.toString());\r\n\t                    }\r\n\t                    ModuleManager_1.ModuleManager.enableFreespins();\r\n\t                }\r\n\t                return;\r\n\t            }\r\n\t            for (var key in GameManager_1.GameManager.pickResponse.round.spots) {\r\n\t                var id = GameManager_1.GameManager.pickResponse.round.spots[key].id;\r\n\t                var status_1 = GameManager_1.GameManager.pickResponse.round.spots[key].status.toString();\r\n\t                if (id != null && status_1 != null && status_1 === \"enabled\") {\r\n\t                    this.actions.changeActionState(PickActions_1.PickActions.ActionSpot + id, true);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (DataManager_1.DataManager.getDataById(GameData_1.GameData.DataFreeSpinsRemainingCount) !== GameManager_1.GameManager.pickResponse.count.toString()) {\r\n\t            var fsCount_1 = document.querySelector(\"#fsCount .value\");\r\n\t            var hide = gsap_1.TweenLite.to(fsCount_1, 0.1, { alpha: 0 });\r\n\t            hide.eventCallback(\"onComplete\", function () {\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.pickResponse.count.toString());\r\n\t                gsap_1.TweenLite.to(fsCount_1, 0.1, { alpha: 1 });\r\n\t            });\r\n\t        }\r\n\t        if (DataManager_1.DataManager.getDataById(GameData_1.GameData.DataFreeSpinsMultiplier) !== GameManager_1.GameManager.pickResponse.multiplier.toString()) {\r\n\t            var fsMultiplier_1 = document.querySelectorAll(\"#fsMultiplier .value\");\r\n\t            var hide = gsap_1.TweenLite.to(fsMultiplier_1, 0.1, { alpha: 0 });\r\n\t            hide.eventCallback(\"onComplete\", function () {\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsMultiplier, GameManager_1.GameManager.pickResponse.multiplier.toString());\r\n\t                gsap_1.TweenLite.to(fsMultiplier_1, 0.1, { alpha: 1 });\r\n\t            });\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        var _a;\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.updateCounter = function () {\r\n\t        console.warn(\"!\");\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, \"\");\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsMultiplier, \"\");\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.pickResponse.count.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsMultiplier, GameManager_1.GameManager.pickResponse.multiplier.toString());\r\n\t        var fsCount = document.getElementById(\"fsCount\");\r\n\t        gsap_1.TweenLite.to(fsCount, 1, { alpha: [1, 0] });\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.updateCounterValues = function () {\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.pickStartButton = function () {\r\n\t        if (this._baseUserControls != null && this._baseUserControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._baseUserControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.selectComplete = function () {\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.enable = function () {\r\n\t        this.start();\r\n\t    };\r\n\t    DesktopPickUserControls.prototype.disable = function () {\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    DesktopPickUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], DesktopPickUserControls);\r\n\t    return DesktopPickUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.DesktopPickUserControls = DesktopPickUserControls;\r\n\n\n/***/ },\n/* 126 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Controller_1 = __webpack_require__(87);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar PickModel_1 = __webpack_require__(127);\r\n\tvar PickView_1 = __webpack_require__(128);\r\n\tvar PickController = (function (_super) {\r\n\t    __extends(PickController, _super);\r\n\t    function PickController() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    PickController.prototype.startInitialization = function (view) {\r\n\t        if (false) {\r\n\t            this.log(\"startInitialization\");\r\n\t        }\r\n\t        if (view instanceof PickView_1.PickView) {\r\n\t            this._view = view;\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR view is not instance of PickView\");\r\n\t            }\r\n\t        }\r\n\t        this._model = new PickModel_1.PickModel(this);\r\n\t    };\r\n\t    PickController.prototype.initReceived = function () {\r\n\t        this._view.initReceived(this);\r\n\t    };\r\n\t    PickController.prototype.disableLogo = function () {\r\n\t        this._view.disableLogo();\r\n\t    };\r\n\t    PickController.prototype.initIntro = function () {\r\n\t        this._view.initIntro();\r\n\t    };\r\n\t    PickController.prototype.collect = function () { };\r\n\t    PickController.prototype.start = function () {\r\n\t        this._model.start();\r\n\t        this._view.start();\r\n\t    };\r\n\t    PickController.prototype.select = function (spotId) {\r\n\t        this._model.select(spotId);\r\n\t        this._view.select(spotId);\r\n\t    };\r\n\t    PickController.prototype.end = function () {\r\n\t        this._model.end();\r\n\t        this._view.end();\r\n\t    };\r\n\t    PickController.prototype.fsMessageStart = function () {\r\n\t        this._view.fsMessageStart();\r\n\t    };\r\n\t    PickController.prototype.startReceived = function () {\r\n\t        this._view.startReceived();\r\n\t        this.emit(PickController.StartReceived);\r\n\t    };\r\n\t    PickController.prototype.selectReceived = function () {\r\n\t        this._view.selectReceived();\r\n\t        this.emit(PickController.SelectReceived);\r\n\t    };\r\n\t    PickController.prototype.endReceived = function () {\r\n\t        this._view.endReceived();\r\n\t        this.emit(PickController.EndReceived);\r\n\t    };\r\n\t    PickController.prototype.updateCounters = function () {\r\n\t        this.emit(PickController.UpdateCounters);\r\n\t    };\r\n\t    PickController.prototype.updateCountersValues = function () {\r\n\t        this.emit(PickController.UpdateCountersValues);\r\n\t    };\r\n\t    PickController.prototype.selectComplete = function () {\r\n\t        this.emit(PickController.SelectComplete);\r\n\t    };\r\n\t    PickController.prototype.allWinsFinished = function () {\r\n\t        this.emit(PickController.AllWinsFinished);\r\n\t    };\r\n\t    PickController.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        this.emit(PickController.Intro);\r\n\t    };\r\n\t    PickController.prototype.introFinished = function () {\r\n\t        this.emit(PickController.IntroFinished);\r\n\t    };\r\n\t    PickController.prototype.outro = function () {\r\n\t        this._view.outro();\r\n\t    };\r\n\t    PickController.prototype.outroFinished = function () {\r\n\t        this.emit(PickController.OutroFinished);\r\n\t    };\r\n\t    PickController.StartReceived = \"eventStartReceived\";\r\n\t    PickController.SelectReceived = \"eventSelectReceived\";\r\n\t    PickController.EndReceived = \"eventEndReceived\";\r\n\t    PickController.UpdateCounters = \"eventUpdateCounters\";\r\n\t    PickController.UpdateCountersValues = \"eventUpdateCountersValues\";\r\n\t    PickController.SelectComplete = \"eventSelectComplete\";\r\n\t    PickController.AllWinsFinished = \"eventAllWinsFinished\";\r\n\t    PickController.Intro = \"eventIntro\";\r\n\t    PickController.IntroFinished = \"eventIntroFinished\";\r\n\t    PickController.Outro = \"eventOutro\";\r\n\t    PickController.OutroFinished = \"eventOutroFinished\";\r\n\t    PickController = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Controller)\r\n\t    ], PickController);\r\n\t    return PickController;\r\n\t}(Controller_1.Controller));\r\n\texports.PickController = PickController;\r\n\n\n/***/ },\n/* 127 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar MessageManager_1 = __webpack_require__(44);\r\n\tvar PickModel = (function () {\r\n\t    function PickModel(controller) {\r\n\t        this.controller = controller;\r\n\t    }\r\n\t    PickModel.prototype.start = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        GameManager_1.GameManager.gameClient.start(neo_games_1.Communication.Game.GameModules.Pick).then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.startReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    PickModel.prototype.select = function (spotId) {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        GameManager_1.GameManager.gameClient.pickSelect(spotId).then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.selectReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    PickModel.prototype.end = function () {\r\n\t        var _this = this;\r\n\t        if (GameManager_1.GameManager.requestSend) {\r\n\t            return;\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = true;\r\n\t        GameManager_1.GameManager.gameClient.end(neo_games_1.Communication.Game.GameModules.Pick).then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.endReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    PickModel.prototype.startReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            neo_games_1.Platforms.Platforms.featureStarted({ type: neo_games_1.Communication.Game.GameModules.Pick });\r\n\t            this.controller.startReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    PickModel.prototype.selectReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            this.controller.selectReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    PickModel.prototype.endReceived = function (response) {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(response)) {\r\n\t            GameManager_1.GameManager.parseResponses(response);\r\n\t            DataManager_1.DataManager.updateResponseData();\r\n\t            neo_games_1.Platforms.Platforms.featureFinished({ type: neo_games_1.Communication.Game.GameModules.Pick });\r\n\t            this.controller.endReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    return PickModel;\r\n\t}());\r\n\texports.PickModel = PickModel;\r\n\n\n/***/ },\n/* 128 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar ContainerElement_1 = __webpack_require__(90);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar SwitchElement_1 = __webpack_require__(97);\r\n\tvar WinAnimatorPick_1 = __webpack_require__(129);\r\n\tvar Symbols_1 = __webpack_require__(106);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar AmbientBackground_1 = __webpack_require__(61);\r\n\tvar PickRoundSpotStatus = neo_games_1.Communication.Game.PickRoundSpotStatus;\r\n\tvar PickRoundSpotValueType = neo_games_1.Communication.Game.PickRoundSpotValueType;\r\n\tvar PickView = (function (_super) {\r\n\t    __extends(PickView, _super);\r\n\t    function PickView() {\r\n\t        _super.call(this);\r\n\t        this._introDuration = 120;\r\n\t        this._outroDuration = 120;\r\n\t        this._startDuration = 60;\r\n\t        this._fsMessageStartDelay = FrameTimer_1.CreateFrameTimer(\"fsMessageStartDelay\");\r\n\t        this._fsMessageStartDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.fsMessageStart.bind(this));\r\n\t        this._fsMessageHideDelay = FrameTimer_1.CreateFrameTimer(\"fsMessageHideDelay\");\r\n\t        this._fsMessageHideDelay.on(FrameTimer_1.FrameTimerEvents.Complete, function () {\r\n\t            if (this._fsMessageStart != null &&\r\n\t                !this._fsMessageStart.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._fsMessageStart.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }.bind(this));\r\n\t        this._statusTimer = FrameTimer_1.CreateFrameTimer(\"statusTimer\");\r\n\t        this._statusTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.statusTimerComplete.bind(this));\r\n\t        this._introDelay = FrameTimer_1.CreateFrameTimer(\"introDelay\");\r\n\t        this._introDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.introFinished.bind(this));\r\n\t        this._outroDelay = FrameTimer_1.CreateFrameTimer(\"outroDelay\");\r\n\t        this._outroDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.outroFinished.bind(this));\r\n\t        this._pickStartButtonDelay = FrameTimer_1.CreateFrameTimer(\"pickStartButtonDelay\");\r\n\t        this._pickStartButtonDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.pickStartButtonDelay.bind(this));\r\n\t        this._selectCompleteDelay = FrameTimer_1.CreateFrameTimer(\"selectCompleteDelay\");\r\n\t        this._selectCompleteDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.selectCompleteDelay.bind(this));\r\n\t    }\r\n\t    PickView.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof WinAnimatorPick_1.WinAnimatorPick) {\r\n\t                    this._winAnimator = this.childs[key];\r\n\t                }\r\n\t                if (key === \"BottomContainer\" && this.childs[key] instanceof ContainerElement_1.ContainerElement) {\r\n\t                    this._bottomContainer = this.childs[\"BottomContainer\"];\r\n\t                }\r\n\t                if (key === \"TopContainer\" && this.childs[key] instanceof ContainerElement_1.ContainerElement) {\r\n\t                    this._topContainer = this.childs[\"TopContainer\"];\r\n\t                }\r\n\t                if (this.childs[key] instanceof Symbols_1.Symbols) {\r\n\t                    this._spots = this.childs[key];\r\n\t                    this.removeChild(this._spots);\r\n\t                }\r\n\t                if (key === \"Background\" && this.childs[key] instanceof ContainerElement_1.ContainerElement) {\r\n\t                    this._background = this.childs[key];\r\n\t                }\r\n\t                if (key === \"Transition\" && this.childs[key] instanceof SwitchElement_1.SwitchElement) {\r\n\t                    this._transition = this.childs[\"Transition\"];\r\n\t                }\r\n\t                if (key === \"Logo\" && this.childs[key] instanceof SwitchElement_1.SwitchElement) {\r\n\t                    this._logo = this.childs[key];\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._fsMessageStart = document.getElementById(\"fsMessageStart\");\r\n\t    };\r\n\t    PickView.prototype.initReceived = function (controller) {\r\n\t        if (false) {\r\n\t            this.log(\"initReceived\");\r\n\t        }\r\n\t        this._controller = controller;\r\n\t        if (this._spots != null) {\r\n\t            if (GameManager_1.GameManager.pickResponse != null) {\r\n\t                if (this._winAnimator != null) {\r\n\t                    this._winAnimator.on(WinAnimatorPick_1.WinAnimatorPick.FinishWinAnimator, this.finishWinAnimator.bind(this));\r\n\t                    this._winAnimator.initialize(this._spots);\r\n\t                    if (GameManager_1.GameManager.pickResponse.round != null && GameManager_1.GameManager.pickResponse.round.spots != null) {\r\n\t                        this._winAnimator.showSpots(GameManager_1.GameManager.pickResponse.round.spots);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no pick response\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PickView.prototype.statusTimerComplete = function () {\r\n\t        switch (this._status) {\r\n\t            case \"start\":\r\n\t                this.enabledSpots();\r\n\t                this.introFinished();\r\n\t                break;\r\n\t            case \"showWin\":\r\n\t                this.showWin();\r\n\t                break;\r\n\t            case \"updateCounters\":\r\n\t                this.updateCounters();\r\n\t                break;\r\n\t            case \"selectUpdate\":\r\n\t                this.updateCountersValues();\r\n\t                break;\r\n\t            case \"select\":\r\n\t                if (GameManager_1.GameManager.pickResponse.round.remainingPicks <= 0) {\r\n\t                    this._controller.selectComplete();\r\n\t                    this.fsMessageStart();\r\n\t                }\r\n\t                else {\r\n\t                    this.enabledSpots();\r\n\t                    this._controller.selectComplete();\r\n\t                }\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    PickView.prototype.disableLogo = function () {\r\n\t        if (this._logo != null) {\r\n\t            this.removeChild(this._logo);\r\n\t        }\r\n\t    };\r\n\t    PickView.prototype.initIntro = function () {\r\n\t        if (GameManager_1.GameManager.pickResponse != null &&\r\n\t            GameManager_1.GameManager.pickResponse.round != null &&\r\n\t            GameManager_1.GameManager.pickResponse.round.spots != null) {\r\n\t            this.visible = true;\r\n\t            this.enabledSpots();\r\n\t            this._winAnimator.showPickWins(GameManager_1.GameManager.pickResponse, true);\r\n\t            AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"color-1\", 0);\r\n\t            PlayList_1.PlayList.stop(\"SND_FSLoop\");\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseRotation\");\r\n\t            PlayList_1.PlayList.loop(\"SND_FSConfiguratorLoop\");\r\n\t            if (GameManager_1.GameManager.pickResponse.round.remainingPicks <= 0) {\r\n\t                this._selectCompleteDelay.start(1);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PickView.prototype.selectCompleteDelay = function () {\r\n\t        this._controller.selectComplete();\r\n\t        this.fsMessageStart();\r\n\t    };\r\n\t    PickView.prototype.collect = function () { };\r\n\t    PickView.prototype.start = function () {\r\n\t        this.intro();\r\n\t    };\r\n\t    PickView.prototype.select = function (spotId) {\r\n\t        if (GameManager_1.GameManager.pickResponse != null &&\r\n\t            GameManager_1.GameManager.pickResponse.round != null &&\r\n\t            GameManager_1.GameManager.pickResponse.round.spots != null) {\r\n\t            for (var key in GameManager_1.GameManager.pickResponse.round.spots) {\r\n\t                var id = GameManager_1.GameManager.pickResponse.round.spots[key].id;\r\n\t                var spotData = GameManager_1.GameManager.pickResponse.round.spots[id];\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PickView.prototype.end = function () { };\r\n\t    PickView.prototype.startReceived = function () {\r\n\t    };\r\n\t    PickView.prototype.selectReceived = function () {\r\n\t        if (GameManager_1.GameManager.pickResponse != null &&\r\n\t            GameManager_1.GameManager.pickResponse.round != null &&\r\n\t            GameManager_1.GameManager.pickResponse.round.spots != null) {\r\n\t            this._winAnimator.setSpotsData(GameManager_1.GameManager.pickResponse.round.spots);\r\n\t            this._winAnimator.showPickWins(GameManager_1.GameManager.pickResponse);\r\n\t            this._status = \"select\";\r\n\t            this._statusTimer.start(GameManager_1.GameManager.pickResponse.round.remainingPicks ? 0 : this._startDuration);\r\n\t        }\r\n\t    };\r\n\t    PickView.prototype.showWin = function () {\r\n\t        this._status = \"updateCounters\";\r\n\t        this._statusTimer.start(30);\r\n\t    };\r\n\t    PickView.prototype.updateCounters = function () {\r\n\t        this._controller.updateCounters();\r\n\t        this._status = \"selectUpdate\";\r\n\t        this._statusTimer.start(60);\r\n\t    };\r\n\t    PickView.prototype.updateCountersValues = function () {\r\n\t        this._controller.updateCountersValues();\r\n\t        this._status = \"select\";\r\n\t        this._statusTimer.start(20);\r\n\t    };\r\n\t    PickView.prototype.endReceived = function () {\r\n\t        if (this._fsMessageStart != null && this._fsMessageStart.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._fsMessageStart.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    PickView.prototype.finishWinAnimator = function () {\r\n\t        this._controller.allWinsFinished();\r\n\t    };\r\n\t    PickView.prototype.contentVisibility = function (state) {\r\n\t        for (var key in this.childs) {\r\n\t            if (this.childs[key] != this._transition) {\r\n\t                this.childs[key].visible = state;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PickView.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        this.visible = true;\r\n\t        this.contentVisibility(false);\r\n\t        if (this._transition) {\r\n\t            this._transition.goToCase(\"INIT\");\r\n\t        }\r\n\t        AmbientBackground_1.AmbientBackground.changeAmbientBackground(\"color-1\", 20);\r\n\t        if (GameManager_1.GameManager.pickResponse != null &&\r\n\t            GameManager_1.GameManager.pickResponse.round != null &&\r\n\t            GameManager_1.GameManager.pickResponse.round.spots != null) {\r\n\t            this._winAnimator.showSpots(GameManager_1.GameManager.pickResponse.round.spots);\r\n\t            this._winAnimator.updateCounters(GameManager_1.GameManager.pickResponse, true);\r\n\t        }\r\n\t        PlayList_1.PlayList.stop(\"SND_FSLoop\");\r\n\t        PlayList_1.PlayList.stop(\"SND_BaseRotation\");\r\n\t        PlayList_1.PlayList.loop(\"SND_FSConfiguratorLoop\");\r\n\t        this._controller.intro(long);\r\n\t        this._introDelay.start(this._introDuration);\r\n\t    };\r\n\t    PickView.prototype.enabledSpots = function () {\r\n\t        if (GameManager_1.GameManager.pickResponse != null &&\r\n\t            GameManager_1.GameManager.pickResponse.round != null &&\r\n\t            GameManager_1.GameManager.pickResponse.round.spots != null) {\r\n\t            this._winAnimator.setSpotsData(GameManager_1.GameManager.pickResponse.round.spots);\r\n\t        }\r\n\t    };\r\n\t    PickView.prototype.introFinished = function () {\r\n\t        this.contentVisibility(true);\r\n\t        if (this._transition) {\r\n\t            this._transition.goToCase(\"OUTRO\");\r\n\t        }\r\n\t        this._controller.introFinished();\r\n\t    };\r\n\t    PickView.prototype.outro = function () {\r\n\t        if (this._fsMessageStart != null && !this._fsMessageStart.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._fsMessageStart.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        this._winAnimator.reset(true);\r\n\t        if (this._transition != null) {\r\n\t            this._transition.goToCase(\"START\");\r\n\t        }\r\n\t        this.contentVisibility(true);\r\n\t        if (this._transition) {\r\n\t            this._transition.goToCase(\"INIT\");\r\n\t        }\r\n\t        this._outroDelay.start(this._outroDuration);\r\n\t    };\r\n\t    PickView.prototype.outroFinished = function () {\r\n\t        this._outroDelay.stop();\r\n\t        this.contentVisibility(false);\r\n\t        if (this._transition) {\r\n\t            this._transition.goToCase(\"OUTRO\");\r\n\t        }\r\n\t        this._controller.outroFinished();\r\n\t    };\r\n\t    PickView.prototype.fsMessageStart = function () {\r\n\t        this._fsMessageStartDelay.stop();\r\n\t        var progressFn = function (progress, duration) {\r\n\t            var progressInt = Math.round(progress * 100);\r\n\t            if (progressInt > 50) {\r\n\t                this.instance.off(\"progress\", progressFn);\r\n\t                PlayList_1.PlayList.loop(\"SND_FSConfiguratorLoop\", 20, true);\r\n\t            }\r\n\t        };\r\n\t        PlayList_1.PlayList.stop(\"SND_FSConfiguratorLoop\", 20);\r\n\t        PlayList_1.PlayList.play(\"SND_FSMessageStart\", 0, true, progressFn);\r\n\t        if (this._fsMessageStart != null) {\r\n\t            if (GameManager_1.GameManager.pickResponse && GameManager_1.GameManager.pickResponse.round) {\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsCountMultiplier, GameManager_1.GameManager.pickResponse.count.toString() + \";\" + GameManager_1.GameManager.pickResponse.multiplier.toString());\r\n\t            }\r\n\t            this._fsMessageStart.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        this._pickStartButtonDelay.start(30);\r\n\t    };\r\n\t    PickView.prototype.pickStartButtonDelay = function () {\r\n\t        this._pickStartButtonDelay.stop();\r\n\t        ModuleManager_1.ModuleManager.pickStartButton();\r\n\t    };\r\n\t    PickView = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], PickView);\r\n\t    return PickView;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.PickView = PickView;\r\n\n\n/***/ },\n/* 129 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ContainerElement_1 = __webpack_require__(90);\r\n\tvar TimelineElement_1 = __webpack_require__(109);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar WinAnimator_1 = __webpack_require__(108);\r\n\tvar ImageTextElement_1 = __webpack_require__(111);\r\n\tvar PickRoundSpotStatus = neo_games_1.Communication.Game.PickRoundSpotStatus;\r\n\tvar PickRoundSpotValueType = neo_games_1.Communication.Game.PickRoundSpotValueType;\r\n\tvar WinAnimatorPick = (function (_super) {\r\n\t    __extends(WinAnimatorPick, _super);\r\n\t    function WinAnimatorPick() {\r\n\t        _super.apply(this, arguments);\r\n\t        this.elementInstance = [];\r\n\t        this.winStepDuration = 10;\r\n\t        this.currentCash = 0;\r\n\t        this.currentCount = 0;\r\n\t        this.currentMultiplier = 0;\r\n\t        this._picksTotal = 0;\r\n\t        this._pickSelected = 0;\r\n\t        this._actualReel = -1;\r\n\t    }\r\n\t    WinAnimatorPick.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t    };\r\n\t    WinAnimatorPick.prototype.initialize = function (spots) {\r\n\t        this._spots = spots;\r\n\t        this.createTimer();\r\n\t        this.createSpots(spots);\r\n\t        this.createAnimations();\r\n\t    };\r\n\t    WinAnimatorPick.prototype.addElementInstance = function (element) {\r\n\t        this.elementInstance[Object.keys(element)[0]] = element[Object.keys(element)[0]];\r\n\t    };\r\n\t    WinAnimatorPick.prototype.updateCounters = function (response, force, init) {\r\n\t        var oldCash = force ? response.totalWin : this.currentCash;\r\n\t        var oldCount = force ? response.count : this.currentCount;\r\n\t        var oldMultiplier = force ? response.multiplier : this.currentMultiplier;\r\n\t        this.currentCash = response.totalWin;\r\n\t        this.currentCount = response.count;\r\n\t        this.currentMultiplier = response.multiplier;\r\n\t        var wasAnimation = false;\r\n\t        if (init) {\r\n\t            if (this.childs[\"Cash\"] && this.childs[\"Cash\"] instanceof TimelineElement_1.TimelineElement) {\r\n\t                this.childs[\"Cash\"].goToOutro(this.currentCash);\r\n\t                wasAnimation = true;\r\n\t            }\r\n\t            if (this.childs[\"Count\"] instanceof TimelineElement_1.TimelineElement) {\r\n\t                this.childs[\"Count\"].goToOutro(this.currentCash);\r\n\t                wasAnimation = true;\r\n\t            }\r\n\t            if (this.childs[\"Multiplier\"] && this.childs[\"Multiplier\"] instanceof TimelineElement_1.TimelineElement) {\r\n\t                this.childs[\"Multiplier\"].goToOutro(this.currentCash);\r\n\t                wasAnimation = true;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (force ||\r\n\t                (oldCash != this.currentCash && this.childs[\"Cash\"] && this.childs[\"Cash\"] instanceof TimelineElement_1.TimelineElement)) {\r\n\t                this.childs[\"Cash\"].play(this.currentCash, force ? this.currentCash : oldCash);\r\n\t                wasAnimation = true;\r\n\t            }\r\n\t            if (force ||\r\n\t                (oldCount != this.currentCount &&\r\n\t                    this.childs[\"Count\"] &&\r\n\t                    this.childs[\"Count\"] instanceof TimelineElement_1.TimelineElement)) {\r\n\t                this.childs[\"Count\"].play(this.currentCount, force ? this.currentCount : oldCount);\r\n\t                wasAnimation = true;\r\n\t            }\r\n\t            if (force ||\r\n\t                (oldMultiplier != this.currentMultiplier &&\r\n\t                    this.childs[\"Multiplier\"] &&\r\n\t                    this.childs[\"Multiplier\"] instanceof TimelineElement_1.TimelineElement)) {\r\n\t                this.childs[\"Multiplier\"].play(this.currentMultiplier, force ? this.currentMultiplier : oldMultiplier);\r\n\t                wasAnimation = true;\r\n\t            }\r\n\t        }\r\n\t        return wasAnimation;\r\n\t    };\r\n\t    WinAnimatorPick.prototype.showSpots = function (spotsData) {\r\n\t        this._pickSelected = null;\r\n\t        this._picksTotal = 0;\r\n\t        this._actualReel = -1;\r\n\t        this.currentSpots = spotsData;\r\n\t        for (var i = 0; i < spotsData.length; i++) {\r\n\t            this.removeCurrentSpot(i);\r\n\t        }\r\n\t        for (var key in spotsData) {\r\n\t            this.addCurrentSpot(spotsData[key].id);\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorPick.prototype.setSpotsData = function (spotsData) {\r\n\t        this.currentSpots = spotsData;\r\n\t    };\r\n\t    WinAnimatorPick.prototype.spotGoToCase = function (spotIndex, useValue, init) {\r\n\t        var id;\r\n\t        var status;\r\n\t        var value = null;\r\n\t        var valueType;\r\n\t        var addDelay = true;\r\n\t        var spotData = this.currentSpots[spotIndex];\r\n\t        if (spotData.id != null) {\r\n\t            id = spotData.id;\r\n\t        }\r\n\t        if (spotData.status != null) {\r\n\t            status = spotData.status;\r\n\t        }\r\n\t        if (spotData.value != null) {\r\n\t            value = parseInt(spotData.value + \"\");\r\n\t        }\r\n\t        if (spotData.valueType != null) {\r\n\t            valueType = spotData.valueType.toString();\r\n\t        }\r\n\t        if (spotIndex != null && status != null) {\r\n\t            if (this.currentSymbols != null && this.currentSymbols[spotIndex] != null) {\r\n\t                if (value !== null) {\r\n\t                    var childs = this.currentSymbols[spotIndex][0].getChildElements();\r\n\t                    for (var key in childs) {\r\n\t                        if (childs[key] instanceof ImageTextElement_1.ImageTextElement) {\r\n\t                            switch (valueType) {\r\n\t                                case PickRoundSpotValueType.Cash.toString():\r\n\t                                    childs[key].bitmapText.text = String(value);\r\n\t                                    childs[key].realign();\r\n\t                                    break;\r\n\t                                case PickRoundSpotValueType.Count.toString():\r\n\t                                    childs[key].bitmapText.text = \"+\" + value;\r\n\t                                    childs[key].realign();\r\n\t                                    break;\r\n\t                                case PickRoundSpotValueType.Multiplier.toString():\r\n\t                                    childs[key].bitmapText.text = \"x\" + value;\r\n\t                                    childs[key].realign();\r\n\t                                    break;\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                var toCase = null;\r\n\t                switch (status.toString()) {\r\n\t                    case PickRoundSpotStatus.Enabled.toString():\r\n\t                        if (this.symbolsContainer != null) {\r\n\t                            this.noWinSymbolsContainer.addChild(this.currentSymbols[id][0]);\r\n\t                        }\r\n\t                        toCase = \"CaseEnabled\";\r\n\t                        break;\r\n\t                    case PickRoundSpotStatus.Disabled.toString():\r\n\t                        if (this.symbolsContainer != null) {\r\n\t                            this.noWinSymbolsContainer.addChild(this.currentSymbols[id][0]);\r\n\t                        }\r\n\t                        switch (valueType) {\r\n\t                            case PickRoundSpotValueType.Cash.toString():\r\n\t                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseDisabledCash)) {\r\n\t                                    toCase = \"CaseDisabledCash\";\r\n\t                                }\r\n\t                                else {\r\n\t                                    toCase = \"CaseDisabled\";\r\n\t                                }\r\n\t                                break;\r\n\t                            case PickRoundSpotValueType.Count.toString():\r\n\t                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseDisabledCount)) {\r\n\t                                    toCase = \"CaseDisabledCount\";\r\n\t                                }\r\n\t                                else {\r\n\t                                    toCase = \"CaseDisabled\";\r\n\t                                }\r\n\t                                break;\r\n\t                            case PickRoundSpotValueType.Multiplier.toString():\r\n\t                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseDisabledMultiplier)) {\r\n\t                                    toCase = \"CaseDisabledMultiplier\";\r\n\t                                }\r\n\t                                else {\r\n\t                                    toCase = \"CaseDisabled\";\r\n\t                                }\r\n\t                                break;\r\n\t                            default:\r\n\t                                toCase = \"CaseDisabled\";\r\n\t                                break;\r\n\t                        }\r\n\t                        break;\r\n\t                    case PickRoundSpotStatus.Revealed.toString():\r\n\t                        if (this.symbolsContainer != null) {\r\n\t                            this.symbolsContainer.addChild(this.currentSymbols[id][0]);\r\n\t                        }\r\n\t                        if (value <= 0) {\r\n\t                            if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseStart)) {\r\n\t                                toCase = \"CaseStart\";\r\n\t                                break;\r\n\t                            }\r\n\t                        }\r\n\t                        switch (valueType) {\r\n\t                            case PickRoundSpotValueType.Cash.toString():\r\n\t                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseRevealedCash)) {\r\n\t                                    toCase = \"CaseRevealedCash\";\r\n\t                                }\r\n\t                                else {\r\n\t                                    toCase = \"CaseRevealed\";\r\n\t                                }\r\n\t                                break;\r\n\t                            case PickRoundSpotValueType.Count.toString():\r\n\t                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseRevealedCount)) {\r\n\t                                    toCase = \"CaseRevealedCount\";\r\n\t                                }\r\n\t                                else {\r\n\t                                    toCase = \"CaseRevealed\";\r\n\t                                }\r\n\t                                break;\r\n\t                            case PickRoundSpotValueType.Multiplier.toString():\r\n\t                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseRevealedMultiplier)) {\r\n\t                                    toCase = \"CaseRevealedMultiplier\";\r\n\t                                }\r\n\t                                else {\r\n\t                                    toCase = \"CaseRevealed\";\r\n\t                                }\r\n\t                                break;\r\n\t                            default:\r\n\t                                toCase = \"CaseRevealed\";\r\n\t                                break;\r\n\t                        }\r\n\t                        break;\r\n\t                    case PickRoundSpotStatus.Shown.toString():\r\n\t                        if (this.symbolsContainer != null) {\r\n\t                            this.symbolsContainer.addChild(this.currentSymbols[id][0]);\r\n\t                        }\r\n\t                        switch (valueType) {\r\n\t                            case PickRoundSpotValueType.Cash.toString():\r\n\t                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseShownCash)) {\r\n\t                                    toCase = \"CaseShownCash\";\r\n\t                                }\r\n\t                                else {\r\n\t                                    toCase = \"CaseShown\";\r\n\t                                }\r\n\t                                break;\r\n\t                            case PickRoundSpotValueType.Count.toString():\r\n\t                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseShownCount)) {\r\n\t                                    toCase = \"CaseShownCount\";\r\n\t                                }\r\n\t                                else {\r\n\t                                    toCase = \"CaseShown\";\r\n\t                                }\r\n\t                                break;\r\n\t                            case PickRoundSpotValueType.Multiplier.toString():\r\n\t                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseShownMultiplier)) {\r\n\t                                    toCase = \"CaseShownMultiplier\";\r\n\t                                }\r\n\t                                else {\r\n\t                                    toCase = \"CaseShown\";\r\n\t                                }\r\n\t                                break;\r\n\t                            default:\r\n\t                                toCase = \"CaseShown\";\r\n\t                                break;\r\n\t                        }\r\n\t                        break;\r\n\t                    default:\r\n\t                        break;\r\n\t                }\r\n\t                if (toCase != null) {\r\n\t                    if (this.currentSymbols[spotIndex][0].getCurrentCase() != WinAnimatorPick[toCase + \"Init\"]) {\r\n\t                        this.currentSymbols[spotIndex][0].goToCase(WinAnimatorPick[init ? toCase + \"Init\" : toCase]);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no spots or spot with id\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no id or status\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorPick.prototype.showPickWins = function (response, init) {\r\n\t        this.currentRound = response.round;\r\n\t        this.currentWin = response.round.totalWin;\r\n\t        var newPicks = 0;\r\n\t        this.currentRound.spots.forEach(function (spot) {\r\n\t            if (spot.status == PickRoundSpotStatus.Revealed) {\r\n\t                newPicks++;\r\n\t            }\r\n\t        });\r\n\t        this.updateCounters(response, false, init);\r\n\t        if (newPicks > this._picksTotal) {\r\n\t            this._picksTotal = newPicks;\r\n\t            this.currentMultiplierIndex = 0;\r\n\t            for (var i = 0; i < this.multipliers.length; i++) {\r\n\t                if (this.currentWin / BetManager_1.BetManager.Bet >= this.multipliers[i]) {\r\n\t                    this.currentMultiplierIndex = i;\r\n\t                }\r\n\t            }\r\n\t            this.showFirstWins(init);\r\n\t            this.startTimer(WinAnimatorPick.FinishWinAnimator, 60);\r\n\t            return this.currentMultiplierIndex >= 3;\r\n\t        }\r\n\t        else {\r\n\t            this.startTimer(WinAnimatorPick.Idle, this.getInitialIdleDelay());\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorPick.prototype.showFirstWins = function (init) {\r\n\t        for (var key in this.currentSpots) {\r\n\t            this.spotGoToCase(this.currentSpots[key].id, false, init);\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorPick.prototype.getAnimationIndex = function () {\r\n\t        var out = null;\r\n\t        this.currentSpots.forEach(function (spot, index) {\r\n\t            if (spot.status == PickRoundSpotStatus.Shown) {\r\n\t                switch (spot.valueType.toString()) {\r\n\t                    case PickRoundSpotValueType.Cash.toString():\r\n\t                        out = 0;\r\n\t                        break;\r\n\t                    case PickRoundSpotValueType.Count.toString():\r\n\t                        out = 1;\r\n\t                        break;\r\n\t                    case PickRoundSpotValueType.Multiplier.toString():\r\n\t                        out = 2;\r\n\t                        break;\r\n\t                }\r\n\t            }\r\n\t        });\r\n\t        return out;\r\n\t    };\r\n\t    WinAnimatorPick.prototype.startAnimation = function () {\r\n\t        this.currentAnimationIndex = this.getAnimationIndex();\r\n\t        this.currentAnimationFinished = false;\r\n\t        if (this.currentAnimationIndex === null) {\r\n\t            return;\r\n\t        }\r\n\t        return;\r\n\t    };\r\n\t    WinAnimatorPick.prototype.reset = function (showLastSymbols, spin) {\r\n\t        if (spin === void 0) { spin = false; }\r\n\t        this.stopTimer();\r\n\t        if (showLastSymbols && !spin) {\r\n\t            this.startTimer(WinAnimatorPick.Idle, this.getInitialIdleDelay());\r\n\t        }\r\n\t        var lastMultiplierIndex = this.currentMultiplierIndex;\r\n\t        this.currentMultiplierIndex = -1;\r\n\t        if (this.currentAnimationIndex != null) {\r\n\t            if (this.currentAnimationFinished) {\r\n\t                this.resetAnimations();\r\n\t                this.currentWins = null;\r\n\t                this.currentWin = null;\r\n\t                return false;\r\n\t            }\r\n\t            else {\r\n\t                this.stopAnimation();\r\n\t                this.currentWins = null;\r\n\t                this.currentWin = null;\r\n\t                return lastMultiplierIndex >= 3;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.currentWins = null;\r\n\t            this.currentWin = null;\r\n\t            return lastMultiplierIndex >= 3;\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorPick.prototype.onTimerComplete = function () {\r\n\t        this.timer.stop();\r\n\t        switch (this.timerStatus) {\r\n\t            case WinAnimatorPick.FinishWinAnimator:\r\n\t                this.emit(WinAnimatorPick.FinishWinAnimator);\r\n\t                break;\r\n\t            case WinAnimatorPick.Start:\r\n\t                break;\r\n\t            case WinAnimatorPick.SelectUpdate:\r\n\t                break;\r\n\t            case WinAnimatorPick.Select:\r\n\t                break;\r\n\t            case WinAnimatorPick.UpdateCounters:\r\n\t                break;\r\n\t            case WinAnimatorPick.ShowWin:\r\n\t                break;\r\n\t            case WinAnimatorPick.Idle:\r\n\t                this.idle();\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorPick.prototype.createSpots = function (symbols) {\r\n\t        this.symbols = symbols;\r\n\t        this.noWinSymbolsContainer = new ContainerElement_1.ContainerElement();\r\n\t        this.noWinSymbolsContainer.name = \"NoWinSymbols\";\r\n\t        this.addChild(this.noWinSymbolsContainer);\r\n\t        this.symbolsContainer = new ContainerElement_1.ContainerElement();\r\n\t        this.symbolsContainer.name = \"Symbols\";\r\n\t        this.addChild(this.symbolsContainer);\r\n\t        this.currentSymbols = [];\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            this.currentSymbols.push([]);\r\n\t            for (var j = 0; j < this.symbolCount; j++) {\r\n\t                this.currentSymbols[i].push(null);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorPick.prototype.addCurrentSpot = function (reelIndex, symbolIndex) {\r\n\t        if (symbolIndex === void 0) { symbolIndex = 0; }\r\n\t        if (this.currentSymbols[reelIndex][symbolIndex] === null) {\r\n\t            var spotData = this.currentSpots[reelIndex];\r\n\t            if (spotData.id != null && spotData.status != null) {\r\n\t                var symbol = null;\r\n\t                switch (spotData.status.toString()) {\r\n\t                    case PickRoundSpotStatus.Disabled.toString():\r\n\t                        symbol = this.symbols.getSymbol(spotData.id, WinAnimatorPick.CaseDisabled);\r\n\t                        break;\r\n\t                    case PickRoundSpotStatus.Enabled.toString():\r\n\t                        symbol = this.symbols.getSymbol(spotData.id, WinAnimatorPick.CaseEnabled);\r\n\t                        break;\r\n\t                    case PickRoundSpotStatus.Selected.toString():\r\n\t                        symbol = this.symbols.getSymbol(spotData.id, WinAnimatorPick.CaseSelected);\r\n\t                        break;\r\n\t                    case PickRoundSpotStatus.Revealed.toString():\r\n\t                        symbol = this.symbols.getSymbol(spotData.id, WinAnimatorPick.CaseRevealed);\r\n\t                        break;\r\n\t                    case PickRoundSpotStatus.Shown.toString():\r\n\t                        symbol = this.symbols.getSymbol(spotData.id, WinAnimatorPick.CaseShown);\r\n\t                        break;\r\n\t                }\r\n\t                if (this.symbolsContainer != null && symbol != null) {\r\n\t                    this.symbolsContainer.addChild(symbol);\r\n\t                    symbol.position.x = this.reelX[reelIndex] - symbol.offsetX;\r\n\t                    symbol.position.y = this.reelY[reelIndex] + this.symbolHeight * symbolIndex - symbol.offsetY;\r\n\t                    this.currentSymbols[reelIndex][symbolIndex] = symbol;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorPick.prototype.removeCurrentSpot = function (reelIndex, symbolIndex) {\r\n\t        if (symbolIndex === void 0) { symbolIndex = 0; }\r\n\t        if (this.currentSymbols[reelIndex][symbolIndex] !== null) {\r\n\t            this.symbols.returnSymbol(this.currentSymbols[reelIndex][symbolIndex]);\r\n\t            this.currentSymbols[reelIndex][symbolIndex] = null;\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorPick.prototype.idle = function () {\r\n\t    };\r\n\t    WinAnimatorPick.Start = \"start\";\r\n\t    WinAnimatorPick.SelectUpdate = \"selectUpdate\";\r\n\t    WinAnimatorPick.Select = \"select\";\r\n\t    WinAnimatorPick.UpdateCounters = \"updateCounters\";\r\n\t    WinAnimatorPick.ShowWin = \"showWin\";\r\n\t    WinAnimatorPick.Idle = \"idle\";\r\n\t    WinAnimatorPick.CycleWins = \"cycleWins\";\r\n\t    WinAnimatorPick.CaseDisabled = \"BONUS_DISABLED\";\r\n\t    WinAnimatorPick.CaseDisabledCash = \"BONUS_DISABLED_CASH\";\r\n\t    WinAnimatorPick.CaseDisabledCount = \"BONUS_DISABLED_COUNT\";\r\n\t    WinAnimatorPick.CaseDisabledMultiplier = \"BONUS_DISABLED_MULTIPLIER\";\r\n\t    WinAnimatorPick.CaseEnabled = \"BONUS_ENABLED\";\r\n\t    WinAnimatorPick.CaseSelected = \"BONUS_SELECTED\";\r\n\t    WinAnimatorPick.CaseRevealed = \"BONUS_REVEALED\";\r\n\t    WinAnimatorPick.CaseRevealedCash = \"BONUS_REVEALED_CASH\";\r\n\t    WinAnimatorPick.CaseRevealedCount = \"BONUS_REVEALED_COUNT\";\r\n\t    WinAnimatorPick.CaseRevealedMultiplier = \"BONUS_REVEALED_MULTIPLIER\";\r\n\t    WinAnimatorPick.CaseShown = \"BONUS_SHOWN\";\r\n\t    WinAnimatorPick.CaseShownCash = \"BONUS_SHOWN_CASH\";\r\n\t    WinAnimatorPick.CaseShownCount = \"BONUS_SHOWN_COUNT\";\r\n\t    WinAnimatorPick.CaseShownMultiplier = \"BONUS_SHOWN_MULTIPLIER\";\r\n\t    WinAnimatorPick.CaseStart = \"BONUS_START\";\r\n\t    WinAnimatorPick.CaseDisabledInit = \"BONUS_DISABLED_INIT\";\r\n\t    WinAnimatorPick.CaseDisabledCashInit = \"BONUS_DISABLED_CASH_INIT\";\r\n\t    WinAnimatorPick.CaseDisabledCountInit = \"BONUS_DISABLED_COUNT_INIT\";\r\n\t    WinAnimatorPick.CaseDisabledMultiplierInit = \"BONUS_DISABLED_MULTIPLIER_INIT\";\r\n\t    WinAnimatorPick.CaseEnabledInit = \"BONUS_ENABLED_INIT\";\r\n\t    WinAnimatorPick.CaseSelectedInit = \"BONUS_SELECTED_INIT\";\r\n\t    WinAnimatorPick.CaseRevealedInit = \"BONUS_REVEALED_INIT\";\r\n\t    WinAnimatorPick.CaseRevealedCashInit = \"BONUS_REVEALED_CASH_INIT\";\r\n\t    WinAnimatorPick.CaseRevealedCountInit = \"BONUS_REVEALED_COUNT_INIT\";\r\n\t    WinAnimatorPick.CaseRevealedMultiplierInit = \"BONUS_REVEALED_MULTIPLIER_INIT\";\r\n\t    WinAnimatorPick.CaseShownInit = \"BONUS_SHOWN_INIT\";\r\n\t    WinAnimatorPick.CaseShownCashInit = \"BONUS_SHOWN_CASH_INIT\";\r\n\t    WinAnimatorPick.CaseShownCountInit = \"BONUS_SHOWN_COUNT_INIT\";\r\n\t    WinAnimatorPick.CaseShownMultiplierInit = \"BONUS_SHOWN_MULTIPLIER_INIT\";\r\n\t    WinAnimatorPick.CaseStartInit = \"BONUS_START_INIT\";\r\n\t    WinAnimatorPick = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], WinAnimatorPick);\r\n\t    return WinAnimatorPick;\r\n\t}(WinAnimator_1.WinAnimator));\r\n\texports.WinAnimatorPick = WinAnimatorPick;\r\n\texports.WinAnimatorPickAttributes = {\r\n\t    SOUNDS: \"Sounds\",\r\n\t    CONFIGS: \"Configs\",\r\n\t};\r\n\n\n/***/ },\n/* 130 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar BaseActions_1 = __webpack_require__(46);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar GameActions_1 = __webpack_require__(82);\r\n\tvar BaseController_1 = __webpack_require__(92);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar ActionSet_1 = __webpack_require__(74);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar LimitDialog_1 = __webpack_require__(54);\r\n\tvar TerminalActions_1 = __webpack_require__(84);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar FireBirdPaytable_1 = __webpack_require__(131);\r\n\tvar FireBirdHelp_1 = __webpack_require__(132);\r\n\tvar FireBirdTypes_1 = __webpack_require__(133);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar GameEvents = neo_games_1.ClientHost.GameEvents;\r\n\tvar FireBirdBaseUserControls = (function (_super) {\r\n\t    __extends(FireBirdBaseUserControls, _super);\r\n\t    function FireBirdBaseUserControls() {\r\n\t        _super.call(this, \"base\");\r\n\t        this._autoplayAfterGamble = false;\r\n\t        this._autoplayAfterFeature = false;\r\n\t        this._unColectedWin = 0;\r\n\t        this._featureAutoStarted = false;\r\n\t        this._wasPrimaryGameEnded = true;\r\n\t        this._wasGameEnded = true;\r\n\t    }\r\n\t    FireBirdBaseUserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.ledStripe = node.hasAttribute(\"LedStripe\") ? node.getAttribute(\"LedStripe\") : \"255;255;255\";\r\n\t        this._terminalActions = new ActionSet_1.ActionSet(this._key + \".terminalActions\", neo_common_1.EngineComponentFactory.getComponentName(this));\r\n\t        this.registerActions();\r\n\t        this._afterWinDelay = FrameTimer_1.CreateFrameTimer(\"afterWinDelay\");\r\n\t        this._afterWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._autoplayDelay = FrameTimer_1.CreateFrameTimer(\"autoplayDelay\");\r\n\t        this._autoplayDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\r\n\t        this._unColectedWinDelay = FrameTimer_1.CreateFrameTimer(\"unColectedWinDelay\");\r\n\t        this._unColectedWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.unColectedWinDelay.bind(this));\r\n\t        this._userControls = document.getElementById(\"userControls\");\r\n\t        this._enableConfiguratorButtons = FrameTimer_1.CreateFrameTimer(\"enableConfiguratorButtons\");\r\n\t        this._enableConfiguratorButtons.on(FrameTimer_1.FrameTimerEvents.Complete, this.enableConfiguratorButtons.bind(this));\r\n\t        this._prepareNewGameRound = FrameTimer_1.CreateFrameTimer(\"prepareNewGameRound\");\r\n\t        this._prepareNewGameRound.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._featureAutoStartTimer = FrameTimer_1.CreateFrameTimer(\"featureAutoStartTimer\");\r\n\t        this._featureAutoStartTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.featureAutoStartDelayed.bind(this));\r\n\t        this._fsConfigurator = document.getElementById(\"fsConfigurator\");\r\n\t        this.handleClientHostReload = this.handleClientHostReload.bind(this);\r\n\t        AppContext_1.AppContext.clientHost.on(FireBirdTypes_1.StyxClientHostEvents.Reload, this.handleClientHostReload);\r\n\t        var creditBox = document.getElementById(\"creditBox\");\r\n\t        var betBox = document.getElementById(\"betBox\");\r\n\t        if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration != null) {\r\n\t            if (creditBox != null) {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.UseCoins) {\r\n\t                    creditBox.classList.add(\"denomOn\");\r\n\t                }\r\n\t                if (AppContext_1.AppContext.gameConfiguration.HideAmountsEnabled) {\r\n\t                    creditBox.classList.add(\"hideAmountsOn\");\r\n\t                }\r\n\t            }\r\n\t            if (betBox != null) {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.HideAmountsEnabled) {\r\n\t                    betBox.classList.add(\"hideAmountsOn\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.handleClientHostReload = function () {\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled() || ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            return;\r\n\t        }\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"FireBirdBaseUserControls\", \"Event 'reload' arrived, actions updated...\");\r\n\t        }\r\n\t        AppContext_1.AppContext.clientHost.setLEDStripe(this.ledStripe, 0);\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t    };\r\n\t    Object.defineProperty(FireBirdBaseUserControls.prototype, \"terminalActions\", {\r\n\t        get: function () {\r\n\t            return this._terminalActions;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    FireBirdBaseUserControls.prototype.getAllTerminalActions = function () {\r\n\t        return this._terminalActions.getAllActions();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(BaseController_1.BaseController.SpinReceived, this.spinReceived.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.MachineStopped, this.machineStopped.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.OutroFinished, this.outroFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.ConfiguratorStart, this.configuratorStart.bind(this));\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[BaseActions_1.BaseActions.ActionAutoplay] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBaseCollect] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBetCycle] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionDenomSelect] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionCoinCountSelect] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBetSelect] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSpin] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSelectPayline + 1] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSelectPayline + 2] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSelectPayline + 3] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSelectPayline + 4] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSelectPayline + 5] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSelectPayline + 6] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSelectPayline + 7] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSelectPayline + 8] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSelectPayline + 9] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 1] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 2] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 3] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 4] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 5] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 6] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 7] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 8] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 9] = false,\r\n\t            _a\r\n\t        ));\r\n\t        this.terminalActions.registerActions((_b = {},\r\n\t            _b[TerminalActions_1.TerminalActions.Payout] = false,\r\n\t            _b[TerminalActions_1.TerminalActions.BackToLobby] = false,\r\n\t            _b[TerminalActions_1.TerminalActions.StartWithCollect] = false,\r\n\t            _b[TerminalActions_1.TerminalActions.Autoplay] = false,\r\n\t            _b[TerminalActions_1.TerminalActions.BetOrGamble] = false,\r\n\t            _b\r\n\t        ));\r\n\t        var _a, _b;\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.initReceived = function () {\r\n\t        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\t        _super.prototype.initReceived.call(this);\r\n\t        this._controller.initReceived();\r\n\t        this._controller.disableLogo();\r\n\t        this._paytable = new FireBirdPaytable_1.FireBirdPaytable();\r\n\t        this._paytable.initialize();\r\n\t        this._help = new FireBirdHelp_1.FireBirdHelp();\r\n\t        this._help.initialize();\r\n\t        if (GameManager_1.GameManager.gameResponse != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWin, GameManager_1.GameManager.gameResponse.totalWin.toString());\r\n\t            if (AppContext_1.AppContext.gameConfiguration.UseCoins != null && BetManager_1.BetManager.CoinSize != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gameResponse.totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            }\r\n\t        }\r\n\t        if (this._userControls != null && !ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this._userControls.style.display = \"none\";\r\n\t        }\r\n\t        if (this._userControls != null &&\r\n\t            !ModuleManager_1.ModuleManager.gambleActive() &&\r\n\t            !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null && !ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this._userControls_supreme.style.display = \"none\";\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        this._paytable.changeBet();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.collectReceived = function () {\r\n\t        if (GameManager_1.GameManager.disableOnCollect) {\r\n\t            GameManager_1.GameManager.disableGamePlay = true;\r\n\t        }\r\n\t        DataManager_1.DataManager.gameState(\"GameEnded\");\r\n\t        this._wasGameEnded = true;\r\n\t        _super.prototype.collectReceived.call(this);\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        this.prepareNewGameRound();\r\n\t        this._paytable.reset();\r\n\t        this._help.reset();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, this._unColectedWin.toString());\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins != null && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(this._unColectedWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t        }\r\n\t        this._unColectedWinDelay.stop();\r\n\t        this._unColectedWinDelay.start(75);\r\n\t        this._unColectedWin = 0;\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.restoreGameRound = function () {\r\n\t        _super.prototype.collectReceived.call(this);\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.spinReceived = function () {\r\n\t        DataManager_1.DataManager.gameState(\"PrimaryGameStarted\");\r\n\t        if (DataManager_1.DataManager.Autoplay &&\r\n\t            AppContext_1.AppContext.gameConfiguration.AutoplayModeSpeed === \"fast\" &&\r\n\t            AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop &&\r\n\t            AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration === 0) {\r\n\t            this.stop();\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop);\r\n\t            this.terminalActions.changeActionState(TerminalActions_1.TerminalActions.StartWithCollect, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataRoundId);\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive() || ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            return;\r\n\t        }\r\n\t        if (action === BaseActions_1.BaseActions.ActionDenomSelect && this.actions.getActionState(action)) {\r\n\t            if (BetManager_1.BetManager.DenomContainer != null) {\r\n\t                BetManager_1.BetManager.DenomContainer.toggle();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (action === BaseActions_1.BaseActions.ActionCoinCountSelect && this.actions.getActionState(action)) {\r\n\t            if (BetManager_1.BetManager.CoinCountContainer != null) {\r\n\t                BetManager_1.BetManager.CoinCountContainer.toggle();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (action === BaseActions_1.BaseActions.ActionBetSelect && this.actions.getActionState(action)) {\r\n\t            if (BetManager_1.BetManager.BetContainer != null) {\r\n\t                BetManager_1.BetManager.BetContainer.toggle();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        var denomSelectValue = \"\";\r\n\t        if (action.substr(0, BaseActions_1.BaseActions.ActionDenomSelectValue.length) === BaseActions_1.BaseActions.ActionDenomSelectValue &&\r\n\t            this.actions.getActionState(BaseActions_1.BaseActions.ActionDenomSelect)) {\r\n\t            denomSelectValue = action.substr(BaseActions_1.BaseActions.ActionDenomSelectValue.length, action.length);\r\n\t            action = BaseActions_1.BaseActions.ActionDenomSelect;\r\n\t        }\r\n\t        var coinCountSelectValue = \"\";\r\n\t        if (action.substr(0, BaseActions_1.BaseActions.ActionCoinCountSelectValue.length) ===\r\n\t            BaseActions_1.BaseActions.ActionCoinCountSelectValue &&\r\n\t            this.actions.getActionState(BaseActions_1.BaseActions.ActionCoinCountSelect)) {\r\n\t            coinCountSelectValue = action.substr(BaseActions_1.BaseActions.ActionCoinCountSelectValue.length, action.length);\r\n\t            action = BaseActions_1.BaseActions.ActionCoinCountSelect;\r\n\t        }\r\n\t        var betSelectValue = \"\";\r\n\t        if (action.substr(0, BaseActions_1.BaseActions.ActionBetSelectValue.length) === BaseActions_1.BaseActions.ActionBetSelectValue &&\r\n\t            this.actions.getActionState(BaseActions_1.BaseActions.ActionBetSelect)) {\r\n\t            betSelectValue = action.substr(BaseActions_1.BaseActions.ActionBetSelectValue.length, action.length);\r\n\t            action = BaseActions_1.BaseActions.ActionBetSelect;\r\n\t        }\r\n\t        if (action.substr(0, BaseActions_1.BaseActions.ActionSelectPayline.length) === BaseActions_1.BaseActions.ActionSelectPayline) {\r\n\t            this._controller.selectPayline();\r\n\t            return;\r\n\t        }\r\n\t        if (action === GameActions_1.GameActions.ActionSpinOrStop) {\r\n\t            if (this.actions.getActionState(BaseActions_1.BaseActions.ActionSpin)) {\r\n\t                action = BaseActions_1.BaseActions.ActionSpin;\r\n\t            }\r\n\t            else if (this.actions.getActionState(BaseActions_1.BaseActions.ActionSpinStop)) {\r\n\t                action = BaseActions_1.BaseActions.ActionSpinStop;\r\n\t            }\r\n\t            else {\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (action === TerminalActions_1.TerminalActions.StartWithCollect) {\r\n\t            if (this.actions.getActionState(BaseActions_1.BaseActions.ActionBaseCollect)) {\r\n\t                action = BaseActions_1.BaseActions.ActionBaseCollect;\r\n\t            }\r\n\t            else if (this.actions.getActionState(BaseActions_1.BaseActions.ActionSpin)) {\r\n\t                action = BaseActions_1.BaseActions.ActionSpin;\r\n\t            }\r\n\t            else if (this.actions.getActionState(BaseActions_1.BaseActions.ActionSpinStop)) {\r\n\t                action = BaseActions_1.BaseActions.ActionSpinStop;\r\n\t            }\r\n\t        }\r\n\t        if (action === TerminalActions_1.TerminalActions.Autoplay) {\r\n\t            if (this.actions.getActionState(BaseActions_1.BaseActions.ActionAutoplay)) {\r\n\t                action = BaseActions_1.BaseActions.ActionAutoplay;\r\n\t                this._help.reset();\r\n\t            }\r\n\t            else if (this.actions.getActionState(BaseActions_1.BaseActions.ActionAutoplayStop)) {\r\n\t                action = BaseActions_1.BaseActions.ActionAutoplayStop;\r\n\t                this._help.reset();\r\n\t            }\r\n\t        }\r\n\t        if (action === TerminalActions_1.TerminalActions.BetOrGamble) {\r\n\t            if (this.actions.getActionState(BaseActions_1.BaseActions.ActionBetCycle)) {\r\n\t                action = BaseActions_1.BaseActions.ActionBetCycle;\r\n\t            }\r\n\t        }\r\n\t        if (this.actions.getActionState(action)) {\r\n\t            this._help.reset();\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            _super.prototype.dispatchAction.call(this, action);\r\n\t            switch (action) {\r\n\t                case BaseActions_1.BaseActions.ActionSpin:\r\n\t                    this.spin();\r\n\t                    this._help.reset();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionSpinStop:\r\n\t                    this.stop();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionAutoplay:\r\n\t                    if (!DataManager_1.DataManager.Autoplay) {\r\n\t                        DataManager_1.DataManager.gameState(\"AutoPlayStarted\");\r\n\t                    }\r\n\t                    this.autoplay();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionAutoplayStop:\r\n\t                    this.autoplayStop();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBetCycle:\r\n\t                    this.changeBet(false, false, true);\r\n\t                    if (BetManager_1.BetManager.DenomContainer != null) {\r\n\t                        BetManager_1.BetManager.DenomContainer.disable();\r\n\t                    }\r\n\t                    if (BetManager_1.BetManager.CoinCountContainer != null) {\r\n\t                        BetManager_1.BetManager.CoinCountContainer.disable();\r\n\t                        BetManager_1.BetManager.CoinCountContainer.changeValue();\r\n\t                    }\r\n\t                    if (BetManager_1.BetManager.BetContainer != null) {\r\n\t                        BetManager_1.BetManager.BetContainer.disable();\r\n\t                        BetManager_1.BetManager.BetContainer.changeValue();\r\n\t                    }\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBaseCollect:\r\n\t                    this.collect();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionDenomSelect:\r\n\t                    if (denomSelectValue != \"\") {\r\n\t                        this.changeDenom(parseFloat(denomSelectValue));\r\n\t                    }\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionCoinCountSelect:\r\n\t                    if (coinCountSelectValue != \"\") {\r\n\t                        this.changeCoinCount(parseFloat(coinCountSelectValue));\r\n\t                    }\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBetSelect:\r\n\t                    if (betSelectValue != \"\") {\r\n\t                        this.changeBetByValue(parseFloat(betSelectValue));\r\n\t                    }\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 1:\r\n\t                    this.selectFromConfigurator(1);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 2:\r\n\t                    this.selectFromConfigurator(2);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 3:\r\n\t                    this.selectFromConfigurator(3);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 4:\r\n\t                    this.selectFromConfigurator(4);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 5:\r\n\t                    this.selectFromConfigurator(5);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 6:\r\n\t                    this.selectFromConfigurator(6);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 7:\r\n\t                    this.selectFromConfigurator(7);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 8:\r\n\t                    this.selectFromConfigurator(8);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 9:\r\n\t                    this.selectFromConfigurator(9);\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.collect = function () {\r\n\t        _super.prototype.collect.call(this);\r\n\t        ModuleManager_1.ModuleManager.disableGamble();\r\n\t        this.disable();\r\n\t        this.playCollectSound();\r\n\t        this._controller.collect();\r\n\t        if (!this._wasPrimaryGameEnded) {\r\n\t            DataManager_1.DataManager.gameState(\"PrimaryGameEnded\");\r\n\t            this._wasPrimaryGameEnded = true;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t            DataManager_1.DataManager.gameState(\"GameCollectEscrow\");\r\n\t        }\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        GameManager_1.GameManager.collect(GameModules.Base);\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins != null && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(this._unColectedWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, this._unColectedWin.toString());\r\n\t        this._unColectedWinDelay.start(75);\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.unColectedWinDelay = function () {\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, \"0\");\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.spin = function () {\r\n\t        if (GameManager_1.GameManager.disableOnCollect) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.collect();\r\n\t            }\r\n\t            else {\r\n\t                GameManager_1.GameManager.disableGamePlay = true;\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (!BalanceManager_1.BalanceManager.hasCredit(false, true)) {\r\n\t            if (DataManager_1.DataManager.Autoplay) {\r\n\t                DataManager_1.DataManager.gameState(\"AutoPlayEnded\");\r\n\t            }\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            ModuleManager_1.ModuleManager.disableGamble();\r\n\t            this.prepareNewGameRound();\r\n\t            return;\r\n\t        }\r\n\t        DataManager_1.DataManager.Collectable = false;\r\n\t        ModuleManager_1.ModuleManager.disableGamble();\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        this.actions.disableAllActions();\r\n\t        this.terminalActions.disableAllActions();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionAutoplayStop, DataManager_1.DataManager.autoplayEnabled());\r\n\t            this.terminalActions.changeActionState(TerminalActions_1.TerminalActions.Autoplay, DataManager_1.DataManager.autoplayEnabled());\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        this.playCollectSound();\r\n\t        BalanceManager_1.BalanceManager.fixBalance();\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom);\r\n\t        }\r\n\t        if (!this._wasPrimaryGameEnded) {\r\n\t            DataManager_1.DataManager.gameState(\"PrimaryGameEnded\");\r\n\t            this._wasPrimaryGameEnded = true;\r\n\t        }\r\n\t        if (!this._wasGameEnded) {\r\n\t            DataManager_1.DataManager.gameState(\"GameEnded\");\r\n\t            this._wasGameEnded = true;\r\n\t        }\r\n\t        DataManager_1.DataManager.gameState(\"PrimaryGameEscrow\");\r\n\t        this._controller.spin();\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        this._paytable.reset();\r\n\t        this._help.reset();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.stop = function () {\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t        this.terminalActions.changeActionState(TerminalActions_1.TerminalActions.StartWithCollect, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        this._controller.stop();\r\n\t        this._help.reset();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.autoplayDelayed = function () {\r\n\t        this._autoplayDelay.stop();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.autoplay = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (DataManager_1.DataManager.AutoplayCount === \"∞\") {\r\n\t            DataManager_1.DataManager.Autoplay = true;\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t            this.spin();\r\n\t        }\r\n\t        else {\r\n\t            DataManager_1.DataManager.AutoplayCount = (parseInt(DataManager_1.DataManager.AutoplayCount) - 1).toString();\r\n\t            if (parseInt(DataManager_1.DataManager.AutoplayCount) >= 0) {\r\n\t                DataManager_1.DataManager.Autoplay = true;\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t                this.spin();\r\n\t            }\r\n\t            else {\r\n\t                if (DataManager_1.DataManager.Autoplay) {\r\n\t                    DataManager_1.DataManager.gameState(\"AutoPlayEnded\");\r\n\t                }\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.autoplayStop = function () {\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            DataManager_1.DataManager.gameState(\"AutoPlayEnded\");\r\n\t        }\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionAutoplayStop, false);\r\n\t        this.terminalActions.changeActionState(TerminalActions_1.TerminalActions.Autoplay, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionAutoplayStop, false);\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.changeBetByValue = function (value) {\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this.collect();\r\n\t        }\r\n\t        else {\r\n\t            this._controller.collect();\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, \"0\");\r\n\t            LimitDialog_1.LimitDialog.closeDialog();\r\n\t        }\r\n\t        BetManager_1.BetManager.changeBetByValue(value);\r\n\t        this._paytable.changeBet();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.changeCoinCount = function (value) {\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this.collect();\r\n\t        }\r\n\t        else {\r\n\t            this._controller.collect();\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, \"0\");\r\n\t            LimitDialog_1.LimitDialog.closeDialog();\r\n\t        }\r\n\t        BetManager_1.BetManager.changeCoinCount(value);\r\n\t        this._paytable.changeBet();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.changeDenom = function (value) {\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this.collect();\r\n\t        }\r\n\t        else {\r\n\t            this._controller.collect();\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, \"0\");\r\n\t            LimitDialog_1.LimitDialog.closeDialog();\r\n\t        }\r\n\t        BetManager_1.BetManager.changeDenom(value);\r\n\t        this._paytable.changeBet();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.changeBet = function (decrease, max, cycle) {\r\n\t        if (decrease === void 0) { decrease = false; }\r\n\t        if (max === void 0) { max = false; }\r\n\t        if (cycle === void 0) { cycle = false; }\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this.collect();\r\n\t        }\r\n\t        else {\r\n\t            this._controller.collect();\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, \"0\");\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal);\r\n\t            LimitDialog_1.LimitDialog.closeDialog();\r\n\t        }\r\n\t        BetManager_1.BetManager.changeBet(decrease, max, cycle);\r\n\t        this._paytable.changeBet();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.machineStopped = function () {\r\n\t        this._wasGameEnded = false;\r\n\t        this._wasPrimaryGameEnded = false;\r\n\t        this._unColectedWinDelay.stop();\r\n\t        this._unColectedWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            if (GameManager_1.GameManager.baseResponse.wins != null) {\r\n\t                this._paytable.showWins(GameManager_1.GameManager.baseResponse.wins);\r\n\t            }\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            DataManager_1.DataManager.gameState(\"PrimaryGameEnded\");\r\n\t            DataManager_1.DataManager.gameState(\"GameEnded\");\r\n\t            this._wasPrimaryGameEnded = true;\r\n\t            this._wasGameEnded = true;\r\n\t            DataManager_1.DataManager.updateDataElements();\r\n\t            if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.disableOnCollect) {\r\n\t                GameManager_1.GameManager.disableGamePlay = true;\r\n\t            }\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gameResponse.balance != null &&\r\n\t            GameManager_1.GameManager.gameResponse.balance.bonus != null &&\r\n\t            GameManager_1.GameManager.gameResponse.balance.bonus < BetManager_1.BetManager.Bet) {\r\n\t            this.changeBetColor();\r\n\t        }\r\n\t        if (GameManager_1.GameManager.baseResponse.wins != null) {\r\n\t            this._paytable.showWins(GameManager_1.GameManager.baseResponse.wins);\r\n\t        }\r\n\t        if (GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            DataManager_1.DataManager.Collectable = true;\r\n\t        }\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t        this.terminalActions.changeActionState(TerminalActions_1.TerminalActions.StartWithCollect, false);\r\n\t        if (GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            if (DataManager_1.DataManager.Autoplay) {\r\n\t                if (!DataManager_1.DataManager.GameLimit) {\r\n\t                    this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpin, true);\r\n\t                    this.terminalActions.changeActionState(TerminalActions_1.TerminalActions.StartWithCollect, true);\r\n\t                }\r\n\t                if (ModuleManager_1.ModuleManager.gambleEnabled()) {\r\n\t                    this.terminalActions.changeActionState(TerminalActions_1.TerminalActions.BetOrGamble, true);\r\n\t                }\r\n\t            }\r\n\t            this._afterWinDelay.start(80);\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        if (DataManager_1.DataManager.Autoplay && GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            this._autoplayDelay.start(15);\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.winCalculationFinished = function () {\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            this._paytable.bounceLogo();\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom);\r\n\t            return;\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom);\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            DataManager_1.DataManager.updateDataElements();\r\n\t        }\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        this.prepareNewGameRound();\r\n\t        this._paytable.bounceLogo();\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.allWinsFinished = function () {\r\n\t        this._unColectedWin = 0;\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (!ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            DataManager_1.DataManager.gameState(\"PrimaryGameEnded\");\r\n\t            this._wasPrimaryGameEnded = true;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            DataManager_1.DataManager.gameState(\"GameEnded\");\r\n\t            this._wasGameEnded = true;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableFreespins();\r\n\t            this._controller.startConfigurator();\r\n\t            return;\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        this.prepareNewGameRound();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            DataManager_1.DataManager.gameState(\"GameEnded\");\r\n\t            this._wasGameEnded = true;\r\n\t            this.autoplay();\r\n\t        }\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.initIntro = function () {\r\n\t        AppContext_1.AppContext.clientHost.setLEDStripe(this.ledStripe, 2);\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        if (GameManager_1.GameManager.baseResponse.wins != null) {\r\n\t            this._paytable.showWins(GameManager_1.GameManager.baseResponse.wins);\r\n\t        }\r\n\t        this._controller.initIntro();\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableFreespins();\r\n\t            this._controller.startConfigurator();\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        AppContext_1.AppContext.clientHost.setLEDStripe(this.ledStripe, 2);\r\n\t        this._unColectedWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal);\r\n\t        }\r\n\t        if (long) {\r\n\t            DataManager_1.DataManager.gameState(\"PrimaryGameEnded\");\r\n\t            this._wasPrimaryGameEnded = true;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            DataManager_1.DataManager.Autoplay = this._autoplayAfterFeature;\r\n\t            this._controller.startConfigurator();\r\n\t        }\r\n\t        else {\r\n\t            this._controller.intro(long);\r\n\t        }\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.introFinished = function () {\r\n\t        if (GameManager_1.GameManager.disableOnCollect) {\r\n\t            this._autoplayAfterGamble = false;\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                GameManager_1.GameManager.disableGamePlay = true;\r\n\t            }\r\n\t        }\r\n\t        if (this._autoplayAfterGamble) {\r\n\t            DataManager_1.DataManager.Autoplay = this._autoplayAfterGamble;\r\n\t        }\r\n\t        if (this._autoplayAfterFeature) {\r\n\t            DataManager_1.DataManager.Autoplay = this._autoplayAfterFeature;\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        this._prepareNewGameRound.start(30);\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            if (this._autoplayAfterFeature) {\r\n\t                this._autoplayDelay.start(60);\r\n\t            }\r\n\t            else {\r\n\t                this.autoplay();\r\n\t            }\r\n\t            this._autoplayAfterFeature = false;\r\n\t        }\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.outro = function () {\r\n\t        this._wasPrimaryGameEnded = true;\r\n\t        this._wasGameEnded = true;\r\n\t        this._afterWinDelay.stop();\r\n\t        this._autoplayDelay.stop();\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            this._autoplayAfterFeature = this._featureAutoStarted ? DataManager_1.DataManager.Autoplay : false;\r\n\t        }\r\n\t        this._autoplayAfterGamble = DataManager_1.DataManager.Autoplay;\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        this._featureAutoStarted = false;\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            this._autoplayAfterGamble = false;\r\n\t            if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (this._userControls_supreme != null &&\r\n\t                !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        this._paytable.reset();\r\n\t        this._help.reset();\r\n\t        this._controller.outro();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.outroFinished = function () {\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            if (this._userControls != null) {\r\n\t                this._userControls.style.display = \"none\";\r\n\t            }\r\n\t            if (this._userControls_supreme != null) {\r\n\t                this._userControls_supreme.style.display = \"none\";\r\n\t            }\r\n\t            ModuleManager_1.ModuleManager.introModule(GameModules.Freespins);\r\n\t        }\r\n\t        else {\r\n\t            ModuleManager_1.ModuleManager.introModule(GameModules.Gamble);\r\n\t        }\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.prepareNewGameRound = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (GameManager_1.GameManager.disableGamePlay) {\r\n\t            DataManager_1.DataManager.gameState(\"GamePlayDisabled\");\r\n\t            return;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            if (DataManager_1.DataManager.Autoplay) {\r\n\t                DataManager_1.DataManager.gameState(\"AutoPlayEnded\");\r\n\t            }\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.limit();\r\n\t        }\r\n\t        else {\r\n\t            if (!DataManager_1.DataManager.Autoplay) {\r\n\t                var totalwin = GameManager_1.GameManager.gameResponse.totalWin > 0;\r\n\t                this.actions.changeActionStates((_a = {},\r\n\t                    _a[BaseActions_1.BaseActions.ActionAutoplay] = DataManager_1.DataManager.autoplayEnabled(),\r\n\t                    _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBaseCollect] = !DataManager_1.DataManager.GameRoundClosed,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBetCycle] = DataManager_1.DataManager.GameRoundClosed,\r\n\t                    _a[BaseActions_1.BaseActions.ActionDenomSelect] = DataManager_1.DataManager.GameRoundClosed,\r\n\t                    _a[BaseActions_1.BaseActions.ActionCoinCountSelect] = DataManager_1.DataManager.GameRoundClosed,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBetSelect] = DataManager_1.DataManager.GameRoundClosed,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSpin] = true,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSelectPayline + 1] = DataManager_1.DataManager.GameRoundClosed && !totalwin,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSelectPayline + 2] = DataManager_1.DataManager.GameRoundClosed && !totalwin,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSelectPayline + 3] = DataManager_1.DataManager.GameRoundClosed && !totalwin,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSelectPayline + 4] = DataManager_1.DataManager.GameRoundClosed && !totalwin,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSelectPayline + 5] = DataManager_1.DataManager.GameRoundClosed && !totalwin,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSelectPayline + 6] = DataManager_1.DataManager.GameRoundClosed && !totalwin,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSelectPayline + 7] = DataManager_1.DataManager.GameRoundClosed && !totalwin,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSelectPayline + 8] = DataManager_1.DataManager.GameRoundClosed && !totalwin,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSelectPayline + 9] = DataManager_1.DataManager.GameRoundClosed && !totalwin,\r\n\t                    _a\r\n\t                ));\r\n\t                this.terminalActions.changeActionStates((_b = {},\r\n\t                    _b[TerminalActions_1.TerminalActions.Payout] = GameManager_1.GameManager.canExit(),\r\n\t                    _b[TerminalActions_1.TerminalActions.BackToLobby] = GameManager_1.GameManager.canExit(),\r\n\t                    _b[TerminalActions_1.TerminalActions.StartWithCollect] = true,\r\n\t                    _b[TerminalActions_1.TerminalActions.Autoplay] = DataManager_1.DataManager.autoplayEnabled(),\r\n\t                    _b[TerminalActions_1.TerminalActions.BetOrGamble] = ModuleManager_1.ModuleManager.gambleEnabled() || DataManager_1.DataManager.GameRoundClosed,\r\n\t                    _b\r\n\t                ));\r\n\t            }\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        var _a, _b;\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.limit = function () {\r\n\t        LimitDialog_1.LimitDialog.openDialog();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this.actions.changeActionStates((_a = {},\r\n\t                _a[BaseActions_1.BaseActions.ActionAutoplay] = DataManager_1.DataManager.autoplayEnabled(),\r\n\t                _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                _a[BaseActions_1.BaseActions.ActionBaseCollect] = false,\r\n\t                _a[BaseActions_1.BaseActions.ActionBetCycle] = true,\r\n\t                _a[BaseActions_1.BaseActions.ActionDenomSelect] = true,\r\n\t                _a[BaseActions_1.BaseActions.ActionCoinCountSelect] = true,\r\n\t                _a[BaseActions_1.BaseActions.ActionBetSelect] = true,\r\n\t                _a[BaseActions_1.BaseActions.ActionSpin] = true,\r\n\t                _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                _a\r\n\t            ));\r\n\t            this.terminalActions.changeActionStates((_b = {},\r\n\t                _b[TerminalActions_1.TerminalActions.Payout] = GameManager_1.GameManager.canExit(),\r\n\t                _b[TerminalActions_1.TerminalActions.BackToLobby] = GameManager_1.GameManager.canExit(),\r\n\t                _b[TerminalActions_1.TerminalActions.StartWithCollect] = true,\r\n\t                _b[TerminalActions_1.TerminalActions.Autoplay] = DataManager_1.DataManager.autoplayEnabled(),\r\n\t                _b[TerminalActions_1.TerminalActions.BetOrGamble] = true,\r\n\t                _b\r\n\t            ));\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionStates((_c = {},\r\n\t                _c[BaseActions_1.BaseActions.ActionAutoplay] = false,\r\n\t                _c[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                _c[BaseActions_1.BaseActions.ActionBaseCollect] = true,\r\n\t                _c[BaseActions_1.BaseActions.ActionBetCycle] = false,\r\n\t                _c[BaseActions_1.BaseActions.ActionDenomSelect] = false,\r\n\t                _c[BaseActions_1.BaseActions.ActionCoinCountSelect] = false,\r\n\t                _c[BaseActions_1.BaseActions.ActionBetSelect] = false,\r\n\t                _c[BaseActions_1.BaseActions.ActionSpin] = false,\r\n\t                _c[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                _c\r\n\t            ));\r\n\t            this.terminalActions.changeActionStates((_d = {},\r\n\t                _d[TerminalActions_1.TerminalActions.Payout] = GameManager_1.GameManager.canExit(),\r\n\t                _d[TerminalActions_1.TerminalActions.BackToLobby] = GameManager_1.GameManager.canExit(),\r\n\t                _d[TerminalActions_1.TerminalActions.StartWithCollect] = true,\r\n\t                _d[TerminalActions_1.TerminalActions.Autoplay] = false,\r\n\t                _d[TerminalActions_1.TerminalActions.BetOrGamble] = false,\r\n\t                _d\r\n\t            ));\r\n\t        }\r\n\t        var _a, _b, _c, _d;\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.disable = function () {\r\n\t        if (!this._fsConfigurator.classList.contains(\"_disabled\")) {\r\n\t            this._fsConfigurator.classList.add(\"_disabled\");\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        this.actions.disableAllActions();\r\n\t        this.terminalActions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.cycleHelp = function () {\r\n\t        this._help.cycle();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.configuratorStart = function () {\r\n\t        this.disable();\r\n\t        this._enableConfiguratorButtons.start(60);\r\n\t        if (this._fsConfigurator.classList.contains(\"_disabled\")) {\r\n\t            this._fsConfigurator.classList.remove(\"_disabled\");\r\n\t        }\r\n\t        this.startFeatureAutoStart(60);\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.enableConfiguratorButtons = function () {\r\n\t        this.actions.changeActionStates((_a = {},\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 1] = true,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 2] = true,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 3] = true,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 4] = true,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 5] = true,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 6] = true,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 7] = true,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 8] = true,\r\n\t            _a[BaseActions_1.BaseActions.ActionFsConfiguratorTreasure + 9] = true,\r\n\t            _a\r\n\t        ));\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        var _a;\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.selectFromConfigurator = function (id) {\r\n\t        this._featureAutoStartTimer.stop();\r\n\t        if (!this._featureAutoStarted) {\r\n\t            ModuleManager_1.ModuleManager.setAutoplayAfterFeature(false);\r\n\t        }\r\n\t        this.disable();\r\n\t        ModuleManager_1.ModuleManager.startFreespins();\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.freeSpinsConfiguratorContinue = function () {\r\n\t        var a = 0;\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.setActiveSceneInBasegame = function (id) { };\r\n\t    FireBirdBaseUserControls.prototype.setSceneAnimations = function (sceneIndex) { };\r\n\t    FireBirdBaseUserControls.prototype.updatePaytable = function () {\r\n\t        if (this._paytable != null) {\r\n\t            this._paytable.updatePaytable();\r\n\t        }\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.setAutoplayAfterFeature = function (tf) {\r\n\t        this._autoplayAfterFeature = tf;\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.featureAutoStartDelayed = function () {\r\n\t        this._featureAutoStartTimer.stop();\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            if (AppContext_1.AppContext.gameConfiguration.FeatureAutoPick != null && AppContext_1.AppContext.gameConfiguration.FeatureAutoPick) {\r\n\t                this._featureAutoStarted = true;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.startFeatureAutoStart = function (preDuration) {\r\n\t        if (preDuration === void 0) { preDuration = 0; }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay != null && AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay > 0) {\r\n\t            this._featureAutoStartTimer.start(preDuration + AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay);\r\n\t        }\r\n\t    };\r\n\t    FireBirdBaseUserControls.prototype.primaryGameEnded = function () {\r\n\t        return this._wasPrimaryGameEnded;\r\n\t    };\r\n\t    FireBirdBaseUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], FireBirdBaseUserControls);\r\n\t    return FireBirdBaseUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.FireBirdBaseUserControls = FireBirdBaseUserControls;\r\n\n\n/***/ },\n/* 131 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar FireBirdPaytable = (function () {\r\n\t    function FireBirdPaytable() {\r\n\t        this._payoutsElements = {};\r\n\t        this._countsElements = {};\r\n\t        this._valuesElements = {};\r\n\t        this._values = {};\r\n\t    }\r\n\t    FireBirdPaytable.prototype.initialize = function () {\r\n\t        this._logo = document.getElementById(\"paytableLogo\");\r\n\t        var config = Configuration_1.Configuration.Configurations[\"PaytableConfiguration\"];\r\n\t        if (config != null) {\r\n\t            var next = config.firstElementChild;\r\n\t            while (next != null) {\r\n\t                if (next.hasAttribute(\"Symbol\")) {\r\n\t                    var id = next.getAttribute(\"Symbol\");\r\n\t                    var attrCounts = null;\r\n\t                    var attrValues = null;\r\n\t                    var payoutElement = document.getElementById(\"payout-\" + id);\r\n\t                    if (payoutElement != null) {\r\n\t                        this._payoutsElements[\"payout-\" + id] = payoutElement;\r\n\t                    }\r\n\t                    if (id === \"1\" || id === \"2\" || id === \"3\") {\r\n\t                        id = \"1_2_3\";\r\n\t                        payoutElement = document.getElementById(\"payout-\" + id);\r\n\t                        if (payoutElement != null) {\r\n\t                            this._payoutsElements[\"payout-\" + id] = payoutElement;\r\n\t                        }\r\n\t                    }\r\n\t                    else if (id === \"4\" || id === \"5\" || id === \"6\") {\r\n\t                        id = \"4_5_6\";\r\n\t                        payoutElement = document.getElementById(\"payout-\" + id);\r\n\t                        if (payoutElement != null) {\r\n\t                            this._payoutsElements[\"payout-\" + id] = payoutElement;\r\n\t                        }\r\n\t                    }\r\n\t                    var i = void 0;\r\n\t                    if (next.hasAttribute(\"Counts\")) {\r\n\t                        attrCounts = next.getAttribute(\"Counts\");\r\n\t                        var counts = next.getAttribute(\"Counts\").split(\";\");\r\n\t                        for (i = 0; i < counts.length; i++) {\r\n\t                            var countElement = document.getElementById(\"count-\" + id + \"-\" + counts[i]);\r\n\t                            if (countElement != null) {\r\n\t                                this._countsElements[\"count-\" + id + \"-\" + counts[i]] = countElement;\r\n\t                            }\r\n\t                            var countBox = document.getElementById(\"symbolCount-s\" + id + \"-\" + counts[i]);\r\n\t                            if (countBox != null) {\r\n\t                                countBox.innerHTML = counts[i];\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    if (next.hasAttribute(\"Values\")) {\r\n\t                        attrValues = next.getAttribute(\"Values\");\r\n\t                        var values = next.getAttribute(\"Values\").split(\";\");\r\n\t                        var countsForValues = next.getAttribute(\"Counts\").split(\";\");\r\n\t                        for (i = 0; i < values.length; i++) {\r\n\t                            if (countsForValues[i] != null) {\r\n\t                                var valueElement = document.getElementById(\"symbolValue-s\" + id + \"-\" + countsForValues[i]);\r\n\t                                if (valueElement != null) {\r\n\t                                    var calculateValue = void 0;\r\n\t                                    if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinCount != null) {\r\n\t                                        calculateValue = neo_common_1.NumberUtils.multiply(Number(values[i]), BetManager_1.BetManager.CoinCount);\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        calculateValue = neo_common_1.NumberUtils.multiply(Number(values[i]), BetManager_1.BetManager.Bet);\r\n\t                                    }\r\n\t                                    valueElement.innerHTML = calculateValue;\r\n\t                                    this._valuesElements[\"symbolValue-s\" + id + \"-\" + countsForValues[i]] =\r\n\t                                        valueElement;\r\n\t                                    this._values[\"symbolValue-s\" + id + \"-\" + countsForValues[i]] = values[i];\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t        }\r\n\t        this.updatePaytableData();\r\n\t    };\r\n\t    FireBirdPaytable.prototype.changeBet = function () {\r\n\t        this.reset();\r\n\t        for (var key in this._valuesElements) {\r\n\t            var calculateValue = void 0;\r\n\t            if (this._values[key] != null) {\r\n\t                var calculateValue_1 = void 0;\r\n\t                if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinCount != null) {\r\n\t                    calculateValue_1 = neo_common_1.NumberUtils.multiply(this._values[key], BetManager_1.BetManager.CoinCount);\r\n\t                }\r\n\t                else {\r\n\t                    calculateValue_1 = neo_common_1.NumberUtils.multiply(this._values[key], BetManager_1.BetManager.Bet);\r\n\t                }\r\n\t                this._valuesElements[key].innerHTML = calculateValue_1;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FireBirdPaytable.prototype.showWins = function (wins) {\r\n\t        this.reset();\r\n\t        var payoutIdsMap = neo_common_1.lodash.map(wins, function (win) { return win.payoutId; }).join(\";\");\r\n\t        var countsMap = neo_common_1.lodash.map(wins, function (win) { return win.count; }).join(\";\");\r\n\t        var symbolsMap = neo_common_1.lodash.map(wins, function (win) { return win.symbols; }).join(\";\");\r\n\t        var payoutIds = neo_common_1.ArrayUtils.numberArray(payoutIdsMap);\r\n\t        var counts = neo_common_1.ArrayUtils.numberArray(countsMap);\r\n\t        if (payoutIdsMap != \"\") {\r\n\t            for (var key in this._payoutsElements) {\r\n\t                if (!(symbolsMap.indexOf(\"13\") > -1 && key == \"payout-13\")) {\r\n\t                    this._payoutsElements[key].classList.add(\"_noWin\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < payoutIds.length; i++) {\r\n\t            var payoutId = payoutIds[i];\r\n\t            var count = counts[i];\r\n\t            if (payoutId != 13 &&\r\n\t                this._payoutsElements[\"payout-\" + payoutId] != null &&\r\n\t                !this._payoutsElements[\"payout-\" + payoutId].classList.contains(\"highlight\")) {\r\n\t                this._payoutsElements[\"payout-\" + payoutId].classList.add(\"highlight\");\r\n\t                this._payoutsElements[\"payout-\" + payoutId].classList.remove(\"_noWin\");\r\n\t            }\r\n\t            var payoutName = \"\";\r\n\t            if (payoutId === 1 || payoutId === 2 || payoutId === 3) {\r\n\t                payoutName = \"1_2_3\";\r\n\t            }\r\n\t            else if (payoutId === 4 || payoutId === 5 || payoutId === 6) {\r\n\t                payoutName = \"4_5_6\";\r\n\t            }\r\n\t            if (payoutName != \"\") {\r\n\t                if (this._countsElements[\"count-\" + payoutName + \"-\" + count] != null &&\r\n\t                    !this._countsElements[\"count-\" + payoutName + \"-\" + count].classList.contains(\"highlight\")) {\r\n\t                    this._countsElements[\"count-\" + payoutName + \"-\" + count].classList.add(\"highlight\");\r\n\t                }\r\n\t                if (this._payoutsElements[\"payout-\" + payoutName] != null &&\r\n\t                    !this._payoutsElements[\"payout-\" + payoutName].classList.contains(\"highlight\")) {\r\n\t                    this._payoutsElements[\"payout-\" + payoutName].classList.add(\"highlight\");\r\n\t                    this._payoutsElements[\"payout-\" + payoutName].classList.remove(\"_noWin\");\r\n\t                }\r\n\t            }\r\n\t            else if (count != null) {\r\n\t                if (this._countsElements[\"count-\" + payoutId + \"-\" + count] != null &&\r\n\t                    !this._countsElements[\"count-\" + payoutId + \"-\" + count].classList.contains(\"highlight\")) {\r\n\t                    this._countsElements[\"count-\" + payoutId + \"-\" + count].classList.add(\"highlight\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FireBirdPaytable.prototype.bounceLogo = function () {\r\n\t        if (this._logo != null && !this._logo.classList.contains(\"bounce\")) {\r\n\t            !this._logo.classList.add(\"bounce\");\r\n\t        }\r\n\t    };\r\n\t    FireBirdPaytable.prototype.reset = function () {\r\n\t        if (this._logo != null && this._logo.classList.contains(\"bounce\")) {\r\n\t            !this._logo.classList.remove(\"bounce\");\r\n\t        }\r\n\t        var elements = document.getElementsByClassName(\"highlight\");\r\n\t        while (elements.length > 0) {\r\n\t            elements[0].classList.remove(\"highlight\");\r\n\t        }\r\n\t        var elements = document.getElementsByClassName(\"_noWin\");\r\n\t        while (elements.length > 0) {\r\n\t            elements[0].classList.remove(\"_noWin\");\r\n\t        }\r\n\t    };\r\n\t    FireBirdPaytable.prototype.updatePaytable = function () {\r\n\t        this.updatePaytableData();\r\n\t    };\r\n\t    FireBirdPaytable.prototype.updatePaytableData = function () {\r\n\t        var config = Configuration_1.Configuration.Configurations[\"PaytableConfiguration\"];\r\n\t        if (config != null) {\r\n\t            var next = config.firstElementChild;\r\n\t            while (next != null) {\r\n\t                if (next.hasAttribute(\"Symbol\")) {\r\n\t                    var id = next.getAttribute(\"Symbol\");\r\n\t                    var i = void 0;\r\n\t                    if (next.hasAttribute(\"FreeSpins\")) {\r\n\t                        var fsCount = next.getAttribute(\"FreeSpins\");\r\n\t                        var fsCountElement = document.getElementById(\"symbolFSCount-s\" + id);\r\n\t                        if (fsCountElement != null) {\r\n\t                            fsCountElement.innerHTML = fsCountElement.innerHTML.replace(\"%s\", fsCount);\r\n\t                        }\r\n\t                    }\r\n\t                    if (next.hasAttribute(\"Multipliers\")) {\r\n\t                        var multipliers = next.getAttribute(\"Multipliers\").split(\";\");\r\n\t                        for (i = 0; i < multipliers.length; i++) {\r\n\t                            var fsCountElement = document.getElementById(\"symbolFSMultiplier-s\" + id + \"-\" + i);\r\n\t                            if (fsCountElement != null) {\r\n\t                                fsCountElement.innerHTML = fsCountElement.innerHTML.replace(\"%s\", multipliers[i]);\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    return FireBirdPaytable;\r\n\t}());\r\n\texports.FireBirdPaytable = FireBirdPaytable;\r\n\n\n/***/ },\n/* 132 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar FireBirdHelp = (function () {\r\n\t    function FireBirdHelp() {\r\n\t        this._actualHelpPage = -1;\r\n\t    }\r\n\t    FireBirdHelp.prototype.initialize = function () { };\r\n\t    FireBirdHelp.prototype.cycle = function () {\r\n\t        this._actualHelpPage++;\r\n\t        var i;\r\n\t        var elements = document.getElementsByClassName(\"helpPage\");\r\n\t        for (i = 0; i < elements.length; i++) {\r\n\t            elements[i].style.display = \"none\";\r\n\t        }\r\n\t        var pagingElements = document.getElementsByClassName(\"pageNumber\");\r\n\t        for (i = 0; i < pagingElements.length; i++) {\r\n\t            pagingElements[i].classList.remove(\"_active\");\r\n\t        }\r\n\t        var element = document.getElementById(\"help\");\r\n\t        if (element != null) {\r\n\t            element.style.display = \"block\";\r\n\t        }\r\n\t        if (elements[this._actualHelpPage] != null) {\r\n\t            elements[this._actualHelpPage].style.display = \"block\";\r\n\t            if (pagingElements[this._actualHelpPage] != null) {\r\n\t                pagingElements[this._actualHelpPage].classList.add(\"_active\");\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.reset(true);\r\n\t        }\r\n\t    };\r\n\t    FireBirdHelp.prototype.reset = function (force) {\r\n\t        if (force === void 0) { force = false; }\r\n\t        this._actualHelpPage = -1;\r\n\t        var element = document.getElementById(\"help\");\r\n\t        if (element != null) {\r\n\t            element.style.display = \"none\";\r\n\t        }\r\n\t    };\r\n\t    return FireBirdHelp;\r\n\t}());\r\n\texports.FireBirdHelp = FireBirdHelp;\r\n\n\n/***/ },\n/* 133 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar StyxClientHostEvents = (function () {\r\n\t    function StyxClientHostEvents() {\r\n\t    }\r\n\t    Object.defineProperty(StyxClientHostEvents, \"Reload\", {\r\n\t        get: function () {\r\n\t            return \"reload\";\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return StyxClientHostEvents;\r\n\t}());\r\n\texports.StyxClientHostEvents = StyxClientHostEvents;\r\n\n\n/***/ },\n/* 134 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar LimitDialog_1 = __webpack_require__(54);\r\n\tvar FreespinsController_1 = __webpack_require__(121);\r\n\tvar FreespinsActions_1 = __webpack_require__(80);\r\n\tvar ActionSet_1 = __webpack_require__(74);\r\n\tvar TerminalActions_1 = __webpack_require__(84);\r\n\tvar FireBirdHelp_1 = __webpack_require__(132);\r\n\tvar FireBirdPaytable_1 = __webpack_require__(131);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar FireBirdTypes_1 = __webpack_require__(133);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar WinType = neo_games_1.Communication.Game.WinType;\r\n\tvar FireBirdFreespinsUserControls = (function (_super) {\r\n\t    __extends(FireBirdFreespinsUserControls, _super);\r\n\t    function FireBirdFreespinsUserControls() {\r\n\t        _super.call(this, \"freespins\");\r\n\t        this._featureAutoEnded = false;\r\n\t        this._wasGameEnded = true;\r\n\t    }\r\n\t    FireBirdFreespinsUserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.ledStripes = node.hasAttribute(\"LedStripes\")\r\n\t            ? neo_common_1.ArrayUtils.stringArray(node.getAttribute(\"LedStripes\"), \"|\")\r\n\t            : [\"0;255;0\", \"0;0;255\", \"255;255;255\", \"255;0;0\", \"255;255;0\"];\r\n\t        this._terminalActions = new ActionSet_1.ActionSet(this._key + \".terminalActions\", neo_common_1.EngineComponentFactory.getComponentName(this));\r\n\t        this.registerActions();\r\n\t        this._afterWinDelay = FrameTimer_1.CreateFrameTimer(\"afterWinDelay\");\r\n\t        this._afterWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._autoplayDelay = FrameTimer_1.CreateFrameTimer(\"autoplayDelay\");\r\n\t        this._autoplayDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\r\n\t        this._backDelay = FrameTimer_1.CreateFrameTimer(\"backDelay\");\r\n\t        this._backDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.back.bind(this));\r\n\t        this._backButtonDelay = FrameTimer_1.CreateFrameTimer(\"backButtonDelay\");\r\n\t        this._backButtonDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.backButton.bind(this));\r\n\t        this._prepareNewGameRound = FrameTimer_1.CreateFrameTimer(\"prepareNewGameRound\");\r\n\t        this._prepareNewGameRound.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._featureAutoEndTimer = FrameTimer_1.CreateFrameTimer(\"featureAutoEndTimer\");\r\n\t        this._featureAutoEndTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.featureAutoEndDelayed.bind(this));\r\n\t        this._featureAutoPlayTimer = FrameTimer_1.CreateFrameTimer(\"featureAutoPlayTimer\");\r\n\t        this._featureAutoPlayTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.featureAutoPlayDelayed.bind(this));\r\n\t        this._userControls = document.getElementById(\"freespinsUserControls\");\r\n\t        this._fsMultiplier = document.getElementById(\"fsMultiplier\");\r\n\t        this._fsRetrigger = document.getElementById(\"fsRetrigger\");\r\n\t        this._wildMultiplierCountActiveDelay = FrameTimer_1.CreateFrameTimer(\"wildMultiplierCountActiveDelay\");\r\n\t        this._wildMultiplierCountActiveDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.setCountHolderActive.bind(this, this._fsMultiplier, true));\r\n\t        this.handleClientHostReload = this.handleClientHostReload.bind(this);\r\n\t        AppContext_1.AppContext.clientHost.on(FireBirdTypes_1.StyxClientHostEvents.Reload, this.handleClientHostReload);\r\n\t        var creditBox = document.getElementById(\"fsCreditBox\");\r\n\t        var betBox = document.getElementById(\"fsBetBox\");\r\n\t        if (AppContext_1.AppContext != null && AppContext_1.AppContext.gameConfiguration != null) {\r\n\t            if (creditBox != null) {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.UseCoins) {\r\n\t                    creditBox.classList.add(\"denomOn\");\r\n\t                }\r\n\t                if (AppContext_1.AppContext.gameConfiguration.HideAmountsEnabled) {\r\n\t                    creditBox.classList.add(\"hideAmountsOn\");\r\n\t                }\r\n\t            }\r\n\t            if (betBox != null) {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.HideAmountsEnabled) {\r\n\t                    betBox.classList.add(\"hideAmountsOn\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.handleClientHostReload = function () {\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            return;\r\n\t        }\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"FireBirdBaseUserControls\", \"Event 'reload' arrived, actions updated...\");\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled() || ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            this.setLedStripe(true);\r\n\t            AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(FireBirdFreespinsUserControls.prototype, \"terminalActions\", {\r\n\t        get: function () {\r\n\t            return this._terminalActions;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    FireBirdFreespinsUserControls.prototype.getAllTerminalActions = function () {\r\n\t        return this._terminalActions.getAllActions();\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.StartReceived, this.startReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.SpinReceived, this.spinReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.EndReceived, this.endReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.MachineStopped, this.machineStopped.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.OutroFinished, this.outroFinished.bind(this));\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpin] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        this.terminalActions.registerActions((_b = {},\r\n\t            _b[TerminalActions_1.TerminalActions.Payout] = false,\r\n\t            _b[TerminalActions_1.TerminalActions.BackToLobby] = false,\r\n\t            _b[TerminalActions_1.TerminalActions.StartWithCollect] = false,\r\n\t            _b[TerminalActions_1.TerminalActions.Autoplay] = false,\r\n\t            _b\r\n\t        ));\r\n\t        var _a, _b;\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.initReceived = function () {\r\n\t        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\t        _super.prototype.initReceived.call(this);\r\n\t        this._controller.initReceived();\r\n\t        this._controller.disableLogo();\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"none\";\r\n\t        }\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        this._paytable = new FireBirdPaytable_1.FireBirdPaytable();\r\n\t        this._paytable.initialize();\r\n\t        this._paytable.changeBet();\r\n\t        this._help = new FireBirdHelp_1.FireBirdHelp();\r\n\t        this._help.initialize();\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.startReceived = function (finished) {\r\n\t        if (finished) {\r\n\t            ModuleManager_1.ModuleManager.outroModule(GameModules.Base);\r\n\t        }\r\n\t        else {\r\n\t            ModuleManager_1.ModuleManager.freeSpinsConfiguratorContinue();\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.spinReceived = function () {\r\n\t        DataManager_1.DataManager.gameState(\"BonusGameStarted\");\r\n\t        if (DataManager_1.DataManager.Autoplay &&\r\n\t            AppContext_1.AppContext.gameConfiguration.AutoplayModeSpeed === \"fast\" &&\r\n\t            AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop &&\r\n\t            AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration === 0) {\r\n\t            this.stop();\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop);\r\n\t            this.terminalActions.changeActionState(TerminalActions_1.TerminalActions.StartWithCollect, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.endReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Freespins);\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (action === TerminalActions_1.TerminalActions.StartWithCollect) {\r\n\t            if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionStart)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionStart;\r\n\t            }\r\n\t            else if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionBack)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionBack;\r\n\t            }\r\n\t            else if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionSpin)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionSpin;\r\n\t            }\r\n\t            else if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionSpinStop;\r\n\t            }\r\n\t        }\r\n\t        if (action === TerminalActions_1.TerminalActions.Autoplay) {\r\n\t            if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionAutoplay)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionAutoplay;\r\n\t                this._help.reset();\r\n\t            }\r\n\t            else if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionAutoplayStop)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionAutoplayStop;\r\n\t                this._help.reset();\r\n\t            }\r\n\t        }\r\n\t        if (this.actions.getActionState(action)) {\r\n\t            _super.prototype.dispatchAction.call(this, action);\r\n\t            switch (action) {\r\n\t                case FreespinsActions_1.FreespinsActions.ActionBack:\r\n\t                    this.back();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionSpin:\r\n\t                    this.spin();\r\n\t                    this._help.reset();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionSpinStop:\r\n\t                    this.stop();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionAutoplay:\r\n\t                    this.autoplay();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionAutoplayStop:\r\n\t                    this.autoplayStop();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.start = function (id) {\r\n\t        this.actions.disableAllActions();\r\n\t        this.terminalActions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        this._controller.start(id);\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.spin = function () {\r\n\t        this._featureAutoPlayTimer.stop();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, (GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount - 1).toString());\r\n\t        this._fsRetrigger.classList.remove(\"counterFlash\");\r\n\t        this._fsMultiplier.classList.remove(\"counterFlash\");\r\n\t        this._fsMultiplier.classList.remove(\"halfTone\");\r\n\t        this.actions.disableAllActions();\r\n\t        this.terminalActions.disableAllActions();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, true);\r\n\t            this.terminalActions.changeActionState(TerminalActions_1.TerminalActions.Autoplay, true);\r\n\t        }\r\n\t        else {\r\n\t            HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gameResponse.totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gameResponse.totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        this._controller.spin();\r\n\t        this._paytable.reset();\r\n\t        this._help.reset();\r\n\t        if (!this._wasGameEnded) {\r\n\t            DataManager_1.DataManager.gameState(\"BonusGameEnded\");\r\n\t        }\r\n\t        DataManager_1.DataManager.gameState(\"BonusGameEscrow\");\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.back = function () {\r\n\t        this._featureAutoEndTimer.stop();\r\n\t        this._featureAutoPlayTimer.stop();\r\n\t        if (!this._featureAutoEnded) {\r\n\t            ModuleManager_1.ModuleManager.setAutoplayAfterFeature(false);\r\n\t        }\r\n\t        this._backDelay.stop();\r\n\t        this.disable();\r\n\t        ModuleManager_1.ModuleManager.endFreespins();\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.stop = function () {\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t        this.terminalActions.changeActionState(TerminalActions_1.TerminalActions.StartWithCollect, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        this._controller.stop();\r\n\t        this._help.reset();\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.end = function () {\r\n\t        this._controller.end();\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.autoplayDelayed = function () {\r\n\t        this._autoplayDelay.stop();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t            this.startFeatureAutoPlay();\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.autoplay = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (DataManager_1.DataManager.AutoplayCount === \"∞\") {\r\n\t            DataManager_1.DataManager.Autoplay = true;\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t            this.spin();\r\n\t        }\r\n\t        else {\r\n\t            DataManager_1.DataManager.AutoplayCount = (parseInt(DataManager_1.DataManager.AutoplayCount) - 1).toString();\r\n\t            if (parseInt(DataManager_1.DataManager.AutoplayCount) >= 0) {\r\n\t                DataManager_1.DataManager.Autoplay = true;\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t                this.spin();\r\n\t            }\r\n\t            else {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.autoplayStop = function () {\r\n\t        ModuleManager_1.ModuleManager.setAutoplayAfterFeature(false);\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, false);\r\n\t        this.terminalActions.changeActionState(TerminalActions_1.TerminalActions.Autoplay, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, false);\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.backButton = function () {\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionBack, true);\r\n\t        this.terminalActions.changeActionState(TerminalActions_1.TerminalActions.StartWithCollect, true);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionBack, true);\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.machineStopped = function () {\r\n\t        this._wasGameEnded = false;\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            DataManager_1.DataManager.gameState(\"BonusGameEnded\");\r\n\t            this._wasGameEnded = true;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.freespinsResponse.wins != null) {\r\n\t            this._paytable.showWins(GameManager_1.GameManager.freespinsResponse.wins);\r\n\t        }\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin > 0) {\r\n\t            var hasScatterFreespinWin = false;\r\n\t            for (var i = 0; i < GameManager_1.GameManager.freespinsResponse.wins.length; i++) {\r\n\t                if (GameManager_1.GameManager.freespinsResponse.wins[i].trigger === neo_games_1.Communication.Game.WinTrigger.Scatter) {\r\n\t                    if (GameManager_1.GameManager.freespinsResponse.wins[i].type === neo_games_1.Communication.Game.WinType.freeSpins) {\r\n\t                        hasScatterFreespinWin = true;\r\n\t                    }\r\n\t                }\r\n\t                else if (GameManager_1.GameManager.freespinsResponse.wins[i].trigger === neo_games_1.Communication.Game.WinTrigger.Way) {\r\n\t                    if (GameManager_1.GameManager.freespinsResponse.wins[i].type === neo_games_1.Communication.Game.WinType.Cash) {\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (hasScatterFreespinWin) {\r\n\t                this._updateRetriggerCountDelay.start(120);\r\n\t                this.setCountHolderActive(this._fsRetrigger, true);\r\n\t                if (GameManager_1.GameManager.freespinsResponse.hasOwnProperty(\"customData\") &&\r\n\t                    GameManager_1.GameManager.freespinsResponse.customData[\"wildMultiplier\"] != null) {\r\n\t                    this._afterWinDelay.start(240);\r\n\t                    this._wildMultiplierCountDelay.start(240);\r\n\t                    this._wildMultiplierCountActiveDelay.start(120);\r\n\t                }\r\n\t                else {\r\n\t                    this._afterWinDelay.start(120);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (GameManager_1.GameManager.freespinsResponse.hasOwnProperty(\"customData\") &&\r\n\t                    GameManager_1.GameManager.freespinsResponse.customData[\"wildMultiplier\"] != null) {\r\n\t                    this._afterWinDelay.start(120);\r\n\t                    this._wildMultiplierCountDelay.start(120);\r\n\t                    this.setCountHolderActive(this._fsMultiplier, true);\r\n\t                }\r\n\t                else {\r\n\t                    this._afterWinDelay.start(30);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this.isLastFreespin()) {\r\n\t            this._afterWinDelay.stop();\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            this.terminalActions.disableAllActions();\r\n\t            if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t                if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t                    if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.freespinsResponse.totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t                    }\r\n\t                    else {\r\n\t                        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t                    }\r\n\t                }\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWinDenom);\r\n\t                if (this.getRetriggerCount() > 0 && !DataManager_1.DataManager.GameLimit) {\r\n\t                    this._featureAutoEnded = true;\r\n\t                    this._backDelay.start(15);\r\n\t                }\r\n\t                else {\r\n\t                    this._backButtonDelay.start(60);\r\n\t                    this.startFeatureAutoEnd(60);\r\n\t                }\r\n\t            }\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t        this.terminalActions.changeActionState(TerminalActions_1.TerminalActions.StartWithCollect, false);\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            if (DataManager_1.DataManager.Autoplay) {\r\n\t                this._autoplayDelay.start(15);\r\n\t            }\r\n\t            else {\r\n\t                this.startFeatureAutoPlay();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.winCalculationFinished = function () {\r\n\t        this._paytable.bounceLogo();\r\n\t        this._afterWinDelay.stop();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gameResponse.totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gameResponse.totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.freespinsResponse.totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            }\r\n\t        }\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWinDenom);\r\n\t        if (this.isLastFreespin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.allWinsFinished = function () {\r\n\t        DataManager_1.DataManager.gameState(\"BonusGameEnded\");\r\n\t        this._wasGameEnded = true;\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.isLastFreespin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            if (this.getRetriggerCount() > 0 && !DataManager_1.DataManager.GameLimit) {\r\n\t                this._featureAutoEnded = true;\r\n\t                this.back();\r\n\t            }\r\n\t            else {\r\n\t                this._backButtonDelay.start(60);\r\n\t                this.startFeatureAutoEnd(60);\r\n\t            }\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        else {\r\n\t            this.startFeatureAutoPlay();\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.initIntro = function () {\r\n\t        this.setLedStripe(false);\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsMultiplier, GameManager_1.GameManager.freespinsResponse.freeSpins.multiplier.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, GameManager_1.GameManager.gameResponse.totalWin.toString());\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWin, GameManager_1.GameManager.gameResponse.totalWin.toString());\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gameResponse.totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.gameResponse.totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.freespinsResponse.totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            }\r\n\t        }\r\n\t        this._fsRetrigger.classList.remove(\"_disabled\");\r\n\t        this._fsMultiplier.classList.remove(\"_disabled\");\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWinDenom);\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (GameManager_1.GameManager.freespinsResponse.wins != null) {\r\n\t            this._paytable.showWins(GameManager_1.GameManager.freespinsResponse.wins);\r\n\t        }\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        this._controller.initIntro();\r\n\t        if (this.isLastFreespin()) {\r\n\t            this.actions.disableAllActions();\r\n\t            if (this.getRetriggerCount() > 0 && !DataManager_1.DataManager.GameLimit) {\r\n\t                this._featureAutoEnded = true;\r\n\t                this._backDelay.start(15);\r\n\t            }\r\n\t            else {\r\n\t                this._backButtonDelay.start(60);\r\n\t                this.startFeatureAutoEnd(60);\r\n\t            }\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        this.startFeatureAutoPlay();\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        DataManager_1.DataManager.gameState(\"AutoPlayEnded\");\r\n\t        this.setLedStripe(false);\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        this._fsRetrigger.classList.remove(\"_disabled\");\r\n\t        this._fsMultiplier.classList.remove(\"_disabled\");\r\n\t        this._controller.intro(long);\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.introFinished = function () {\r\n\t        this._prepareNewGameRound.start(60);\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        this.startFeatureAutoPlay();\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.outro = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        this._featureAutoEnded = false;\r\n\t        this._controller.outro();\r\n\t        this._paytable.reset();\r\n\t        this._help.reset();\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.outroFinished = function () {\r\n\t        ModuleManager_1.ModuleManager.introModule(GameModules.Base, true);\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"none\";\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.setLedStripe = function (quick) {\r\n\t        var mode = quick ? 0 : 2;\r\n\t        if (GameManager_1.GameManager.freespinsResponse.hasOwnProperty(\"customData\") &&\r\n\t            GameManager_1.GameManager.freespinsResponse.customData[\"selectedSymbol\"] != null) {\r\n\t            switch (GameManager_1.GameManager.freespinsResponse.customData[\"selectedSymbol\"]) {\r\n\t                case 7:\r\n\t                    AppContext_1.AppContext.clientHost.setLEDStripe(this.ledStripes[0], mode);\r\n\t                    return;\r\n\t                case 8:\r\n\t                    AppContext_1.AppContext.clientHost.setLEDStripe(this.ledStripes[1], mode);\r\n\t                    return;\r\n\t                case 9:\r\n\t                    AppContext_1.AppContext.clientHost.setLEDStripe(this.ledStripes[2], mode);\r\n\t                    return;\r\n\t                case 10:\r\n\t                    AppContext_1.AppContext.clientHost.setLEDStripe(this.ledStripes[3], mode);\r\n\t                    return;\r\n\t                case 11:\r\n\t                    AppContext_1.AppContext.clientHost.setLEDStripe(this.ledStripes[4], mode);\r\n\t                    return;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.setCountHolderActive = function (elem, active) {\r\n\t        if (elem != null) {\r\n\t            if (active) {\r\n\t                elem.classList.add(\"_active\");\r\n\t            }\r\n\t            else {\r\n\t                elem.classList.remove(\"_active\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.prepareNewGameRound = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWinDenom, parseInt(neo_common_1.NumberUtils.devide(GameManager_1.GameManager.freespinsResponse.totalWin, BetManager_1.BetManager.CoinSize).toString()).toString());\r\n\t            }\r\n\t            else {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t            }\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWinDenom);\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.limit();\r\n\t        }\r\n\t        else {\r\n\t            if (!DataManager_1.DataManager.Autoplay) {\r\n\t                this.actions.changeActionStates((_a = {},\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = !DataManager_1.DataManager.Autoplay && DataManager_1.DataManager.autoplayEnabled(),\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = DataManager_1.DataManager.Autoplay && DataManager_1.DataManager.autoplayEnabled(),\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionSpin] = true,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t                    _a\r\n\t                ));\r\n\t                this.terminalActions.changeActionStates((_b = {},\r\n\t                    _b[TerminalActions_1.TerminalActions.StartWithCollect] = true,\r\n\t                    _b[TerminalActions_1.TerminalActions.Autoplay] = !DataManager_1.DataManager.Autoplay && DataManager_1.DataManager.autoplayEnabled(),\r\n\t                    _b\r\n\t                ));\r\n\t            }\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        var _a, _b;\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.limit = function () {\r\n\t        LimitDialog_1.LimitDialog.openDialog();\r\n\t        this.actions.changeActionStates((_a = {},\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpin] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        this.terminalActions.changeActionStates((_b = {},\r\n\t            _b[TerminalActions_1.TerminalActions.StartWithCollect] = false,\r\n\t            _b[TerminalActions_1.TerminalActions.Autoplay] = false,\r\n\t            _b\r\n\t        ));\r\n\t        var _a, _b;\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.enable = function () {\r\n\t        DataManager_1.DataManager.gameState(\"BonusGameTriggered\");\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinsCount, GameManager_1.GameManager.freespinsResponse.freeSpins.totalCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsCount, GameManager_1.GameManager.freespinsResponse.freeSpins.totalCount.toString());\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionStart, true);\r\n\t        this.terminalActions.changeActionState(TerminalActions_1.TerminalActions.StartWithCollect, true);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionStart, true);\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        this._controller.enable();\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.disable = function () {\r\n\t        this.actions.disableAllActions();\r\n\t        this.terminalActions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.isLastFreespin = function () {\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            this.limit();\r\n\t            return true;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.freespinsResponse.freeSpins != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount === 0) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.cycleHelp = function () {\r\n\t        this._help.cycle();\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.getRetriggerCount = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse.hasOwnProperty(\"customData\") &&\r\n\t            GameManager_1.GameManager.freespinsResponse.customData[\"retriggerCount\"] != null) {\r\n\t            return GameManager_1.GameManager.freespinsResponse.customData[\"retriggerCount\"];\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.featureAutoEndDelayed = function () {\r\n\t        this._featureAutoEndTimer.stop();\r\n\t        this._featureAutoEnded = true;\r\n\t        this.dispatchAction(FreespinsActions_1.FreespinsActions.ActionBack);\r\n\t        if (false) {\r\n\t            this.log(\"INFO featureAutoEndDelayed ActionBack\");\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.featureAutoPlayDelayed = function () {\r\n\t        this._featureAutoPlayTimer.stop();\r\n\t        this.dispatchAction(FreespinsActions_1.FreespinsActions.ActionAutoplay);\r\n\t        if (false) {\r\n\t            this.log(\"INFO featureAutoPlayDelayed ActionAutoplay\");\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.startFeatureAutoEnd = function (preDuration) {\r\n\t        if (preDuration === void 0) { preDuration = 0; }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay != null && AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay > 0) {\r\n\t            this._featureAutoEndTimer.start(preDuration + AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay);\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.startFeatureAutoPlay = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay != null && AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay > 0) {\r\n\t            this._featureAutoPlayTimer.start(AppContext_1.AppContext.gameConfiguration.FeatureAutoPlay);\r\n\t        }\r\n\t    };\r\n\t    FireBirdFreespinsUserControls.prototype.freeSpinsStartButton = function () {\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionStart, true);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionStart, true);\r\n\t    };\r\n\t    FireBirdFreespinsUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], FireBirdFreespinsUserControls);\r\n\t    return FireBirdFreespinsUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.FireBirdFreespinsUserControls = FireBirdFreespinsUserControls;\r\n\n\n/***/ },\n/* 135 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar GambleActions_1 = __webpack_require__(81);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GambleUserControls_1 = __webpack_require__(85);\r\n\tvar ActionSet_1 = __webpack_require__(74);\r\n\tvar TerminalActions_1 = __webpack_require__(84);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar FireBirdTypes_1 = __webpack_require__(133);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar FireBirdGambleUserControls = (function (_super) {\r\n\t    __extends(FireBirdGambleUserControls, _super);\r\n\t    function FireBirdGambleUserControls() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    FireBirdGambleUserControls.prototype.create = function (node) {\r\n\t        this._terminalActions = new ActionSet_1.ActionSet(this._key + \".terminalActions\", neo_common_1.EngineComponentFactory.getComponentName(this));\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.ledStripe = node.hasAttribute(\"LedStripe\") ? node.getAttribute(\"LedStripe\") : \"255;255;255\";\r\n\t        this.handleClientHostReload = this.handleClientHostReload.bind(this);\r\n\t        AppContext_1.AppContext.clientHost.on(FireBirdTypes_1.StyxClientHostEvents.Reload, this.handleClientHostReload);\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.handleClientHostReload = function () {\r\n\t        if (!ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            return;\r\n\t        }\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"FireBirdGambleUserControls\", \"Event 'reload' arrived, actions updated...\");\r\n\t        }\r\n\t        AppContext_1.AppContext.clientHost.setLEDStripe(this.ledStripe, 0);\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t    };\r\n\t    Object.defineProperty(FireBirdGambleUserControls.prototype, \"terminalActions\", {\r\n\t        get: function () {\r\n\t            return this._terminalActions;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    FireBirdGambleUserControls.prototype.getAllTerminalActions = function () {\r\n\t        return this._terminalActions.getAllActions();\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.registerActions = function () {\r\n\t        _super.prototype.registerActions.call(this);\r\n\t        this.terminalActions.registerActions((_a = {},\r\n\t            _a[TerminalActions_1.TerminalActions.Payout] = false,\r\n\t            _a[TerminalActions_1.TerminalActions.BackToLobby] = false,\r\n\t            _a[TerminalActions_1.TerminalActions.StartWithCollect] = false,\r\n\t            _a[TerminalActions_1.TerminalActions.ActionLeft] = false,\r\n\t            _a[TerminalActions_1.TerminalActions.ActionRight] = false,\r\n\t            _a[TerminalActions_1.TerminalActions.BetOrGamble] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (action === TerminalActions_1.TerminalActions.StartWithCollect) {\r\n\t            if (this.actions.getActionState(GambleActions_1.GambleActions.ActionGambleCollect)) {\r\n\t                action = GambleActions_1.GambleActions.ActionGambleCollect;\r\n\t            }\r\n\t        }\r\n\t        if (action === TerminalActions_1.TerminalActions.BetOrGamble) {\r\n\t            if (this.actions.getActionState(GambleActions_1.GambleActions.ActionGambleStart)) {\r\n\t                action = GambleActions_1.GambleActions.ActionGambleStart;\r\n\t            }\r\n\t        }\r\n\t        if (action === TerminalActions_1.TerminalActions.ActionLeft) {\r\n\t            if (this.actions.getActionState(GambleActions_1.GambleActions.ActionGambleRed)) {\r\n\t                action = GambleActions_1.GambleActions.ActionGambleRed;\r\n\t            }\r\n\t        }\r\n\t        if (action === TerminalActions_1.TerminalActions.ActionRight) {\r\n\t            if (this.actions.getActionState(GambleActions_1.GambleActions.ActionGambleBlack)) {\r\n\t                action = GambleActions_1.GambleActions.ActionGambleBlack;\r\n\t            }\r\n\t        }\r\n\t        _super.prototype.dispatchAction.call(this, action);\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.prepareNewGameRound = function () {\r\n\t        _super.prototype.prepareNewGameRound.call(this);\r\n\t        if (!DataManager_1.DataManager.GameLimit) {\r\n\t            var softLimit = false;\r\n\t            if (GameManager_1.GameManager.gambleResponse.colorWin === 0) {\r\n\t                softLimit = true;\r\n\t            }\r\n\t            this.terminalActions.changeActionStates((_a = {},\r\n\t                _a[TerminalActions_1.TerminalActions.StartWithCollect] = true,\r\n\t                _a[TerminalActions_1.TerminalActions.ActionLeft] = !softLimit,\r\n\t                _a[TerminalActions_1.TerminalActions.ActionRight] = !softLimit,\r\n\t                _a[TerminalActions_1.TerminalActions.BetOrGamble] = false,\r\n\t                _a\r\n\t            ));\r\n\t        }\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        var _a;\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.initIntro = function () {\r\n\t        AppContext_1.AppContext.clientHost.setLEDStripe(this.ledStripe, 2);\r\n\t        _super.prototype.initIntro.call(this);\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.intro = function () {\r\n\t        AppContext_1.AppContext.clientHost.setLEDStripe(this.ledStripe, 2);\r\n\t        _super.prototype.intro.call(this);\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.outro = function () {\r\n\t        _super.prototype.outro.call(this);\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.outroFinished = function () {\r\n\t        _super.prototype.outroFinished.call(this);\r\n\t        GameManager_1.GameManager.dontEnableGamePlay = false;\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.collect = function () {\r\n\t        GameManager_1.GameManager.dontEnableGamePlay = true;\r\n\t        _super.prototype.collect.call(this);\r\n\t        DataManager_1.DataManager.gameState(\"SecondaryGameCollectEscrow\");\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.start = function () {\r\n\t        if (!ModuleManager_1.ModuleManager.primaryGameEnded()) {\r\n\t            DataManager_1.DataManager.gameState(\"PrimaryGameEnded\");\r\n\t        }\r\n\t        _super.prototype.start.call(this);\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.halve = function () {\r\n\t        _super.prototype.halve.call(this);\r\n\t        DataManager_1.DataManager.gameState(\"SecondaryGameHalved\");\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.select = function (color) {\r\n\t        GameManager_1.GameManager.dontEnableGamePlay = true;\r\n\t        _super.prototype.select.call(this, color);\r\n\t        DataManager_1.DataManager.gameState(\"SecondaryGameEscrow\");\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.lose = function () {\r\n\t        DataManager_1.DataManager.gameState(\"SecondaryGameEnded\");\r\n\t        DataManager_1.DataManager.gameState(\"GameEnded\");\r\n\t        _super.prototype.lose.call(this);\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.startReceived = function () {\r\n\t        _super.prototype.startReceived.call(this);\r\n\t        DataManager_1.DataManager.gameState(\"SecondaryGameEntered\");\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.halveReceived = function () {\r\n\t        _super.prototype.halveReceived.call(this);\r\n\t        DataManager_1.DataManager.gameState(\"SecondaryGameEntered\");\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.selectReceived = function () {\r\n\t        _super.prototype.selectReceived.call(this);\r\n\t        DataManager_1.DataManager.gameState(\"SecondaryGameStarted\");\r\n\t        if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t            DataManager_1.DataManager.gameState(\"SecondaryGameEntered\");\r\n\t        }\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.collectReceived = function () {\r\n\t        DataManager_1.DataManager.gameState(\"SecondaryGameEnded\");\r\n\t        DataManager_1.DataManager.gameState(\"GameEnded\");\r\n\t        _super.prototype.collectReceived.call(this);\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.limit = function () {\r\n\t        _super.prototype.limit.call(this);\r\n\t        this.terminalActions.changeActionStates((_a = {},\r\n\t            _a[TerminalActions_1.TerminalActions.StartWithCollect] = true,\r\n\t            _a[TerminalActions_1.TerminalActions.ActionLeft] = false,\r\n\t            _a[TerminalActions_1.TerminalActions.ActionRight] = false,\r\n\t            _a[TerminalActions_1.TerminalActions.BetOrGamble] = false,\r\n\t            _a\r\n\t        ));\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t        var _a;\r\n\t    };\r\n\t    FireBirdGambleUserControls.prototype.disable = function () {\r\n\t        _super.prototype.disable.call(this);\r\n\t        this.terminalActions.disableAllActions();\r\n\t        AppContext_1.AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\r\n\t    };\r\n\t    FireBirdGambleUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], FireBirdGambleUserControls);\r\n\t    return FireBirdGambleUserControls;\r\n\t}(GambleUserControls_1.GambleUserControls));\r\n\texports.FireBirdGambleUserControls = FireBirdGambleUserControls;\r\n\n\n/***/ },\n/* 136 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar BaseActions_1 = __webpack_require__(46);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar Paytable_1 = __webpack_require__(51);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar GameActions_1 = __webpack_require__(82);\r\n\tvar BaseController_1 = __webpack_require__(92);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar LimitDialog_1 = __webpack_require__(54);\r\n\tvar ResponsibleDialog1_1 = __webpack_require__(43);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar FreeRoundBonusIcon_1 = __webpack_require__(42);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar MobileBaseUserControls = (function (_super) {\r\n\t    __extends(MobileBaseUserControls, _super);\r\n\t    function MobileBaseUserControls() {\r\n\t        _super.call(this, \"base\");\r\n\t        this._wasCalclulated = true;\r\n\t        this._unColectedWin = 0;\r\n\t        this._machineStopped = true;\r\n\t        this.longIntro = false;\r\n\t    }\r\n\t    MobileBaseUserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.registerActions();\r\n\t        this._afterWinDelay = FrameTimer_1.CreateFrameTimer(\"afterWinDelay\");\r\n\t        this._afterWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._autoplayDelay = FrameTimer_1.CreateFrameTimer(\"autoplayDelay\");\r\n\t        this._autoplayDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\r\n\t        this._unColectedWinDelay = FrameTimer_1.CreateFrameTimer(\"unColectedWinDelay\");\r\n\t        this._unColectedWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.unColectedWinDelay.bind(this));\r\n\t        this._userControls = document.getElementById(\"userControls\");\r\n\t        this._fsUserControls = document.getElementById(\"freespinsUserControls\");\r\n\t        this._betSettings = document.getElementById(\"betSettings\");\r\n\t        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        this._prepareNewGameRound = FrameTimer_1.CreateFrameTimer(\"prepareNewGameRound\");\r\n\t        this._prepareNewGameRound.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._userControlsShowDelay = FrameTimer_1.CreateFrameTimer(\"userControlsShowDelay\");\r\n\t        this._userControlsShowDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.userControlsShowDelay.bind(this));\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(BaseController_1.BaseController.SpinReceived, this.spinReceived.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.MachineStopped, this.machineStopped.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.OutroFinished, this.outroFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.QuickWinCalculationFinished, this.quickWinCalculationFinished.bind(this));\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[BaseActions_1.BaseActions.ActionAutoplay] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBaseCollect] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBetCycle] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBetPlus] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionBetMinus] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSpin] = false,\r\n\t            _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        var _a;\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.initReceived = function () {\r\n\t        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\t        _super.prototype.initReceived.call(this);\r\n\t        this._controller.initReceived();\r\n\t        this._paytable = new Paytable_1.Paytable();\r\n\t        this._paytable.initialize();\r\n\t        if (GameManager_1.GameManager.gameResponse != null) {\r\n\t            if (!(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t                DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataTotalWin, GameManager_1.GameManager.gameResponse.totalWin.toString());\r\n\t            }\r\n\t        }\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.collectReceived = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t        neo_games_1.Platforms.Platforms.roundEnded({\r\n\t            id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t            win: this._unColectedWin,\r\n\t            balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t        });\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: GameManager_1.GameManager.gameResponse.balance.real });\r\n\t        _super.prototype.collectReceived.call(this);\r\n\t        this._wasCalclulated = true;\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t        this.prepareNewGameRound();\r\n\t        if (AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin && this._unColectedWin > 0) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, this._unColectedWin.toString());\r\n\t            this.changeWinBox(true);\r\n\t        }\r\n\t        else {\r\n\t            if (!(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            }\r\n\t            this.changeWinBox();\r\n\t        }\r\n\t        this._unColectedWinDelay.stop();\r\n\t        this._unColectedWin = 0;\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            return;\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.restoreGameRound = function (collect) {\r\n\t        if (collect === void 0) { collect = false; }\r\n\t        _super.prototype.collectReceived.call(this);\r\n\t        this.changeWinBox(collect);\r\n\t        FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        if (this._unColectedWin == 0) {\r\n\t            this._controller.resetWinAnimator();\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.spinReceived = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.frbSpin();\r\n\t        if (DataManager_1.DataManager.quickspinEnabled()) {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataRoundId);\r\n\t            this._controller.stop();\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataRoundId);\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive() || ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            return;\r\n\t        }\r\n\t        if (action === GameActions_1.GameActions.ActionSpinOrStop) {\r\n\t            if (this.actions.getActionState(BaseActions_1.BaseActions.ActionSpin)) {\r\n\t                action = BaseActions_1.BaseActions.ActionSpin;\r\n\t            }\r\n\t            else if (this.actions.getActionState(BaseActions_1.BaseActions.ActionSpinStop)) {\r\n\t                action = BaseActions_1.BaseActions.ActionSpinStop;\r\n\t            }\r\n\t            else {\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (this.actions.getActionState(action)) {\r\n\t            if (action === BaseActions_1.BaseActions.ActionBaseCollect) {\r\n\t                this.changeWinBox(true);\r\n\t            }\r\n\t            else {\r\n\t                this.changeWinBox();\r\n\t            }\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            _super.prototype.dispatchAction.call(this, action);\r\n\t            switch (action) {\r\n\t                case BaseActions_1.BaseActions.ActionSpin:\r\n\t                    this.spin();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionSpinStop:\r\n\t                    this.stop();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionAutoplay:\r\n\t                    this.autoplay();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionAutoplayStop:\r\n\t                    this.autoplayStop();\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBetCycle:\r\n\t                    this.changeBet(false, false, true);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBetPlus:\r\n\t                    this.changeBet(false, false, false);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBetMinus:\r\n\t                    this.changeBet(true, false, false);\r\n\t                    break;\r\n\t                case BaseActions_1.BaseActions.ActionBaseCollect:\r\n\t                    this.collect();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.collect = function () {\r\n\t        if (!this._wasCalclulated) {\r\n\t            if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0) {\r\n\t                neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t            }\r\n\t        }\r\n\t        _super.prototype.collect.call(this);\r\n\t        ModuleManager_1.ModuleManager.disableGamble();\r\n\t        this.disable();\r\n\t        this.playCollectSound();\r\n\t        this._controller.collect();\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        GameManager_1.GameManager.collect(GameModules.Base);\r\n\t        if (!(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, !AppContext_1.AppContext.gameDefinition.Gamble ? \"0\" : this._unColectedWin.toString());\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.unColectedWinDelay = function () {\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.spin = function () {\r\n\t        this._machineStopped = false;\r\n\t        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.hasNewActiveOffer()) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0 && !DataManager_1.DataManager.GameRoundClosed) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            else {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (this.checkJackpotMiniGame()) {\r\n\t            return;\r\n\t        }\r\n\t        if (ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect &&\r\n\t            !(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            else {\r\n\t                GameManager_1.GameManager.canExit();\r\n\t                this.changeWinBox();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (BetHigherThanMinDialog_1.BetHigherThanMinDialog.canOpenDialog()) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            BetHigherThanMinDialog_1.BetHigherThanMinDialog.openDialog();\r\n\t            return;\r\n\t        }\r\n\t        if (Paytable_1.Paytable.shouldOpen(true, true)) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox(true);\r\n\t                this.collect();\r\n\t            }\r\n\t            else {\r\n\t                Paytable_1.Paytable.show();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (!DataManager_1.DataManager.Autoplay &&\r\n\t            !this._wasCalclulated &&\r\n\t            !DataManager_1.DataManager.GameRoundClosed &&\r\n\t            AppContext_1.AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n\t            this.changeWinBox(true);\r\n\t            this.collect();\r\n\t            return;\r\n\t        }\r\n\t        else {\r\n\t            this.changeWinBox();\r\n\t            if (!this._wasCalclulated) {\r\n\t                if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0) {\r\n\t                    neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (GameManager_1.GameManager.gameResponse.totalWin > 0 && !DataManager_1.DataManager.GameRoundClosed) {\r\n\t            var balanceTotal = parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal));\r\n\t            var balanceAfter = parseFloat(neo_common_1.NumberUtils.add(GameManager_1.GameManager.gameResponse.totalWin, balanceTotal));\r\n\t            neo_games_1.Platforms.Platforms.roundEnded({\r\n\t                id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t                win: GameManager_1.GameManager.gameResponse.totalWin,\r\n\t                balanceAfter: balanceAfter,\r\n\t                inSpin: true,\r\n\t            });\r\n\t        }\r\n\t        if (!neo_games_1.Platforms.Platforms.canSpinOnCollect) {\r\n\t            this.autoplayStop();\r\n\t            this.changeWinBox(true);\r\n\t            this.collect();\r\n\t            return;\r\n\t        }\r\n\t        if (!BalanceManager_1.BalanceManager.hasCredit(false, true)) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            ModuleManager_1.ModuleManager.disableGamble();\r\n\t            this.prepareNewGameRound();\r\n\t            return;\r\n\t        }\r\n\t        DataManager_1.DataManager.Collectable = false;\r\n\t        ModuleManager_1.ModuleManager.disableGamble();\r\n\t        this.actions.disableAllActions();\r\n\t        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            if (!DataManager_1.DataManager.AutoplayStarted &&\r\n\t                GameManager_1.GameManager.baseResponse != null &&\r\n\t                GameManager_1.GameManager.baseResponse.totalWin != null &&\r\n\t                GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t                DataManager_1.DataManager.updateLossLimit(GameManager_1.GameManager.baseResponse.totalWin);\r\n\t            }\r\n\t            DataManager_1.DataManager.updateLossLimit();\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionAutoplayStop, DataManager_1.DataManager.autoplayEnabled());\r\n\t        }\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this.playCollectSound();\r\n\t        DataManager_1.DataManager.updateTotalGain(true);\r\n\t        BalanceManager_1.BalanceManager.fixBalance();\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed || (FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        }\r\n\t        this._controller.spin();\r\n\t        LimitDialog_1.LimitDialog.closeDialog();\r\n\t        this._wasCalclulated = false;\r\n\t        neo_games_1.Platforms.Platforms.roundStarted({\r\n\t            totalBet: BetManager_1.BetManager.Bet,\r\n\t            freeRound: FreeRoundBonus_1.FreeRoundBonus.inFrb,\r\n\t            userAction: DataManager_1.DataManager.getTrustedUserAction(BaseActions_1.BaseActions.ActionSpin),\r\n\t        });\r\n\t        neo_games_1.Platforms.Platforms.spinStarted();\r\n\t        neo_games_1.Platforms.Platforms.balanceUpdated({ amount: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)) });\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.stop = function () {\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        DataManager_1.DataManager.quickspinStopped();\r\n\t        this._controller.stop();\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.autoplayDelayed = function () {\r\n\t        this._autoplayDelay.stop();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.autoplay = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.checkJackpotMiniGame()) {\r\n\t            return;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.AutoplayCount === \"∞\") {\r\n\t            DataManager_1.DataManager.Autoplay = true;\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t            this.spin();\r\n\t        }\r\n\t        else {\r\n\t            DataManager_1.DataManager.AutoplayCount = (parseInt(DataManager_1.DataManager.AutoplayCount) - 1).toString();\r\n\t            if (parseInt(DataManager_1.DataManager.AutoplayCount) >= 0) {\r\n\t                DataManager_1.DataManager.Autoplay = true;\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t                this.spin();\r\n\t            }\r\n\t            else {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.autoplayStop = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        neo_games_1.Platforms.Platforms.autoplayStop();\r\n\t        if (this._machineStopped) {\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t                neo_games_1.Platforms.Platforms.roundEnded();\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                    FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t                    ModuleManager_1.ModuleManager.disableBase();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionAutoplayStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionAutoplayStop, false);\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.changeBet = function (decrease, max, cycle) {\r\n\t        if (decrease === void 0) { decrease = false; }\r\n\t        if (max === void 0) { max = false; }\r\n\t        if (cycle === void 0) { cycle = false; }\r\n\t        if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this._unColectedWin = 0;\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            this.changeWinBox();\r\n\t            this.collect();\r\n\t        }\r\n\t        else {\r\n\t            this._controller.collect();\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal);\r\n\t            LimitDialog_1.LimitDialog.closeDialog();\r\n\t        }\r\n\t        BetManager_1.BetManager.changeBet(decrease, max, cycle);\r\n\t        this._paytable.updateDataValues();\r\n\t        if (BetManager_1.BetManager.minBet) {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetMinus, false);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetMinus, false);\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t        }\r\n\t        else if (BetManager_1.BetManager.maxBet) {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetPlus, false);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetPlus, false);\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetPlus, true);\r\n\t            this.actions.changeActionState(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t            HtmlController_1.HtmlController.updateActionElement(BaseActions_1.BaseActions.ActionBetMinus, true);\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.machineStopped = function (isHighWin) {\r\n\t        this._machineStopped = true;\r\n\t        neo_games_1.Platforms.Platforms.spinEnded();\r\n\t        DataManager_1.DataManager.stopAutoplayIfLossLimit();\r\n\t        DataManager_1.DataManager.stopAutoplayIfWinLimit();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t            neo_games_1.Platforms.Platforms.roundEnded({\r\n\t                id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t                win: GameManager_1.GameManager.gameResponse.totalWin,\r\n\t                balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t            });\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        this._unColectedWinDelay.stop();\r\n\t        this._unColectedWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.pickEnabled()) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            if (DataManager_1.DataManager.AutoplayCount === 0 + \"\") {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t            }\r\n\t        }\r\n\t        if (GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            this._wasCalclulated = true;\r\n\t            DataManager_1.DataManager.Collectable = true;\r\n\t        }\r\n\t        else {\r\n\t            this._wasCalclulated = false;\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t        this._afterWinDelay.stop();\r\n\t        if (isHighWin) {\r\n\t            this._afterWinDelay.start(80);\r\n\t        }\r\n\t        else {\r\n\t            if (GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t                this._afterWinDelay.start(30);\r\n\t            }\r\n\t            else {\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        if (DataManager_1.DataManager.Autoplay && GameManager_1.GameManager.baseResponse.totalWin === 0) {\r\n\t            this._autoplayDelay.start(15);\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                this.disableAllActions();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed &&\r\n\t                GameManager_1.GameManager.baseResponse.totalWin > 0 &&\r\n\t                GameManager_1.GameManager.baseResponse.currentWin === 0) {\r\n\t                this._controller.resetWinAnimator();\r\n\t                this.collect();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                GameManager_1.GameManager.canExit();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.quickWinCalculationFinished = function () {\r\n\t        if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t        }\r\n\t        this._wasCalclulated = true;\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.winCalculationFinished = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            neo_games_1.Platforms.Platforms.roundEnded({\r\n\t                id: GameManager_1.GameManager.gameResponse.roundId,\r\n\t                win: GameManager_1.GameManager.gameResponse.totalWin,\r\n\t                balanceAfter: parseFloat(DataManager_1.DataManager.getDataById(GameData_1.GameData.DataBalanceTotal)),\r\n\t            });\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.pickEnabled()) {\r\n\t            return;\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && !(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t            DataManager_1.DataManager.updateDataElements();\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        this.prepareNewGameRound();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            if (!ModuleManager_1.ModuleManager.gambleEnabled()) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t            }\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                this.disableAllActions();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableFrbExpiration();\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.allWinsFinished = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.enableFrbExpiration();\r\n\t        if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.baseResponse.currentWin);\r\n\t        }\r\n\t        this._wasCalclulated = true;\r\n\t        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableFreespins();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.pickEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enablePick();\r\n\t            this.disable();\r\n\t            return;\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        this.prepareNewGameRound();\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        if (DataManager_1.DataManager.Autoplay && this.actions.getActionState(BaseActions_1.BaseActions.ActionAutoplayStop)) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                this._controller.resetWinAnimator();\r\n\t                FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t                this._controller.resetWinAnimator();\r\n\t                this.collect();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.initIntro = function () {\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        this._controller.initIntro();\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableFreespins();\r\n\t            this._controller.startConfigurator();\r\n\t            return;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.pickEnabled()) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        this._unColectedWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        this._wasCalclulated = true;\r\n\t        this._unColectedWin = GameManager_1.GameManager.gameResponse.totalWin;\r\n\t        this.longIntro = long;\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceBonus);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceReal);\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBalanceTotal);\r\n\t            DataManager_1.DataManager.Collectable = true;\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            this._controller.startConfigurator();\r\n\t        }\r\n\t        else {\r\n\t            this._controller.intro(long);\r\n\t        }\r\n\t        this._userControlsShowDelay.start(10);\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.introFinished = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            neo_games_1.Platforms.Platforms.roundEnded();\r\n\t        }\r\n\t        if (!ResponsibleDialog1_1.ResponsibleDialog1.opened) {\r\n\t            DataManager_1.DataManager.Autoplay = DataManager_1.DataManager.AutoplayAfterGamble;\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.enableGamble();\r\n\t        this._prepareNewGameRound.start(30);\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        this._userControlsShowDelay.start(10);\r\n\t        if (this.longIntro &&\r\n\t            DataManager_1.DataManager.GameRoundClosed &&\r\n\t            (FreeRoundBonus_1.FreeRoundBonus.id != null || FreeRoundBonus_1.FreeRoundBonus.otherOfferes.length > 0)) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t            this.longIntro = false;\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this._prepareNewGameRound.stop();\r\n\t            FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            return;\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this._prepareNewGameRound.stop();\r\n\t                ModuleManager_1.ModuleManager.collect(GameModules.Base);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.outro = function () {\r\n\t        if (!this._wasCalclulated) {\r\n\t            if (GameManager_1.GameManager.gameResponse != null && GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.gameResponse.totalWin);\r\n\t            }\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        this._autoplayDelay.stop();\r\n\t        DataManager_1.DataManager.AutoplayAfterGamble = DataManager_1.DataManager.Autoplay;\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            DataManager_1.DataManager.AutoplayAfterGamble = false;\r\n\t            if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (this._fsUserControls != null &&\r\n\t                !this._fsUserControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._fsUserControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (this._userControls_supreme != null &&\r\n\t                !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        else if (ModuleManager_1.ModuleManager.introModule(GameModules.Pick)) {\r\n\t            ModuleManager_1.ModuleManager.introModule(GameModules.Pick);\r\n\t        }\r\n\t        this._controller.outro();\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.setAutoplayAfterFeature = function (value) {\r\n\t        DataManager_1.DataManager.AutoplayAfterGamble = value;\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.outroFinished = function () {\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (this._userControls_supreme != null &&\r\n\t                !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            ModuleManager_1.ModuleManager.introModule(GameModules.Freespins);\r\n\t        }\r\n\t        else if (ModuleManager_1.ModuleManager.pickActive()) {\r\n\t        }\r\n\t        else {\r\n\t            ModuleManager_1.ModuleManager.introModule(GameModules.Gamble);\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.prepareNewGameRound = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.prepareJackpotMiniGame()) {\r\n\t            return;\r\n\t        }\r\n\t        if (ResponsibleDialog1_1.ResponsibleDialog1.opened) {\r\n\t            return;\r\n\t        }\r\n\t        BetHigherThanMinDialog_1.BetHigherThanMinDialog.openDialog();\r\n\t        Paytable_1.Paytable.openAtStart(true);\r\n\t        if (BetHigherThanMinDialog_1.BetHigherThanMinDialog.canOpenDialog() && FreeRoundBonusDialog_1.FreeRoundBonusDialog.dialogActive()) {\r\n\t            return;\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.limit();\r\n\t        }\r\n\t        else {\r\n\t            if (!DataManager_1.DataManager.Autoplay) {\r\n\t                this.actions.changeActionStates((_a = {},\r\n\t                    _a[BaseActions_1.BaseActions.ActionAutoplay] = (DataManager_1.DataManager.GameRoundClosed ||\r\n\t                        (FreeRoundBonus_1.FreeRoundBonus.inFrb &&\r\n\t                            FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\" &&\r\n\t                            !FreeRoundBonus_1.FreeRoundBonus.isLastFrb)) &&\r\n\t                        DataManager_1.DataManager.autoplayEnabled(),\r\n\t                    _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBaseCollect] = FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\"\r\n\t                        ? false\r\n\t                        : !DataManager_1.DataManager.GameRoundClosed,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBetCycle] = !ModuleManager_1.ModuleManager.gambleEnabled(),\r\n\t                    _a[BaseActions_1.BaseActions.ActionBetPlus] = !BetManager_1.BetManager.maxBet,\r\n\t                    _a[BaseActions_1.BaseActions.ActionBetMinus] = !BetManager_1.BetManager.minBet,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSpin] = !FreeRoundBonus_1.FreeRoundBonus.isLastFrb,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                    _a\r\n\t                ));\r\n\t                if (this._betSettings != null) {\r\n\t                    if (!ModuleManager_1.ModuleManager.gambleEnabled()) {\r\n\t                        if (this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                            this._betSettings.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (!this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                            this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                        }\r\n\t                    }\r\n\t                    if (FreeRoundBonus_1.FreeRoundBonus.inFrb) {\r\n\t                        if (!this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                            this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                    neo_games_1.Platforms.Platforms.roundInit();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        var _a;\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.prepareJackpotMiniGame = function () {\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && Jackpot_1.Jackpot.hasMiniGame() && !FreeRoundBonus_1.FreeRoundBonus.inFrb) {\r\n\t            if (Jackpot_1.Jackpot.hasInitializedGame() && this._wasCalclulated) {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                this.resetWinAnimator();\r\n\t                this.disable();\r\n\t                FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t                Jackpot_1.Jackpot.startMiniGame();\r\n\t                return true;\r\n\t            }\r\n\t            else {\r\n\t                var self_1 = this;\r\n\t                if (this._wasCalclulated) {\r\n\t                    Jackpot_1.Jackpot.initMiniGame(true, function () {\r\n\t                        self_1.resetWinAnimator();\r\n\t                        self_1.disable();\r\n\t                        DataManager_1.DataManager.Autoplay = false;\r\n\t                        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t                    });\r\n\t                }\r\n\t                if (DataManager_1.DataManager.GameLimit) {\r\n\t                    DataManager_1.DataManager.Autoplay = false;\r\n\t                    this.limit();\r\n\t                }\r\n\t                if (Jackpot_1.Jackpot.waitForMiniGameInitialization()) {\r\n\t                    this.actions.disableAllActions();\r\n\t                    HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t                    if (this._betSettings != null &&\r\n\t                        !this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                        this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                    }\r\n\t                    return true;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.checkJackpotMiniGame = function () {\r\n\t        if (!Jackpot_1.Jackpot.hasMiniGame() || FreeRoundBonus_1.FreeRoundBonus.inFrb) {\r\n\t            return false;\r\n\t        }\r\n\t        if (Jackpot_1.Jackpot.hasInitializedGame() || Jackpot_1.Jackpot.waitForMiniGameInitialization()) {\r\n\t            if (GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                this.changeWinBox();\r\n\t                this._wasCalclulated = true;\r\n\t                if (!DataManager_1.DataManager.GameRoundClosed) {\r\n\t                    this.collect();\r\n\t                }\r\n\t                else {\r\n\t                    this.playCollectSound();\r\n\t                    DataManager_1.DataManager.updateDataElements();\r\n\t                    this.prepareNewGameRound();\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t            return true;\r\n\t        }\r\n\t        else {\r\n\t            Jackpot_1.Jackpot.initMiniGame(false, null);\r\n\t            Jackpot_1.Jackpot.disableMiniGameAutostart();\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.limit = function () {\r\n\t        LimitDialog_1.LimitDialog.openDialog();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t            this.actions.changeActionStates((_a = {},\r\n\t                _a[BaseActions_1.BaseActions.ActionAutoplay] = DataManager_1.DataManager.autoplayEnabled(),\r\n\t                _a[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                _a[BaseActions_1.BaseActions.ActionBaseCollect] = false,\r\n\t                _a[BaseActions_1.BaseActions.ActionBetCycle] = true,\r\n\t                _a[BaseActions_1.BaseActions.ActionBetPlus] = !BetManager_1.BetManager.maxBet,\r\n\t                _a[BaseActions_1.BaseActions.ActionBetMinus] = !BetManager_1.BetManager.minBet,\r\n\t                _a[BaseActions_1.BaseActions.ActionSpin] = true,\r\n\t                _a[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                _a\r\n\t            ));\r\n\t            if (this._betSettings != null && this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._betSettings.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionStates((_b = {},\r\n\t                _b[BaseActions_1.BaseActions.ActionAutoplay] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionAutoplayStop] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionBaseCollect] = true,\r\n\t                _b[BaseActions_1.BaseActions.ActionBetCycle] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionBetPlus] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionBetMinus] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionSpin] = false,\r\n\t                _b[BaseActions_1.BaseActions.ActionSpinStop] = false,\r\n\t                _b\r\n\t            ));\r\n\t            if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        var _a, _b;\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.disable = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        this.actions.disableAllActions();\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.disableActiveIcon();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this._controller.disableBase();\r\n\t        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.disableAllActions = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._betSettings.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.setActiveSceneInBasegame = function (id) { };\r\n\t    MobileBaseUserControls.prototype.setSceneAnimations = function (sceneIndex) { };\r\n\t    MobileBaseUserControls.prototype.updatePaytable = function () { };\r\n\t    MobileBaseUserControls.prototype.userControlsShowDelay = function () {\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.resetWinAnimator = function () {\r\n\t        this._controller.resetWinAnimator();\r\n\t    };\r\n\t    MobileBaseUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], MobileBaseUserControls);\r\n\t    return MobileBaseUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.MobileBaseUserControls = MobileBaseUserControls;\r\n\n\n/***/ },\n/* 137 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar GameActions_1 = __webpack_require__(82);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar LimitDialog_1 = __webpack_require__(54);\r\n\tvar FreespinsController_1 = __webpack_require__(121);\r\n\tvar FreespinsActions_1 = __webpack_require__(80);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar gsap_1 = __webpack_require__(16);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar WinType = neo_games_1.Communication.Game.WinType;\r\n\tvar MobileFreespinsUserControls = (function (_super) {\r\n\t    __extends(MobileFreespinsUserControls, _super);\r\n\t    function MobileFreespinsUserControls() {\r\n\t        _super.call(this, \"freespins\");\r\n\t        this._wasCalclulated = true;\r\n\t    }\r\n\t    MobileFreespinsUserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.registerActions();\r\n\t        this._afterWinDelay = FrameTimer_1.CreateFrameTimer(\"afterWinDelay\");\r\n\t        this._afterWinDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._autoplayDelay = FrameTimer_1.CreateFrameTimer(\"autoplayDelay\");\r\n\t        this._autoplayDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\r\n\t        this._backDelay = FrameTimer_1.CreateFrameTimer(\"backDelay\");\r\n\t        this._backDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.back.bind(this));\r\n\t        this._backButtonDelay = FrameTimer_1.CreateFrameTimer(\"backButtonDelay\");\r\n\t        this._backButtonDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.backButton.bind(this));\r\n\t        this._prepareNewGameRound = FrameTimer_1.CreateFrameTimer(\"prepareNewGameRound\");\r\n\t        this._prepareNewGameRound.on(FrameTimer_1.FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\t        this._userControls = document.getElementById(\"freespinsUserControls\");\r\n\t        this._userControlsShowDelay = FrameTimer_1.CreateFrameTimer(\"userControlsShowDelay\");\r\n\t        this._userControlsShowDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.userControlsShowDelay.bind(this));\r\n\t        this._baseUserControlsShowDelay = FrameTimer_1.CreateFrameTimer(\"userControlsShowDelay\");\r\n\t        this._baseUserControlsShowDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.baseUserControlsShowDelay.bind(this));\r\n\t        this._fsEnterEnableDelay = FrameTimer_1.CreateFrameTimer(\"fsEnterEnableDelay\");\r\n\t        this._fsEnterEnableDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.fsEnterEnableDelay.bind(this));\r\n\t        this._fsBoards = [document.getElementById(\"fsCount\"), document.getElementById(\"fsMultiplier\")];\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.StartReceived, this.startReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.ConfirmReceived, this.confirmReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.SpinReceived, this.spinReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.EndReceived, this.endReceived.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.MachineStopped, this.machineStopped.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.OutroFinished, this.outroFinished.bind(this));\r\n\t        this._controller.on(FreespinsController_1.FreespinsController.QuickWinCalculationFinished, this.quickWinCalculationFinished.bind(this));\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpin] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.initReceived = function () {\r\n\t        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\t        this._baseUserControls = document.getElementById(\"userControls\");\r\n\t        _super.prototype.initReceived.call(this);\r\n\t        this._controller.initReceived();\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.restoreGameRound = function () {\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.startReceived = function (finished) {\r\n\t        if (this._baseUserControls != null &&\r\n\t            !this._baseUserControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._baseUserControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Pick);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.confirmReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Base);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.spinReceived = function () {\r\n\t        var fsCount = document.querySelector(\"#fsCount .value\");\r\n\t        var hide = gsap_1.TweenLite.to(fsCount, 0.1, { alpha: 0 });\r\n\t        hide.eventCallback(\"onComplete\", function () {\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t            gsap_1.TweenLite.to(fsCount, 0.1, { alpha: 1 });\r\n\t        });\r\n\t        if (DataManager_1.DataManager.quickspinEnabled()) {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t            this._controller.stop();\r\n\t        }\r\n\t        else {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.endReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Freespins);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (action === GameActions_1.GameActions.ActionSpinOrStop) {\r\n\t            if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionBack)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionBack;\r\n\t            }\r\n\t            else if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionSpin)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionSpin;\r\n\t            }\r\n\t            else if (this.actions.getActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop)) {\r\n\t                action = FreespinsActions_1.FreespinsActions.ActionSpinStop;\r\n\t            }\r\n\t            else {\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (this.actions.getActionState(action)) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            _super.prototype.dispatchAction.call(this, action);\r\n\t            switch (action) {\r\n\t                case FreespinsActions_1.FreespinsActions.ActionStart:\r\n\t                    this.start();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionBack:\r\n\t                    this.back();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionSpin:\r\n\t                    this.spin();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionSpinStop:\r\n\t                    this.stop();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionAutoplay:\r\n\t                    this.autoplay();\r\n\t                    break;\r\n\t                case FreespinsActions_1.FreespinsActions.ActionAutoplayStop:\r\n\t                    this.autoplayStop();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.start = function (id) {\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this._controller.start(id);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.spin = function () {\r\n\t        if (!this._wasCalclulated) {\r\n\t            if (GameManager_1.GameManager.freespinsResponse != null && GameManager_1.GameManager.freespinsResponse.currentWin > 0) {\r\n\t                neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.freespinsResponse.currentWin);\r\n\t            }\r\n\t        }\r\n\t        this.actions.disableAllActions();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, DataManager_1.DataManager.autoplayEnabled());\r\n\t        }\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this._controller.spin();\r\n\t        neo_games_1.Platforms.Platforms.spinStarted();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.back = function () {\r\n\t        this._backDelay.stop();\r\n\t        this.disable();\r\n\t        ModuleManager_1.ModuleManager.endFreespins();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.stop = function () {\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t        DataManager_1.DataManager.quickspinStopped();\r\n\t        this._controller.stop();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.end = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null && GameManager_1.GameManager.freespinsResponse.totalWin > 0) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.freespinsResponse.totalWin, true);\r\n\t        }\r\n\t        this._controller.end();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.autoplayDelayed = function () {\r\n\t        this._autoplayDelay.stop();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t        else {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.autoplay = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (DataManager_1.DataManager.AutoplayCount === \"∞\") {\r\n\t            DataManager_1.DataManager.Autoplay = true;\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t            this.spin();\r\n\t        }\r\n\t        else {\r\n\t            DataManager_1.DataManager.AutoplayCount = (parseInt(DataManager_1.DataManager.AutoplayCount) - 1).toString();\r\n\t            if (parseInt(DataManager_1.DataManager.AutoplayCount) >= 0) {\r\n\t                DataManager_1.DataManager.Autoplay = true;\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataAutoplayCount, DataManager_1.DataManager.AutoplayCount);\r\n\t                this.spin();\r\n\t            }\r\n\t            else {\r\n\t                DataManager_1.DataManager.Autoplay = false;\r\n\t                this.prepareNewGameRound();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.autoplayStop = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionAutoplayStop, false);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.backButton = function () {\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionBack, true);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionBack, true);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.machineStopped = function (isHighWin) {\r\n\t        neo_games_1.Platforms.Platforms.spinEnded();\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            this._wasCalclulated = true;\r\n\t        }\r\n\t        else {\r\n\t            this._wasCalclulated = false;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin > 0) {\r\n\t            var hasScatterFreespinWin = false;\r\n\t            for (var i = 0; i < GameManager_1.GameManager.freespinsResponse.wins.length; i++) {\r\n\t                if (GameManager_1.GameManager.freespinsResponse.wins[i].trigger === neo_games_1.Communication.Game.WinTrigger.Scatter) {\r\n\t                    if (GameManager_1.GameManager.freespinsResponse.wins[i].type === neo_games_1.Communication.Game.WinType.freeSpins) {\r\n\t                        hasScatterFreespinWin = true;\r\n\t                    }\r\n\t                }\r\n\t                else if (GameManager_1.GameManager.freespinsResponse.wins[i].trigger === neo_games_1.Communication.Game.WinTrigger.Way) {\r\n\t                    if (GameManager_1.GameManager.freespinsResponse.wins[i].type === neo_games_1.Communication.Game.WinType.Cash) {\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            this._afterWinDelay.stop();\r\n\t            if (isHighWin) {\r\n\t                this._afterWinDelay.start(80);\r\n\t            }\r\n\t            else {\r\n\t                if (GameManager_1.GameManager.freespinsResponse.totalWin > 0) {\r\n\t                    this._afterWinDelay.start(30);\r\n\t                }\r\n\t                else {\r\n\t                    this.prepareNewGameRound();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this.isLastFreespin()) {\r\n\t            this._afterWinDelay.stop();\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t                if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t                    DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t                }\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t                if (this.getRetriggerCount() > 0 && !DataManager_1.DataManager.GameLimit) {\r\n\t                    this._backDelay.start(15);\r\n\t                }\r\n\t                else {\r\n\t                    this._backButtonDelay.start(60);\r\n\t                }\r\n\t            }\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionSpinStop, false);\r\n\t        if (GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            this.prepareNewGameRound();\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        if (DataManager_1.DataManager.Autoplay && GameManager_1.GameManager.freespinsResponse.currentWin === 0) {\r\n\t            this._autoplayDelay.start(15);\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.quickWinCalculationFinished = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.currentWin > 0 &&\r\n\t            !this._wasCalclulated) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.freespinsResponse.currentWin);\r\n\t        }\r\n\t        this._wasCalclulated = true;\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.winCalculationFinished = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        if (this.isLastFreespin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.allWinsFinished = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.currentWin > 0 &&\r\n\t            !this._wasCalclulated) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.freespinsResponse.currentWin);\r\n\t        }\r\n\t        this._wasCalclulated = true;\r\n\t        this._afterWinDelay.stop();\r\n\t        if (this.isLastFreespin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            if (this.getRetriggerCount() > 0 && !DataManager_1.DataManager.GameLimit) {\r\n\t                this.back();\r\n\t            }\r\n\t            else {\r\n\t                this._backButtonDelay.start(60);\r\n\t            }\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.autoplay();\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.initIntro = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsMultiplier, GameManager_1.GameManager.freespinsResponse.freeSpins.multiplier.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        this._controller.initIntro();\r\n\t        neo_games_1.Platforms.Platforms.featureInit({ type: neo_games_1.Communication.Game.GameModules.Freespins });\r\n\t        if (this.isLastFreespin()) {\r\n\t            this.actions.disableAllActions();\r\n\t            if (this.getRetriggerCount() > 0 && !DataManager_1.DataManager.GameLimit) {\r\n\t                this._backDelay.start(15);\r\n\t            }\r\n\t            else {\r\n\t                this._backButtonDelay.start(60);\r\n\t            }\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            return;\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsCount, GameManager_1.GameManager.freespinsResponse.freeSpins.totalCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsMultiplier, GameManager_1.GameManager.freespinsResponse.freeSpins.multiplier.toString());\r\n\t        for (var _i = 0, _a = this._fsBoards; _i < _a.length; _i++) {\r\n\t            var item = _a[_i];\r\n\t            item.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        this._controller.intro(long);\r\n\t        this._userControlsShowDelay.start(100);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.introFinished = function () {\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        this._prepareNewGameRound.start(120);\r\n\t        this._userControlsShowDelay.start(100);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.outro = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        this._controller.outro();\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.outroFinished = function () {\r\n\t        ModuleManager_1.ModuleManager.introModule(GameModules.Base, true);\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            !this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.prepareNewGameRound = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        if (GameManager_1.GameManager.freespinsResponse.totalWin != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinTotalWin, GameManager_1.GameManager.freespinsResponse.totalWin.toString());\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinTotalWin);\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.limit();\r\n\t        }\r\n\t        else {\r\n\t            if (!DataManager_1.DataManager.Autoplay) {\r\n\t                this.actions.changeActionStates((_a = {},\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = !DataManager_1.DataManager.Autoplay && DataManager_1.DataManager.autoplayEnabled(),\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = DataManager_1.DataManager.Autoplay && DataManager_1.DataManager.autoplayEnabled(),\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionSpin] = true,\r\n\t                    _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t                    _a\r\n\t                ));\r\n\t            }\r\n\t        }\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        var _a;\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.limit = function () {\r\n\t        LimitDialog_1.LimitDialog.openDialog();\r\n\t        this.actions.changeActionStates((_a = {},\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionStart] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionBack] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplay] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionAutoplayStop] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpin] = false,\r\n\t            _a[FreespinsActions_1.FreespinsActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.fsEnterEnableDelay = function () {\r\n\t        this.actions.changeActionState(FreespinsActions_1.FreespinsActions.ActionStart, true);\r\n\t        HtmlController_1.HtmlController.updateActionElement(FreespinsActions_1.FreespinsActions.ActionStart, true);\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.enable = function () {\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsCount, GameManager_1.GameManager.freespinsResponse.freeSpins.totalCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsMultiplier, GameManager_1.GameManager.freespinsResponse.freeSpins.multiplier.toString());\r\n\t        this._fsEnterEnableDelay.start(30);\r\n\t        this._controller.enable();\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.disable = function () {\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.isLastFreespin = function () {\r\n\t        if (DataManager_1.DataManager.GameLimit) {\r\n\t            this.limit();\r\n\t            return true;\r\n\t        }\r\n\t        if (GameManager_1.GameManager.freespinsResponse.freeSpins != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount != null &&\r\n\t            GameManager_1.GameManager.freespinsResponse.freeSpins.remainingCount === 0) {\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.getRetriggerCount = function () {\r\n\t        if (GameManager_1.GameManager.freespinsResponse.hasOwnProperty(\"customData\") &&\r\n\t            GameManager_1.GameManager.freespinsResponse.customData[\"retriggerCount\"] != null) {\r\n\t            return GameManager_1.GameManager.freespinsResponse.customData[\"retriggerCount\"];\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.userControlsShowDelay = function () {\r\n\t        if (this._userControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.baseUserControlsShowDelay = function () {\r\n\t        if (this._baseUserControls != null && this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._baseUserControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null &&\r\n\t            this._userControls_supreme.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.overlayFsBoard = function () {\r\n\t        for (var _i = 0, _a = this._fsBoards; _i < _a.length; _i++) {\r\n\t            var item = _a[_i];\r\n\t            if (item != null && !item.classList.contains(\"_overlayed\")) {\r\n\t                item.classList.add(\"_overlayed\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls.prototype.removeOverlayFsBoard = function () {\r\n\t        for (var _i = 0, _a = this._fsBoards; _i < _a.length; _i++) {\r\n\t            var item = _a[_i];\r\n\t            if (item != null && item.classList.contains(\"_overlayed\")) {\r\n\t                item.classList.remove(\"_overlayed\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileFreespinsUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], MobileFreespinsUserControls);\r\n\t    return MobileFreespinsUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.MobileFreespinsUserControls = MobileFreespinsUserControls;\r\n\n\n/***/ },\n/* 138 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar GambleUserControls_1 = __webpack_require__(85);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar MobileGambleUserControls = (function (_super) {\r\n\t    __extends(MobileGambleUserControls, _super);\r\n\t    function MobileGambleUserControls() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    MobileGambleUserControls.prototype.initIntro = function () {\r\n\t        ModuleManager_1.ModuleManager.setActiveSceneBackground(GameModules.Base, 0);\r\n\t        _super.prototype.initIntro.call(this);\r\n\t    };\r\n\t    MobileGambleUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], MobileGambleUserControls);\r\n\t    return MobileGambleUserControls;\r\n\t}(GambleUserControls_1.GambleUserControls));\r\n\texports.MobileGambleUserControls = MobileGambleUserControls;\r\n\n\n/***/ },\n/* 139 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GameActions_1 = __webpack_require__(82);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar PickActions_1 = __webpack_require__(83);\r\n\tvar PickController_1 = __webpack_require__(126);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar GameStatuses = neo_games_1.Communication.Game.GameModuleStatus;\r\n\tvar MobilePickUserControls = (function (_super) {\r\n\t    __extends(MobilePickUserControls, _super);\r\n\t    function MobilePickUserControls() {\r\n\t        _super.call(this, \"pick\");\r\n\t    }\r\n\t    MobilePickUserControls.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.registerActions();\r\n\t        this._userControls = document.getElementById(\"pickUserControls\");\r\n\t        this._fsConfiguratorText = document.getElementById(\"fsConfiguratorText\");\r\n\t        this._backDelay = FrameTimer_1.CreateFrameTimer(\"backDelay\");\r\n\t        this._backDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.back.bind(this));\r\n\t        this._backButtonDelay = FrameTimer_1.CreateFrameTimer(\"backButtonDelay\");\r\n\t        this._backButtonDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.backButton.bind(this));\r\n\t        this._pickCount = document.getElementById(\"pickCount\");\r\n\t        if (this._pickCount == null) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no pickCount\");\r\n\t            }\r\n\t        }\r\n\t        this._pickMultiplier = document.getElementById(\"pickMultiplier\");\r\n\t        if (this._pickMultiplier == null) {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no pickMultiplier\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobilePickUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(PickController_1.PickController.StartReceived, this.startReceived.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.SelectReceived, this.selectReceived.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.EndReceived, this.endReceived.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.UpdateCounters, this.updateCounter.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.UpdateCountersValues, this.updateCounterValues.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.SelectComplete, this.selectComplete.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.Intro, this.intro.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.OutroFinished, this.outroFinished.bind(this));\r\n\t        this._controller.on(PickController_1.PickController.Outro, this.outro.bind(this));\r\n\t    };\r\n\t    MobilePickUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 0] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 1] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 2] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 3] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 4] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 5] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 6] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 7] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 8] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    MobilePickUserControls.prototype.initReceived = function () {\r\n\t        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\t        this._baseUserControls = document.getElementById(\"userControls\");\r\n\t        this._fsCount = document.getElementById(\"fsCount\");\r\n\t        this._fsMultiplier = document.getElementById(\"fsMultiplier\");\r\n\t        _super.prototype.initReceived.call(this);\r\n\t        this._controller.initReceived();\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"none\";\r\n\t        }\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobilePickUserControls.prototype.startReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Base);\r\n\t        ModuleManager_1.ModuleManager.setAutoplayAfterFeature(false);\r\n\t    };\r\n\t    MobilePickUserControls.prototype.selectReceived = function () {\r\n\t    };\r\n\t    MobilePickUserControls.prototype.endReceived = function () {\r\n\t        if (ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableFreespins();\r\n\t        }\r\n\t    };\r\n\t    MobilePickUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (ModuleManager_1.ModuleManager.pickEnabled() || ModuleManager_1.ModuleManager.pickActive()) {\r\n\t            if (action === GameActions_1.GameActions.ActionSpinOrStop) {\r\n\t                return;\r\n\t            }\r\n\t            if (this.actions.getActionState(action)) {\r\n\t                _super.prototype.dispatchAction.call(this, action);\r\n\t                if (action.substr(0, PickActions_1.PickActions.ActionSpot.length) === PickActions_1.PickActions.ActionSpot) {\r\n\t                    var id = parseInt(action.substr(PickActions_1.PickActions.ActionSpot.length, action.length));\r\n\t                    this._controller.select(id);\r\n\t                }\r\n\t                this.actions.disableAllActions();\r\n\t            }\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        }\r\n\t    };\r\n\t    MobilePickUserControls.prototype.start = function () {\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this._controller.start();\r\n\t    };\r\n\t    MobilePickUserControls.prototype.back = function () {\r\n\t        this._backDelay.stop();\r\n\t        this.disable();\r\n\t        ModuleManager_1.ModuleManager.endPick();\r\n\t    };\r\n\t    MobilePickUserControls.prototype.end = function () {\r\n\t        if (GameManager_1.GameManager.pickResponse.count != null && GameManager_1.GameManager.pickResponse.multiplier != null) {\r\n\t            DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinsCountMultiplier, GameManager_1.GameManager.pickResponse.count.toString() + \";\" + GameManager_1.GameManager.pickResponse.multiplier.toString());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsCountMultiplier, GameManager_1.GameManager.pickResponse.count.toString() + \";\" + GameManager_1.GameManager.pickResponse.multiplier.toString());\r\n\t        }\r\n\t        this._controller.end();\r\n\t    };\r\n\t    MobilePickUserControls.prototype.backButton = function () {\r\n\t        this.actions.changeActionState(PickActions_1.PickActions.ActionBack, true);\r\n\t        HtmlController_1.HtmlController.updateActionElement(PickActions_1.PickActions.ActionBack, true);\r\n\t    };\r\n\t    MobilePickUserControls.prototype.allWinsFinished = function () {\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    MobilePickUserControls.prototype.initIntro = function () {\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        this._controller.initIntro();\r\n\t        neo_games_1.Platforms.Platforms.featureInit({ type: neo_games_1.Communication.Game.GameModules.Pick });\r\n\t        this.prepareNewGameRound(true);\r\n\t        if (this._fsConfiguratorText) {\r\n\t            this._fsConfiguratorText.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsCount) {\r\n\t            this._fsCount.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsMultiplier) {\r\n\t            this._fsMultiplier.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._baseUserControls != null) {\r\n\t            this._baseUserControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobilePickUserControls.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        if (ModuleManager_1.ModuleManager.pickEnabled()) {\r\n\t            if (this._userControls != null) {\r\n\t                this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (this._userControls_supreme != null) {\r\n\t                this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            if (this._baseUserControls != null) {\r\n\t                this._baseUserControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobilePickUserControls.prototype.introFinished = function () {\r\n\t        this.prepareNewGameRound();\r\n\t        if (this._fsConfiguratorText) {\r\n\t            this._fsConfiguratorText.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsCount) {\r\n\t            this._fsCount.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsMultiplier) {\r\n\t            this._fsMultiplier.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.style.display = \"block\";\r\n\t        }\r\n\t        if (this._userControls != null) {\r\n\t            this._userControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._baseUserControls != null) {\r\n\t            this._baseUserControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobilePickUserControls.prototype.outro = function () {\r\n\t        if (this._fsConfiguratorText) {\r\n\t            this._fsConfiguratorText.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsCount) {\r\n\t            this._fsCount.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._fsMultiplier) {\r\n\t            this._fsMultiplier.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls != null && !this._userControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._userControls_supreme != null) {\r\n\t            this._userControls_supreme.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        if (this._baseUserControls != null) {\r\n\t            this._baseUserControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        this._controller.outro();\r\n\t    };\r\n\t    MobilePickUserControls.prototype.outroFinished = function () {\r\n\t        ModuleManager_1.ModuleManager.introModule(GameModules.Freespins, true);\r\n\t    };\r\n\t    MobilePickUserControls.prototype.prepareNewGameRound = function (init) {\r\n\t        if (init === void 0) { init = false; }\r\n\t        this.actions.changeActionStates((_a = {},\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 0] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 1] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 2] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 3] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 4] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 5] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 6] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 7] = false,\r\n\t            _a[PickActions_1.PickActions.ActionSpot + 8] = false,\r\n\t            _a\r\n\t        ));\r\n\t        if (GameManager_1.GameManager.pickResponse != null &&\r\n\t            GameManager_1.GameManager.pickResponse.round != null &&\r\n\t            GameManager_1.GameManager.pickResponse.round.spots != null) {\r\n\t            if (GameManager_1.GameManager.pickResponse.round.remainingPicks === 0) {\r\n\t                if (!ModuleManager_1.ModuleManager.freespinsEnabled()) {\r\n\t                    this.end();\r\n\t                }\r\n\t                else {\r\n\t                    if (GameManager_1.GameManager.pickResponse.count != null && GameManager_1.GameManager.pickResponse.multiplier != null) {\r\n\t                        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataFreeSpinsCountMultiplier, GameManager_1.GameManager.pickResponse.count.toString() +\r\n\t                            \";\" +\r\n\t                            GameManager_1.GameManager.pickResponse.multiplier.toString());\r\n\t                        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsCountMultiplier, GameManager_1.GameManager.pickResponse.count.toString() +\r\n\t                            \";\" +\r\n\t                            GameManager_1.GameManager.pickResponse.multiplier.toString());\r\n\t                    }\r\n\t                    ModuleManager_1.ModuleManager.enableFreespins();\r\n\t                }\r\n\t                return;\r\n\t            }\r\n\t            for (var key in GameManager_1.GameManager.pickResponse.round.spots) {\r\n\t                var id = GameManager_1.GameManager.pickResponse.round.spots[key].id;\r\n\t                var status_1 = GameManager_1.GameManager.pickResponse.round.spots[key].status.toString();\r\n\t                if (id != null && status_1 != null && status_1 === \"enabled\") {\r\n\t                    this.actions.changeActionState(PickActions_1.PickActions.ActionSpot + id, true);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.pickResponse.count.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsMultiplier, GameManager_1.GameManager.pickResponse.multiplier.toString());\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        var _a;\r\n\t    };\r\n\t    MobilePickUserControls.prototype.updateCounter = function () {\r\n\t        console.warn(\"!\");\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsRemainingCount, GameManager_1.GameManager.pickResponse.count.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataFreeSpinsMultiplier, GameManager_1.GameManager.pickResponse.multiplier.toString());\r\n\t    };\r\n\t    MobilePickUserControls.prototype.updateCounterValues = function () {\r\n\t    };\r\n\t    MobilePickUserControls.prototype.pickStartButton = function () {\r\n\t        if (this._baseUserControls != null && this._baseUserControls.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            this._baseUserControls.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t    };\r\n\t    MobilePickUserControls.prototype.selectComplete = function () {\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    MobilePickUserControls.prototype.enable = function () {\r\n\t        this.start();\r\n\t    };\r\n\t    MobilePickUserControls.prototype.disable = function () {\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    MobilePickUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], MobilePickUserControls);\r\n\t    return MobilePickUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.MobilePickUserControls = MobilePickUserControls;\r\n\n\n/***/ },\n/* 140 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ShapeElement_1 = __webpack_require__(12);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar ComponentAttributes_1 = __webpack_require__(68);\r\n\tvar BaseElementParticle = (function (_super) {\r\n\t    __extends(BaseElementParticle, _super);\r\n\t    function BaseElementParticle() {\r\n\t        _super.call(this);\r\n\t        this._cloned = false;\r\n\t        this.__destroyed = false;\r\n\t        this._uid = this.componentName + \"_\" + neo_common_1.Utils.generateUuid();\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                this._uid = PerfDebug.generateElementUID(this);\r\n\t                PerfDebug.newElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    Object.defineProperty(BaseElementParticle.prototype, \"tweenEngine\", {\r\n\t        get: function () {\r\n\t            return this._tweenEngine;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    BaseElementParticle.prototype._create = function (node) {\r\n\t        this.assertDestroyed(\"_create()\");\r\n\t        Tweens_1.Tweens.removeTweens(this);\r\n\t        if (this.name == null) {\r\n\t            this.name = node.nodeName;\r\n\t        }\r\n\t        if (node.hasAttribute(\"Alpha\")) {\r\n\t            this.alpha = parseFloat(node.getAttribute(\"Alpha\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Rotation\")) {\r\n\t            this.rotation = parseInt(node.getAttribute(\"Rotation\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"StartRotation\")) {\r\n\t            if (node.getAttribute(\"StartRotation\") === \"random\") {\r\n\t                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"ScaleX\")) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(\"scaleX\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"ScaleY\")) {\r\n\t            this.scale.y = parseFloat(node.getAttribute(\"ScaleY\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Scale\")) {\r\n\t            this.scale.x = parseFloat(node.getAttribute(\"Scale\"));\r\n\t            this.scale.y = parseFloat(node.getAttribute(\"Scale\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"X\")) {\r\n\t            this.position.x = parseInt(node.getAttribute(\"X\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Y\")) {\r\n\t            this.position.y = parseInt(node.getAttribute(\"Y\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"PivotX\")) {\r\n\t            this.pivot.x = parseInt(node.getAttribute(\"PivotX\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"PivotY\")) {\r\n\t            this.pivot.y = parseInt(node.getAttribute(\"PivotY\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Visible\")) {\r\n\t            this.visible = neo_common_1.StringUtils.parseBoolean(node.getAttribute(\"Visible\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Mask\")) {\r\n\t            var next = node.parentElement.firstElementChild;\r\n\t            while (next != null) {\r\n\t                if (next.nodeName === node.getAttribute(\"Mask\")) {\r\n\t                    var shapeElement = new ShapeElement_1.ShapeElement();\r\n\t                    shapeElement.create(next);\r\n\t                    this.mask = shapeElement;\r\n\t                }\r\n\t                next = next.nextElementSibling;\r\n\t            }\r\n\t            if (this.mask == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no element with name: \" + node.getAttribute(\"Mask\"));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"BitmapMask\")) {\r\n\t            var image = StageController_1.StageController.getTextureByResourceId(node.getAttribute(\"BitmapMask\"));\r\n\t            if (image != null) {\r\n\t                this.maskSprite = new PIXI.Sprite(image);\r\n\t                if (node.hasAttribute(\"BitmapMaskX\")) {\r\n\t                    this.maskSprite.position.x = parseFloat(node.getAttribute(\"BitmapMaskX\"));\r\n\t                }\r\n\t                if (node.hasAttribute(\"BitmapMaskY\")) {\r\n\t                    this.maskSprite.position.y = parseFloat(node.getAttribute(\"BitmapMaskY\"));\r\n\t                }\r\n\t                if (!node.hasAttribute(\"BitmapMaskShow\")) {\r\n\t                    this.addChild(this.maskSprite);\r\n\t                    this.mask = this.maskSprite;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no image with name for mask: \" + node.getAttribute(\"BitmapMask\"));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._positionTweenOnCreate(node);\r\n\t        this._scaleTweenOnCreate(node);\r\n\t        this._rotationTweenOnCreate(node);\r\n\t        this._alphaTweenOnCreate(node);\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.createElement(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseElementParticle.prototype._positionTweenOnCreate = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.POSITION_TWEEN_X) ||\r\n\t            !node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.POSITION_TWEEN_Y)) {\r\n\t            return;\r\n\t        }\r\n\t        var tweenX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(ComponentAttributes_1.ParticleElementAttributes.POSITION_TWEEN_X));\r\n\t        var tweenY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(ComponentAttributes_1.ParticleElementAttributes.POSITION_TWEEN_Y));\r\n\t        if (tweenX == null || tweenY == null) {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING wrong parameters for PositionTween\");\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        var tweenDuration = node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.POSITION_TWEEN_DURATION)\r\n\t            ? parseInt(node.getAttribute(ComponentAttributes_1.ParticleElementAttributes.POSITION_TWEEN_DURATION))\r\n\t            : 120;\r\n\t        var tweenEase = node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.POSITION_TWEEN_EASE)\r\n\t            ? node.getAttribute(ComponentAttributes_1.ParticleElementAttributes.POSITION_TWEEN_EASE)\r\n\t            : null;\r\n\t        var position = node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.POSITION_TWEEN_POSITION)\r\n\t            ? node.getAttribute(ComponentAttributes_1.ParticleElementAttributes.POSITION_TWEEN_POSITION)\r\n\t            : null;\r\n\t        if (position == ComponentAttributes_1.ParticleElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n\t            tweenX = tweenX.map(function (value) {\r\n\t                return value + _this.position.x;\r\n\t            });\r\n\t            tweenY = tweenY.map(function (value) {\r\n\t                return value + _this.position.y;\r\n\t            });\r\n\t        }\r\n\t        Tweens_1.Tweens.positionTween(this, { tweenX: tweenX, tweenY: tweenY, tweenEase: tweenEase, tweenDuration: tweenDuration });\r\n\t    };\r\n\t    BaseElementParticle.prototype._scaleTweenOnCreate = function (node) {\r\n\t        if (!node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.SCALE_TWEEN)) {\r\n\t            return;\r\n\t        }\r\n\t        var tweenValues = BaseElementParticle._getPointsFromPointsAttribute(node.getAttribute(ComponentAttributes_1.ParticleElementAttributes.SCALE_TWEEN));\r\n\t        var tweenDuration = node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.SCALE_TWEEN_DURATION)\r\n\t            ? parseInt(node.getAttribute(ComponentAttributes_1.ParticleElementAttributes.SCALE_TWEEN_DURATION))\r\n\t            : 120;\r\n\t        var tweenEase = node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.SCALE_TWEEN_EASE)\r\n\t            ? node.getAttribute(ComponentAttributes_1.ParticleElementAttributes.SCALE_TWEEN_EASE)\r\n\t            : null;\r\n\t        Tweens_1.Tweens.scaleTween(this, { tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration });\r\n\t    };\r\n\t    BaseElementParticle.prototype._rotationTweenOnCreate = function (node) {\r\n\t        if (!node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.ROTATION_TWEEN)) {\r\n\t            return;\r\n\t        }\r\n\t        var degrees = neo_common_1.ArrayUtils.numberArray(node.getAttribute(ComponentAttributes_1.ParticleElementAttributes.ROTATION_TWEEN));\r\n\t        if (degrees == null) {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING wrong parameters for RotationTween\");\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        var tweenDuration = node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.ROTATION_TWEEN_DURATION)\r\n\t            ? parseInt(node.getAttribute(ComponentAttributes_1.ParticleElementAttributes.ROTATION_TWEEN_DURATION))\r\n\t            : 120;\r\n\t        var tweenEase = node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.ROTATION_TWEEN_EASE)\r\n\t            ? node.getAttribute(ComponentAttributes_1.ParticleElementAttributes.ROTATION_TWEEN_EASE)\r\n\t            : null;\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.ROTATION_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(ComponentAttributes_1.ParticleElementAttributes.ROTATION_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        Tweens_1.Tweens.rotationTween(this, { degrees: degrees, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay });\r\n\t    };\r\n\t    BaseElementParticle.prototype._alphaTweenOnCreate = function (node) {\r\n\t        if (!node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.ALPHA_TWEEN)) {\r\n\t            return;\r\n\t        }\r\n\t        var alphas = neo_common_1.ArrayUtils.numberArray(node.getAttribute(ComponentAttributes_1.ParticleElementAttributes.ALPHA_TWEEN));\r\n\t        if (alphas == null) {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING wrong parameters for RotationTween\");\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        var tweenDuration = node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.ALPHA_TWEEN_DURATION)\r\n\t            ? parseInt(node.getAttribute(ComponentAttributes_1.ParticleElementAttributes.ALPHA_TWEEN_DURATION))\r\n\t            : 120;\r\n\t        var tweenDelay = 0;\r\n\t        if (node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.ALPHA_TWEEN_DELAY)) {\r\n\t            var tweenDelayArray = node\r\n\t                .getAttribute(ComponentAttributes_1.ParticleElementAttributes.ALPHA_TWEEN_DELAY)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseInt(value); });\r\n\t            tweenDelay =\r\n\t                tweenDelayArray.length == 2\r\n\t                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\r\n\t                    : tweenDelayArray[0];\r\n\t        }\r\n\t        var tweenEase = node.hasAttribute(ComponentAttributes_1.ParticleElementAttributes.ALPHA_TWEEN_EASE)\r\n\t            ? node.getAttribute(ComponentAttributes_1.ParticleElementAttributes.ALPHA_TWEEN_EASE)\r\n\t            : null;\r\n\t        Tweens_1.Tweens.alphaTween(this, { alphas: alphas, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay });\r\n\t    };\r\n\t    BaseElementParticle._getPointsFromPointsAttribute = function (pointsString) {\r\n\t        return pointsString\r\n\t            .replace(/\\s/g, \"\")\r\n\t            .split(\";\")\r\n\t            .map(function (valuesPair) {\r\n\t            return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\r\n\t        })\r\n\t            .map(function (valuesPair) {\r\n\t            return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n\t        });\r\n\t    };\r\n\t    BaseElementParticle.prototype.create = function (node) {\r\n\t        this._create(node);\r\n\t    };\r\n\t    BaseElementParticle.prototype.getDebugInfo = function () {\r\n\t        if (false) {\r\n\t            var debugInfoFn = this.debugInfo;\r\n\t            return debugInfoFn ? debugInfoFn.call(this) : this.uid + \"\\nName: [\" + this.name + \"]\";\r\n\t        }\r\n\t        return \"\";\r\n\t    };\r\n\t    Object.defineProperty(BaseElementParticle.prototype, \"cloned\", {\r\n\t        get: function () {\r\n\t            return this._cloned;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseElementParticle.prototype, \"destroyed\", {\r\n\t        get: function () {\r\n\t            return this.__destroyed;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseElementParticle.prototype, \"uid\", {\r\n\t        get: function () {\r\n\t            return this._uid;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseElementParticle.prototype, \"componentName\", {\r\n\t        get: function () {\r\n\t            return this.__componentName__;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    BaseElementParticle.prototype.destroy = function (options) {\r\n\t        this.assertDestroyed(\"destroy\");\r\n\t        if (neo_common_1.Utils.isNullOrUndefined(options)) {\r\n\t            options = BaseElementParticle._destroyOptions;\r\n\t        }\r\n\t        this.internalDestroy(options);\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.children)) {\r\n\t            _super.prototype.destroy.call(this, options);\r\n\t        }\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.destroy(this);\r\n\t            }\r\n\t        }\r\n\t        this.__destroyed = true;\r\n\t    };\r\n\t    BaseElementParticle.prototype.internalDestroy = function (options) {\r\n\t        Tweens_1.Tweens.removeTweens(this);\r\n\t    };\r\n\t    BaseElementParticle.prototype.clone = function () {\r\n\t        throw new Error(\"Not implemented\");\r\n\t    };\r\n\t    BaseElementParticle.prototype.removeAndDestroyChildren = function () {\r\n\t        this._removeAndDestroyChildren();\r\n\t    };\r\n\t    BaseElementParticle.prototype._removeAndDestroyChildren = function () {\r\n\t        this.assertDestroyed(\"_removeAndDestroyChildren\");\r\n\t        var destroyOptions = {\r\n\t            children: true,\r\n\t        };\r\n\t        if (this.children != null && this.children.length > 0) {\r\n\t            for (var i = this.children.length - 1; i >= 0; i--) {\r\n\t                if (this.children[i] != null) {\r\n\t                    this.children[i].destroy(destroyOptions);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.removeChildren();\r\n\t    };\r\n\t    BaseElementParticle.prototype.assertDestroyed = function (method) {\r\n\t        if (false) {\r\n\t            if (this.__destroyed) {\r\n\t                throw new Error(this.componentName + \"[\" + this.uid + \"] was already destroyed, calling method '\" + method + \"'\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseElementParticle.prototype.markAsCloned = function () {\r\n\t        this._markAsCloned();\r\n\t    };\r\n\t    BaseElementParticle.prototype._markAsCloned = function () {\r\n\t        this.assertDestroyed(\"markAsCloned()\");\r\n\t        this._cloned = true;\r\n\t        if (false) {\r\n\t            if (PERFDEBUG_ENABLED) {\r\n\t                PerfDebug.clone(this);\r\n\t                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BaseElementParticle.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    BaseElementParticle.prototype.logError = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.errorGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    BaseElementParticle._destroyOptions = {\r\n\t        children: true,\r\n\t    };\r\n\t    BaseElementParticle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], BaseElementParticle);\r\n\t    return BaseElementParticle;\r\n\t}(PIXI.particles.ParticleContainer));\r\n\texports.BaseElementParticle = BaseElementParticle;\r\n\n\n/***/ },\n/* 141 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ActionSet_1 = __webpack_require__(67);\r\n\tvar ComponentAttributes_1 = __webpack_require__(68);\r\n\tvar LinkedElement = (function () {\r\n\t    function LinkedElement() {\r\n\t    }\r\n\t    LinkedElement.prototype.create = function (node, nodeAttributes) {\r\n\t        if (node.hasAttribute(ComponentAttributes_1.LinkedElementAttributes.LINKED_TO_ID)) {\r\n\t            if (ActionSet_1.ActionSet.ElementsToLink != null &&\r\n\t                ActionSet_1.ActionSet.ElementsToLink[node.getAttribute(ComponentAttributes_1.LinkedElementAttributes.LINKED_TO_ID)] != null) {\r\n\t                var mainElement = ActionSet_1.ActionSet.ElementsToLink[node.getAttribute(ComponentAttributes_1.LinkedElementAttributes.LINKED_TO_ID)];\r\n\t                if (nodeAttributes != null) {\r\n\t                    mainElement.updateByNode(nodeAttributes);\r\n\t                }\r\n\t                else {\r\n\t                    mainElement.updateByNode(node);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(LinkedElement.prototype, \"componentName\", {\r\n\t        get: function () {\r\n\t            return this.__componentName__;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    LinkedElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    LinkedElement.prototype.logError = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.errorGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    LinkedElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.LinkedElement)\r\n\t    ], LinkedElement);\r\n\t    return LinkedElement;\r\n\t}());\r\n\texports.LinkedElement = LinkedElement;\r\n\n\n/***/ },\n/* 142 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ContainerElement_1 = __webpack_require__(90);\r\n\tvar ParticleElement_1 = __webpack_require__(102);\r\n\tvar ParticleGroupElement = (function (_super) {\r\n\t    __extends(ParticleGroupElement, _super);\r\n\t    function ParticleGroupElement() {\r\n\t        _super.call(this);\r\n\t        this._emitOnce = false;\r\n\t        this._startType = \"\";\r\n\t    }\r\n\t    ParticleGroupElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        this.visible = false;\r\n\t    };\r\n\t    ParticleGroupElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.EMIT_ONCE)) {\r\n\t            this._emitOnce = neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.EMIT_ONCE));\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.START_TYPE)) {\r\n\t            this._startType = node.getAttribute(ParticleElement_1.ParticleElementAttributes.START_TYPE);\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.START) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.START))) {\r\n\t            if (neo_common_1.StringUtils.isNullOrEmpty(ParticleGroupElement.DynamicKey)) {\r\n\t                this.start(this._emitOnce);\r\n\t            }\r\n\t            else {\r\n\t                this.startSelected(this._emitOnce, ParticleGroupElement.DynamicKey);\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.STOPPING) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.STOPPING))) {\r\n\t            this.stopping();\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.STOP) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.STOP))) {\r\n\t            this.stop();\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.RESET) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.RESET))) {\r\n\t            if (neo_common_1.StringUtils.isNullOrEmpty(ParticleGroupElement.DynamicKey)) {\r\n\t                this.reset();\r\n\t            }\r\n\t            else {\r\n\t                this.resetSelected(ParticleGroupElement.DynamicKey);\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(ParticleElement_1.ParticleElementAttributes.CLEAR) &&\r\n\t            neo_common_1.StringUtils.parseBoolean(node.getAttribute(ParticleElement_1.ParticleElementAttributes.CLEAR))) {\r\n\t            this.clear();\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.start = function (emitOnce) {\r\n\t        if (emitOnce === void 0) { emitOnce = false; }\r\n\t        this._emitOnce = emitOnce;\r\n\t        this.visible = true;\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof ParticleElement_1.ParticleElement) {\r\n\t                    this.childs[key].start(this._emitOnce, this._startType);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.startSelected = function (emitOnce, particleKey) {\r\n\t        if (emitOnce === void 0) { emitOnce = false; }\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(particleKey)) {\r\n\t            this._emitOnce = emitOnce;\r\n\t            this.visible = true;\r\n\t            if (this.childs != null) {\r\n\t                for (var key in this.childs) {\r\n\t                    if (key.indexOf(particleKey) > -1) {\r\n\t                        if (this.childs[key] instanceof ParticleElement_1.ParticleElement) {\r\n\t                            this.childs[key].start(this._emitOnce, this._startType);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.stopping = function () {\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof ParticleElement_1.ParticleElement) {\r\n\t                    this.childs[key].stopping();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.stop = function () {\r\n\t        this.visible = false;\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof ParticleElement_1.ParticleElement) {\r\n\t                    this.childs[key].stop();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.reset = function () {\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof ParticleElement_1.ParticleElement) {\r\n\t                    this.childs[key].reset();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.resetSelected = function (particleKey) {\r\n\t        if (!neo_common_1.StringUtils.isNullOrEmpty(particleKey)) {\r\n\t            if (this.childs != null) {\r\n\t                for (var key in this.childs) {\r\n\t                    if (key.indexOf(particleKey) > -1) {\r\n\t                        if (this.childs[key] instanceof ParticleElement_1.ParticleElement) {\r\n\t                            this.childs[key].reset();\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.clear = function () {\r\n\t        this.visible = false;\r\n\t        if (this.childs != null) {\r\n\t            for (var key in this.childs) {\r\n\t                if (this.childs[key] instanceof ParticleElement_1.ParticleElement) {\r\n\t                    this.childs[key].clear();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParticleGroupElement.prototype.clone = function () {\r\n\t        var element = new ParticleGroupElement();\r\n\t        element.style = this.style;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.visible = this.visible;\r\n\t        element.name = this.name;\r\n\t        element._emitOnce = this._emitOnce;\r\n\t        element._startType = this._startType;\r\n\t        element.childs = {};\r\n\t        element.removeChildren();\r\n\t        for (var key in this.childs) {\r\n\t            element.childs[key] = this.childs[key].clone();\r\n\t            element.addChild(element.childs[key]);\r\n\t        }\r\n\t        if (this.maskSprite != null) {\r\n\t            var elementMask = new PIXI.Sprite(this.maskSprite.texture);\r\n\t            elementMask.position.x = this.maskSprite.position.x;\r\n\t            elementMask.position.y = this.maskSprite.position.y;\r\n\t            element.maskSprite = elementMask;\r\n\t            element.addChild(elementMask);\r\n\t            element.mask = elementMask;\r\n\t        }\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ParticleGroupElement.DynamicKey = \"\";\r\n\t    ParticleGroupElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ParticleGroupElement);\r\n\t    return ParticleGroupElement;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.ParticleGroupElement = ParticleGroupElement;\r\n\n\n/***/ },\n/* 143 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar StyleManager_1 = __webpack_require__(18);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar AnimationFrame_1 = __webpack_require__(9);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar CustomUtils_1 = __webpack_require__(20);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar protonProto = window[\"Proton\"];\r\n\tvar ProtonElement = (function (_super) {\r\n\t    __extends(ProtonElement, _super);\r\n\t    function ProtonElement() {\r\n\t        _super.call(this);\r\n\t        this._animationName = \"\";\r\n\t        this._emitting = false;\r\n\t        this._stopping = true;\r\n\t        this._animationSpeed = 1;\r\n\t        this._emitters = [];\r\n\t        this._proton = new protonProto();\r\n\t        this.onProtonUpdate = this.onProtonUpdate.bind(this);\r\n\t        this.onParticleCreated = this.onParticleCreated.bind(this);\r\n\t        this.onParticleUpdate = this.onParticleUpdate.bind(this);\r\n\t        this.onParticleDead = this.onParticleDead.bind(this);\r\n\t        this.transformSprite = this.transformSprite.bind(this);\r\n\t        this.alphaDead = this.alphaDead.bind(this);\r\n\t        this.scaleDead = this.scaleDead.bind(this);\r\n\t        this.delayStartTimer = FrameTimer_1.CreateFrameTimer(\"TimelineElement\");\r\n\t        this.delayStoppingTimer = FrameTimer_1.CreateFrameTimer(\"TimelineElement\");\r\n\t        this.delayStopTimer = FrameTimer_1.CreateFrameTimer(\"TimelineElement\");\r\n\t    }\r\n\t    ProtonElement.prototype.frame_onFrame = function () {\r\n\t        this._proton.update();\r\n\t    };\r\n\t    Object.defineProperty(ProtonElement.prototype, \"frame_name\", {\r\n\t        get: function () {\r\n\t            return this._styleName;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ProtonElement.prototype.create = function (node) {\r\n\t        this.super2._create(node);\r\n\t        if (node.hasAttribute(\"Tint\")) {\r\n\t            this._tint = parseInt(node.getAttribute(\"Tint\"), 16);\r\n\t        }\r\n\t        if (node.hasAttribute(\"BlendMode\")) {\r\n\t            this._blendMode = parseInt(node.getAttribute(\"BlendMode\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Style\") || node.hasAttribute(\"Style2\")) {\r\n\t            if (node.hasAttribute(\"Style\")) {\r\n\t                this._style = StyleManager_1.StyleManager.Styles[node.getAttribute(\"Style\")];\r\n\t                this._styleName = this._style.node.nodeName;\r\n\t            }\r\n\t            else {\r\n\t                this._style = StyleManager_1.StyleManager.Styles[node.getAttribute(\"Style2\")];\r\n\t                this._styleName = this._style.node.nodeName;\r\n\t            }\r\n\t            if (this._style != null) {\r\n\t                var next = this._style.node.firstElementChild;\r\n\t                while (next != null) {\r\n\t                    if (next.nodeName === \"Emitter\") {\r\n\t                        var emitter = new Proton.Emitter();\r\n\t                        this._emitters.push(emitter);\r\n\t                        var emitterNext = next.firstElementChild;\r\n\t                        while (emitterNext != null) {\r\n\t                            switch (emitterNext.nodeName) {\r\n\t                                case \"Rate\":\r\n\t                                    if (emitterNext.hasAttribute(\"Rate\")) {\r\n\t                                        var rate = neo_common_1.ArrayUtils.numberArray(emitterNext.getAttribute(\"Rate\"));\r\n\t                                        if (rate.length === 2) {\r\n\t                                            emitter.rate = new Proton.Rate(rate[0], rate[1]);\r\n\t                                        }\r\n\t                                        else {\r\n\t                                            if (false) {\r\n\t                                                this.log(\"WARNING Rate has different number of parameters. It has to have two parameters.\");\r\n\t                                            }\r\n\t                                        }\r\n\t                                    }\r\n\t                                    else if (emitterNext.hasAttribute(\"RateStart\") &&\r\n\t                                        emitterNext.hasAttribute(\"RateEnd\")) {\r\n\t                                        var rateStart = neo_common_1.ArrayUtils.numberArray(emitterNext.getAttribute(\"RateStart\"));\r\n\t                                        var rateEnd = neo_common_1.ArrayUtils.numberArray(emitterNext.getAttribute(\"RateEnd\"));\r\n\t                                        emitter.rate = new Proton.Rate(new Proton.Span(rateStart[0], rateStart[1]), new Proton.Span(rateEnd[0], rateEnd[1]));\r\n\t                                    }\r\n\t                                    else {\r\n\t                                        if (false) {\r\n\t                                            this.log(\"WARNING Rate has wrong attributes\");\r\n\t                                        }\r\n\t                                    }\r\n\t                                    break;\r\n\t                                case \"Initializers\":\r\n\t                                    this.createInitializers(emitterNext, this._emitters[this._emitters.length - 1]);\r\n\t                                    break;\r\n\t                                case \"Behaviours\":\r\n\t                                    this.createBehaviours(emitterNext, this._emitters[this._emitters.length - 1]);\r\n\t                                    break;\r\n\t                                default:\r\n\t                                    if (false) {\r\n\t                                        this.log(\"WARNING unknown type for emitter\");\r\n\t                                    }\r\n\t                            }\r\n\t                            emitterNext = emitterNext.nextElementSibling;\r\n\t                        }\r\n\t                        if (next.hasAttribute(\"Emit\")) {\r\n\t                            emitter.emit(next.getAttribute(\"Emit\"));\r\n\t                        }\r\n\t                        else {\r\n\t                            emitter.emit();\r\n\t                        }\r\n\t                        if (next.hasAttribute(\"X\")) {\r\n\t                            emitter[\"p\"].x = parseInt(next.getAttribute(\"X\"));\r\n\t                        }\r\n\t                        if (next.hasAttribute(\"Y\")) {\r\n\t                            emitter[\"p\"].y = parseInt(next.getAttribute(\"Y\"));\r\n\t                        }\r\n\t                    }\r\n\t                    next = next.nextElementSibling;\r\n\t                }\r\n\t                if (this._emitters != null) {\r\n\t                    for (var i = 0; i < this._emitters.length; i++) {\r\n\t                        this._proton.addEmitter(this._emitters[i]);\r\n\t                    }\r\n\t                    this._renderer = new Proton.Renderer(\"other\", this._proton);\r\n\t                    this._renderer.onProtonUpdate = this.onProtonUpdate;\r\n\t                    this._renderer.onParticleCreated = this.onParticleCreated;\r\n\t                    this._renderer.onParticleUpdate = this.onParticleUpdate;\r\n\t                    this._renderer.onParticleDead = this.onParticleDead;\r\n\t                    this._emitting = false;\r\n\t                    this.frame_stop();\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no emitters\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no style with name: \" + node.getAttribute(\"Style\"));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.runAction = function (startCanRange, durationCanRange, emit, stoppingCanRange, stopCanRange) {\r\n\t        if (startCanRange) {\r\n\t            this.startByParam(startCanRange, durationCanRange, emit);\r\n\t        }\r\n\t        if (stoppingCanRange) {\r\n\t            this.stoppingByParam(stoppingCanRange);\r\n\t        }\r\n\t        if (stopCanRange) {\r\n\t            this.stopByParam(stopCanRange);\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.startByParam = function (startCanRange, durationCanRange, emit) {\r\n\t        if (startCanRange) {\r\n\t            var valueArray = startCanRange.split(\";\").map(function (value) { return parseInt(value); });\r\n\t            var value = valueArray.length > 1\r\n\t                ? valueArray[0] + (valueArray[0] + Math.round(Math.random() * (valueArray[1] - valueArray[0])))\r\n\t                : valueArray[0];\r\n\t            if (!isNaN(value)) {\r\n\t                this.delayStartTimer.stop();\r\n\t                this.delayStartTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.start.bind(this, emit));\r\n\t                this.delayStartTimer.start(value);\r\n\t                if (durationCanRange) {\r\n\t                    var durValueArray = durationCanRange.split(\";\").map(function (value) { return parseInt(value); });\r\n\t                    var durValue = durValueArray.length > 1\r\n\t                        ? durValueArray[0] +\r\n\t                            (durValueArray[0] + Math.round(Math.random() * (durValueArray[1] - durValueArray[0])))\r\n\t                        : durValueArray[0];\r\n\t                    if (!isNaN(durValue)) {\r\n\t                        this.delayStoppingTimer.stop();\r\n\t                        this.delayStoppingTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.stopping.bind(this));\r\n\t                        this.delayStoppingTimer.start(value + durValue);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else if (neo_common_1.StringUtils.parseBoolean(startCanRange)) {\r\n\t                this.start(emit);\r\n\t                if (durationCanRange) {\r\n\t                    var durValueArray = durationCanRange.split(\";\").map(function (value) { return parseInt(value); });\r\n\t                    var durValue = durValueArray.length > 1\r\n\t                        ? durValueArray[0] +\r\n\t                            (durValueArray[0] + Math.round(Math.random() * (durValueArray[1] - durValueArray[0])))\r\n\t                        : durValueArray[0];\r\n\t                    if (!isNaN(durValue)) {\r\n\t                        var emitValue = parseInt(emit) || 0;\r\n\t                        this.delayStoppingTimer.stop();\r\n\t                        this.delayStoppingTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.stopping.bind(this));\r\n\t                        this.delayStoppingTimer.start(emitValue + durValue);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.stoppingByParam = function (stoppingCanRange) {\r\n\t        if (stoppingCanRange) {\r\n\t            var valueArray = stoppingCanRange.split(\";\").map(function (value) { return parseInt(value); });\r\n\t            var value = valueArray.length > 1\r\n\t                ? valueArray[0] + (valueArray[0] + Math.round(Math.random() * (valueArray[1] - valueArray[0])))\r\n\t                : valueArray[0];\r\n\t            if (!isNaN(value)) {\r\n\t                this.delayStoppingTimer.stop();\r\n\t                this.delayStoppingTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.stopping.bind(this));\r\n\t                this.delayStoppingTimer.start(value);\r\n\t            }\r\n\t            else if (neo_common_1.StringUtils.parseBoolean(stoppingCanRange)) {\r\n\t                this.stopping();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.stopByParam = function (stopCanRange) {\r\n\t        if (stopCanRange) {\r\n\t            var valueArray = stopCanRange.split(\";\").map(function (value) { return parseInt(value); });\r\n\t            var value = valueArray.length > 1\r\n\t                ? valueArray[0] + (valueArray[0] + Math.round(Math.random() * (valueArray[1] - valueArray[0])))\r\n\t                : valueArray[0];\r\n\t            if (!isNaN(value)) {\r\n\t                this.delayStopTimer.stop();\r\n\t                this.delayStopTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.stop.bind(this));\r\n\t                this.delayStopTimer.start(value);\r\n\t            }\r\n\t            else if (neo_common_1.StringUtils.parseBoolean(stopCanRange)) {\r\n\t                this.stop();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.updateByNodeInherited = function (node) {\r\n\t        if (node.hasAttribute(exports.ProtonElementAttributes.START)) {\r\n\t            this.startByParam(node.getAttribute(exports.ProtonElementAttributes.START), node.getAttribute(exports.ProtonElementAttributes.DURATION), node.getAttribute(exports.ProtonElementAttributes.EMIT));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ProtonElementAttributes.STOPPING)) {\r\n\t            this.stoppingByParam(node.getAttribute(exports.ProtonElementAttributes.STOPPING));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ProtonElementAttributes.STOP)) {\r\n\t            this.stopByParam(node.getAttribute(exports.ProtonElementAttributes.STOP));\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.start = function (emit) {\r\n\t        if (emit === void 0) { emit = \"\"; }\r\n\t        if (this._stopping) {\r\n\t            this._stopping = false;\r\n\t        }\r\n\t        if (this.isFrameStopped) {\r\n\t            if (this._renderer != null) {\r\n\t                this._renderer.stop();\r\n\t            }\r\n\t            this.removeChilds();\r\n\t            if (this._emitters != null && this._emitters.length > 0) {\r\n\t                if (emit != \"\") {\r\n\t                    for (var i = 0; i < this._emitters.length; i++) {\r\n\t                        this._emitters[i].emit(emit);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this._renderer != null) {\r\n\t                this._renderer.start();\r\n\t                this._stopping = false;\r\n\t                this._emitting = true;\r\n\t                this.frame_start();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.stopping = function () {\r\n\t        this._emitting = false;\r\n\t        this._stopping = true;\r\n\t    };\r\n\t    ProtonElement.prototype.onProtonUpdate = function () {\r\n\t        var emmiter0 = this._emitters[0];\r\n\t        if (emmiter0[\"emitTotalTimes\"] === \"none\" && emmiter0[\"particles\"].length === 0) {\r\n\t            this._emitting = false;\r\n\t            this.frame_stop();\r\n\t            this._renderer.stop();\r\n\t            this.removeChilds();\r\n\t        }\r\n\t        if (this._stopping && !this._emitting && this.super2.children.length <= 0) {\r\n\t            this.frame_stop();\r\n\t            this._renderer.stop();\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.onParticleCreated = function (particle) {\r\n\t        if (this._stopping === false) {\r\n\t            particle.sprite = null;\r\n\t            if (particle.sprite != null) {\r\n\t                if (this._textures != null && this._textures.length > 0) {\r\n\t                    ProtonElement.Pool[this._animationName].push(particle.sprite);\r\n\t                    this.super2.removeChild(particle.sprite);\r\n\t                }\r\n\t                else {\r\n\t                    ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\r\n\t                    this.super2.removeChild(particle.sprite);\r\n\t                }\r\n\t            }\r\n\t            var particleSprite = void 0;\r\n\t            if (this._textures != null && this._textures.length > 0) {\r\n\t                if (ProtonElement.Pool[this._animationName] == null) {\r\n\t                    ProtonElement.Pool[this._animationName] = [];\r\n\t                }\r\n\t                if (ProtonElement.Pool[this._animationName].length === 0) {\r\n\t                    particleSprite = new PIXI.extras.AnimatedSprite(this._textures);\r\n\t                    particleSprite.name = this._animationName;\r\n\t                }\r\n\t                else {\r\n\t                    particleSprite = ProtonElement.Pool[this._animationName].shift();\r\n\t                }\r\n\t                particleSprite.loop = true;\r\n\t                particleSprite.animationSpeed = this._animationSpeed;\r\n\t                particleSprite.play();\r\n\t            }\r\n\t            else {\r\n\t                if (ProtonElement.Pool[particle.target.textureCacheIds[0]] == null) {\r\n\t                    ProtonElement.Pool[particle.target.textureCacheIds[0]] = [];\r\n\t                }\r\n\t                if (ProtonElement.Pool[particle.target.textureCacheIds[0]].length === 0) {\r\n\t                    particleSprite = new PIXI.Sprite(particle.target);\r\n\t                    particleSprite.name = particle.target.textureCacheIds[0];\r\n\t                }\r\n\t                else {\r\n\t                    particleSprite = ProtonElement.Pool[particle.target.textureCacheIds[0]].shift();\r\n\t                }\r\n\t            }\r\n\t            if (this._tint != null) {\r\n\t                particleSprite.tint = this._tint;\r\n\t            }\r\n\t            if (this._blendMode != null) {\r\n\t                particleSprite.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this._blendMode);\r\n\t            }\r\n\t            particleSprite.visible = true;\r\n\t            particle.sprite = particleSprite;\r\n\t            this.super2.addChild(particleSprite);\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.onParticleUpdate = function (particle) {\r\n\t        if (particle != null && particle.sprite != null) {\r\n\t            this.transformSprite(particle.sprite, particle);\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.onParticleDead = function (particle) {\r\n\t        if (particle.sprite != null) {\r\n\t            particle.sprite.visible = false;\r\n\t            if (particle.sprite instanceof PIXI.extras.AnimatedSprite) {\r\n\t                particle.sprite.stop();\r\n\t            }\r\n\t            this.super2.removeChild(particle.sprite);\r\n\t        }\r\n\t        particle.sprite = null;\r\n\t        particle.dead = true;\r\n\t        particle = null;\r\n\t    };\r\n\t    ProtonElement.prototype.transformSprite = function (particleSprite, particle) {\r\n\t        if (particleSprite.transform != null &&\r\n\t            !neo_common_1.Utils.isNullOrUndefined(particleSprite) &&\r\n\t            !neo_common_1.Utils.isNullOrUndefined(particle)) {\r\n\t            particleSprite.visible = true;\r\n\t            particleSprite.position.x = particle.p.x;\r\n\t            particleSprite.position.y = particle.p.y;\r\n\t            particleSprite.scale.x = particle.scale;\r\n\t            particleSprite.scale.y = particle.scale;\r\n\t            particleSprite.anchor.x = 0.5;\r\n\t            particleSprite.anchor.y = 0.5;\r\n\t            particleSprite.alpha = particle.alpha;\r\n\t            particleSprite.rotation = (particle.rotation * Math.PI) / 180;\r\n\t        }\r\n\t        else {\r\n\t            particle.dead = true;\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.stop = function () {\r\n\t        this._emitting = false;\r\n\t        this._stopping = true;\r\n\t        this.frame_stop();\r\n\t        for (var i = 0; i < this._emitters.length; i++) {\r\n\t            this._emitters[i].resetParticles();\r\n\t        }\r\n\t        if (this._renderer != null) {\r\n\t            this._renderer.stop();\r\n\t        }\r\n\t        this.removeChilds();\r\n\t    };\r\n\t    ProtonElement.prototype.removeChilds = function () {\r\n\t        if (this.super2.children != null) {\r\n\t            var i = 0;\r\n\t            while (this.super2.children.length !== 0) {\r\n\t                if (this.super2.children[0] != null) {\r\n\t                    if (this._textures != null && this._textures.length > 0) {\r\n\t                        this.super2.children[0].stop();\r\n\t                        ProtonElement.Pool[this._animationName].push(this.super2.children[0]);\r\n\t                    }\r\n\t                    else {\r\n\t                        ProtonElement.Pool[this.super2.children[0].name].push(this.super2.children[0]);\r\n\t                    }\r\n\t                    this.super2.removeChild(this.super2.children[0]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.internalDestroy = function (options) {\r\n\t        this._emitting = false;\r\n\t        this._stopping = true;\r\n\t        this.frame_stop();\r\n\t        this._textures = null;\r\n\t        if (this._emitters != null && this._emitters.length > 0) {\r\n\t            for (var i = 0; i < this._emitters.length; i++) {\r\n\t                if (this._emitters[i] != null) {\r\n\t                    this._proton.removeEmitter(this._emitters[i]);\r\n\t                    this._emitters[i].destroy();\r\n\t                    this._emitters[i] = null;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (this._renderer != null) {\r\n\t            this._renderer.stop();\r\n\t            this._renderer = null;\r\n\t        }\r\n\t        this._proton.destroy();\r\n\t        this._proton = null;\r\n\t        this.removeChilds();\r\n\t    };\r\n\t    ProtonElement.prototype.createInitializers = function (node, emitter) {\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            switch (next.nodeName) {\r\n\t                case \"ImageTarget\":\r\n\t                    var imageTarget = this.addImageTarget(next);\r\n\t                    if (imageTarget != null) {\r\n\t                        emitter.addInitialize(imageTarget);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING ImageTarget is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"AnimationTarget\":\r\n\t                    this.addAnimationTarget(next);\r\n\t                    break;\r\n\t                case \"Radius\":\r\n\t                    var radius = this.addRadius(next);\r\n\t                    if (radius != null) {\r\n\t                        emitter.addInitialize(radius);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Radius is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Mass\":\r\n\t                    var mass = this.addMass(next);\r\n\t                    if (mass != null) {\r\n\t                        emitter.addInitialize(mass);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Mass is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Life\":\r\n\t                    var life = this.addLife(next);\r\n\t                    if (life != null) {\r\n\t                        emitter.addInitialize(life);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Life is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Position\":\r\n\t                    var position = this.addPosition(next);\r\n\t                    if (position != null) {\r\n\t                        emitter.addInitialize(position);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Position is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Velocity\":\r\n\t                    var velocity = this.addVelocity(next);\r\n\t                    if (velocity != null) {\r\n\t                        emitter.addInitialize(velocity);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Velocity is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                default:\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING unknown initializer\");\r\n\t                    }\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.addImageTarget = function (node) {\r\n\t        if (node.hasAttribute(\"Image\")) {\r\n\t            var arr = node.getAttribute(\"Image\").split(\";\");\r\n\t            var arrTextures = [];\r\n\t            for (var i = 0; i < arr.length; i++) {\r\n\t                var resourceId = arr[i];\r\n\t                var texture = StageController_1.StageController.getTextureByResourceId(resourceId);\r\n\t                if (texture != null) {\r\n\t                    arrTextures.push(texture);\r\n\t                }\r\n\t            }\r\n\t            if (arrTextures != null && arrTextures.length > 0) {\r\n\t                return new Proton.ImageTarget(arrTextures);\r\n\t            }\r\n\t            else {\r\n\t                return null;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Image target has no attribute Image\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addAnimationTarget = function (node) {\r\n\t        if (node.hasAttribute(\"Animation\") && node.hasAttribute(\"Frames\")) {\r\n\t            if (node.hasAttribute(\"Speed\")) {\r\n\t                this._animationSpeed = parseFloat(node.getAttribute(\"Speed\"));\r\n\t            }\r\n\t            this._animationName = node.getAttribute(\"Animation\");\r\n\t            this._textures = [];\r\n\t            for (var i = 0; i < parseInt(node.getAttribute(\"Frames\")) - 1; i++) {\r\n\t                var val = i < 10 ? \"0\" + i : i;\r\n\t                var texture = PIXI.Texture.fromFrame(node.getAttribute(\"Animation\") + \"00\" + val);\r\n\t                this._textures.push(texture);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.addMass = function (node) {\r\n\t        if (node.hasAttribute(\"Mass\")) {\r\n\t            var arr = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"Mass\"));\r\n\t            if (arr.length === 3) {\r\n\t                return new Proton.Mass(arr[0], arr[1], arr[2]);\r\n\t            }\r\n\t            else if (arr.length === 2) {\r\n\t                return new Proton.Mass(arr[0], arr[1]);\r\n\t            }\r\n\t            else if (arr.length === 1) {\r\n\t                return new Proton.Mass(arr[0]);\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING Mass attribute doesnt have parameters\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING no attribute Mass in Mass initializer\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addRadius = function (node) {\r\n\t        if (node.hasAttribute(\"Radius\")) {\r\n\t            var arr = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"Radius\"));\r\n\t            if (arr.length === 3) {\r\n\t                return new Proton.Radius(arr[0], arr[1], arr[2]);\r\n\t            }\r\n\t            else if (arr.length === 2) {\r\n\t                return new Proton.Radius(arr[0], arr[1]);\r\n\t            }\r\n\t            else if (arr.length === 1) {\r\n\t                return new Proton.Radius(arr[0]);\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING Radius attribute doesnt have parameters\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING no attribute Radius in Radius initializer\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addLife = function (node) {\r\n\t        if (node.hasAttribute(\"Life\")) {\r\n\t            var arr = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"Life\"));\r\n\t            if (arr.length === 3) {\r\n\t                return new Proton.Life(arr[0], arr[1], arr[2]);\r\n\t            }\r\n\t            else if (arr.length === 2) {\r\n\t                return new Proton.Life(arr[0], arr[1]);\r\n\t            }\r\n\t            else if (arr.length === 1) {\r\n\t                return new Proton.Life(arr[0]);\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING Life attribute doesnt have parameters\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING no attribute Life in Life initializer\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addPosition = function (node) {\r\n\t        var zone = node.firstElementChild;\r\n\t        if (zone != null) {\r\n\t            return new Proton.Position(this.getZone(zone));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Position has no zone\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addVelocity = function (node) {\r\n\t        var rpan;\r\n\t        var thapan;\r\n\t        var type;\r\n\t        if (node.getAttribute(\"RPan\")) {\r\n\t            rpan = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"RPan\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING no attribute RPan in Velocity\");\r\n\t            }\r\n\t        }\r\n\t        if (node.getAttribute(\"ThaPan\")) {\r\n\t            thapan = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"ThaPan\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING no attribute ThaPan in Velocity\");\r\n\t            }\r\n\t        }\r\n\t        if (node.getAttribute(\"Type\")) {\r\n\t            type = node.getAttribute(\"Type\");\r\n\t        }\r\n\t        if (rpan != null && thapan != null) {\r\n\t            var rpanSpan;\r\n\t            if (rpan.length === 2) {\r\n\t                rpanSpan = new Proton.Span(rpan[0], rpan[1]);\r\n\t            }\r\n\t            else {\r\n\t                rpanSpan = rpan[0];\r\n\t            }\r\n\t            var thapanSpan;\r\n\t            if (thapan.length === 2) {\r\n\t                thapanSpan = new Proton.Span(thapan[0], thapan[1]);\r\n\t            }\r\n\t            else {\r\n\t                thapanSpan = thapan[0];\r\n\t            }\r\n\t            if (type != null) {\r\n\t                return new Proton.Velocity(rpanSpan, thapanSpan, type);\r\n\t            }\r\n\t            else {\r\n\t                return new Proton.Velocity(rpanSpan, thapanSpan);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING missing some attribute in Velocity\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.getZone = function (node) {\r\n\t        switch (node.nodeName) {\r\n\t            case \"RectZone\":\r\n\t                var rectZoneX;\r\n\t                var rectZoneY;\r\n\t                var rectZoneWidth;\r\n\t                var rectZoneHeight;\r\n\t                if (node.hasAttribute(\"X\")) {\r\n\t                    rectZoneX = parseInt(node.getAttribute(\"X\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute X in RectZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Y\")) {\r\n\t                    rectZoneY = parseInt(node.getAttribute(\"Y\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Y in RectZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Width\")) {\r\n\t                    rectZoneWidth = parseInt(node.getAttribute(\"Width\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Width in RectZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Height\")) {\r\n\t                    rectZoneHeight = parseInt(node.getAttribute(\"Height\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Height in RectZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (rectZoneX != null && rectZoneY != null && rectZoneWidth != null && rectZoneHeight != null) {\r\n\t                    return new Proton.RectZone(rectZoneX, rectZoneY, rectZoneWidth, rectZoneHeight);\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING missing some attributes in RectZone\");\r\n\t                    }\r\n\t                }\r\n\t                break;\r\n\t            case \"LineZone\":\r\n\t                var lineZoneX;\r\n\t                var lineZoneY;\r\n\t                var lineZoneWidth;\r\n\t                var lineZoneHeight;\r\n\t                var lineZoneDirection;\r\n\t                if (node.hasAttribute(\"X\")) {\r\n\t                    lineZoneX = parseInt(node.getAttribute(\"X\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute X in LineZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Y\")) {\r\n\t                    lineZoneY = parseInt(node.getAttribute(\"Y\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Y in LineZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Width\")) {\r\n\t                    lineZoneWidth = parseInt(node.getAttribute(\"Width\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Width in LineZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Height\")) {\r\n\t                    lineZoneHeight = parseInt(node.getAttribute(\"Height\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Height in LineZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Direction\")) {\r\n\t                    lineZoneDirection = node.getAttribute(\"Direction\");\r\n\t                }\r\n\t                if (lineZoneX != null && lineZoneY != null && lineZoneWidth != null && lineZoneHeight != null) {\r\n\t                    if (lineZoneDirection != null) {\r\n\t                        return new Proton.LineZone(lineZoneX, lineZoneY, lineZoneWidth, lineZoneHeight, lineZoneDirection);\r\n\t                    }\r\n\t                    else {\r\n\t                        return new Proton.LineZone(lineZoneX, lineZoneY, lineZoneWidth, lineZoneHeight);\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING missing some attributes in LineZone\");\r\n\t                    }\r\n\t                }\r\n\t                break;\r\n\t            case \"CircleZone\":\r\n\t                var circleZoneX;\r\n\t                var circleZoneY;\r\n\t                var circleZoneRadius;\r\n\t                if (node.hasAttribute(\"X\")) {\r\n\t                    circleZoneX = parseInt(node.getAttribute(\"X\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute X in CircleZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Y\")) {\r\n\t                    circleZoneY = parseInt(node.getAttribute(\"Y\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Y in CircleZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Radius\")) {\r\n\t                    circleZoneRadius = parseInt(node.getAttribute(\"Radius\"));\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING no attribute Radius in CircleZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (circleZoneX != null && circleZoneY != null && circleZoneRadius != null) {\r\n\t                    return new Proton.CircleZone(circleZoneX, circleZoneY, circleZoneRadius);\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING missing some attributes in CircleZone\");\r\n\t                    }\r\n\t                }\r\n\t                break;\r\n\t            default:\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING unknown type zone: \" + node.nodeName);\r\n\t                }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.createBehaviours = function (node, emitter) {\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            switch (next.nodeName) {\r\n\t                case \"AlphaDead\":\r\n\t                    if (next.hasAttribute(\"Age\")) {\r\n\t                        emitter.addBehaviour(this.alphaDead(parseFloat(next.getAttribute(\"Age\"))));\r\n\t                    }\r\n\t                    else {\r\n\t                        emitter.addBehaviour(this.alphaDead(1));\r\n\t                    }\r\n\t                    break;\r\n\t                case \"ScaleDead\":\r\n\t                    emitter.addBehaviour(this.scaleDead());\r\n\t                    break;\r\n\t                case \"Alpha\":\r\n\t                    var alpha = this.addAlpha(next);\r\n\t                    if (alpha != null) {\r\n\t                        emitter.addBehaviour(alpha);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Alpha is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Scale\":\r\n\t                    var scale = this.addScale(next);\r\n\t                    if (scale != null) {\r\n\t                        emitter.addBehaviour(scale);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Scale is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Rotate\":\r\n\t                    var rotate = this.addRotate(next);\r\n\t                    if (rotate != null) {\r\n\t                        emitter.addBehaviour(rotate);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Rotate is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Color\":\r\n\t                    var color = this.addColor(next);\r\n\t                    if (color != null) {\r\n\t                        emitter.addBehaviour(color);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Color is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"CrossZone\":\r\n\t                    var crossZone = this.addCrossZone(next);\r\n\t                    if (crossZone != null) {\r\n\t                        emitter.addBehaviour(crossZone);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING CrossZone is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"RandomDrift\":\r\n\t                    var randomDrift = this.addRandomDrift(next);\r\n\t                    if (randomDrift != null) {\r\n\t                        emitter.addBehaviour(randomDrift);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING RandomDrift is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                case \"Gravity\":\r\n\t                    var gravity = this.addGravity(next);\r\n\t                    if (gravity != null) {\r\n\t                        emitter.addBehaviour(gravity);\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING Gravity is null\");\r\n\t                        }\r\n\t                    }\r\n\t                    break;\r\n\t                default:\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING unknown behaviour\");\r\n\t                    }\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.alphaDead = function (age) {\r\n\t        var self = this;\r\n\t        return {\r\n\t            initialize: function (particle) { },\r\n\t            applyBehaviour: function (particle) {\r\n\t                if (particle.age >= age) {\r\n\t                    particle[\"transform\"][\"alphaA\"] = 1;\r\n\t                    particle[\"transform\"][\"alphaB\"] = 0;\r\n\t                }\r\n\t                if (particle.age >= particle.life) {\r\n\t                    if (particle.sprite != null) {\r\n\t                        if (this._textures != null && this._textures.length > 0) {\r\n\t                            ProtonElement.Pool[this._animationName].push(particle.sprite);\r\n\t                        }\r\n\t                        else {\r\n\t                            ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\r\n\t                        }\r\n\t                        self.super2.removeChild(particle.sprite);\r\n\t                    }\r\n\t                    particle.sprite = null;\r\n\t                    particle.dead = true;\r\n\t                    particle = null;\r\n\t                }\r\n\t            },\r\n\t        };\r\n\t    };\r\n\t    ProtonElement.prototype.scaleDead = function () {\r\n\t        var self = this;\r\n\t        return {\r\n\t            initialize: function (particle) {\r\n\t                particle.scale = 0;\r\n\t            },\r\n\t            applyBehaviour: function (particle) {\r\n\t                if (particle.energy >= 2 / 3) {\r\n\t                    particle.scale = (1 - particle.energy) * 3;\r\n\t                }\r\n\t                else if (particle.energy <= 1 / 3) {\r\n\t                    particle.scale = particle.energy * 3;\r\n\t                }\r\n\t                if (particle.scale < 0) {\r\n\t                    if (particle.sprite != null) {\r\n\t                        if (this._textures != null && this._textures.length > 0) {\r\n\t                            ProtonElement.Pool[this._animationName].push(particle.sprite);\r\n\t                        }\r\n\t                        else {\r\n\t                            ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\r\n\t                        }\r\n\t                        self.super2.removeChild(particle.sprite);\r\n\t                    }\r\n\t                    particle.sprite = null;\r\n\t                    particle.dead = true;\r\n\t                    particle = null;\r\n\t                }\r\n\t            },\r\n\t        };\r\n\t    };\r\n\t    ProtonElement.prototype.addAlpha = function (node) {\r\n\t        var start;\r\n\t        var end;\r\n\t        var life;\r\n\t        if (node.hasAttribute(\"Start\")) {\r\n\t            start = parseFloat(node.getAttribute(\"Start\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Alpha has no attribute Start\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"End\")) {\r\n\t            end = parseFloat(node.getAttribute(\"End\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Alpha has no attribute End\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"Life\")) {\r\n\t            life = parseFloat(node.getAttribute(\"Life\"));\r\n\t        }\r\n\t        if (start != null && end != null) {\r\n\t            if (life != null) {\r\n\t                return new Proton.Alpha(start, end, life);\r\n\t            }\r\n\t            else {\r\n\t                return new Proton.Alpha(start, end);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Alpha has no Start or End attribute\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addScale = function (node) {\r\n\t        var start;\r\n\t        var end;\r\n\t        var life;\r\n\t        if (node.hasAttribute(\"Start\")) {\r\n\t            start = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"Start\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Scale has no attribute Start\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"End\")) {\r\n\t            end = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"End\"));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Life\")) {\r\n\t            life = parseFloat(node.getAttribute(\"Life\"));\r\n\t        }\r\n\t        if (start != null) {\r\n\t            var startSpan;\r\n\t            if (start.length === 2) {\r\n\t                startSpan = new Proton.Span(start[0], start[1]);\r\n\t            }\r\n\t            else {\r\n\t                startSpan = start[0];\r\n\t            }\r\n\t            var endSpan;\r\n\t            if (end != null) {\r\n\t                if (end.length === 2) {\r\n\t                    endSpan = new Proton.Span(end[0], end[1]);\r\n\t                }\r\n\t                else {\r\n\t                    endSpan = end[0];\r\n\t                }\r\n\t            }\r\n\t            if (startSpan != null && endSpan != null && life != null) {\r\n\t                return new Proton.Scale(startSpan, endSpan, life);\r\n\t            }\r\n\t            else if (startSpan != null && endSpan != null) {\r\n\t                return new Proton.Scale(startSpan, endSpan);\r\n\t            }\r\n\t            else {\r\n\t                return new Proton.Scale(startSpan);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Scale has no Start or End attribute\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addRotate = function (node) {\r\n\t        var start;\r\n\t        var end;\r\n\t        var style;\r\n\t        if (node.hasAttribute(\"Start\")) {\r\n\t            start = node\r\n\t                .getAttribute(\"Start\")\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return (isNaN(parseFloat(value)) ? value : parseFloat(value)); });\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Rotate has no attribute Start\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"End\")) {\r\n\t            end = node\r\n\t                .getAttribute(\"End\")\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return (isNaN(parseFloat(value)) ? value : parseFloat(value)); });\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Rotate has no attribute End\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"Style\")) {\r\n\t            style = node.getAttribute(\"Style\");\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Style has no attribute End\");\r\n\t            }\r\n\t        }\r\n\t        var startSpan = new Proton.Span(start[0], start.length > 1 ? start[1] : start[0]);\r\n\t        var endSpan = null;\r\n\t        if (end && end.length > 0) {\r\n\t            endSpan = new Proton.Span(end[0], end.length > 1 ? end[1] : end[0]);\r\n\t        }\r\n\t        return new Proton.Rotate(startSpan, endSpan, style);\r\n\t    };\r\n\t    ProtonElement.prototype.addRandomDrift = function (node) {\r\n\t        var driftX;\r\n\t        var driftY;\r\n\t        var delay;\r\n\t        if (node.hasAttribute(\"DriftX\")) {\r\n\t            driftX = parseFloat(node.getAttribute(\"DriftX\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING RandomDrift has no attribute DriftX\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"DriftY\")) {\r\n\t            driftY = parseFloat(node.getAttribute(\"DriftY\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING RandomDrift has no attribute DriftY\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"Delay\")) {\r\n\t            delay = parseFloat(node.getAttribute(\"Delay\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING RandomDrift has no attribute Delay\");\r\n\t            }\r\n\t        }\r\n\t        if (driftX != null && driftY != null && delay != null) {\r\n\t            return new Proton.RandomDrift(driftX, driftY, delay);\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING RandomDrift has no valid attributes\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addGravity = function (node) {\r\n\t        var gravity;\r\n\t        if (node.hasAttribute(\"Gravity\")) {\r\n\t            gravity = parseFloat(node.getAttribute(\"Gravity\"));\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Gravity has no attribute Gravity\");\r\n\t            }\r\n\t        }\r\n\t        if (gravity != null) {\r\n\t            return new Proton.Gravity(gravity);\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Gravity has no valid attributes\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addColor = function (node) {\r\n\t        var i;\r\n\t        var arr;\r\n\t        var endArr;\r\n\t        var color = [];\r\n\t        var endColor = [];\r\n\t        if (node.hasAttribute(\"Color\")) {\r\n\t            arr = node.getAttribute(\"Color\").split(\";\");\r\n\t            for (i = 0; i < arr.length; i++) {\r\n\t                color.push(neo_common_1.StringUtils.hexColor(arr[i]));\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Color has no attribute Color\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"EndColor\")) {\r\n\t            endArr = node.getAttribute(\"EndColor\").split(\";\");\r\n\t            for (i = 0; i < endArr.length; i++) {\r\n\t                endColor.push(neo_common_1.StringUtils.hexColor(endArr[i]));\r\n\t            }\r\n\t        }\r\n\t        if (color.length > 0) {\r\n\t            if (endColor.length > 0) {\r\n\t                return new Proton.Color(color, endColor);\r\n\t            }\r\n\t            else {\r\n\t                return new Proton.Color(color);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING Color has no Color attribute\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.addCrossZone = function (node) {\r\n\t        var zone;\r\n\t        var type;\r\n\t        if (node.firstElementChild != null) {\r\n\t            zone = this.getZone(node.firstElementChild);\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING no zone in CrossZone\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"Type\")) {\r\n\t            type = node.getAttribute(\"Type\");\r\n\t        }\r\n\t        if (zone != null) {\r\n\t            if (type != null) {\r\n\t                return new Proton.CrossZone(zone, type);\r\n\t            }\r\n\t            else {\r\n\t                return new Proton.CrossZone(zone);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"WARNING no zone in CrossZone\");\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ProtonElement.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.clone = function () {\r\n\t        var element = new ProtonElement();\r\n\t        element.super2.position.x = this.super2.position.x;\r\n\t        element.super2.position.y = this.super2.position.y;\r\n\t        element.super2.pivot.x = this.super2.pivot.x;\r\n\t        element.super2.pivot.y = this.super2.pivot.y;\r\n\t        element.super2.scale.x = this.super2.scale.x;\r\n\t        element.super2.scale.y = this.super2.scale.y;\r\n\t        element.super2.visible = this.super2.visible;\r\n\t        var node = document.createElement(\"particle\");\r\n\t        node.setAttribute(\"Style2\", this._styleName);\r\n\t        element.create(node);\r\n\t        element.super2._markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ProtonElement.Pool = {};\r\n\t    ProtonElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ProtonElement);\r\n\t    return ProtonElement;\r\n\t}(AnimationFrame_1.AnimationFrameBaseElement));\r\n\texports.ProtonElement = ProtonElement;\r\n\texports.ProtonElementAttributes = {\r\n\t    EMIT: \"Emit\",\r\n\t    START: \"Start\",\r\n\t    STOP: \"Stop\",\r\n\t    STOPPING: \"Stopping\",\r\n\t    DURATION: \"Duration\",\r\n\t};\r\n\n\n/***/ },\n/* 144 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar Vibration_1 = __webpack_require__(145);\r\n\tvar VibrationElement = (function (_super) {\r\n\t    __extends(VibrationElement, _super);\r\n\t    function VibrationElement() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    VibrationElement.prototype.createByNode = function (node) {\r\n\t    };\r\n\t    VibrationElement.prototype.updateByNode = function (node) {\r\n\t        if (node.hasAttribute(exports.VibrationElementAttributes.PATTERN)) {\r\n\t            var pattern = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.VibrationElementAttributes.PATTERN));\r\n\t            Vibration_1.Vibration.vibrate(pattern);\r\n\t        }\r\n\t    };\r\n\t    VibrationElement.prototype.clone = function () {\r\n\t        var element = new VibrationElement();\r\n\t        return element;\r\n\t    };\r\n\t    VibrationElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], VibrationElement);\r\n\t    return VibrationElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.VibrationElement = VibrationElement;\r\n\texports.VibrationElementAttributes = {\r\n\t    PATTERN: \"Pattern\",\r\n\t};\r\n\n\n/***/ },\n/* 145 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar Vibration = (function () {\r\n\t    function Vibration() {\r\n\t    }\r\n\t    Vibration.vibrate = function (pattern) {\r\n\t        if (pattern === void 0) { pattern = 0; }\r\n\t        if (!DataManager_1.DataManager.VibrationEnabled) {\r\n\t            return;\r\n\t        }\r\n\t        if (navigator.vibrate == null) {\r\n\t            return;\r\n\t        }\r\n\t        navigator.vibrate(pattern);\r\n\t    };\r\n\t    return Vibration;\r\n\t}());\r\n\texports.Vibration = Vibration;\r\n\n\n/***/ },\n/* 146 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\n\n/***/ },\n/* 147 */\n146,\n/* 148 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(99);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar CustomUtils_1 = __webpack_require__(20);\r\n\tvar ComponentAttributes_1 = __webpack_require__(68);\r\n\tvar AnimationStyle = (function (_super) {\r\n\t    __extends(AnimationStyle, _super);\r\n\t    function AnimationStyle() {\r\n\t        _super.call(this);\r\n\t        this.animation = \"\";\r\n\t        this.frames = null;\r\n\t        this.startFrame = 0;\r\n\t        this.speed = 1;\r\n\t        this.loop = false;\r\n\t        this.stop = false;\r\n\t    }\r\n\t    AnimationStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.node = node;\r\n\t        if (node.hasAttribute(ComponentAttributes_1.AnimationStyleAttributes.ANIMATION)) {\r\n\t            this.animation = node.getAttribute(ComponentAttributes_1.AnimationStyleAttributes.ANIMATION);\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.AnimationStyleAttributes.FRAMES)) {\r\n\t            this.frames = node.getAttribute(ComponentAttributes_1.AnimationStyleAttributes.FRAMES).split(\";\");\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.AnimationStyleAttributes.START_FRAME)) {\r\n\t            this.startFrame = parseInt(node.getAttribute(ComponentAttributes_1.AnimationStyleAttributes.START_FRAME));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.AnimationStyleAttributes.END_FRAME)) {\r\n\t            this.endFrame = parseInt(node.getAttribute(ComponentAttributes_1.AnimationStyleAttributes.END_FRAME));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.AnimationStyleAttributes.LOOP)) {\r\n\t            this.loop = neo_common_1.StringUtils.parseBoolean(node.getAttribute(ComponentAttributes_1.AnimationStyleAttributes.LOOP));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.AnimationStyleAttributes.STOP)) {\r\n\t            this.stop = neo_common_1.StringUtils.parseBoolean(node.getAttribute(ComponentAttributes_1.AnimationStyleAttributes.STOP));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.AnimationStyleAttributes.SPEED)) {\r\n\t            this.speed = parseFloat(node.getAttribute(ComponentAttributes_1.AnimationStyleAttributes.SPEED));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.AnimationStyleAttributes.ALPHA)) {\r\n\t            this.alpha = parseFloat(node.getAttribute(ComponentAttributes_1.AnimationStyleAttributes.ALPHA));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.AnimationStyleAttributes.TINT)) {\r\n\t            this.tint = parseInt(node.getAttribute(ComponentAttributes_1.AnimationStyleAttributes.TINT), 16);\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.AnimationStyleAttributes.BLEND_MODE)) {\r\n\t            this.blendMode = CustomUtils_1.CustomUtils.getBlendMode(parseInt(node.getAttribute(ComponentAttributes_1.AnimationStyleAttributes.BLEND_MODE)));\r\n\t        }\r\n\t        if (node.hasAttribute(ComponentAttributes_1.AnimationStyleAttributes.REVERSE)) {\r\n\t            this.reverse = neo_common_1.StringUtils.parseBoolean(node.getAttribute(ComponentAttributes_1.AnimationStyleAttributes.REVERSE));\r\n\t        }\r\n\t    };\r\n\t    AnimationStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], AnimationStyle);\r\n\t    return AnimationStyle;\r\n\t}(Style_1.Style));\r\n\texports.AnimationStyle = AnimationStyle;\r\n\n\n/***/ },\n/* 149 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(99);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ContainerStyle = (function (_super) {\r\n\t    __extends(ContainerStyle, _super);\r\n\t    function ContainerStyle() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    ContainerStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.node = node;\r\n\t    };\r\n\t    ContainerStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], ContainerStyle);\r\n\t    return ContainerStyle;\r\n\t}(Style_1.Style));\r\n\texports.ContainerStyle = ContainerStyle;\r\n\n\n/***/ },\n/* 150 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(99);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ProtonStyle = (function (_super) {\r\n\t    __extends(ProtonStyle, _super);\r\n\t    function ProtonStyle() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    ProtonStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.node = node;\r\n\t    };\r\n\t    ProtonStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], ProtonStyle);\r\n\t    return ProtonStyle;\r\n\t}(Style_1.Style));\r\n\texports.ProtonStyle = ProtonStyle;\r\n\n\n/***/ },\n/* 151 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(99);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ShapeStyle = (function (_super) {\r\n\t    __extends(ShapeStyle, _super);\r\n\t    function ShapeStyle() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    ShapeStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.node = node;\r\n\t        if (node.hasAttribute(\"LineWidth\")) {\r\n\t            this.lineWidth = parseInt(node.getAttribute(\"LineWidth\"));\r\n\t        }\r\n\t    };\r\n\t    ShapeStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], ShapeStyle);\r\n\t    return ShapeStyle;\r\n\t}(Style_1.Style));\r\n\texports.ShapeStyle = ShapeStyle;\r\n\n\n/***/ },\n/* 152 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Style_1 = __webpack_require__(99);\r\n\tvar ContainerElement_1 = __webpack_require__(90);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar TimelineStyle = (function (_super) {\r\n\t    __extends(TimelineStyle, _super);\r\n\t    function TimelineStyle() {\r\n\t        _super.call(this);\r\n\t        this.frames = {};\r\n\t        this.framesSounds = {};\r\n\t    }\r\n\t    TimelineStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            switch (next.nodeName) {\r\n\t                case \"Elements\":\r\n\t                    this.container = new ContainerElement_1.ContainerElement();\r\n\t                    this.container.create(next);\r\n\t                    break;\r\n\t                case \"TimeLine\":\r\n\t                    var nextCase = next.firstElementChild;\r\n\t                    while (nextCase != null) {\r\n\t                        if (nextCase.hasAttribute(\"Frame\")) {\r\n\t                            if (this.frames[nextCase.getAttribute(\"Frame\")] !== null) {\r\n\t                                this.frames[nextCase.getAttribute(\"Frame\")] = nextCase;\r\n\t                            }\r\n\t                            else {\r\n\t                                if (false) {\r\n\t                                    this.log(\"ERROR case \" +\r\n\t                                        nextCase.getAttribute(\"Frame\") +\r\n\t                                        \" already exist in switchStyle \" +\r\n\t                                        node.nodeName);\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                        if (nextCase.nodeName === \"Outro\") {\r\n\t                            this.outro = nextCase;\r\n\t                        }\r\n\t                        nextCase = nextCase.nextElementSibling;\r\n\t                    }\r\n\t                    break;\r\n\t                case \"SoundTimeline\":\r\n\t                    var nextCase = next.firstElementChild;\r\n\t                    while (nextCase != null) {\r\n\t                        if (nextCase.hasAttribute(\"Frame\")) {\r\n\t                            if (this.framesSounds[nextCase.getAttribute(\"Frame\")] !== null) {\r\n\t                                this.framesSounds[nextCase.getAttribute(\"Frame\")] = nextCase;\r\n\t                            }\r\n\t                            else {\r\n\t                                if (false) {\r\n\t                                    this.log(\"ERROR case \" +\r\n\t                                        nextCase.getAttribute(\"Frame\") +\r\n\t                                        \" already exist in switchStyle \" +\r\n\t                                        node.nodeName);\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                        if (nextCase.nodeName === \"Outro\") {\r\n\t                            this.outroSounds = nextCase;\r\n\t                        }\r\n\t                        nextCase = nextCase.nextElementSibling;\r\n\t                    }\r\n\t                    break;\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    TimelineStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], TimelineStyle);\r\n\t    return TimelineStyle;\r\n\t}(Style_1.Style));\r\n\texports.TimelineStyle = TimelineStyle;\r\n\n\n/***/ },\n/* 153 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Resource_1 = __webpack_require__(65);\r\n\tvar SndResource = (function (_super) {\r\n\t    __extends(SndResource, _super);\r\n\t    function SndResource() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    SndResource.getSongById = function (id) {\r\n\t        if (this.Sounds != null) {\r\n\t            return this.Sounds[id];\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no sounds\");\r\n\t            }\r\n\t        }\r\n\t        if (false) {\r\n\t            this.log(\"ERROR no song: \" + id);\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    SndResource.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"SndResource\", s);\r\n\t        }\r\n\t    };\r\n\t    SndResource.Sounds = {};\r\n\t    return SndResource;\r\n\t}(Resource_1.Resource));\r\n\texports.SndResource = SndResource;\r\n\n\n/***/ },\n/* 154 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ShapeElement_1 = __webpack_require__(12);\r\n\tvar EllipseElement = (function (_super) {\r\n\t    __extends(EllipseElement, _super);\r\n\t    function EllipseElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    EllipseElement.prototype.updateByNode = function (node) {\r\n\t        var redraw = false;\r\n\t        if (node.hasAttribute(exports.EllipseElementAttributes.POSITION_X)) {\r\n\t            this.position.x = parseInt(node.getAttribute(exports.EllipseElementAttributes.POSITION_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.EllipseElementAttributes.POSITION_Y)) {\r\n\t            this.position.y = parseInt(node.getAttribute(exports.EllipseElementAttributes.POSITION_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.EllipseElementAttributes.CX)) {\r\n\t            this._x = parseInt(node.getAttribute(exports.EllipseElementAttributes.CX));\r\n\t            redraw = true;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.EllipseElementAttributes.CY)) {\r\n\t            this._y = parseInt(node.getAttribute(exports.EllipseElementAttributes.CY));\r\n\t            redraw = true;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.EllipseElementAttributes.RX)) {\r\n\t            this._rx = parseInt(node.getAttribute(exports.EllipseElementAttributes.RX));\r\n\t            redraw = true;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.EllipseElementAttributes.RY)) {\r\n\t            this._ry = parseInt(node.getAttribute(exports.EllipseElementAttributes.RY));\r\n\t            redraw = true;\r\n\t        }\r\n\t        if (!_super.prototype.updateByNode.call(this, node)) {\r\n\t            if (redraw) {\r\n\t                this.redraw();\r\n\t                return true;\r\n\t            }\r\n\t            else {\r\n\t                return false;\r\n\t            }\r\n\t        }\r\n\t        return true;\r\n\t    };\r\n\t    EllipseElement.prototype.redraw = function () {\r\n\t        this.clear();\r\n\t        this.beginFill(this._color, this._fillAlpha);\r\n\t        this.lineStyle(this._lineWidth, this._lineColor, this._lineAlpha);\r\n\t        this.drawEllipse(this._x, this._y, this._rx, this._ry);\r\n\t        this.endFill();\r\n\t    };\r\n\t    EllipseElement.prototype.clone = function () {\r\n\t        var element = new EllipseElement();\r\n\t        element.removeChildren();\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.tint = this.tint;\r\n\t        element.blendMode = this.blendMode;\r\n\t        element.name = this.name;\r\n\t        element._tweenEngine = this._tweenEngine;\r\n\t        element._lineWidth = this._lineWidth;\r\n\t        element._lineColor = this._lineColor;\r\n\t        element._lineAlpha = this._lineAlpha;\r\n\t        element._fillAlpha = this._fillAlpha;\r\n\t        element._color = this._color;\r\n\t        element._x = this._x;\r\n\t        element._y = this._y;\r\n\t        element._rx = this._rx;\r\n\t        element._ry = this._ry;\r\n\t        element.redraw();\r\n\t        return element;\r\n\t    };\r\n\t    EllipseElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], EllipseElement);\r\n\t    return EllipseElement;\r\n\t}(ShapeElement_1.ShapeElement));\r\n\texports.EllipseElement = EllipseElement;\r\n\texports.EllipseElementAttributes = {\r\n\t    CX: \"CX\",\r\n\t    CY: \"CY\",\r\n\t    RX: \"RX\",\r\n\t    RY: \"RY\",\r\n\t    POSITION_X: \"PositionX\",\r\n\t    POSITION_Y: \"PositionY\",\r\n\t};\r\n\n\n/***/ },\n/* 155 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar ImageElement_1 = __webpack_require__(103);\r\n\tvar AnimationElement_1 = __webpack_require__(100);\r\n\tvar CustomUtils_1 = __webpack_require__(20);\r\n\tvar ImageGroupElement = (function (_super) {\r\n\t    __extends(ImageGroupElement, _super);\r\n\t    function ImageGroupElement() {\r\n\t        _super.call(this);\r\n\t        this._tint = 0xffffff;\r\n\t        this.blendMode = 0;\r\n\t    }\r\n\t    ImageGroupElement.prototype.internalDestroy = function (options) {\r\n\t        if (this.maskElement) {\r\n\t            this.removeChild(this.maskElement);\r\n\t            this.maskElement.destroy();\r\n\t            this.maskElement = null;\r\n\t        }\r\n\t        if (this.imageElement) {\r\n\t            this.removeChild(this.imageElement);\r\n\t            this.imageElement.destroy();\r\n\t            this.imageElement = null;\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(ImageGroupElement.prototype, \"tint\", {\r\n\t        get: function () {\r\n\t            return this._tint;\r\n\t        },\r\n\t        set: function (tintColor) {\r\n\t            this._tint = tintColor;\r\n\t            if (this.imageElement) {\r\n\t                this.imageElement.tint = this._tint;\r\n\t            }\r\n\t            if (this.maskElement) {\r\n\t                this.maskElement.tint = this._tint;\r\n\t            }\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ImageGroupElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        this.updateByNode(node);\r\n\t    };\r\n\t    ImageGroupElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(ImageGroupElementAttributes.BLEND_MODE)) {\r\n\t            this.blendMode = CustomUtils_1.CustomUtils.getBlendMode(parseInt(node.getAttribute(ImageGroupElementAttributes.BLEND_MODE)));\r\n\t        }\r\n\t        var imageName = null;\r\n\t        var imageNode = this.parseChild(node, \"IMAGE_ELEMENT\");\r\n\t        if (imageNode != null) {\r\n\t            if (imageNode.hasAttribute(\"Image\")) {\r\n\t                imageName = imageNode.getAttribute(\"Image\");\r\n\t            }\r\n\t            if (imageNode.hasAttribute(\"Image\") || imageNode.hasAttribute(\"Style\")) {\r\n\t                if (this.imageElement) {\r\n\t                    this.removeChild(this.imageElement);\r\n\t                    this.imageElement.destroy();\r\n\t                    this.imageElement = null;\r\n\t                }\r\n\t            }\r\n\t            imageNode.setAttribute(\"BlendMode\", \"1\");\r\n\t            if (this.imageElement) {\r\n\t                this.imageElement.updateByNode(imageNode);\r\n\t            }\r\n\t            else {\r\n\t                switch (imageNode.getAttribute(\"Class\")) {\r\n\t                    case \"ImageElement\":\r\n\t                        this.imageElement = new ImageElement_1.ImageElement();\r\n\t                        this.imageElement.create(imageNode);\r\n\t                        this.addChild(this.imageElement);\r\n\t                        break;\r\n\t                    case \"AnimationElement\":\r\n\t                        this.imageElement = new AnimationElement_1.AnimationElement();\r\n\t                        this.imageElement.create(imageNode);\r\n\t                        this.addChild(this.imageElement);\r\n\t                        break;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        var maskNode = this.parseChild(node, \"MASK_ELEMENT\");\r\n\t        if (maskNode != null) {\r\n\t            if (maskNode.hasAttribute(\"Image\")) {\r\n\t                switch (maskNode.getAttribute(\"Image\")) {\r\n\t                    case \"_\":\r\n\t                    case \"\":\r\n\t                    case \"default\":\r\n\t                        if (imageName) {\r\n\t                            maskNode.setAttribute(\"Image\", imageName + \"_mask\");\r\n\t                        }\r\n\t                        break;\r\n\t                }\r\n\t            }\r\n\t            if (maskNode.hasAttribute(\"Image\") || maskNode.hasAttribute(\"Style\")) {\r\n\t                if (this.maskElement) {\r\n\t                    this.removeChild(this.maskElement);\r\n\t                    this.maskElement.destroy();\r\n\t                    this.maskElement = null;\r\n\t                }\r\n\t            }\r\n\t            if (this.maskElement) {\r\n\t                this.maskElement.updateByNode(maskNode);\r\n\t            }\r\n\t            else {\r\n\t                switch (maskNode.getAttribute(\"Class\")) {\r\n\t                    case \"ImageElement\":\r\n\t                        this.maskElement = new ImageElement_1.ImageElement();\r\n\t                        this.maskElement.create(maskNode);\r\n\t                        this.addChildAt(this.maskElement, 0);\r\n\t                        break;\r\n\t                    case \"AnimationElement\":\r\n\t                        this.maskElement = new AnimationElement_1.AnimationElement();\r\n\t                        this.maskElement.create(maskNode);\r\n\t                        this.addChildAt(this.maskElement, 0);\r\n\t                        break;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(ImageGroupElementAttributes.TINT)) {\r\n\t            this.tint = parseInt(node.getAttribute(ImageGroupElementAttributes.TINT), 16);\r\n\t        }\r\n\t        if (node.hasAttribute(ImageGroupElementAttributes.STOP) ||\r\n\t            node.hasAttribute(ImageGroupElementAttributes.PLAY) ||\r\n\t            node.hasAttribute(ImageGroupElementAttributes.REVERSE)) {\r\n\t            if (this.imageElement instanceof AnimationElement_1.AnimationElement || this.maskElement instanceof AnimationElement_1.AnimationElement) {\r\n\t                var tempNode = document.createElement(\"UpdateNode\");\r\n\t                if (node.hasAttribute(ImageGroupElementAttributes.STOP)) {\r\n\t                    tempNode.setAttribute(ImageGroupElementAttributes.STOP, node.getAttribute(ImageGroupElementAttributes.STOP));\r\n\t                }\r\n\t                if (node.hasAttribute(ImageGroupElementAttributes.PLAY)) {\r\n\t                    tempNode.setAttribute(ImageGroupElementAttributes.PLAY, node.getAttribute(ImageGroupElementAttributes.PLAY));\r\n\t                }\r\n\t                if (node.hasAttribute(ImageGroupElementAttributes.REVERSE)) {\r\n\t                    tempNode.setAttribute(ImageGroupElementAttributes.REVERSE, node.getAttribute(ImageGroupElementAttributes.REVERSE));\r\n\t                }\r\n\t                if (this.imageElement instanceof AnimationElement_1.AnimationElement) {\r\n\t                    this.imageElement.updateByNode(tempNode);\r\n\t                }\r\n\t                if (this.maskElement instanceof AnimationElement_1.AnimationElement) {\r\n\t                    this.maskElement.updateByNode(tempNode);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        switch (this.blendMode) {\r\n\t            case 0:\r\n\t                if (this.imageElement) {\r\n\t                    this.imageElement.blendMode = CustomUtils_1.CustomUtils.getBlendMode(1);\r\n\t                }\r\n\t                if (this.maskElement) {\r\n\t                    this.maskElement.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this.blendMode);\r\n\t                }\r\n\t                break;\r\n\t            default:\r\n\t                if (this.imageElement) {\r\n\t                    this.imageElement.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this.blendMode);\r\n\t                }\r\n\t                if (this.maskElement) {\r\n\t                    this.maskElement.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this.blendMode);\r\n\t                }\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    ImageGroupElement.prototype.parseChild = function (node, keyPrefix) {\r\n\t        if (keyPrefix === void 0) { keyPrefix = \"MASK_ELEMENT\"; }\r\n\t        var tempNode = null;\r\n\t        var attributePrefix = ImageGroupElementAttributes[keyPrefix];\r\n\t        if (!attributePrefix) {\r\n\t            if (false) {\r\n\t                this.log(\"Unknown key prefix: '\" + keyPrefix + \"'\");\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (node.hasAttribute(ImageGroupElementAttributes[keyPrefix])) {\r\n\t            if (tempNode == null) {\r\n\t                tempNode = document.createElement(attributePrefix + \"Node\");\r\n\t            }\r\n\t            tempNode.setAttribute(\"Class\", \"ImageElement\");\r\n\t            tempNode.setAttribute(\"Image\", node.getAttribute(ImageGroupElementAttributes[keyPrefix]));\r\n\t        }\r\n\t        if (node.hasAttribute(ImageGroupElementAttributes[keyPrefix + \"_STYLE\"])) {\r\n\t            if (tempNode == null) {\r\n\t                tempNode = document.createElement(attributePrefix + \"Node\");\r\n\t            }\r\n\t            tempNode.setAttribute(\"Class\", \"AnimationElement\");\r\n\t            tempNode.setAttribute(\"Style\", node.getAttribute(ImageGroupElementAttributes[keyPrefix + \"_STYLE\"]));\r\n\t        }\r\n\t        for (var key in ImageGroupElementAttributes) {\r\n\t            if (key.substring(0, 5) == \"ATTR_\") {\r\n\t                var attributeName = ImageGroupElementAttributes[key];\r\n\t                if (node.hasAttribute(attributePrefix + attributeName)) {\r\n\t                    if (tempNode == null) {\r\n\t                        tempNode = document.createElement(attributePrefix + \"Node\");\r\n\t                    }\r\n\t                    tempNode.setAttribute(attributeName, node.getAttribute(attributePrefix + attributeName));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return tempNode;\r\n\t    };\r\n\t    ImageGroupElement.prototype.clone = function () {\r\n\t        var element = new ImageGroupElement();\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.skew.x = this.skew.x;\r\n\t        element.skew.y = this.skew.y;\r\n\t        element.visible = this.visible;\r\n\t        element.name = this.name;\r\n\t        element.removeChildren();\r\n\t        if (this.maskElement) {\r\n\t            element.maskElement = this.maskElement.clone();\r\n\t            element.addChild(element.maskElement);\r\n\t        }\r\n\t        if (this.imageElement) {\r\n\t            element.imageElement = this.imageElement.clone();\r\n\t            element.addChild(element.imageElement);\r\n\t        }\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ImageGroupElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ImageGroupElement);\r\n\t    return ImageGroupElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.ImageGroupElement = ImageGroupElement;\r\n\tvar ImageGroupElementAttributes = {\r\n\t    DEBUG: \"Debug\",\r\n\t    MASK_ELEMENT: \"MaskElement\",\r\n\t    MASK_ELEMENT_STYLE: \"MaskElementStyle\",\r\n\t    IMAGE_ELEMENT: \"ImageElement\",\r\n\t    IMAGE_ELEMENT_STYLE: \"ImageElementStyle\",\r\n\t    ATTR_CLASS: \"Class\",\r\n\t    ATTR_PIVOT_X: \"PivotX\",\r\n\t    ATTR_PIVOT_Y: \"PivotY\",\r\n\t    ATTR_POSITION_X: \"PositionX\",\r\n\t    ATTR_POSITION_Y: \"PositionY\",\r\n\t    ATTR_ROTATION: \"Rotation\",\r\n\t    ATTR_SCALE: \"Scale\",\r\n\t    ATTR_SCALE_X: \"ScaleX\",\r\n\t    ATTR_SCALE_Y: \"ScaleY\",\r\n\t    ATTR_SKEW_X: \"SkewX\",\r\n\t    ATTR_SKEW_Y: \"SkewY\",\r\n\t    ATTR_X: \"X\",\r\n\t    ATTR_Y: \"Y\",\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    PLAY: \"Play\",\r\n\t    REVERSE: \"Reverse\",\r\n\t    STOP: \"Stop\",\r\n\t    TINT: \"Tint\",\r\n\t};\r\n\n\n/***/ },\n/* 156 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar ImageTextCounterElement_1 = __webpack_require__(110);\r\n\tvar ImageTextElement_1 = __webpack_require__(111);\r\n\tvar ImageTextCounterElement2 = (function (_super) {\r\n\t    __extends(ImageTextCounterElement2, _super);\r\n\t    function ImageTextCounterElement2() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    ImageTextCounterElement2.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (this.imageText == null) {\r\n\t            if (this.font != null) {\r\n\t                this.imageText = new ImageTextElement_1.ImageTextElement();\r\n\t                this.imageText.visible = false;\r\n\t                this.imageText.font = this.font + \"Blend\";\r\n\t                this.imageText.text = this.text;\r\n\t                this.imageText.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font + \"Blend\" });\r\n\t                this.imageText.addChild(this.imageText.bitmapText);\r\n\t                this.addChild(this.imageText);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ImageTextCounterElement2.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(\"Glow\")) {\r\n\t            this.glowAsHighWin();\r\n\t        }\r\n\t    };\r\n\t    ImageTextCounterElement2.prototype.realign = function () {\r\n\t        _super.prototype.realign.call(this);\r\n\t        this.imageText.position.x = this.bitmapText.position.x;\r\n\t        this.imageText.position.y = this.bitmapText.position.y;\r\n\t    };\r\n\t    ImageTextCounterElement2.prototype.onCountTo = function () {\r\n\t        _super.prototype.onCountTo.call(this);\r\n\t        this.imageText.bitmapText.text = this.bitmapText.text;\r\n\t    };\r\n\t    ImageTextCounterElement2.prototype.glowAsWin = function () {\r\n\t        var _this = this;\r\n\t        this.imageText.visible = true;\r\n\t        Tweens_1.Tweens.removeTweens(this.imageText, \"all\");\r\n\t        Tweens_1.Tweens.alphaTween(this.imageText, {\r\n\t            alphas: [0, 1],\r\n\t            tweenDuration: 5,\r\n\t            tweenDelay: 20,\r\n\t            callbackFunction: function () {\r\n\t                Tweens_1.Tweens.removeTweens(_this.imageText, \"all\");\r\n\t                Tweens_1.Tweens.alphaTween(_this.imageText, {\r\n\t                    alphas: [1, 1, 0],\r\n\t                    tweenDuration: 30,\r\n\t                    callbackFunction: function () {\r\n\t                        _this.imageText.visible = false;\r\n\t                    },\r\n\t                });\r\n\t            },\r\n\t        });\r\n\t    };\r\n\t    ImageTextCounterElement2.prototype.glowAsHighWin = function () {\r\n\t        var _this = this;\r\n\t        this.imageText.visible = true;\r\n\t        Tweens_1.Tweens.removeTweens(this.imageText, \"all\");\r\n\t        Tweens_1.Tweens.alphaTween(this.imageText, {\r\n\t            alphas: [0, 1],\r\n\t            tweenDuration: 5,\r\n\t            callbackFunction: function () {\r\n\t                Tweens_1.Tweens.removeTweens(_this.imageText, \"all\");\r\n\t                Tweens_1.Tweens.alphaTween(_this.imageText, {\r\n\t                    alphas: [1, 1, 0],\r\n\t                    tweenDuration: 60,\r\n\t                    callbackFunction: function () {\r\n\t                        _this.imageText.visible = false;\r\n\t                    },\r\n\t                });\r\n\t            },\r\n\t        });\r\n\t    };\r\n\t    ImageTextCounterElement2.prototype.clone = function () {\r\n\t        var element = new ImageTextCounterElement2();\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.font = this.font;\r\n\t        element.text = this.text;\r\n\t        element.textAlign = this.textAlign;\r\n\t        element.textBaseline = this.textBaseline;\r\n\t        element.from = this.from;\r\n\t        element.to = this.to;\r\n\t        element.duration = this.duration;\r\n\t        element.round = this.round;\r\n\t        element.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\r\n\t        element.addChild(element.bitmapText);\r\n\t        element.imageText = this.imageText.clone();\r\n\t        element.imageText.visible = false;\r\n\t        element.addChild(element.imageText);\r\n\t        element.realign();\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    ImageTextCounterElement2 = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ImageTextCounterElement2);\r\n\t    return ImageTextCounterElement2;\r\n\t}(ImageTextCounterElement_1.ImageTextCounterElement));\r\n\texports.ImageTextCounterElement2 = ImageTextCounterElement2;\r\n\n\n/***/ },\n/* 157 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar Machine_1 = __webpack_require__(113);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar Reel_1 = __webpack_require__(114);\r\n\tvar ReelExtended_1 = __webpack_require__(158);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar MachineExtended = (function (_super) {\r\n\t    __extends(MachineExtended, _super);\r\n\t    function MachineExtended() {\r\n\t        _super.apply(this, arguments);\r\n\t        this.teaseOnDelay = 1000;\r\n\t        this._forceStop = false;\r\n\t    }\r\n\t    Object.defineProperty(MachineExtended.prototype, \"forceStop\", {\r\n\t        get: function () {\r\n\t            return this._forceStop;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    MachineExtended.prototype.initialize = function (symbols, reels) {\r\n\t        var ledConfig = Configuration_1.Configuration.Configurations[\"TeasingLedStripeConfiguration\"];\r\n\t        if (ledConfig) {\r\n\t            this.ledStripeTeasing = ledConfig.hasAttribute(\"OnEnter\") ? ledConfig.getAttribute(\"OnEnter\") : null;\r\n\t            this.ledStripeNormal = ledConfig.hasAttribute(\"OnExit\") ? ledConfig.getAttribute(\"OnExit\") : null;\r\n\t        }\r\n\t        _super.prototype.initialize.call(this, symbols, reels);\r\n\t    };\r\n\t    MachineExtended.prototype.spinStop = function (event, force, fromServer, legal) {\r\n\t        var _this = this;\r\n\t        if (force === void 0) { force = false; }\r\n\t        if (fromServer === void 0) { fromServer = false; }\r\n\t        if (legal === void 0) { legal = false; }\r\n\t        this._forceStop = force;\r\n\t        if (fromServer) {\r\n\t            this._stoppedFromServer = true;\r\n\t            if (this._legalStopTimer != null) {\r\n\t                clearTimeout(this._legalStopTimer);\r\n\t            }\r\n\t            if (this.verifyMinGameRoundDurationConditions()) {\r\n\t                this._legalStopTimer = setTimeout(function () { return _this.spinStop(null, false, false, true); }, this.getLegalRemainingSpinDuration());\r\n\t            }\r\n\t            else {\r\n\t                this._stoppedFromLegal = true;\r\n\t            }\r\n\t        }\r\n\t        else if (legal) {\r\n\t            if (this._legalStopTimer != null) {\r\n\t                clearTimeout(this._legalStopTimer);\r\n\t            }\r\n\t            this._stoppedFromLegal = true;\r\n\t        }\r\n\t        else {\r\n\t            this._stopTimer.stop();\r\n\t            this._stoppedFromMachine = true;\r\n\t        }\r\n\t        if (force) {\r\n\t            if (this._legalStopTimer != null) {\r\n\t                clearTimeout(this._legalStopTimer);\r\n\t            }\r\n\t            this._stoppedFromLegal = true;\r\n\t            this._stopTimer.stop();\r\n\t            this._stoppedFromMachine = true;\r\n\t        }\r\n\t        if (false) {\r\n\t            this.log(\"spinStop \" + force);\r\n\t        }\r\n\t        if (this._stoppedFromServer && this._stoppedFromMachine && this._stoppedFromLegal) {\r\n\t            if (!ModuleManager_1.ModuleManager.freespinsActive() &&\r\n\t                !(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin, \"0\");\r\n\t                DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWinDenom, \"0\");\r\n\t            }\r\n\t            var rta_1;\r\n\t            if (this.elementInstance[\"teasing\"] != null) {\r\n\t                this.elementInstance[\"teasing\"].forEach(function (teasingComponent) {\r\n\t                    var reelTeasingAttributes = teasingComponent.checkOnInit({\r\n\t                        force: force,\r\n\t                        stoppedSymbols: _this._stoppedSymbolsArray,\r\n\t                    });\r\n\t                    if (teasingComponent.teasingEnabled) {\r\n\t                        rta_1 = reelTeasingAttributes;\r\n\t                    }\r\n\t                }, this);\r\n\t            }\r\n\t            if (this._reels != null) {\r\n\t                for (var i = 0; i < this._reelCount; i++) {\r\n\t                    if (this._reels[i] != null) {\r\n\t                        if (this._stoppedSymbolsArray.length !== 0) {\r\n\t                            this._reels[i].setData(this._stoppedSymbolsArray[i]);\r\n\t                            if (typeof rta_1 !== \"undefined\") {\r\n\t                                this._reels[i].spinStop(force, rta_1[i].stopDelay);\r\n\t                            }\r\n\t                            else {\r\n\t                                this._reels[i].spinStop(force);\r\n\t                            }\r\n\t                        }\r\n\t                        else {\r\n\t                            if (false) {\r\n\t                                this.log(\"ERROR no stopped symbols\");\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"ERROR no reel with index: \" + i);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no reels\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MachineExtended.prototype.getReel = function (reelIndex) {\r\n\t        return this._reels[reelIndex];\r\n\t    };\r\n\t    MachineExtended.prototype.onReelStopped = function (reelIndex) {\r\n\t        var currentReel = this.getReel(reelIndex);\r\n\t        PlayList_1.PlayList.play(\"SND_BaseRotationEnd\" + reelIndex);\r\n\t        this._stoppedReelIndexes++;\r\n\t        this.actualReelStopped = reelIndex;\r\n\t        currentReel.visible = false;\r\n\t        this.emit(Machine_1.Machine.ReelStopped, this._allowTeasing);\r\n\t        if (this._stoppedReelIndexes === this._reelCount || this.respin != null) {\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseRotation\", 10);\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseRotationStart\", 10);\r\n\t            if (this._legalStopTimer != null) {\r\n\t                clearTimeout(this._legalStopTimer);\r\n\t            }\r\n\t            this._stopTimer.stop();\r\n\t            this._reelsContainer.visible = false;\r\n\t            if (false) {\r\n\t                var old = AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration;\r\n\t                var current = AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan;\r\n\t                var minDuration = current > 0 ? current : old > 0 ? old : 0;\r\n\t                var spinDuration = Date.now() - this._startSpinTime;\r\n\t                if (spinDuration > minDuration || !this.verifyMinGameRoundDurationConditions()) {\r\n\t                    this.log(\"Spin time duration: \" + spinDuration + \" ms\");\r\n\t                }\r\n\t                else {\r\n\t                    console.log(\"%cError spin time duration:\" + spinDuration + \" ms\", \"color: #ff9900\");\r\n\t                }\r\n\t            }\r\n\t            this.emit(Machine_1.Machine.MachineStopped);\r\n\t        }\r\n\t    };\r\n\t    MachineExtended.prototype.createReels = function (reels) {\r\n\t        for (var i = 0; i < this._reelCount; i++) {\r\n\t            this._reels.push(new ReelExtended_1.ReelExtended());\r\n\t        }\r\n\t        for (var i = 0; i < this._reelCount; i++) {\r\n\t            var reel = this._reels[i];\r\n\t            if (this._reelConfiguration != null) {\r\n\t                var configs = this._reelConfiguration.split(\";\");\r\n\t                for (var j = 0; j < configs.length; j++) {\r\n\t                    reel.configure(Configuration_1.Configuration.Configurations[configs[j]]);\r\n\t                }\r\n\t            }\r\n\t            reel.visible = false;\r\n\t            reel.initialize(i > 0 ? this._reels[i - 1] : null, i < this._reelCount - 1 ? this._reels[i + 1] : null, i, this._symbols, reels[i], this._reelX[i], this._reelY[i], this._visibleSymbolCount, 1, 1, this._symbolWidth, this._symbolHeight, this._startDelay * i, this._stopDelay * i);\r\n\t            reel.on(Reel_1.Reel.ReelStopped, this.onReelStopped.bind(this));\r\n\t            reel.on(Reel_1.Reel.ReelStopping, this.onReelStopping.bind(this));\r\n\t            this._reelsContainer.addChild(reel);\r\n\t        }\r\n\t        this._reelsContainer.visible = false;\r\n\t    };\r\n\t    MachineExtended.prototype.onReelStopping = function (reelIndex) {\r\n\t        var _this = this;\r\n\t        if (this.elementInstance[\"teasing\"] != null) {\r\n\t            this.elementInstance[\"teasing\"].forEach(function (teasingComponent) {\r\n\t                var tease = teasingComponent.animateTeasing(reelIndex);\r\n\t                if (_this._reels[reelIndex + 1]) {\r\n\t                    _this.getReel(reelIndex + 1).setTeasing(tease, tease ? _this.teaseOnDelay : 0);\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t        if (this._stoppedReelIndexes + 1 === this._reelCount || this._forceStop) {\r\n\t            if (this.elementInstance[\"teasing\"] != null) {\r\n\t                this.elementInstance[\"teasing\"].forEach(function (teasingComponent) {\r\n\t                    teasingComponent.finishTeasing(reelIndex);\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MachineExtended = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], MachineExtended);\r\n\t    return MachineExtended;\r\n\t}(Machine_1.Machine));\r\n\texports.MachineExtended = MachineExtended;\r\n\n\n/***/ },\n/* 158 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Reel_1 = __webpack_require__(114);\r\n\tvar Symbol_1 = __webpack_require__(107);\r\n\tvar SymbolExtended_1 = __webpack_require__(159);\r\n\tvar ReelExtended = (function (_super) {\r\n\t    __extends(ReelExtended, _super);\r\n\t    function ReelExtended() {\r\n\t        _super.apply(this, arguments);\r\n\t        this.teaseDelayTimer = null;\r\n\t    }\r\n\t    ReelExtended.prototype.showSymbols = function () {\r\n\t        this.shouldBeStopping = false;\r\n\t        this.isStopping = false;\r\n\t        this.stoppingCounter = 0;\r\n\t        this.isTeasing = false;\r\n\t        this.teasingSymbols = [];\r\n\t        this.x = this.positionX;\r\n\t        this.y = this.positionY;\r\n\t        while (this.currentSymbols.length > 0) {\r\n\t            this.returnSymbol(this.currentSymbols.pop());\r\n\t        }\r\n\t        for (var i = 0; i < this.symbolBottomCount + this.symbolCount + this.symbolTopCount; i++) {\r\n\t            var symbolId = void 0;\r\n\t            var symbolCase = void 0;\r\n\t            if (i < this.symbolBottomCount) {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase = i === this.symbolBottomCount - 1 ? Symbol_1.Symbol.CaseRotation : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            else if (i < this.symbolBottomCount + this.symbolCount) {\r\n\t                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - i - 1];\r\n\t                symbolCase = Symbol_1.Symbol.CaseRotation;\r\n\t            }\r\n\t            else {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase = i === this.symbolBottomCount + this.symbolCount ? Symbol_1.Symbol.CaseRotation : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            if (symbolId == 10 && symbolCase == Symbol_1.Symbol.CaseRotation) {\r\n\t                symbolCase = Symbol_1.Symbol.CaseEmpty;\r\n\t            }\r\n\t            this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\t            this.addChildAt(this.currentSymbols[0], 0);\r\n\t        }\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var symbol = this.currentSymbols[i];\r\n\t            symbol.x = -symbol.offsetX;\r\n\t            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\r\n\t        }\r\n\t    };\r\n\t    ReelExtended.prototype.spinRoll = function () {\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            if (this.currentSymbols[i].getCurrentCase() === Symbol_1.Symbol.CaseBlur ||\r\n\t                this.currentSymbols[i].getCurrentCase() === SymbolExtended_1.SymbolExtended.CaseTeasingBlur) {\r\n\t                continue;\r\n\t            }\r\n\t            if (this.currentSymbols[i].getCurrentCase() != Symbol_1.Symbol.CaseRotation) {\r\n\t                this.currentSymbols[i].goToCase(Symbol_1.Symbol.CaseRotation);\r\n\t            }\r\n\t        }\r\n\t        _super.prototype.spinRoll.call(this);\r\n\t    };\r\n\t    ReelExtended.prototype.updateReel = function () {\r\n\t        this.returnSymbol(this.currentSymbols.pop());\r\n\t        if (this.shouldBeStopping && !this.isStopping) {\r\n\t            if (this.previousReel === null) {\r\n\t                this.isStopping = true;\r\n\t            }\r\n\t            else if (this.previousReel.isReelStopping()) {\r\n\t                this.isStopping = true;\r\n\t            }\r\n\t        }\r\n\t        this.stripIndex = (this.stripIndex - 1 + this.strip.length) % this.strip.length;\r\n\t        var symbolId = this.strip[this.stripIndex];\r\n\t        var symbolCase = Symbol_1.Symbol.CaseBlur;\r\n\t        if (this.isStopping) {\r\n\t            if (this.stoppingCounter < this.symbolBottomCount) {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index +\r\n\t                        this.symbolBottomCount +\r\n\t                        this.symbolCount -\r\n\t                        this.stoppingCounter -\r\n\t                        1 +\r\n\t                        this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase =\r\n\t                    this.stoppingCounter === this.symbolBottomCount - 1 ? Symbol_1.Symbol.CaseRotation : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            else if (this.stoppingCounter < this.symbolBottomCount + this.symbolCount) {\r\n\t                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - this.stoppingCounter - 1];\r\n\t                symbolCase = Symbol_1.Symbol.CaseRotation;\r\n\t            }\r\n\t            else {\r\n\t                symbolId =\r\n\t                    this.strip[(this.data.index +\r\n\t                        this.symbolBottomCount +\r\n\t                        this.symbolCount -\r\n\t                        this.stoppingCounter -\r\n\t                        1 +\r\n\t                        this.strip.length) %\r\n\t                        this.strip.length];\r\n\t                symbolCase =\r\n\t                    this.stoppingCounter === this.symbolBottomCount + this.symbolCount\r\n\t                        ? Symbol_1.Symbol.CaseRotation\r\n\t                        : Symbol_1.Symbol.CaseBlur;\r\n\t            }\r\n\t            this.stoppingCounter++;\r\n\t        }\r\n\t        if (this.isTeasing && symbolCase == Symbol_1.Symbol.CaseBlur) {\r\n\t            symbolCase = SymbolExtended_1.SymbolExtended.CaseTeasingBlur;\r\n\t        }\r\n\t        this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\t        this.addChildAt(this.currentSymbols[0], 0);\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var symbol = this.currentSymbols[i];\r\n\t            symbol.x = -symbol.offsetX;\r\n\t            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\r\n\t        }\r\n\t        if (this.isStopping &&\r\n\t            this.stoppingCounter === this.symbolBottomCount + this.symbolCount + this.symbolTopCount) {\r\n\t            this.spinPostRoll();\r\n\t        }\r\n\t        else {\r\n\t            this.spinRoll();\r\n\t        }\r\n\t    };\r\n\t    ReelExtended.prototype.setTeasing = function (toValue, delay) {\r\n\t        if (delay) {\r\n\t            if (this.teaseDelayTimer) {\r\n\t                clearTimeout(this.teaseDelayTimer);\r\n\t            }\r\n\t            this.teaseDelayTimer = setTimeout(function (toValue) {\r\n\t                this.isTeasing = toValue;\r\n\t            }.bind(this, toValue), delay);\r\n\t        }\r\n\t        else {\r\n\t            if (this.teaseDelayTimer) {\r\n\t                clearTimeout(this.teaseDelayTimer);\r\n\t                this.teaseDelayTimer = null;\r\n\t            }\r\n\t            this.isTeasing = toValue;\r\n\t        }\r\n\t    };\r\n\t    ReelExtended.prototype.spinStart = function (delay) {\r\n\t        var _this = this;\r\n\t        this.shouldBeStopping = false;\r\n\t        this.isStopping = false;\r\n\t        this.stoppingCounter = 0;\r\n\t        this.isTeasing = false;\r\n\t        this.teasingSymbols = [];\r\n\t        this.rollSpeed = this.speed;\r\n\t        this.stripIndex = (this.data.index - this.symbolTopCount + this.strip.length) % this.strip.length;\r\n\t        if (delay > 0) {\r\n\t            setTimeout(function () {\r\n\t                _this.spinPreRoll();\r\n\t            }, delay);\r\n\t        }\r\n\t        else {\r\n\t            this.spinPreRoll();\r\n\t        }\r\n\t    };\r\n\t    ReelExtended.prototype.hasDice = function () {\r\n\t        return this.data.symbols.indexOf(10) !== -1;\r\n\t    };\r\n\t    ReelExtended.prototype.isReelTeasing = function () {\r\n\t        return this.isTeasing;\r\n\t    };\r\n\t    ReelExtended = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ReelExtended);\r\n\t    return ReelExtended;\r\n\t}(Reel_1.Reel));\r\n\texports.ReelExtended = ReelExtended;\r\n\n\n/***/ },\n/* 159 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Symbol_1 = __webpack_require__(107);\r\n\tvar SymbolExtended = (function (_super) {\r\n\t    __extends(SymbolExtended, _super);\r\n\t    function SymbolExtended() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    SymbolExtended.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t    };\r\n\t    SymbolExtended.prototype.clone = function () {\r\n\t        var element = new SymbolExtended();\r\n\t        element.elements = this.elements.clone();\r\n\t        element.addChild(element.elements);\r\n\t        element.style = this.style;\r\n\t        element.offsetX = this.offsetX;\r\n\t        element.offsetY = this.offsetY;\r\n\t        element.symbolWidth = this.symbolWidth;\r\n\t        element.symbolHeight = this.symbolHeight;\r\n\t        element.visible = this.visible;\r\n\t        element.case = this.case;\r\n\t        element.style = this.style;\r\n\t        element.zIndex = this.zIndex;\r\n\t        element.type = this.type;\r\n\t        element.hasWinFrame = this.hasWinFrame;\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    SymbolExtended.prototype.getChild = function (el) {\r\n\t        if (this.elements.childs.hasOwnProperty(el)) {\r\n\t            return this.elements.childs[el];\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    SymbolExtended.CaseTeasingBlur = \"TEASING_BLUR\";\r\n\t    SymbolExtended.CasePulse = \"PULSE\";\r\n\t    SymbolExtended = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], SymbolExtended);\r\n\t    return SymbolExtended;\r\n\t}(Symbol_1.Symbol));\r\n\texports.SymbolExtended = SymbolExtended;\r\n\n\n/***/ },\n/* 160 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ShapeElement_1 = __webpack_require__(12);\r\n\tvar PathElementNodeMoveto_1 = __webpack_require__(161);\r\n\tvar PathElementNodeLineto_1 = __webpack_require__(163);\r\n\tvar PathElementNodeCurvetoQuadratic_1 = __webpack_require__(164);\r\n\tvar PathElementNodeCurvetoBezier_1 = __webpack_require__(165);\r\n\tvar PathElementNodeArcto_1 = __webpack_require__(166);\r\n\tvar PathElementNodeClosepath_1 = __webpack_require__(167);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar Attributes_1 = __webpack_require__(19);\r\n\tvar PathElement = (function (_super) {\r\n\t    __extends(PathElement, _super);\r\n\t    function PathElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    PathElement.prototype.internalDestroy = function (options) {\r\n\t        Tweens_1.Tweens.removeTweens(this);\r\n\t        this._path = null;\r\n\t        this._pathTweenArray = null;\r\n\t        this._pathTweenFrom = null;\r\n\t        this._pathTweenTo = null;\r\n\t    };\r\n\t    PathElement.prototype.updateByNode = function (node) {\r\n\t        var redraw = false;\r\n\t        if (node.hasAttribute(exports.PathElementAttributes.POSITION_X)) {\r\n\t            this.position.x = parseInt(node.getAttribute(exports.PathElementAttributes.POSITION_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.PathElementAttributes.POSITION_Y)) {\r\n\t            this.position.y = parseInt(node.getAttribute(exports.PathElementAttributes.POSITION_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.PathElementAttributes.PATH)) {\r\n\t            this._path = this.parsePath(node.getAttribute(exports.PathElementAttributes.PATH));\r\n\t            redraw = true;\r\n\t        }\r\n\t        this.runPathTween(node);\r\n\t        if (!_super.prototype.updateByNode.call(this, node)) {\r\n\t            if (redraw) {\r\n\t                this.redraw();\r\n\t                return true;\r\n\t            }\r\n\t            else {\r\n\t                return false;\r\n\t            }\r\n\t        }\r\n\t        return true;\r\n\t    };\r\n\t    PathElement.prototype.parsePath = function (input) {\r\n\t        input = input.replace(/\\s+/g, \" \").replace(/^\\s+|\\s+$/, \"\");\r\n\t        var pathArray = input.split(\" \");\r\n\t        var pathData = [];\r\n\t        var lastNode;\r\n\t        var lastMoveto;\r\n\t        var lastWasAbsolute = true;\r\n\t        for (var index = 0; index < pathArray.length; null) {\r\n\t            var out = this.parseNode(pathArray, index, lastNode, lastMoveto, lastWasAbsolute);\r\n\t            if (!out || !out.element) {\r\n\t                this.logError('Error parsing path: \"' + input + '\" close to \"' + pathArray.slice(index).join(\" \") + '\"');\r\n\t                break;\r\n\t            }\r\n\t            lastNode = out.element;\r\n\t            lastWasAbsolute = out.absolute;\r\n\t            if (out.element instanceof PathElementNodeMoveto_1.PathElementNodeMoveto && out.element.command == \"M\") {\r\n\t                lastMoveto = out.element;\r\n\t            }\r\n\t            pathData.push(lastNode);\r\n\t            index = out.index;\r\n\t        }\r\n\t        return pathData;\r\n\t    };\r\n\t    PathElement.prototype.parseNode = function (array, index, lastPoint, lastMoveto, lastWasAbsolute) {\r\n\t        if (lastPoint === void 0) { lastPoint = null; }\r\n\t        if (lastMoveto === void 0) { lastMoveto = null; }\r\n\t        if (lastWasAbsolute === void 0) { lastWasAbsolute = true; }\r\n\t        if (array.length <= index) {\r\n\t            return null;\r\n\t        }\r\n\t        var command = /[mMlLcCqQaAzZ]/.test(array[index][0]) ? array[index][0] : null;\r\n\t        var noCommand = command == null;\r\n\t        var relative;\r\n\t        if (!command) {\r\n\t            index--;\r\n\t            if (!lastPoint) {\r\n\t                command = \"M\";\r\n\t            }\r\n\t            else {\r\n\t                switch (lastPoint.command) {\r\n\t                    case \"M\":\r\n\t                        command = \"L\";\r\n\t                        break;\r\n\t                    default:\r\n\t                        command = lastPoint.command;\r\n\t                }\r\n\t                relative = !lastWasAbsolute;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            relative = command == command.toLowerCase();\r\n\t        }\r\n\t        var concat = false;\r\n\t        if (!noCommand && array[index].length > 1) {\r\n\t            concat = true;\r\n\t        }\r\n\t        else {\r\n\t            index++;\r\n\t        }\r\n\t        var out = {\r\n\t            element: null,\r\n\t            index: null,\r\n\t            absolute: !relative,\r\n\t        };\r\n\t        switch (command) {\r\n\t            case \"M\":\r\n\t            case \"m\":\r\n\t                if (array.length < index) {\r\n\t                    return null;\r\n\t                }\r\n\t                var m1 = this.parsePair(concat ? array[index].substr(1) : array[index]);\r\n\t                out.element = new PathElementNodeMoveto_1.PathElementNodeMoveto((relative && lastPoint != null ? lastPoint.x : 0) + m1.x, (relative && lastPoint != null ? lastPoint.y : 0) + m1.y);\r\n\t                out.index = index + 1;\r\n\t                break;\r\n\t            case \"L\":\r\n\t            case \"l\":\r\n\t                if (array.length < index) {\r\n\t                    return null;\r\n\t                }\r\n\t                var l1 = this.parsePair(concat ? array[index].substr(1) : array[index]);\r\n\t                out.element = new PathElementNodeLineto_1.PathElementNodeLineto((relative && lastPoint != null ? lastPoint.x : 0) + l1.x, (relative && lastPoint != null ? lastPoint.y : 0) + l1.y);\r\n\t                out.index = index + 1;\r\n\t                break;\r\n\t            case \"Q\":\r\n\t            case \"q\":\r\n\t                if (array.length + 1 < index) {\r\n\t                    return null;\r\n\t                }\r\n\t                var q1 = this.parsePair(concat ? array[index].substr(1) : array[index]);\r\n\t                var q2 = this.parsePair(array[index + 1]);\r\n\t                out.element = new PathElementNodeCurvetoQuadratic_1.PathElementNodeCurvetoQuadratic((relative && lastPoint != null ? lastPoint.x : 0) + q1.x, (relative && lastPoint != null ? lastPoint.y : 0) + q1.y, (relative && lastPoint != null ? lastPoint.x : 0) + q2.x, (relative && lastPoint != null ? lastPoint.y : 0) + q2.y);\r\n\t                out.index = index + 2;\r\n\t                break;\r\n\t            case \"C\":\r\n\t            case \"c\":\r\n\t                if (array.length + 2 < index) {\r\n\t                    return null;\r\n\t                }\r\n\t                var c1 = this.parsePair(concat ? array[index].substr(1) : array[index]);\r\n\t                var c2 = this.parsePair(array[index + 1]);\r\n\t                var c3 = this.parsePair(array[index + 2]);\r\n\t                out.element = new PathElementNodeCurvetoBezier_1.PathElementNodeCurvetoBezier((relative && lastPoint != null ? lastPoint.x : 0) + c1.x, (relative && lastPoint != null ? lastPoint.y : 0) + c1.y, (relative && lastPoint != null ? lastPoint.x : 0) + c2.x, (relative && lastPoint != null ? lastPoint.y : 0) + c2.y, (relative && lastPoint != null ? lastPoint.x : 0) + c3.x, (relative && lastPoint != null ? lastPoint.y : 0) + c3.y);\r\n\t                out.index = index + 3;\r\n\t                break;\r\n\t            case \"A\":\r\n\t            case \"a\":\r\n\t                if (array.length + 2 < index) {\r\n\t                    return null;\r\n\t                }\r\n\t                var a1 = this.parsePair(concat ? array[index].substr(1) : array[index]);\r\n\t                var a2 = this.parsePair(array[index + 1]);\r\n\t                var a3 = parseFloat(array[index + 2]);\r\n\t                out.element = new PathElementNodeArcto_1.PathElementNodeArcto((relative && lastPoint != null ? lastPoint.x : 0) + a1.x, (relative && lastPoint != null ? lastPoint.y : 0) + a1.y, (relative && lastPoint != null ? lastPoint.x : 0) + a2.x, (relative && lastPoint != null ? lastPoint.y : 0) + a2.y, a3);\r\n\t                out.index = index + 3;\r\n\t                break;\r\n\t            case \"Z\":\r\n\t            case \"z\":\r\n\t                if (lastMoveto) {\r\n\t                    out.element = new PathElementNodeClosepath_1.PathElementNodeClosepath(lastMoveto.x, lastMoveto.y);\r\n\t                    out.index = index + 1;\r\n\t                }\r\n\t                break;\r\n\t        }\r\n\t        return out;\r\n\t    };\r\n\t    PathElement.prototype.parsePair = function (pair) {\r\n\t        var arr = pair.split(\",\").map(function (value) { return parseFloat(value); });\r\n\t        return new PIXI.Point(arr.length > 0 ? arr[0] : null, arr.length > 1 ? arr[1] : null);\r\n\t    };\r\n\t    PathElement.prototype.runPathTween = function (node) {\r\n\t        var _this = this;\r\n\t        if (!node.hasAttribute(exports.PathElementAttributes.PATH_TWEEN)) {\r\n\t            return;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this, \"pathIndex\");\r\n\t        this._pathTweenLastIndex = null;\r\n\t        var tweenValues = [];\r\n\t        var lastPath;\r\n\t        this._pathTweenArray = node\r\n\t            .getAttribute(exports.PathElementAttributes.PATH_TWEEN)\r\n\t            .split(\";\")\r\n\t            .map(function (value, index) {\r\n\t            var out;\r\n\t            if (index == 0 &&\r\n\t                node.getAttribute(exports.PathElementAttributes.PATH_TWEEN) ==\r\n\t                    exports.PathElementAttributes.PATH_TWEEN_POSITION_VALUE.SMOOTH) {\r\n\t                out = [];\r\n\t                _this._path.forEach(function (node) {\r\n\t                    out.push(node.clone());\r\n\t                });\r\n\t            }\r\n\t            else {\r\n\t                out = _this.parsePath(value);\r\n\t            }\r\n\t            if (!lastPath) {\r\n\t                lastPath = {};\r\n\t            }\r\n\t            var anyChange = false;\r\n\t            out.forEach(function (value, index) {\r\n\t                if (lastPath[index] && lastPath[index].equalTo(value)) {\r\n\t                    out[index] = null;\r\n\t                }\r\n\t                else {\r\n\t                    lastPath[index] = value;\r\n\t                    anyChange = true;\r\n\t                }\r\n\t            });\r\n\t            if (!anyChange) {\r\n\t                out = null;\r\n\t                tweenValues.push(tweenValues.length ? tweenValues[tweenValues.length - 1] : 0);\r\n\t            }\r\n\t            else {\r\n\t                if (tweenValues.length) {\r\n\t                    tweenValues[tweenValues.length - 1] = tweenValues.length - 1;\r\n\t                }\r\n\t                tweenValues.push(tweenValues.length);\r\n\t            }\r\n\t            return out;\r\n\t        });\r\n\t        var tween = \"tweenIndex\";\r\n\t        var tweenEase = neo_common_1.ArrayUtils.stringArray(node.getAttribute(exports.PathElementAttributes.PATH_TWEEN_EASE) || \"linear\");\r\n\t        var tweenDuration = [\r\n\t            Attributes_1.Attributes.assignIntAttribute(node, exports.PathElementAttributes.PATH_TWEEN_DURATION, 120),\r\n\t        ];\r\n\t        var tweenDelay = [\r\n\t            Attributes_1.Attributes.assignIntAttribute(node, exports.PathElementAttributes.PATH_TWEEN_DELAY, 0),\r\n\t        ];\r\n\t        var tweenLoop = Attributes_1.Attributes.assignBooleanAttribute(node, exports.PathElementAttributes.PATH_TWEEN_LOOP, null);\r\n\t        var keyTimes = node.hasAttribute(exports.PathElementAttributes.PATH_TWEEN_KEY_TIMES)\r\n\t            ? neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.PathElementAttributes.PATH_TWEEN_KEY_TIMES))\r\n\t            : null;\r\n\t        Tweens_1.Tweens.customTween(this, { tween: tween, tweenValues: tweenValues, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop, keyTimes: keyTimes });\r\n\t    };\r\n\t    Object.defineProperty(PathElement.prototype, \"tweenIndex\", {\r\n\t        get: function () {\r\n\t            return this._pathTweenIndex;\r\n\t        },\r\n\t        set: function (value) {\r\n\t            var _this = this;\r\n\t            this._pathTweenIndex = value;\r\n\t            var index = Math.floor(this._pathTweenIndex);\r\n\t            var ratio = this._pathTweenIndex - index;\r\n\t            if (index >= this._pathTweenArray.length - 1) {\r\n\t                index = this._pathTweenArray.length - 2;\r\n\t                ratio = 1;\r\n\t            }\r\n\t            if (index != this._pathTweenLastIndex) {\r\n\t                this._pathTweenLastIndex = index;\r\n\t                if (this._pathTweenArray[index]) {\r\n\t                    this._pathTweenFrom = this._pathTweenArray[index];\r\n\t                }\r\n\t                if (this._pathTweenArray[index + 1]) {\r\n\t                    this._pathTweenTo = this._pathTweenArray[index + 1] ? this._pathTweenArray[index + 1] : null;\r\n\t                }\r\n\t            }\r\n\t            var redraw = false;\r\n\t            if (!this._pathTweenFrom || !this._pathTweenTo) {\r\n\t                return;\r\n\t            }\r\n\t            this._path.forEach(function (node, i) {\r\n\t                if (_this._pathTweenFrom[i] != null && _this._pathTweenTo[i] != null) {\r\n\t                    redraw = true;\r\n\t                    node.setInterpolatedTo(_this._pathTweenFrom[i], _this._pathTweenTo[i], ratio);\r\n\t                }\r\n\t            });\r\n\t            if (redraw) {\r\n\t                this.redraw();\r\n\t            }\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    PathElement.prototype.redraw = function () {\r\n\t        var _this = this;\r\n\t        this.clear();\r\n\t        this.beginFill(this._color, this._fillAlpha);\r\n\t        this.lineStyle(this._lineWidth, this._lineColor, this._lineAlpha);\r\n\t        if (this._path) {\r\n\t            this._path.forEach(function (node) {\r\n\t                node.draw(_this);\r\n\t            });\r\n\t        }\r\n\t        this.endFill();\r\n\t    };\r\n\t    PathElement.prototype.clone = function () {\r\n\t        var element = new PathElement();\r\n\t        element.removeChildren();\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.tint = this.tint;\r\n\t        element.blendMode = this.blendMode;\r\n\t        element.name = this.name;\r\n\t        element._tweenEngine = this._tweenEngine;\r\n\t        element._lineWidth = this._lineWidth;\r\n\t        element._lineColor = this._lineColor;\r\n\t        element._lineAlpha = this._lineAlpha;\r\n\t        element._fillAlpha = this._fillAlpha;\r\n\t        element._color = this._color;\r\n\t        element._path = [];\r\n\t        this._path.forEach(function (node) {\r\n\t            element._path.push(node.clone());\r\n\t        });\r\n\t        element.redraw();\r\n\t        return element;\r\n\t    };\r\n\t    PathElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], PathElement);\r\n\t    return PathElement;\r\n\t}(ShapeElement_1.ShapeElement));\r\n\texports.PathElement = PathElement;\r\n\texports.PathElementAttributes = {\r\n\t    PATH: \"Path\",\r\n\t    PATH_TWEEN: \"PathTween\",\r\n\t    PATH_TWEEN_EASE: \"PathTweenEase\",\r\n\t    PATH_TWEEN_DURATION: \"PathTweenDuration\",\r\n\t    PATH_TWEEN_DELAY: \"PathTweenDelay\",\r\n\t    PATH_TWEEN_POSITION: \"PathTweenPath\",\r\n\t    PATH_TWEEN_POSITION_VALUE: {\r\n\t        ABSOLUTE: \"absolute\",\r\n\t        SMOOTH: \"smooth\",\r\n\t    },\r\n\t    PATH_TWEEN_LOOP: \"PathTweenLoop\",\r\n\t    PATH_TWEEN_KEY_TIMES: \"PathTweenKeyTimes\",\r\n\t    POSITION_X: \"PositionX\",\r\n\t    POSITION_Y: \"PositionY\",\r\n\t};\r\n\n\n/***/ },\n/* 161 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar PathElementNode_1 = __webpack_require__(162);\r\n\tvar PathElementNodeMoveto = (function (_super) {\r\n\t    __extends(PathElementNodeMoveto, _super);\r\n\t    function PathElementNodeMoveto(x, y) {\r\n\t        _super.call(this, x, y);\r\n\t        this.command = \"M\";\r\n\t    }\r\n\t    PathElementNodeMoveto.prototype.draw = function (graphics) {\r\n\t        graphics.moveTo(this.x, this.y);\r\n\t    };\r\n\t    PathElementNodeMoveto.prototype.clone = function () {\r\n\t        return new PathElementNodeMoveto(this.x, this.y);\r\n\t    };\r\n\t    PathElementNodeMoveto.prototype.setInterpolatedTo = function (from, to, ratio) {\r\n\t        this.x = from.x + (to.x - from.x) * ratio;\r\n\t        this.y = from.y + (to.y - from.y) * ratio;\r\n\t    };\r\n\t    PathElementNodeMoveto.prototype.equalTo = function (to) {\r\n\t        return this.x === to.x && this.y === to.y;\r\n\t    };\r\n\t    return PathElementNodeMoveto;\r\n\t}(PathElementNode_1.PathElementNode));\r\n\texports.PathElementNodeMoveto = PathElementNodeMoveto;\r\n\n\n/***/ },\n/* 162 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar PathElementNode = (function () {\r\n\t    function PathElementNode(x, y) {\r\n\t        this.x = x;\r\n\t        this.y = y;\r\n\t    }\r\n\t    PathElementNode.prototype.draw = function (graphics) {\r\n\t        throw \"Method not implemented: draw\";\r\n\t    };\r\n\t    PathElementNode.prototype.clone = function () {\r\n\t        throw \"Method not implemented: clone\";\r\n\t    };\r\n\t    PathElementNode.prototype.setInterpolatedTo = function (from, to, ratio) {\r\n\t        throw \"Method not implemented: getInterpolation\";\r\n\t    };\r\n\t    PathElementNode.prototype.equalTo = function (to) {\r\n\t        throw \"Method not implemented: equalTo\";\r\n\t    };\r\n\t    return PathElementNode;\r\n\t}());\r\n\texports.PathElementNode = PathElementNode;\r\n\n\n/***/ },\n/* 163 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar PathElementNodeMoveto_1 = __webpack_require__(161);\r\n\tvar PathElementNodeLineto = (function (_super) {\r\n\t    __extends(PathElementNodeLineto, _super);\r\n\t    function PathElementNodeLineto(x, y) {\r\n\t        _super.call(this, x, y);\r\n\t        this.command = \"L\";\r\n\t    }\r\n\t    PathElementNodeLineto.prototype.draw = function (graphics) {\r\n\t        graphics.lineTo(this.x, this.y);\r\n\t    };\r\n\t    PathElementNodeLineto.prototype.clone = function () {\r\n\t        return new PathElementNodeLineto(this.x, this.y);\r\n\t    };\r\n\t    PathElementNodeLineto.prototype.setInterpolatedTo = function (from, to, ratio) {\r\n\t        this.x = from.x + (to.x - from.x) * ratio;\r\n\t        this.y = from.y + (to.y - from.y) * ratio;\r\n\t    };\r\n\t    PathElementNodeLineto.prototype.equalTo = function (to) {\r\n\t        return this.x === to.x && this.y === to.y;\r\n\t    };\r\n\t    return PathElementNodeLineto;\r\n\t}(PathElementNodeMoveto_1.PathElementNodeMoveto));\r\n\texports.PathElementNodeLineto = PathElementNodeLineto;\r\n\n\n/***/ },\n/* 164 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar PathElementNodeMoveto_1 = __webpack_require__(161);\r\n\tvar PathElementNodeCurvetoQuadratic = (function (_super) {\r\n\t    __extends(PathElementNodeCurvetoQuadratic, _super);\r\n\t    function PathElementNodeCurvetoQuadratic(cx1, cy1, x, y) {\r\n\t        _super.call(this, x, y);\r\n\t        this.cx1 = cx1;\r\n\t        this.cy1 = cy1;\r\n\t        this.command = \"Q\";\r\n\t    }\r\n\t    PathElementNodeCurvetoQuadratic.prototype.draw = function (graphics) {\r\n\t        graphics.quadraticCurveTo(this.cx1, this.cy1, this.x, this.y);\r\n\t    };\r\n\t    PathElementNodeCurvetoQuadratic.prototype.clone = function () {\r\n\t        return new PathElementNodeCurvetoQuadratic(this.cx1, this.cy1, this.x, this.y);\r\n\t    };\r\n\t    PathElementNodeCurvetoQuadratic.prototype.setInterpolatedTo = function (from, to, ratio) {\r\n\t        this.x = from.x + (to.x - from.x) * ratio;\r\n\t        this.y = from.y + (to.y - from.y) * ratio;\r\n\t        this.cx1 = from.cx1 + (to.cx1 - from.cx1) * ratio;\r\n\t        this.cy1 = from.cy1 + (to.cy1 - from.cy1) * ratio;\r\n\t    };\r\n\t    PathElementNodeCurvetoQuadratic.prototype.equalTo = function (to) {\r\n\t        return this.x === to.x && this.y === to.y && this.cx1 === to.cx1 && this.cy1 === to.cy1;\r\n\t    };\r\n\t    return PathElementNodeCurvetoQuadratic;\r\n\t}(PathElementNodeMoveto_1.PathElementNodeMoveto));\r\n\texports.PathElementNodeCurvetoQuadratic = PathElementNodeCurvetoQuadratic;\r\n\n\n/***/ },\n/* 165 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar PathElementNodeCurvetoQuadratic_1 = __webpack_require__(164);\r\n\tvar PathElementNodeCurvetoBezier = (function (_super) {\r\n\t    __extends(PathElementNodeCurvetoBezier, _super);\r\n\t    function PathElementNodeCurvetoBezier(cx1, cy1, cx2, cy2, x, y) {\r\n\t        _super.call(this, cx1, cy1, x, y);\r\n\t        this.cx2 = cx2;\r\n\t        this.cy2 = cy2;\r\n\t        this.command = \"C\";\r\n\t    }\r\n\t    PathElementNodeCurvetoBezier.prototype.draw = function (graphics) {\r\n\t        graphics.bezierCurveTo(this.cx1, this.cy1, this.cx2, this.cy2, this.x, this.y);\r\n\t    };\r\n\t    PathElementNodeCurvetoBezier.prototype.clone = function () {\r\n\t        return new PathElementNodeCurvetoBezier(this.cx1, this.cy1, this.cx2, this.cy2, this.x, this.y);\r\n\t    };\r\n\t    PathElementNodeCurvetoBezier.prototype.setInterpolatedTo = function (from, to, ratio) {\r\n\t        this.x = from.x + (to.x - from.x) * ratio;\r\n\t        this.y = from.y + (to.y - from.y) * ratio;\r\n\t        this.cx1 = from.cx1 + (to.cx1 - from.cx1) * ratio;\r\n\t        this.cy1 = from.cy1 + (to.cy1 - from.cy1) * ratio;\r\n\t        this.cx2 = from.cx2 + (to.cx2 - from.cx2) * ratio;\r\n\t        this.cy2 = from.cy2 + (to.cy2 - from.cy2) * ratio;\r\n\t    };\r\n\t    PathElementNodeCurvetoBezier.prototype.equalTo = function (to) {\r\n\t        return (this.x === to.x &&\r\n\t            this.y === to.y &&\r\n\t            this.cx1 === to.cx1 &&\r\n\t            this.cy1 === to.cy1 &&\r\n\t            this.cx2 === to.cx2 &&\r\n\t            this.cy2 === to.cy2);\r\n\t    };\r\n\t    return PathElementNodeCurvetoBezier;\r\n\t}(PathElementNodeCurvetoQuadratic_1.PathElementNodeCurvetoQuadratic));\r\n\texports.PathElementNodeCurvetoBezier = PathElementNodeCurvetoBezier;\r\n\n\n/***/ },\n/* 166 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar PathElementNodeMoveto_1 = __webpack_require__(161);\r\n\tvar PathElementNodeArcto = (function (_super) {\r\n\t    __extends(PathElementNodeArcto, _super);\r\n\t    function PathElementNodeArcto(x1, y1, x, y, r) {\r\n\t        _super.call(this, x, y);\r\n\t        this.x1 = x1;\r\n\t        this.y1 = y1;\r\n\t        this.r = r;\r\n\t        this.command = \"A\";\r\n\t    }\r\n\t    PathElementNodeArcto.prototype.draw = function (graphics) {\r\n\t        graphics.arcTo(this.x1, this.y1, this.x, this.y, this.r);\r\n\t    };\r\n\t    PathElementNodeArcto.prototype.clone = function () {\r\n\t        return new PathElementNodeArcto(this.x1, this.y1, this.x, this.y, this.r);\r\n\t    };\r\n\t    PathElementNodeArcto.prototype.setInterpolatedTo = function (from, to, ratio) {\r\n\t        this.x = from.x + (to.x - from.x) * ratio;\r\n\t        this.y = from.y + (to.y - from.y) * ratio;\r\n\t        this.x1 = from.x1 + (to.x1 - from.x1) * ratio;\r\n\t        this.y1 = from.y1 + (to.y1 - from.y1) * ratio;\r\n\t        this.r = from.r + (to.r - from.r) * ratio;\r\n\t    };\r\n\t    PathElementNodeArcto.prototype.equalTo = function (to) {\r\n\t        return this.x === to.x && this.y === to.y && this.x1 === to.x1 && this.r === to.r;\r\n\t    };\r\n\t    return PathElementNodeArcto;\r\n\t}(PathElementNodeMoveto_1.PathElementNodeMoveto));\r\n\texports.PathElementNodeArcto = PathElementNodeArcto;\r\n\n\n/***/ },\n/* 167 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar PathElementNodeMoveto_1 = __webpack_require__(161);\r\n\tvar PathElementNodeClosepath = (function (_super) {\r\n\t    __extends(PathElementNodeClosepath, _super);\r\n\t    function PathElementNodeClosepath(x, y) {\r\n\t        _super.call(this, x, y);\r\n\t        this.command = \"Z\";\r\n\t    }\r\n\t    PathElementNodeClosepath.prototype.draw = function (graphics) {\r\n\t        graphics.lineTo(this.x, this.y);\r\n\t        graphics.moveTo(this.x, this.y);\r\n\t    };\r\n\t    PathElementNodeClosepath.prototype.clone = function () {\r\n\t        return new PathElementNodeClosepath(this.x, this.y);\r\n\t    };\r\n\t    PathElementNodeClosepath.prototype.setInterpolatedTo = function (from, to, ratio) {\r\n\t        this.x = from.x + (to.x - from.x) * ratio;\r\n\t        this.y = from.y + (to.y - from.y) * ratio;\r\n\t    };\r\n\t    PathElementNodeClosepath.prototype.equalTo = function (to) {\r\n\t        return this.x === to.x && this.y === to.y;\r\n\t    };\r\n\t    return PathElementNodeClosepath;\r\n\t}(PathElementNodeMoveto_1.PathElementNodeMoveto));\r\n\texports.PathElementNodeClosepath = PathElementNodeClosepath;\r\n\n\n/***/ },\n/* 168 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar ImageElement_1 = __webpack_require__(103);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar Attributes_1 = __webpack_require__(19);\r\n\tvar StyleManager_1 = __webpack_require__(18);\r\n\tvar CustomUtils_1 = __webpack_require__(20);\r\n\tvar PlaneRopeElement = (function (_super) {\r\n\t    __extends(PlaneRopeElement, _super);\r\n\t    function PlaneRopeElement() {\r\n\t        _super.call(this);\r\n\t        this._points = [];\r\n\t        this._originalPoints = [];\r\n\t        this._labelText = [];\r\n\t        this._canvasPadding = 1;\r\n\t        this.running = false;\r\n\t        this._planeOrRope = \"plane\";\r\n\t        this._count = 0;\r\n\t        this._numberOfPointsX = 20;\r\n\t        this._numberOfPointsY = 20;\r\n\t        this._amplitude = 3;\r\n\t        this._wavelength = 0.15;\r\n\t        this._speed = 0.004;\r\n\t        this._axisOfWaves = \"xy\";\r\n\t        this._created = false;\r\n\t        this._blendMode = 0;\r\n\t        this._debug = false;\r\n\t        this._curtainSpeed = 0;\r\n\t        this._curtainAmplitude = 0;\r\n\t        this._curtainCount = 0;\r\n\t        this._duration = -1;\r\n\t        this._actualFrame = 0;\r\n\t        this._loop = false;\r\n\t        this._typePosition = \"relative\";\r\n\t        this._typeFrames = \"linear\";\r\n\t        this._timerAnimate = FrameTimer_1.CreateFrameTimer(\"planeTimer\");\r\n\t        this._timerAnimate.on(FrameTimer_1.FrameTimerEvents.Complete, this.animate.bind(this));\r\n\t        this._delayStopTimer = FrameTimer_1.CreateFrameTimer(\"delayStopTimer\");\r\n\t        this._delayStopTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.stop.bind(this));\r\n\t    }\r\n\t    PlaneRopeElement.prototype.createByNode = function (node) {\r\n\t        if (!this._created) {\r\n\t            if (this.name == null) {\r\n\t                this.name = node.nodeName;\r\n\t            }\r\n\t            if (false) {\r\n\t                if (node.hasAttribute(exports.PlaneRopeElementAttributes.DEBUG) &&\r\n\t                    node.getAttribute(exports.PlaneRopeElementAttributes.DEBUG) === \"true\") {\r\n\t                    debugger;\r\n\t                    this._debug = true;\r\n\t                    if (node.hasAttribute(exports.PlaneRopeElementAttributes.DEBUG_TEXT_COLOR)) {\r\n\t                        this._debugTextColor = node.getAttribute(exports.PlaneRopeElementAttributes.DEBUG_TEXT_COLOR);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            _super.prototype.createByNode.call(this, node);\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.NUMBER_OF_POINTS_X)) {\r\n\t                this._numberOfPointsX = parseInt(node.getAttribute(exports.PlaneRopeElementAttributes.NUMBER_OF_POINTS_X));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.NUMBER_OF_POINTS_Y)) {\r\n\t                this._numberOfPointsY = parseInt(node.getAttribute(exports.PlaneRopeElementAttributes.NUMBER_OF_POINTS_Y));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.TYPE_FRAMES)) {\r\n\t                this._typeFrames = node.getAttribute(exports.PlaneRopeElementAttributes.TYPE_FRAMES);\r\n\t            }\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.TYPE_POSITION)) {\r\n\t                this._typePosition = node.getAttribute(exports.PlaneRopeElementAttributes.TYPE_POSITION);\r\n\t            }\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.LOOP)) {\r\n\t                this._loop = node.getAttribute(exports.PlaneRopeElementAttributes.LOOP) == \"true\";\r\n\t            }\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.STYLE) || this._style != null) {\r\n\t                if (this._style == null) {\r\n\t                    this._style = (StyleManager_1.StyleManager.Styles[node.getAttribute(exports.PlaneRopeElementAttributes.STYLE)]);\r\n\t                }\r\n\t                if (this._style != null) {\r\n\t                    if (this._style.frames != null) {\r\n\t                        this._framesArray = [];\r\n\t                        for (var key in this._style.frames) {\r\n\t                            this._framesArray.push(parseInt(key));\r\n\t                        }\r\n\t                        this._duration = this._framesArray[this._framesArray.length - 1];\r\n\t                    }\r\n\t                    else {\r\n\t                        if (false) {\r\n\t                            this.log(\"WARNING no planerope\");\r\n\t                        }\r\n\t                    }\r\n\t                    if (this._style.positionX != null) {\r\n\t                        this._framesPositionPointsArrayX = this._style.positionX;\r\n\t                        for (var x in this._framesPositionPointsArrayX) {\r\n\t                            var xArray = this._framesPositionPointsArrayX[x].split(\";\").map(parseFloat);\r\n\t                            if (xArray.length != this._numberOfPointsX * this._numberOfPointsY) {\r\n\t                                if (false) {\r\n\t                                    this.log(\"WARNING FRAME: \" +\r\n\t                                        x.toString() +\r\n\t                                        \" the number of points X is not equal to the total number of points (X*Y)\");\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    if (this._style.positionY != null) {\r\n\t                        this._framesPositionPointsArrayY = this._style.positionY;\r\n\t                        for (var y in this._framesPositionPointsArrayY) {\r\n\t                            var yArray = this._framesPositionPointsArrayY[y].split(\";\").map(parseFloat);\r\n\t                            if (yArray.length != this._numberOfPointsX * this._numberOfPointsY) {\r\n\t                                if (false) {\r\n\t                                    this.log(\"WARNING FRAME: \" +\r\n\t                                        y.toString() +\r\n\t                                        \" the number of points Y is not equal to the total number of points (X*Y)\");\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    if (this._typeFrames === \"linear\") {\r\n\t                        if (this._framesArray.length > 1 && this._framesArray.length != this._duration) {\r\n\t                            var previousDefinedFrameIndex = 0;\r\n\t                            var nextDefinedFrameIndex = 1;\r\n\t                            for (var i = 0; i < this._duration; i++) {\r\n\t                                if (i > this._framesArray[previousDefinedFrameIndex] &&\r\n\t                                    i < this._framesArray[nextDefinedFrameIndex] &&\r\n\t                                    (i != this._framesArray[i] || this._framesArray[i] == null) &&\r\n\t                                    nextDefinedFrameIndex <= this._framesArray.length - 1) {\r\n\t                                    var prevFrame = this._framesArray[previousDefinedFrameIndex];\r\n\t                                    var nextFrame = this._framesArray[nextDefinedFrameIndex];\r\n\t                                    var diffFrames = nextFrame - prevFrame;\r\n\t                                    var ArrayPrevValuesX = this._framesPositionPointsArrayX[prevFrame]\r\n\t                                        .split(\";\")\r\n\t                                        .map(parseFloat);\r\n\t                                    var ArrayNextValuesX = this._framesPositionPointsArrayX[nextFrame]\r\n\t                                        .split(\";\")\r\n\t                                        .map(parseFloat);\r\n\t                                    var ArrayPrevValuesY = this._framesPositionPointsArrayY[prevFrame]\r\n\t                                        .split(\";\")\r\n\t                                        .map(parseFloat);\r\n\t                                    var ArrayNextValuesY = this._framesPositionPointsArrayY[nextFrame]\r\n\t                                        .split(\";\")\r\n\t                                        .map(parseFloat);\r\n\t                                    for (var newFrame = i; newFrame < nextFrame; newFrame++) {\r\n\t                                        var newFrameValuesStringX = \"\";\r\n\t                                        var newFrameValuesStringY = \"\";\r\n\t                                        if (this._framesPositionPointsArrayX[newFrame] == null) {\r\n\t                                            for (var x = 0; x < ArrayPrevValuesX.length; x++) {\r\n\t                                                var diffValue = (ArrayNextValuesX[x] - ArrayPrevValuesX[x]) / diffFrames;\r\n\t                                                newFrameValuesStringX += Math.round(ArrayPrevValuesX[x] + diffValue * (newFrame + 1 - i));\r\n\t                                                if (x < ArrayPrevValuesX.length - 1) {\r\n\t                                                    newFrameValuesStringX += \";\";\r\n\t                                                }\r\n\t                                            }\r\n\t                                            this._framesPositionPointsArrayX[newFrame] = newFrameValuesStringX;\r\n\t                                        }\r\n\t                                        if (this._framesPositionPointsArrayY[newFrame] == null) {\r\n\t                                            for (var y = 0; y < ArrayPrevValuesY.length; y++) {\r\n\t                                                var diffValue = (ArrayNextValuesY[y] - ArrayPrevValuesY[y]) / diffFrames;\r\n\t                                                newFrameValuesStringY += Math.round(ArrayPrevValuesY[y] + diffValue * (newFrame + 1 - i));\r\n\t                                                if (y < ArrayPrevValuesY.length - 1) {\r\n\t                                                    newFrameValuesStringY += \";\";\r\n\t                                                }\r\n\t                                            }\r\n\t                                            this._framesPositionPointsArrayY[newFrame] = newFrameValuesStringY;\r\n\t                                        }\r\n\t                                    }\r\n\t                                    previousDefinedFrameIndex = nextDefinedFrameIndex;\r\n\t                                    nextDefinedFrameIndex++;\r\n\t                                    i = nextFrame;\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"ERROR no style with name: \" + node.getAttribute(exports.PlaneRopeElementAttributes.STYLE));\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (false) {\r\n\t                    this.log(\"WARNING no style (PlaneRopeStyle) for PlaneRopeElement\");\r\n\t                }\r\n\t            }\r\n\t            if (node.hasAttribute(ImageElement_1.ImageElementAttributes.BLEND_MODE)) {\r\n\t                this._blendMode = this.getBlendModeByString(Attributes_1.Attributes.assignStringAttribute(node, ImageElement_1.ImageElementAttributes.BLEND_MODE, this._blendMode));\r\n\t            }\r\n\t            if (node.hasAttribute(ImageElement_1.ImageElementAttributes.IMAGE) && this._resource == null) {\r\n\t                this._resource = new ImageElement_1.ImageElement(StageController_1.StageController.getTextureByResourceId(node.getAttribute(ImageElement_1.ImageElementAttributes.IMAGE)));\r\n\t                this._resource.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this._blendMode);\r\n\t            }\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.AMPLITUDE)) {\r\n\t                this._amplitude = parseInt(node.getAttribute(exports.PlaneRopeElementAttributes.AMPLITUDE));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.WAVELENGTH)) {\r\n\t                this._wavelength = parseFloat(node.getAttribute(exports.PlaneRopeElementAttributes.WAVELENGTH));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.SPEED)) {\r\n\t                this._speed = parseFloat(node.getAttribute(exports.PlaneRopeElementAttributes.SPEED));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.TYPE_ANIMATION)) {\r\n\t                this._planeOrRope = node.getAttribute(exports.PlaneRopeElementAttributes.TYPE_ANIMATION);\r\n\t            }\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.AXIS_OF_WAVES)) {\r\n\t                this._axisOfWaves = node.getAttribute(exports.PlaneRopeElementAttributes.AXIS_OF_WAVES);\r\n\t            }\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.CURTAIN_SPEED)) {\r\n\t                this._curtainSpeed = parseInt(node.getAttribute(exports.PlaneRopeElementAttributes.CURTAIN_SPEED));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.CURTAIN_AMPLITUDE)) {\r\n\t                this._curtainAmplitude = parseInt(node.getAttribute(exports.PlaneRopeElementAttributes.CURTAIN_AMPLITUDE));\r\n\t            }\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.CANVAS_PADDING)) {\r\n\t                this._canvasPadding = parseInt(node.getAttribute(exports.PlaneRopeElementAttributes.CANVAS_PADDING));\r\n\t            }\r\n\t            this.createMesh();\r\n\t            this.animate();\r\n\t            if (this._mesh) {\r\n\t                this._meshVerticesBackup = this._mesh.vertices.slice(0);\r\n\t            }\r\n\t            this._created = true;\r\n\t        }\r\n\t    };\r\n\t    PlaneRopeElement.prototype.updateByNode = function (node) {\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.PlaneRopeElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.PlaneRopeElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t                this._debug = true;\r\n\t            }\r\n\t        }\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.PlaneRopeElementAttributes.LOOP)) {\r\n\t            this._loop = node.getAttribute(exports.PlaneRopeElementAttributes.LOOP) === \"true\";\r\n\t        }\r\n\t        if (node.hasAttribute(exports.PlaneRopeElementAttributes.START)) {\r\n\t            var delay = 0;\r\n\t            if (node.getAttribute(exports.PlaneRopeElementAttributes.START).split(\";\").length > 1) {\r\n\t                var from = parseInt(node.getAttribute(exports.PlaneRopeElementAttributes.START).split(\";\")[0]);\r\n\t                var to = parseInt(node.getAttribute(exports.PlaneRopeElementAttributes.START).split(\";\")[1]);\r\n\t                delay = from + Math.round(Math.random() * (to - from));\r\n\t            }\r\n\t            else {\r\n\t                delay = parseInt(node.getAttribute(exports.PlaneRopeElementAttributes.START));\r\n\t                if (isNaN(delay)) {\r\n\t                    delay = 0;\r\n\t                }\r\n\t            }\r\n\t            this.start(delay);\r\n\t            this._count = 0;\r\n\t            this._curtainCount = 0;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.PlaneRopeElementAttributes.STOP)) {\r\n\t            this._delayStopTimer.start(parseInt(node.getAttribute(exports.PlaneRopeElementAttributes.STOP)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.PlaneRopeElementAttributes.CURTAIN_SPEED)) {\r\n\t            this._curtainSpeed = parseInt(node.getAttribute(exports.PlaneRopeElementAttributes.CURTAIN_SPEED));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.PlaneRopeElementAttributes.CURTAIN_AMPLITUDE)) {\r\n\t            this._curtainAmplitude = parseInt(node.getAttribute(exports.PlaneRopeElementAttributes.CURTAIN_AMPLITUDE));\r\n\t        }\r\n\t    };\r\n\t    PlaneRopeElement.prototype.createMesh = function () {\r\n\t        if (this._planeOrRope === \"rope\") {\r\n\t            var ropeLength = this._resource.texture.width;\r\n\t            for (var i = 0; i < this._numberOfPointsX; i++) {\r\n\t                this._points.push(new PIXI.Point(i * (ropeLength / (this._numberOfPointsX - 1)), 0));\r\n\t                this._originalPoints.push(new PIXI.Point(i * (ropeLength / (this._numberOfPointsX - 1)), 0));\r\n\t            }\r\n\t            if (this._points && this._points.length > 0) {\r\n\t                this._mesh = new PIXI.mesh.Rope(this._resource.texture, this._points);\r\n\t                if (this._mesh) {\r\n\t                    this._mesh.width = this._resource.texture.width;\r\n\t                    this._mesh.height = this._resource.texture.height;\r\n\t                    this._mesh.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this._blendMode);\r\n\t                    this._mesh.canvasPadding = this._canvasPadding;\r\n\t                    this.addChild(this._mesh);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else if (this._planeOrRope === \"plane\" ||\r\n\t            this._planeOrRope === \"regularGrid\" ||\r\n\t            this._planeOrRope === \"curtain\") {\r\n\t            this._mesh = new PIXI.mesh.Plane(this._resource.texture, this._numberOfPointsX, this._numberOfPointsY);\r\n\t            this._mesh.drawMode = PIXI.DRAW_MODES.LINE_LOOP;\r\n\t            if (this._mesh) {\r\n\t                this._mesh.width = this._resource.texture.width;\r\n\t                this._mesh.height = this._resource.texture.height;\r\n\t                this._mesh.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this._blendMode);\r\n\t                this._mesh.canvasPadding = this._canvasPadding;\r\n\t                this.addChild(this._mesh);\r\n\t                this._originalVertices = this._mesh.vertices.slice(0);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t        }\r\n\t        if (this._debug === true) {\r\n\t            this._graphics = new PIXI.Graphics();\r\n\t            if (this._graphics) {\r\n\t                this.addChild(this._graphics);\r\n\t            }\r\n\t            if (this._debugTextColor != null && this._debugTextColor != \"undefined\") {\r\n\t                this._labelText = [];\r\n\t                if (this._labelText) {\r\n\t                    for (var i = 0; i < this._numberOfPointsX * this._numberOfPointsY; i++) {\r\n\t                        var text = new PIXI.Text(i + 1 + \"\");\r\n\t                        text.style.fill = this._debugTextColor;\r\n\t                        this._labelText.push(text);\r\n\t                        this.addChild(this._labelText[i]);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlaneRopeElement.prototype.animate = function () {\r\n\t        var stopTimer = false;\r\n\t        this._count += this._speed;\r\n\t        if (this._count >= 2 * Math.PI) {\r\n\t            this._count = this._count % (2 * Math.PI);\r\n\t        }\r\n\t        if (this._planeOrRope === \"rope\") {\r\n\t            if (this._mesh && this._created === true && this._points && this._points.length > 0) {\r\n\t                var xArray = void 0;\r\n\t                var yArray = void 0;\r\n\t                if (this._actualFrame >= 0 &&\r\n\t                    this._framesPositionPointsArrayX[this._actualFrame] != null &&\r\n\t                    this._framesPositionPointsArrayX[this._actualFrame] != \"undefined\" &&\r\n\t                    this._framesPositionPointsArrayY[this._actualFrame] != null &&\r\n\t                    this._framesPositionPointsArrayY[this._actualFrame] != \"undefined\") {\r\n\t                    xArray = this._framesPositionPointsArrayX[this._actualFrame].split(\";\").map(parseFloat);\r\n\t                    yArray = this._framesPositionPointsArrayY[this._actualFrame].split(\";\").map(parseFloat);\r\n\t                }\r\n\t                if (xArray != null &&\r\n\t                    xArray.length > 0 &&\r\n\t                    xArray.length == this._numberOfPointsX * this._numberOfPointsY &&\r\n\t                    yArray != null &&\r\n\t                    yArray.length > 0 &&\r\n\t                    yArray.length == this._numberOfPointsX * this._numberOfPointsY) {\r\n\t                    for (var i = 0; i < this._points.length; i++) {\r\n\t                        if (this._typePosition === \"relative\" ||\r\n\t                            this._typePosition == null ||\r\n\t                            this._typePosition == \"undefined\") {\r\n\t                            this._points[i].x = this._originalPoints[i].x + xArray[i];\r\n\t                            this._points[i].y = this._originalPoints[i].y + yArray[i];\r\n\t                        }\r\n\t                        else if (this._typePosition === \"absolute\") {\r\n\t                            this._points[i].x = xArray[i];\r\n\t                            this._points[i].y = yArray[i];\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this._debug === true) {\r\n\t                this.renderPointsRope();\r\n\t            }\r\n\t        }\r\n\t        else if (this._planeOrRope === \"plane\") {\r\n\t            if (this._mesh && this._mesh.vertices) {\r\n\t                for (var i = 0; i < this._mesh.vertices.length; i++) {\r\n\t                    if ((this._axisOfWaves === \"x\" && i % 2 == 1) ||\r\n\t                        ((this._axisOfWaves === \"y\" || this._axisOfWaves === \"yx\") && i % 2 == 0) ||\r\n\t                        this._axisOfWaves === \"xy\") {\r\n\t                        this._mesh.vertices[i] =\r\n\t                            this._originalVertices[i] + this._amplitude * Math.sin(this._count + i * this._wavelength);\r\n\t                    }\r\n\t                    else if (this._axisOfWaves === \"yx\" && i % 2 == 1) {\r\n\t                        this._mesh.vertices[i] =\r\n\t                            this._originalVertices[i] - this._amplitude * Math.sin(this._count + i * this._wavelength);\r\n\t                    }\r\n\t                    else {\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this._debug === true) {\r\n\t                this.renderPointsPlane();\r\n\t            }\r\n\t        }\r\n\t        else if (this._planeOrRope === \"regularGrid\") {\r\n\t            if (this._mesh &&\r\n\t                this._mesh.vertices &&\r\n\t                this._created === true &&\r\n\t                this._framesPositionPointsArrayX != null &&\r\n\t                this._framesPositionPointsArrayY != null) {\r\n\t                var xArray = void 0;\r\n\t                var yArray = void 0;\r\n\t                if (this._actualFrame >= 0 &&\r\n\t                    this._framesPositionPointsArrayX[this._actualFrame] != null &&\r\n\t                    this._framesPositionPointsArrayX[this._actualFrame] != \"undefined\" &&\r\n\t                    this._framesPositionPointsArrayY[this._actualFrame] != null &&\r\n\t                    this._framesPositionPointsArrayY[this._actualFrame] != \"undefined\") {\r\n\t                    xArray = this._framesPositionPointsArrayX[this._actualFrame].split(\";\").map(parseFloat);\r\n\t                    yArray = this._framesPositionPointsArrayY[this._actualFrame].split(\";\").map(parseFloat);\r\n\t                }\r\n\t                if (xArray != null &&\r\n\t                    xArray.length > 0 &&\r\n\t                    xArray.length == this._numberOfPointsX * this._numberOfPointsY &&\r\n\t                    yArray != null &&\r\n\t                    yArray.length > 0 &&\r\n\t                    yArray.length == this._numberOfPointsX * this._numberOfPointsY) {\r\n\t                    for (var i = 0; i < this._mesh.vertices.length; i++) {\r\n\t                        if (this._typePosition === \"relative\" ||\r\n\t                            this._typePosition == null ||\r\n\t                            this._typePosition == \"undefined\") {\r\n\t                            if (i % 2 == 0) {\r\n\t                                this._mesh.vertices[i] = this._originalVertices[i] + xArray[i / 2];\r\n\t                            }\r\n\t                            else {\r\n\t                                this._mesh.vertices[i] = this._originalVertices[i] + yArray[(i + 1) / 2 - 1];\r\n\t                            }\r\n\t                        }\r\n\t                        else if (this._axisOfWaves === \"yx\" && i % 2 == 1) {\r\n\t                            if (i % 2 == 0) {\r\n\t                                this._mesh.vertices[i] = xArray[i / 2];\r\n\t                            }\r\n\t                            else {\r\n\t                                this._mesh.vertices[i] = yArray[(i + 1) / 2 - 1];\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (this._debug === true) {\r\n\t                this.renderPointsPlane();\r\n\t            }\r\n\t        }\r\n\t        else if (this._planeOrRope === \"curtain\") {\r\n\t            if (this._curtainSpeed > 0 &&\r\n\t                this._numberOfPointsX > 0 &&\r\n\t                this._numberOfPointsY > 0 &&\r\n\t                this._mesh.vertices.length == this._meshVerticesBackup.length) {\r\n\t                for (var i = 0; i < this._mesh.vertices.length; i++) {\r\n\t                    var row_index = parseInt((i / (this._numberOfPointsX * 2)).toString()).valueOf();\r\n\t                    var col_index = parseInt(((i / 2) % this._numberOfPointsX).toString()).valueOf();\r\n\t                    if (i % 2 == 0) {\r\n\t                        if (row_index % 2 == 0) {\r\n\t                            this._mesh.vertices[i] =\r\n\t                                this._meshVerticesBackup[i] -\r\n\t                                    this._curtainAmplitude *\r\n\t                                        (row_index + 1) *\r\n\t                                        (this._numberOfPointsX - (col_index + 1)) *\r\n\t                                        Math.sin(this._curtainCount);\r\n\t                        }\r\n\t                        else {\r\n\t                            this._mesh.vertices[i] =\r\n\t                                this._meshVerticesBackup[i] +\r\n\t                                    this._curtainAmplitude *\r\n\t                                        (row_index + 1) *\r\n\t                                        (this._numberOfPointsX - (col_index + 1)) *\r\n\t                                        Math.sin(this._curtainCount);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                this._curtainCount += Math.PI / this._curtainSpeed;\r\n\t                if (this._curtainCount > Math.PI) {\r\n\t                    this._curtainSpeed = 0;\r\n\t                    this._curtainCount = 0;\r\n\t                    stopTimer = true;\r\n\t                }\r\n\t            }\r\n\t            if (this._debug === true) {\r\n\t                this.renderPointsPlane();\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t        }\r\n\t        if (this._created === true) {\r\n\t            if (this._duration >= 0) {\r\n\t                this._actualFrame++;\r\n\t            }\r\n\t            if ((this._duration >= 0 && this._actualFrame > this._duration) || stopTimer == true) {\r\n\t                this.stop();\r\n\t            }\r\n\t            else {\r\n\t                this._timerAnimate.start(0);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlaneRopeElement.prototype.renderPointsRope = function () {\r\n\t        if (this._graphics) {\r\n\t            if (this._points != null && this._points.length > 0) {\r\n\t                this._graphics.clear();\r\n\t                this._graphics.lineStyle(2, 0xffc2c2);\r\n\t                this._graphics.moveTo(this._points[0].x, this._points[0].y);\r\n\t                for (var i = 1; i < this._points.length; i++) {\r\n\t                    this._graphics.lineTo(this._points[i].x, this._points[i].y);\r\n\t                }\r\n\t                for (var i = 0; i < this._points.length; i++) {\r\n\t                    this._graphics.beginFill(0xff0022);\r\n\t                    this._graphics.drawCircle(this._points[i].x, this._points[i].y, 10);\r\n\t                    this._graphics.endFill();\r\n\t                    if (this._debugTextColor != null &&\r\n\t                        this._debugTextColor != \"undefined\" &&\r\n\t                        this._labelText != null) {\r\n\t                        if (this._labelText[i] != null) {\r\n\t                            this._labelText[i].x = this._points[i].x;\r\n\t                            this._labelText[i].y = this._points[i].y;\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlaneRopeElement.prototype.renderPointsPlane = function () {\r\n\t        if (this._graphics) {\r\n\t            if (this._mesh && this._mesh.vertices.length > 0) {\r\n\t                this._graphics.clear();\r\n\t                this._graphics.moveTo(this._mesh.vertices[0], this._mesh.vertices[1]);\r\n\t                for (var i = 0; i < this._mesh.vertices.length; i++) {\r\n\t                    this._graphics.beginFill(0xff0022);\r\n\t                    this._graphics.drawCircle(this._mesh.vertices[i], this._mesh.vertices[++i], 5);\r\n\t                    this._graphics.endFill();\r\n\t                    if (this._debugTextColor != null &&\r\n\t                        this._debugTextColor != \"undefined\" &&\r\n\t                        this._labelText != null) {\r\n\t                        if (this._labelText[(i - 1) / 2] != null) {\r\n\t                            this._labelText[(i - 1) / 2].x = this._mesh.vertices[i - 1];\r\n\t                            this._labelText[(i - 1) / 2].y = this._mesh.vertices[i];\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    PlaneRopeElement.prototype.start = function (startDelay) {\r\n\t        if (startDelay === void 0) { startDelay = 0; }\r\n\t        if (this.running) {\r\n\t            return;\r\n\t        }\r\n\t        if (startDelay < 0) {\r\n\t            startDelay = 20;\r\n\t        }\r\n\t        this._timerAnimate.stop();\r\n\t        this._timerAnimate.start(startDelay);\r\n\t        this.running = true;\r\n\t    };\r\n\t    PlaneRopeElement.prototype.stop = function () {\r\n\t        this._timerAnimate.stop();\r\n\t        this.running = false;\r\n\t        this._actualFrame = 0;\r\n\t        if (this._loop) {\r\n\t            this.start();\r\n\t        }\r\n\t    };\r\n\t    PlaneRopeElement.prototype.getBlendModeByString = function (mode) {\r\n\t        mode = mode.toString();\r\n\t        switch (mode) {\r\n\t            case \"0\":\r\n\t            case \"normal\":\r\n\t                return PIXI.BLEND_MODES.NORMAL;\r\n\t            case \"1\":\r\n\t            case \"add\":\r\n\t                return PIXI.BLEND_MODES.ADD;\r\n\t            case \"2\":\r\n\t            case \"multiply\":\r\n\t                return PIXI.BLEND_MODES.MULTIPLY;\r\n\t            case \"3\":\r\n\t            case \"screen\":\r\n\t                return PIXI.BLEND_MODES.SCREEN;\r\n\t            case \"4\":\r\n\t            case \"overlay\":\r\n\t                return PIXI.BLEND_MODES.OVERLAY;\r\n\t            case \"5\":\r\n\t            case \"darken\":\r\n\t                return PIXI.BLEND_MODES.DARKEN;\r\n\t            case \"6\":\r\n\t            case \"lighten\":\r\n\t                return PIXI.BLEND_MODES.LIGHTEN;\r\n\t            case \"7\":\r\n\t            case \"color_dodge\":\r\n\t                return PIXI.BLEND_MODES.COLOR_DODGE;\r\n\t            case \"8\":\r\n\t            case \"color_burn\":\r\n\t                return PIXI.BLEND_MODES.COLOR_BURN;\r\n\t            case \"9\":\r\n\t            case \"hard_light\":\r\n\t                return PIXI.BLEND_MODES.HARD_LIGHT;\r\n\t            case \"10\":\r\n\t            case \"soft_light\":\r\n\t                return PIXI.BLEND_MODES.SOFT_LIGHT;\r\n\t            case \"11\":\r\n\t            case \"difference\":\r\n\t                return PIXI.BLEND_MODES.DIFFERENCE;\r\n\t            case \"12\":\r\n\t            case \"exclusion\":\r\n\t                return PIXI.BLEND_MODES.EXCLUSION;\r\n\t            case \"13\":\r\n\t            case \"hue\":\r\n\t                return PIXI.BLEND_MODES.HUE;\r\n\t            case \"14\":\r\n\t            case \"saturation\":\r\n\t                return PIXI.BLEND_MODES.SATURATION;\r\n\t            case \"15\":\r\n\t            case \"color\":\r\n\t                return PIXI.BLEND_MODES.COLOR;\r\n\t            case \"16\":\r\n\t            case \"luminosity\":\r\n\t                return PIXI.BLEND_MODES.LUMINOSITY;\r\n\t            default:\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR Unknown blending mode \" + mode + \". Used default mode NORMAL.\");\r\n\t                }\r\n\t                return PIXI.BLEND_MODES.NORMAL;\r\n\t        }\r\n\t    };\r\n\t    PlaneRopeElement.prototype.clone = function () {\r\n\t        var element = new PlaneRopeElement();\r\n\t        element._numberOfPointsX = this._numberOfPointsX;\r\n\t        element._numberOfPointsY = this._numberOfPointsY;\r\n\t        element._amplitude = this._amplitude;\r\n\t        element._wavelength = this._wavelength;\r\n\t        element._speed = this._speed;\r\n\t        element._axisOfWaves = this._axisOfWaves;\r\n\t        element._resource = this._resource.clone();\r\n\t        element._blendMode = this._blendMode;\r\n\t        element._planeOrRope = this._planeOrRope;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.visible = this.visible;\r\n\t        element._debug = this._debug;\r\n\t        element._debugTextColor = this._debugTextColor;\r\n\t        element._canvasPadding = this._canvasPadding;\r\n\t        element._style = this._style;\r\n\t        element._loop = this._loop;\r\n\t        var node = document.createElement(this.name);\r\n\t        element.create(node);\r\n\t        element._markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    PlaneRopeElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], PlaneRopeElement);\r\n\t    return PlaneRopeElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.PlaneRopeElement = PlaneRopeElement;\r\n\texports.PlaneRopeElementAttributes = {\r\n\t    CANVAS_PADDING: \"CanvasPadding\",\r\n\t    DEBUG: \"Debug\",\r\n\t    DEBUG_TEXT_COLOR: \"DebugTextColor\",\r\n\t    TYPE_ANIMATION: \"TypeAnimation\",\r\n\t    NUMBER_OF_POINTS_X: \"NumberOfPointsX\",\r\n\t    NUMBER_OF_POINTS_Y: \"NumberOfPointsY\",\r\n\t    AMPLITUDE: \"Amplitude\",\r\n\t    WAVELENGTH: \"Wavelength\",\r\n\t    SPEED: \"Speed\",\r\n\t    AXIS_OF_WAVES: \"AxisOfWaves\",\r\n\t    START: \"Start\",\r\n\t    STOP: \"Stop\",\r\n\t    LOOP: \"Loop\",\r\n\t    CURTAIN_SPEED: \"CurtainSpeed\",\r\n\t    CURTAIN_AMPLITUDE: \"CurtainAmplitude\",\r\n\t    CLONE: \"Clone\",\r\n\t    STYLE: \"Style\",\r\n\t    TYPE_FRAMES: \"TypeFrames\",\r\n\t    TYPE_POSITION: \"TypePosition\",\r\n\t};\r\n\n\n/***/ },\n/* 169 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Style_1 = __webpack_require__(99);\r\n\tvar PlaneRopeStyle = (function (_super) {\r\n\t    __extends(PlaneRopeStyle, _super);\r\n\t    function PlaneRopeStyle() {\r\n\t        _super.call(this);\r\n\t        this.frames = {};\r\n\t        this.positionX = {};\r\n\t        this.positionY = {};\r\n\t    }\r\n\t    PlaneRopeStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        var next = node.firstElementChild;\r\n\t        while (next != null) {\r\n\t            switch (next.nodeName) {\r\n\t                case \"Animation\":\r\n\t                    var nextCase = next.firstElementChild;\r\n\t                    while (nextCase != null) {\r\n\t                        if (nextCase.hasAttribute(\"Frame\")) {\r\n\t                            if (this.frames[nextCase.getAttribute(\"Frame\")] !== null) {\r\n\t                                this.frames[nextCase.getAttribute(\"Frame\")] = nextCase;\r\n\t                                var nextChild = nextCase.firstElementChild;\r\n\t                                while (nextChild != null) {\r\n\t                                    if (nextChild.hasAttribute(\"MoveAllPointsX\")) {\r\n\t                                        this.positionX[nextCase.getAttribute(\"Frame\")] =\r\n\t                                            nextChild.getAttribute(\"MoveAllPointsX\");\r\n\t                                    }\r\n\t                                    else if (nextChild.hasAttribute(\"MoveAllPointsY\")) {\r\n\t                                        this.positionY[nextCase.getAttribute(\"Frame\")] =\r\n\t                                            nextChild.getAttribute(\"MoveAllPointsY\");\r\n\t                                    }\r\n\t                                    nextChild = nextChild.nextElementSibling;\r\n\t                                }\r\n\t                            }\r\n\t                            else {\r\n\t                                if (false) {\r\n\t                                    this.log(\"ERROR case \" +\r\n\t                                        nextCase.getAttribute(\"Frame\") +\r\n\t                                        \" already exist in PlaneRopeStyle \" +\r\n\t                                        node.nodeName);\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                        nextCase = nextCase.nextElementSibling;\r\n\t                    }\r\n\t                    break;\r\n\t            }\r\n\t            next = next.nextElementSibling;\r\n\t        }\r\n\t    };\r\n\t    PlaneRopeStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Style)\r\n\t    ], PlaneRopeStyle);\r\n\t    return PlaneRopeStyle;\r\n\t}(Style_1.Style));\r\n\texports.PlaneRopeStyle = PlaneRopeStyle;\r\n\n\n/***/ },\n/* 170 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ShapeElement_1 = __webpack_require__(12);\r\n\tvar PolygonElement = (function (_super) {\r\n\t    __extends(PolygonElement, _super);\r\n\t    function PolygonElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    PolygonElement.prototype.updateByNode = function (node) {\r\n\t        var _this = this;\r\n\t        var redraw = false;\r\n\t        if (node.hasAttribute(exports.PolygonElementAttributes.POINTS)) {\r\n\t            var pointArray = node.getAttribute(exports.PolygonElementAttributes.POINTS).split(\";\");\r\n\t            this._points = [];\r\n\t            var lastPoint_1;\r\n\t            pointArray.forEach(function (value, index) {\r\n\t                if (index % 2) {\r\n\t                    lastPoint_1.y = parseInt(value);\r\n\t                }\r\n\t                else {\r\n\t                    lastPoint_1 = new PIXI.Point(parseInt(value), 0);\r\n\t                    _this._points.push(lastPoint_1);\r\n\t                }\r\n\t            });\r\n\t            redraw = true;\r\n\t        }\r\n\t        if (!_super.prototype.updateByNode.call(this, node)) {\r\n\t            if (redraw) {\r\n\t                this.redraw();\r\n\t                return true;\r\n\t            }\r\n\t            else {\r\n\t                return false;\r\n\t            }\r\n\t        }\r\n\t        return true;\r\n\t    };\r\n\t    PolygonElement.prototype.redraw = function () {\r\n\t        this.clear();\r\n\t        this.beginFill(this._color, this._fillAlpha);\r\n\t        this.lineStyle(this._lineWidth, this._lineColor, this._lineAlpha);\r\n\t        this.drawPolygon(this._points);\r\n\t        this.endFill();\r\n\t    };\r\n\t    PolygonElement.prototype.clone = function () {\r\n\t        var element = new PolygonElement();\r\n\t        element.removeChildren();\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.tint = this.tint;\r\n\t        element.blendMode = this.blendMode;\r\n\t        element.name = this.name;\r\n\t        element._tweenEngine = this._tweenEngine;\r\n\t        element._lineWidth = this._lineWidth;\r\n\t        element._lineColor = this._lineColor;\r\n\t        element._lineAlpha = this._lineAlpha;\r\n\t        element._fillAlpha = this._fillAlpha;\r\n\t        element._color = this._color;\r\n\t        element._points = [];\r\n\t        this._points.forEach(function (point) {\r\n\t            element._points.push(new PIXI.Point(point.x, point.y));\r\n\t        });\r\n\t        element.redraw();\r\n\t        return element;\r\n\t    };\r\n\t    PolygonElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], PolygonElement);\r\n\t    return PolygonElement;\r\n\t}(ShapeElement_1.ShapeElement));\r\n\texports.PolygonElement = PolygonElement;\r\n\texports.PolygonElementAttributes = {\r\n\t    POINTS: \"Points\",\r\n\t};\r\n\n\n/***/ },\n/* 171 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar gsap_1 = __webpack_require__(16);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar StyleManager_1 = __webpack_require__(18);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar CustomUtils_1 = __webpack_require__(20);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar RopeElement = (function (_super) {\r\n\t    __extends(RopeElement, _super);\r\n\t    function RopeElement() {\r\n\t        _super.call(this);\r\n\t        this._originalPoints = [];\r\n\t        this._canvasPadding = 1;\r\n\t        this._rope = null;\r\n\t        this._pointsCount = 100;\r\n\t        this._bezierPoints = [];\r\n\t        this._pointsData = [];\r\n\t        this._pointsDataBuffer = [];\r\n\t        this._blendMode = 0;\r\n\t        this._animationStyle = null;\r\n\t        this._hasAnimationStyle = false;\r\n\t        this._frame = 0;\r\n\t        this._tint = null;\r\n\t        this._curviness = 1;\r\n\t        this._continue = false;\r\n\t        this._isPlaying = false;\r\n\t        this._debug = false;\r\n\t        this._created = false;\r\n\t        this._pointsAnimationAmplitude = 0;\r\n\t        this._pointsAnimationSpeed = 0;\r\n\t        this._pointsAnimationWavelength = 0;\r\n\t        this._angleCount = 0;\r\n\t        this._delayStartTimer = FrameTimer_1.CreateFrameTimer(\"delayStartTimer\");\r\n\t        this._delayStartTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.start.bind(this));\r\n\t        this._delayStopTimer = FrameTimer_1.CreateFrameTimer(\"delayStopTimer\");\r\n\t        this._delayStopTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.stop.bind(this));\r\n\t    }\r\n\t    RopeElement.prototype.createByNode = function (node) {\r\n\t        if (!this._created) {\r\n\t            if (false) {\r\n\t                if (node.hasAttribute(RopeElementAttributes.DEBUG) &&\r\n\t                    node.getAttribute(RopeElementAttributes.DEBUG) === \"true\") {\r\n\t                    debugger;\r\n\t                    this._debug = true;\r\n\t                }\r\n\t            }\r\n\t            _super.prototype.createByNode.call(this, node);\r\n\t            if (node.hasAttribute(RopeElementAttributes.POINTS_COUNT)) {\r\n\t                this._pointsCount = parseInt(node.getAttribute(RopeElementAttributes.POINTS_COUNT));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.POINTS_ANIMATION_AMPLITUDE)) {\r\n\t                this._pointsAnimationAmplitude = parseFloat(node.getAttribute(RopeElementAttributes.POINTS_ANIMATION_AMPLITUDE));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.POINTS_ANIMATION_SPEED)) {\r\n\t                this._pointsAnimationSpeed = parseFloat(node.getAttribute(RopeElementAttributes.POINTS_ANIMATION_SPEED));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.POINTS_ANIMATION_WAVELENGTH)) {\r\n\t                this._pointsAnimationWavelength = parseFloat(node.getAttribute(RopeElementAttributes.POINTS_ANIMATION_WAVELENGTH));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.BLEND_MODE)) {\r\n\t                this._blendMode = CustomUtils_1.CustomUtils.getBlendMode(parseInt(node.getAttribute(RopeElementAttributes.BLEND_MODE)));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.CURVINESS)) {\r\n\t                this._curviness = parseFloat(node.getAttribute(RopeElementAttributes.CURVINESS));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.TINT)) {\r\n\t                if (node.getAttribute(RopeElementAttributes.TINT) === \"0\") {\r\n\t                    this._tint = null;\r\n\t                }\r\n\t                else {\r\n\t                    this._tint = parseInt(node.getAttribute(RopeElementAttributes.TINT), 16);\r\n\t                }\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.POINTS)) {\r\n\t                var pointsData = this.formatPoints(node.getAttribute(RopeElementAttributes.POINTS));\r\n\t                var bezierData = gsap_1.BezierPlugin.bezierThrough(pointsData);\r\n\t                this._bezierPoints = this.getBezierStepPoints(bezierData, this._pointsCount);\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.IMAGE)) {\r\n\t                var textureName = node.getAttribute(RopeElementAttributes.IMAGE);\r\n\t                if (textureName.indexOf(\"ANI_\") === 0) {\r\n\t                    this._animationStyle = StyleManager_1.StyleManager.Styles[textureName];\r\n\t                    if (this._animationStyle != null) {\r\n\t                        textureName = this._animationStyle.animation + \"0000\";\r\n\t                        this._hasAnimationStyle = true;\r\n\t                    }\r\n\t                    else {\r\n\t                        this._hasAnimationStyle = false;\r\n\t                    }\r\n\t                }\r\n\t                this._texture = StageController_1.StageController.getTextureByResourceId(textureName);\r\n\t                if (this._texture != null) {\r\n\t                    if (this._bezierPoints.length == 0) {\r\n\t                        for (var i = 0; i < this._pointsCount; i++) {\r\n\t                            this._bezierPoints.push(new PIXI.Point(Math.round(this._texture.width / (this._pointsCount - 1)) * i, 0));\r\n\t                        }\r\n\t                    }\r\n\t                    for (var i = 0; i < this._bezierPoints.length; i++) {\r\n\t                        this._originalPoints.push(new PIXI.Point(this._bezierPoints[i].x, this._bezierPoints[i].y));\r\n\t                    }\r\n\t                    this._rope = new PIXI.mesh.Rope(this._texture, this._bezierPoints);\r\n\t                    this._rope.blendMode = CustomUtils_1.CustomUtils.getBlendMode(this._blendMode);\r\n\t                    this._rope.canvasPadding = this._canvasPadding;\r\n\t                    if (this._tint != null) {\r\n\t                        this._rope.tint = this._tint;\r\n\t                    }\r\n\t                    this.addChild(this._rope);\r\n\t                    if (this._debug === true) {\r\n\t                        this._graphics = new PIXI.Graphics();\r\n\t                        if (this._graphics) {\r\n\t                            this.addChild(this._graphics);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.CANVAS_PADDING)) {\r\n\t                this._canvasPadding = parseInt(node.getAttribute(RopeElementAttributes.CANVAS_PADDING));\r\n\t            }\r\n\t            this._created = true;\r\n\t        }\r\n\t    };\r\n\t    RopeElement.prototype.addPoints = function (points) {\r\n\t        this._pointsDataBuffer = this._pointsDataBuffer.concat(points);\r\n\t    };\r\n\t    RopeElement.prototype.getPoints = function () {\r\n\t        return this._pointsData;\r\n\t    };\r\n\t    RopeElement.prototype.updateByNode = function (node) {\r\n\t        if (this._created) {\r\n\t            if (false) {\r\n\t                if (node.hasAttribute(RopeElementAttributes.DEBUG) &&\r\n\t                    node.getAttribute(RopeElementAttributes.DEBUG) === \"true\") {\r\n\t                    debugger;\r\n\t                    this._debug = true;\r\n\t                }\r\n\t            }\r\n\t            _super.prototype.updateByNode.call(this, node);\r\n\t            if (node.hasAttribute(RopeElementAttributes.POINTS)) {\r\n\t                var XMLpointsData = this.formatPoints(node.getAttribute(RopeElementAttributes.POINTS));\r\n\t                this._pointsData = [];\r\n\t                if (node.hasAttribute(RopeElementAttributes.REVERSE_POINTS) &&\r\n\t                    neo_common_1.StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.REVERSE_POINTS))) {\r\n\t                    this._pointsData = XMLpointsData.concat(this._pointsDataBuffer).reverse();\r\n\t                }\r\n\t                else {\r\n\t                    this._pointsData = this._pointsDataBuffer.concat(XMLpointsData);\r\n\t                }\r\n\t                this._pointsDataBuffer = [];\r\n\t                this.updatePoints(this._pointsData);\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.GLOBAL_POINTS)) {\r\n\t                this._pointsData = this.formatPoints(node.getAttribute(RopeElementAttributes.POINTS), true);\r\n\t                this.updatePoints(this._pointsData);\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.TINT)) {\r\n\t                if (this._rope != null) {\r\n\t                    if (node.getAttribute(RopeElementAttributes.TINT) === \"0\") {\r\n\t                        this._tint = null;\r\n\t                    }\r\n\t                    else {\r\n\t                        this._tint = parseInt(node.getAttribute(RopeElementAttributes.TINT), 16);\r\n\t                    }\r\n\t                    this._rope.tint = this._tint;\r\n\t                }\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.IMAGE)) {\r\n\t                var textureName = node.getAttribute(RopeElementAttributes.IMAGE);\r\n\t                if (textureName.indexOf(\"ANI_\") === 0) {\r\n\t                    this._animationStyle = StyleManager_1.StyleManager.Styles[textureName];\r\n\t                    if (this._animationStyle != null) {\r\n\t                        textureName = this._animationStyle.animation + \"0000\";\r\n\t                        this._hasAnimationStyle = true;\r\n\t                    }\r\n\t                    else {\r\n\t                        this._hasAnimationStyle = false;\r\n\t                    }\r\n\t                }\r\n\t                this._texture = StageController_1.StageController.getTextureByResourceId(textureName);\r\n\t                if (this._texture != null) {\r\n\t                    if (this._rope != null) {\r\n\t                        this._rope.texture = this._texture;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.CONTINUE) &&\r\n\t                neo_common_1.StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.CONTINUE))) {\r\n\t                this._continue = neo_common_1.StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.CONTINUE));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.START)) {\r\n\t                this._delayStartTimer.start(parseInt(node.getAttribute(RopeElementAttributes.START)));\r\n\t            }\r\n\t            if (node.hasAttribute(RopeElementAttributes.STOP)) {\r\n\t                this._delayStopTimer.start(parseInt(node.getAttribute(RopeElementAttributes.STOP)));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    RopeElement.prototype.start = function () {\r\n\t        if (this._animationStyle != null && this._hasAnimationStyle === true) {\r\n\t            if (!this._continue || !this._isPlaying) {\r\n\t                Tweens_1.Tweens.removeTweens(this, \"_frame\");\r\n\t                Tweens_1.Tweens.customTween(this, {\r\n\t                    tween: \"_frame\",\r\n\t                    tweenValues: [0, this._animationStyle.endFrame],\r\n\t                    tweenDuration: [60 / this._animationStyle.speed],\r\n\t                    tweenEase: [\"linear\"],\r\n\t                    tweenLoop: this._animationStyle.loop,\r\n\t                    callbackType: \"onUpdate\",\r\n\t                    callbackFunction: this.updateTexture,\r\n\t                    callbackScope: this,\r\n\t                    callbackParams: [\"{self}\"],\r\n\t                });\r\n\t                this._isPlaying = true;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (this._hasAnimationStyle === false) {\r\n\t                if (!this._continue || !this._isPlaying) {\r\n\t                    Tweens_1.Tweens.removeTweens(this, \"_frame\");\r\n\t                    Tweens_1.Tweens.customTween(this, {\r\n\t                        tween: \"_frame\",\r\n\t                        tweenValues: [0, 59],\r\n\t                        tweenDuration: [60],\r\n\t                        tweenEase: [\"linear\"],\r\n\t                        tweenLoop: true,\r\n\t                        callbackType: \"onUpdate\",\r\n\t                        callbackFunction: this.updateTexture,\r\n\t                        callbackScope: this,\r\n\t                        callbackParams: [\"{self}\"],\r\n\t                    });\r\n\t                    this._isPlaying = true;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    RopeElement.prototype.stop = function () {\r\n\t        Tweens_1.Tweens.removeTweens(this, \"_frame\");\r\n\t        this._isPlaying = false;\r\n\t    };\r\n\t    RopeElement.prototype.updateTexture = function (self) {\r\n\t        if (this._animationStyle != null) {\r\n\t            if (this._animationStyle.startFrame != null && this._animationStyle.endFrame != null) {\r\n\t                if (Math.abs(this._animationStyle.startFrame - this._animationStyle.endFrame) > 0) {\r\n\t                    var currentFrame = Math.round(this._frame);\r\n\t                    if (currentFrame > self.previousValue || currentFrame == 0) {\r\n\t                        this._rope.texture = StageController_1.StageController.getTextureByResourceId(this._animationStyle.animation + this.zerosPad(currentFrame, 4));\r\n\t                    }\r\n\t                    self.previousValue = currentFrame;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.animateMeshPoints();\r\n\t        if (this._debug === true) {\r\n\t            this.renderPointsRope();\r\n\t        }\r\n\t    };\r\n\t    RopeElement.prototype.zerosPad = function (num, size) {\r\n\t        var s = num + \"\";\r\n\t        while (s.length < size)\r\n\t            s = \"0\" + s;\r\n\t        return s;\r\n\t    };\r\n\t    RopeElement.prototype.animateMeshPoints = function () {\r\n\t        if (this._rope != null && this._pointsCount != null && this._originalPoints != null) {\r\n\t            if (this._pointsAnimationSpeed > 0) {\r\n\t                this._angleCount += this._pointsAnimationSpeed;\r\n\t                if (this._angleCount >= 2 * Math.PI) {\r\n\t                    this._angleCount = this._angleCount % (2 * Math.PI);\r\n\t                }\r\n\t                for (var i = 0; i < this._pointsCount; i++) {\r\n\t                    this._rope.points[i].y =\r\n\t                        this._originalPoints[i].y +\r\n\t                            this._pointsAnimationAmplitude *\r\n\t                                Math.sin(this._angleCount + i * this._pointsAnimationWavelength);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    RopeElement.prototype.updateMeshPoints = function (points) {\r\n\t        if (this._rope != null) {\r\n\t            for (var i = 0; i < this._pointsCount; i++) {\r\n\t                this._rope.points[i].x = points[i].x;\r\n\t                this._rope.points[i].y = points[i].y;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    RopeElement.prototype.updatePoints = function (points) {\r\n\t        var bezierData = gsap_1.BezierPlugin.bezierThrough(points, this._curviness);\r\n\t        this._bezierPoints = this.getBezierStepPoints(bezierData, this._pointsCount);\r\n\t        this.updateMeshPoints(this._bezierPoints);\r\n\t    };\r\n\t    RopeElement.prototype.formatPoints = function (points, useGlobal) {\r\n\t        if (useGlobal === void 0) { useGlobal = false; }\r\n\t        var result = [];\r\n\t        var regex = /\\[(.*?)\\]/g;\r\n\t        var data = points.match(regex);\r\n\t        for (var i = 0; i < data.length; i++) {\r\n\t            var pointArray = data[i].substring(1, data[i].length - 1).split(\",\");\r\n\t            if (pointArray.length == 2) {\r\n\t                var x = this.formatPoint(pointArray[0], \"x\", useGlobal);\r\n\t                var y = this.formatPoint(pointArray[1], \"y\", useGlobal);\r\n\t                result.push(new PIXI.Point(x, y));\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    RopeElement.prototype.formatPoint = function (value, id, useGlobal) {\r\n\t        if (useGlobal === void 0) { useGlobal = false; }\r\n\t        var result;\r\n\t        if (value == \"c\") {\r\n\t            result = this[id];\r\n\t        }\r\n\t        else {\r\n\t            if (useGlobal) {\r\n\t                result = this[id] + (parseInt(value) - this.getGlobalPosition()[id]);\r\n\t            }\r\n\t            else {\r\n\t                result = parseInt(value);\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    RopeElement.prototype.getBezierStepPoints = function (data, length) {\r\n\t        var segmentLength = length / data.x.length;\r\n\t        var pointPerSegment = [];\r\n\t        var bezierStepPoints = [];\r\n\t        if (data.x.length > 1) {\r\n\t            segmentLength = Math.round(segmentLength);\r\n\t            var sum = 0;\r\n\t            for (var i = 0; i < data.x.length - 1; i++) {\r\n\t                pointPerSegment.push(segmentLength);\r\n\t                sum += segmentLength;\r\n\t            }\r\n\t            pointPerSegment.push(length - sum);\r\n\t        }\r\n\t        else {\r\n\t            pointPerSegment = [segmentLength];\r\n\t        }\r\n\t        var time = 0;\r\n\t        for (var i = 0; i < data.x.length; i++) {\r\n\t            for (var j = 0; j < pointPerSegment[i]; j++) {\r\n\t                if (i + 1 < data.x.length) {\r\n\t                    time = j / pointPerSegment[i];\r\n\t                }\r\n\t                else {\r\n\t                    time = j / (pointPerSegment[i] - 1);\r\n\t                }\r\n\t                bezierStepPoints.push(this.bezier(time, data.x[i], data.y[i]));\r\n\t            }\r\n\t        }\r\n\t        return bezierStepPoints;\r\n\t    };\r\n\t    RopeElement.prototype.bezier = function (t, dataX, dataY) {\r\n\t        var cX = 3 * dataX.ba, bX = 3 * (dataX.c - dataX.b) - cX, aX = dataX.da - cX - bX;\r\n\t        var cY = 3 * dataY.ba, bY = 3 * (dataY.c - dataY.b) - cY, aY = dataY.da - cY - bY;\r\n\t        var x = aX * Math.pow(t, 3) + bX * Math.pow(t, 2) + cX * t + dataX.a;\r\n\t        var y = aY * Math.pow(t, 3) + bY * Math.pow(t, 2) + cY * t + dataY.a;\r\n\t        return new PIXI.Point(x, y);\r\n\t    };\r\n\t    RopeElement.prototype.renderPointsRope = function () {\r\n\t        if (this._graphics) {\r\n\t            if (this._rope != null && this._rope.points.length > 0) {\r\n\t                this._graphics.clear();\r\n\t                this._graphics.lineStyle(2, 0xffc2c2);\r\n\t                this._graphics.moveTo(this._rope.points[0].x, this._rope.points[0].y);\r\n\t                for (var i = 1; i < this._rope.points.length; i++) {\r\n\t                    this._graphics.lineTo(this._rope.points[i].x, this._rope.points[i].y);\r\n\t                }\r\n\t                for (var i = 0; i < this._rope.points.length; i++) {\r\n\t                    this._graphics.beginFill(0xff0022);\r\n\t                    this._graphics.drawCircle(this._rope.points[i].x, this._rope.points[i].y, 4);\r\n\t                    this._graphics.endFill();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    RopeElement.prototype.clone = function () {\r\n\t        var element = new RopeElement();\r\n\t        element.visible = this.visible;\r\n\t        element.alpha = this.alpha;\r\n\t        element.position.x = this.position.x;\r\n\t        element.position.y = this.position.y;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\r\n\t        element.scale.x = this.scale.x;\r\n\t        element.scale.y = this.scale.y;\r\n\t        element.rotation = this.rotation;\r\n\t        element._debug = this._debug;\r\n\t        element._canvasPadding = this._canvasPadding;\r\n\t        element._pointsCount = this._pointsCount;\r\n\t        element._texture = this._texture;\r\n\t        element._blendMode = this._blendMode;\r\n\t        element._animationStyle = this._animationStyle;\r\n\t        element._frame = this._frame;\r\n\t        element._tint = this._tint;\r\n\t        element._pointsAnimationAmplitude = this._pointsAnimationAmplitude;\r\n\t        element._pointsAnimationSpeed = this._pointsAnimationSpeed;\r\n\t        element._pointsAnimationWavelength = this._pointsAnimationWavelength;\r\n\t        element._created = true;\r\n\t        element._continue = this._continue;\r\n\t        element._isPlaying = this._isPlaying;\r\n\t        element._bezierPoints = [];\r\n\t        for (var i = 0; i < this._bezierPoints.length; i++) {\r\n\t            element._bezierPoints.push(new PIXI.Point(this._bezierPoints[i].x, this._bezierPoints[i].y));\r\n\t        }\r\n\t        element._originalPoints = [];\r\n\t        for (var i = 0; i < this._originalPoints.length; i++) {\r\n\t            element._originalPoints.push(new PIXI.Point(this._originalPoints[i].x, this._originalPoints[i].y));\r\n\t        }\r\n\t        if (element._texture != null) {\r\n\t            element._rope = new PIXI.mesh.Rope(element._texture, element._bezierPoints);\r\n\t        }\r\n\t        if (element._rope != null) {\r\n\t            element._rope.blendMode = element._blendMode;\r\n\t            element.addChild(element._rope);\r\n\t        }\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    RopeElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], RopeElement);\r\n\t    return RopeElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.RopeElement = RopeElement;\r\n\tvar RopeElementAttributes = {\r\n\t    CANVAS_PADDING: \"CanvasPadding\",\r\n\t    DEBUG: \"Debug\",\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    CURVINESS: \"Curviness\",\r\n\t    RANDOM_START_FRAME: \"RandomStartFrame\",\r\n\t    TIME: \"Time\",\r\n\t    GLOBAL_POINTS: \"GlobalPoints\",\r\n\t    IMAGE: \"Image\",\r\n\t    POINTS: \"Points\",\r\n\t    POINTS_COUNT: \"PointsCount\",\r\n\t    REVERSE_POINTS: \"ReversePoints\",\r\n\t    POINTS_ANIMATION_AMPLITUDE: \"PointsAnimationAmplitude\",\r\n\t    POINTS_ANIMATION_SPEED: \"PointsAnimationSpeed\",\r\n\t    POINTS_ANIMATION_WAVELENGTH: \"PointsAnimationWavelength\",\r\n\t    START: \"Start\",\r\n\t    CONTINUE: \"Continue\",\r\n\t    STOP: \"Stop\",\r\n\t    TINT: \"Tint\",\r\n\t};\r\n\n\n/***/ },\n/* 172 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar SoundElement = (function (_super) {\r\n\t    __extends(SoundElement, _super);\r\n\t    function SoundElement() {\r\n\t        _super.call(this);\r\n\t        this.soundName = null;\r\n\t        this._loop = false;\r\n\t        this._reset = false;\r\n\t        this._playing = false;\r\n\t        this._scheduledPlay = false;\r\n\t        this._scheduledStop = false;\r\n\t        this._fadeInTime = 0;\r\n\t        this._fadeOutTime = 0;\r\n\t        this._timer = FrameTimer_1.CreateFrameTimer(\"TimelineElement\");\r\n\t    }\r\n\t    SoundElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t    };\r\n\t    SoundElement.prototype.updateByNode = function (node) {\r\n\t        if (!node) {\r\n\t            this.logError(\"No node specified for element update!\");\r\n\t            return;\r\n\t        }\r\n\t        if (false) {\r\n\t            if (node.hasAttribute(exports.SoundElementAttributes.DEBUG) &&\r\n\t                node.getAttribute(exports.SoundElementAttributes.DEBUG) === \"true\") {\r\n\t                debugger;\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SoundElementAttributes.LOOP)) {\r\n\t            var value = node.getAttribute(exports.SoundElementAttributes.LOOP);\r\n\t            var intValue = parseInt(value);\r\n\t            this._loop = true;\r\n\t            if (value === \"true\") {\r\n\t                this.schedulePlay(0);\r\n\t            }\r\n\t            else if (!isNaN(intValue)) {\r\n\t                this.schedulePlay(intValue);\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SoundElementAttributes.RESET)) {\r\n\t            this._reset = neo_common_1.StringUtils.parseBoolean(node.getAttribute(exports.SoundElementAttributes.RESET));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SoundElementAttributes.FADE_IN)) {\r\n\t            this._fadeInTime = parseInt(node.getAttribute(exports.SoundElementAttributes.FADE_IN));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SoundElementAttributes.FADE_OUT)) {\r\n\t            this._fadeOutTime = parseInt(node.getAttribute(exports.SoundElementAttributes.FADE_OUT));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SoundElementAttributes.NAME)) {\r\n\t            var newName = node.getAttribute(exports.SoundElementAttributes.NAME);\r\n\t            if (this.soundName != newName) {\r\n\t                this.stop();\r\n\t                this.soundName = node.getAttribute(exports.SoundElementAttributes.NAME);\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SoundElementAttributes.STOP)) {\r\n\t            var value = node.getAttribute(exports.SoundElementAttributes.STOP);\r\n\t            var intValue = parseInt(value);\r\n\t            if (value === \"true\") {\r\n\t                this.scheduleStop(0);\r\n\t            }\r\n\t            else if (!isNaN(intValue)) {\r\n\t                this.scheduleStop(intValue);\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SoundElementAttributes.PLAY)) {\r\n\t            var value = node.getAttribute(exports.SoundElementAttributes.PLAY);\r\n\t            var intValue = parseInt(value);\r\n\t            if (value === \"true\") {\r\n\t                this.schedulePlay(0);\r\n\t            }\r\n\t            else if (!isNaN(intValue)) {\r\n\t                this.schedulePlay(intValue);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SoundElement.prototype.internalDestroy = function (options) { };\r\n\t    SoundElement.prototype.clone = function () {\r\n\t        var element = new SoundElement();\r\n\t        element.soundName = this.soundName;\r\n\t        element._fadeInTime = this._fadeInTime;\r\n\t        element._fadeOutTime = this._fadeOutTime;\r\n\t        element._loop = this._loop;\r\n\t        element._reset = this._reset;\r\n\t        element._playing = this._playing;\r\n\t        element._scheduledPlay = this._scheduledPlay;\r\n\t        element._scheduledStop = this._scheduledStop;\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    SoundElement.prototype.schedulePlay = function (delay) {\r\n\t        if (delay === void 0) { delay = 0; }\r\n\t        this._timer.stop();\r\n\t        this._timer.removeAllListeners();\r\n\t        if (delay > 0) {\r\n\t            this._scheduledPlay = true;\r\n\t            this._timer.once(FrameTimer_1.FrameTimerEvents.Complete, this.play.bind(this));\r\n\t            this._timer.start(delay);\r\n\t        }\r\n\t        else {\r\n\t            this.play();\r\n\t        }\r\n\t    };\r\n\t    SoundElement.prototype.scheduleStop = function (delay) {\r\n\t        if (delay === void 0) { delay = 0; }\r\n\t        this._timer.stop();\r\n\t        this._timer.removeAllListeners();\r\n\t        if (delay > 0) {\r\n\t            this._scheduledStop = true;\r\n\t            this._timer.once(FrameTimer_1.FrameTimerEvents.Complete, this.stop.bind(this));\r\n\t            this._timer.start(delay);\r\n\t        }\r\n\t        else {\r\n\t            this.stop();\r\n\t        }\r\n\t    };\r\n\t    SoundElement.prototype.play = function () {\r\n\t        if (this.soundName == null) {\r\n\t            return;\r\n\t        }\r\n\t        if (this._playing) {\r\n\t            if (this._reset) {\r\n\t                this.stop();\r\n\t            }\r\n\t            else {\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        this._timer.stop();\r\n\t        this._timer.removeAllListeners();\r\n\t        this._playing = true;\r\n\t        this._scheduledPlay = false;\r\n\t        if (this._loop) {\r\n\t            PlayList_1.PlayList.loop(this.soundName, this._fadeInTime, this._reset);\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.play(this.soundName, this._fadeInTime, this._reset);\r\n\t        }\r\n\t    };\r\n\t    SoundElement.prototype.stop = function () {\r\n\t        if (this.soundName == null) {\r\n\t            return;\r\n\t        }\r\n\t        if (this._playing) {\r\n\t            this._timer.stop();\r\n\t            this._timer.removeAllListeners();\r\n\t            PlayList_1.PlayList.stop(this.soundName, this._fadeOutTime);\r\n\t            if (this._fadeOutTime) {\r\n\t                this._timer.once(FrameTimer_1.FrameTimerEvents.Complete, this.reset.bind(this));\r\n\t                this._timer.start(this._fadeOutTime);\r\n\t            }\r\n\t            else {\r\n\t                this.reset();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SoundElement.prototype.reset = function () {\r\n\t        this._timer.stop();\r\n\t        this._timer.removeAllListeners();\r\n\t        this._playing = false;\r\n\t        this._scheduledPlay = false;\r\n\t        this._scheduledStop = false;\r\n\t        if (this.soundName && PlayList_1.PlayList.isPlaying(this.soundName)) {\r\n\t            PlayList_1.PlayList.stop(this.soundName);\r\n\t        }\r\n\t    };\r\n\t    SoundElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], SoundElement);\r\n\t    return SoundElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.SoundElement = SoundElement;\r\n\texports.SoundElementAttributes = {\r\n\t    DEBUG: \"Debug\",\r\n\t    NAME: \"Name\",\r\n\t    LOOP: \"Loop\",\r\n\t    RESET: \"Reset\",\r\n\t    FADE_IN: \"FadeIn\",\r\n\t    FADE_OUT: \"FadeOut\",\r\n\t    PLAY: \"Play\",\r\n\t    STOP: \"Stop\",\r\n\t};\r\n\n\n/***/ },\n/* 173 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar ImageElement_1 = __webpack_require__(103);\r\n\tvar CustomUtils_1 = __webpack_require__(20);\r\n\tvar TilingImageElement = (function (_super) {\r\n\t    __extends(TilingImageElement, _super);\r\n\t    function TilingImageElement() {\r\n\t        _super.call(this);\r\n\t        this._tint = 0xffffff;\r\n\t    }\r\n\t    Object.defineProperty(TilingImageElement.prototype, \"tint\", {\r\n\t        get: function () {\r\n\t            return this._tint;\r\n\t        },\r\n\t        set: function (tintIn) {\r\n\t            this._tint = tintIn;\r\n\t            if (this.image) {\r\n\t                this.image.tint = this._tint;\r\n\t            }\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    TilingImageElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.TilingImageElementAttributes.IMAGE)) {\r\n\t            if (!this.image) {\r\n\t                var texture = StageController_1.StageController.getTextureByResourceId(node.getAttribute(ImageElement_1.ImageElementAttributes.IMAGE));\r\n\t                this.image = new PIXI.extras.TilingSprite(texture);\r\n\t                this.addChild(this.image);\r\n\t            }\r\n\t            else {\r\n\t                this.image.texture = StageController_1.StageController.getTextureByResourceId(node.getAttribute(ImageElement_1.ImageElementAttributes.IMAGE));\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TilingImageElementAttributes.TINT)) {\r\n\t            this.tint = parseInt(node.getAttribute(exports.TilingImageElementAttributes.TINT));\r\n\t        }\r\n\t        if (!this.image) {\r\n\t            return;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TilingImageElementAttributes.BLEND_MODE)) {\r\n\t            this.image.blendMode = CustomUtils_1.CustomUtils.getBlendMode(parseInt(node.getAttribute(exports.TilingImageElementAttributes.BLEND_MODE)));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TilingImageElementAttributes.TILE_POSITION_X)) {\r\n\t            this.image.position.x = parseInt(node.getAttribute(exports.TilingImageElementAttributes.TILE_POSITION_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TilingImageElementAttributes.TILE_POSITION_Y)) {\r\n\t            this.image.position.y = parseInt(node.getAttribute(exports.TilingImageElementAttributes.TILE_POSITION_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TilingImageElementAttributes.TILE_SCALE_X)) {\r\n\t            this.image.scale.x = parseInt(node.getAttribute(exports.TilingImageElementAttributes.TILE_SCALE_X));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TilingImageElementAttributes.TILE_SCALE_Y)) {\r\n\t            this.image.scale.y = parseInt(node.getAttribute(exports.TilingImageElementAttributes.TILE_SCALE_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TilingImageElementAttributes.HEIGHT)) {\r\n\t            this.image.height = parseInt(node.getAttribute(exports.TilingImageElementAttributes.HEIGHT));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.TilingImageElementAttributes.WIDTH)) {\r\n\t            this.image.width = parseInt(node.getAttribute(exports.TilingImageElementAttributes.WIDTH));\r\n\t        }\r\n\t    };\r\n\t    TilingImageElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], TilingImageElement);\r\n\t    return TilingImageElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.TilingImageElementAttributes = {\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    HEIGHT: \"Height\",\r\n\t    IMAGE: \"Image\",\r\n\t    TILE_POSITION_X: \"TilePositionX\",\r\n\t    TILE_POSITION_Y: \"TilePositionY\",\r\n\t    TILE_SCALE_X: \"TileScaleX\",\r\n\t    TILE_SCALE_Y: \"TileScaleY\",\r\n\t    TINT: \"Tint\",\r\n\t    WIDTH: \"Width\",\r\n\t};\r\n\n\n/***/ },\n/* 174 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar WinAnimator_1 = __webpack_require__(108);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar SwitchElement_1 = __webpack_require__(97);\r\n\tvar Symbol_1 = __webpack_require__(107);\r\n\tvar Payline_1 = __webpack_require__(96);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar ImageTextCounterElement_1 = __webpack_require__(110);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar TeasingComponent_1 = __webpack_require__(116);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar Settings_1 = __webpack_require__(117);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar WinAnimatorExtended = (function (_super) {\r\n\t    __extends(WinAnimatorExtended, _super);\r\n\t    function WinAnimatorExtended() {\r\n\t        _super.apply(this, arguments);\r\n\t        this.isFS = false;\r\n\t        this.elementInstance = [];\r\n\t        this._paylineWinDelay = 60;\r\n\t        this._paylineWinEndDelay = 90;\r\n\t        this._paylineCycleDelay = 90;\r\n\t        this._paylineEvaluation = exports.WinAnimatorExtendedAttributes.PAYLINE_EVALUATION_TYPES.TOGETHER;\r\n\t        this._winScaleConstantAdditive = 1;\r\n\t        this._winScaleConstantMultiplicative = 0;\r\n\t        this._winScaleDuration = 45;\r\n\t        this._winScaleEase = \"backOut\";\r\n\t        this._winScaleKeyTimes = [0, 0, 1, 1];\r\n\t        this._activeElementsNames = [];\r\n\t        this._activeElements = [];\r\n\t        this._customData = {};\r\n\t        this._cycleAnimationName = \"Value\";\r\n\t        this._counterPlayed = false;\r\n\t        this.starTimerStack = [];\r\n\t        this._scatterDelay = 500;\r\n\t        this._scatterTimeout = null;\r\n\t        this._preRoll = 180;\r\n\t        this._preRollSpeed = 10;\r\n\t        this._startDelay = 2;\r\n\t        this._inCycleWin = false;\r\n\t    }\r\n\t    WinAnimatorExtended.prototype.initialize = function (symbols, paylines, noWinSymbolsContainer, symbolsContainer, parent) {\r\n\t        var _this = this;\r\n\t        this._paylines = paylines;\r\n\t        _super.prototype.initialize.call(this, symbols, paylines, noWinSymbolsContainer, symbolsContainer);\r\n\t        if (!this.value && this._cycleAnimationName && this.childs[this._cycleAnimationName]) {\r\n\t            this.value = this.childs[this._cycleAnimationName];\r\n\t            this.animationsContainer.addChild(this.value);\r\n\t        }\r\n\t        if (parent) {\r\n\t            this._activeElementsNames.forEach(function (elementName) {\r\n\t                if (parent.childs[elementName] && parent.childs[elementName] instanceof SwitchElement_1.SwitchElement) {\r\n\t                    _this._activeElements.push(parent.childs[elementName]);\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.createAnimations = function () {\r\n\t        _super.prototype.createAnimations.call(this);\r\n\t        for (var _i = 0, _a = this.animations; _i < _a.length; _i++) {\r\n\t            var animation = _a[_i];\r\n\t            animation.on(\"softOutro\", this.softOutro.bind(this));\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.addElementInstance = function (element) {\r\n\t        this.elementInstance[Object.keys(element)[0]] = element[Object.keys(element)[0]];\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.configure = function (node) {\r\n\t        _super.prototype.configure.call(this, node);\r\n\t        if (node.hasAttribute(exports.WinAnimatorExtendedAttributes.PAYLINE_WIN_DELAY)) {\r\n\t            this._paylineWinDelay = parseInt(node.getAttribute(exports.WinAnimatorExtendedAttributes.PAYLINE_WIN_DELAY));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.WinAnimatorExtendedAttributes.PAYLINE_WIN_DELAY)) {\r\n\t            this._paylineWinEndDelay = parseInt(node.getAttribute(exports.WinAnimatorExtendedAttributes.PAYLINE_WIN_END_DELAY));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.WinAnimatorExtendedAttributes.PAYLINE_CYCLE_DELAY)) {\r\n\t            this._paylineCycleDelay = parseInt(node.getAttribute(exports.WinAnimatorExtendedAttributes.PAYLINE_CYCLE_DELAY));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.WinAnimatorExtendedAttributes.PAYLINE_EVALUATION)) {\r\n\t            var eValue = node.getAttribute(exports.WinAnimatorExtendedAttributes.PAYLINE_EVALUATION).toLowerCase();\r\n\t            for (var val in exports.WinAnimatorExtendedAttributes.PAYLINE_EVALUATION_TYPES) {\r\n\t                if (exports.WinAnimatorExtendedAttributes.PAYLINE_EVALUATION_TYPES[val] == eValue) {\r\n\t                    this._paylineEvaluation = exports.WinAnimatorExtendedAttributes.PAYLINE_EVALUATION_TYPES[val];\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.WinAnimatorExtendedAttributes.WIN_SCALE_CONSTANT_ADDITIVE)) {\r\n\t            this._winScaleConstantAdditive = parseFloat(node.getAttribute(exports.WinAnimatorExtendedAttributes.WIN_SCALE_CONSTANT_ADDITIVE));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.WinAnimatorExtendedAttributes.WIN_SCALE_CONSTANT_MULTIPLICATIVE)) {\r\n\t            this._winScaleConstantMultiplicative = parseFloat(node.getAttribute(exports.WinAnimatorExtendedAttributes.WIN_SCALE_CONSTANT_MULTIPLICATIVE));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.WinAnimatorExtendedAttributes.WIN_SCALE_DURATION)) {\r\n\t            this._winScaleDuration = parseInt(node.getAttribute(exports.WinAnimatorExtendedAttributes.WIN_SCALE_DURATION));\r\n\t        }\r\n\t        if (node.hasAttribute(exports.WinAnimatorExtendedAttributes.WIN_SCALE_EASE)) {\r\n\t            this._winScaleEase = node.getAttribute(exports.WinAnimatorExtendedAttributes.WIN_SCALE_EASE);\r\n\t        }\r\n\t        if (node.hasAttribute(exports.WinAnimatorExtendedAttributes.WIN_SCALE_KEY_TIMES)) {\r\n\t            var newTimes = node\r\n\t                .getAttribute(exports.WinAnimatorExtendedAttributes.WIN_SCALE_KEY_TIMES)\r\n\t                .split(\";\")\r\n\t                .map(function (value) { return parseFloat(value); });\r\n\t            if (newTimes && newTimes.length == 4) {\r\n\t                this._winScaleKeyTimes = newTimes;\r\n\t            }\r\n\t            else {\r\n\t                this.logError(\"Incorrect value of \" +\r\n\t                    exports.WinAnimatorExtendedAttributes.WIN_SCALE_KEY_TIMES +\r\n\t                    \" attribute: '\" +\r\n\t                    node.getAttribute(exports.WinAnimatorExtendedAttributes.WIN_SCALE_KEY_TIMES) +\r\n\t                    \"'.\\n\" +\r\n\t                    \"Expected four semicolon-separated numeric values ranged <0;1> in non-descending order, e.g. '0;0;0.5;1'\");\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(exports.WinAnimatorExtendedAttributes.CYCLE_ANIMATION)) {\r\n\t            this._cycleAnimationName = node.getAttribute(exports.WinAnimatorExtendedAttributes.CYCLE_ANIMATION);\r\n\t        }\r\n\t        if (node.getAttribute(exports.WinAnimatorExtendedAttributes.IS_FS_ANIMATOR) == \"true\") {\r\n\t            this.isFS = true;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.WinAnimatorExtendedAttributes.ACTIVE_ELEMENTS)) {\r\n\t            this._activeElementsNames = node.getAttribute(exports.WinAnimatorExtendedAttributes.ACTIVE_ELEMENTS).split(\";\");\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.ReelConfigurationAttributes.PRE_ROLL)) {\r\n\t            this._preRoll = parseInt(node.getAttribute(Configuration_1.ReelConfigurationAttributes.PRE_ROLL));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.ReelConfigurationAttributes.PRE_ROLL_SPEED)) {\r\n\t            this._preRollSpeed = parseInt(node.getAttribute(Configuration_1.ReelConfigurationAttributes.PRE_ROLL_SPEED));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.MachineConfigurationAttributes.START_DELAY)) {\r\n\t            this._startDelay = parseInt(node.getAttribute(Configuration_1.MachineConfigurationAttributes.START_DELAY));\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.hide = function () {\r\n\t        this.visible = false;\r\n\t        this.symbolsContainer.visible = false;\r\n\t        this.noWinSymbolsContainer.visible = false;\r\n\t        this.animationsContainer.visible = false;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.show = function () {\r\n\t        this.visible = true;\r\n\t        this.symbolsContainer.visible = true;\r\n\t        this.noWinSymbolsContainer.visible = true;\r\n\t        this.animationsContainer.visible = true;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.onReelStopped = function (reelsData, reelIndex, force) {\r\n\t        if (force === void 0) { force = false; }\r\n\t        this.wasForce = force;\r\n\t        this.currentReels = reelsData;\r\n\t        for (var i = 0; i < reelsData[reelIndex].symbols.length; i++) {\r\n\t            this.removeCurrentSymbol(reelIndex, i);\r\n\t        }\r\n\t        for (var i = 0; i < reelsData[reelIndex].symbols.length; i++) {\r\n\t            this.addCurrentSymbol(reelIndex, i);\r\n\t        }\r\n\t        if (this.elementInstance[\"teasing\"] != null) {\r\n\t            var sta_1;\r\n\t            if (this.elementInstance[\"teasing\"] != null) {\r\n\t                this.elementInstance[\"teasing\"].forEach(function (teasingComponent) {\r\n\t                    var symbolsTeasingAttributes = teasingComponent.checkSymbolsPerReel(reelIndex);\r\n\t                    sta_1 = symbolsTeasingAttributes;\r\n\t                }, this);\r\n\t            }\r\n\t            if (!force) {\r\n\t                for (var i = 0; i <= reelIndex; i++) {\r\n\t                    for (var j = 0; j < this.currentSymbols[i].length; j++) {\r\n\t                        if (this.currentSymbols[i][j] != null) {\r\n\t                            if (typeof sta_1 !== \"undefined\") {\r\n\t                                switch (sta_1[i][j].action) {\r\n\t                                    case TeasingComponent_1.SymbolTeasingActions.NORMAL:\r\n\t                                        if (this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseNormal)) {\r\n\t                                            this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseNormal);\r\n\t                                        }\r\n\t                                        break;\r\n\t                                    case TeasingComponent_1.SymbolTeasingActions.IMPACT:\r\n\t                                        if (this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseImpact)) {\r\n\t                                            this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseImpact);\r\n\t                                        }\r\n\t                                        break;\r\n\t                                    case TeasingComponent_1.SymbolTeasingActions.IMPACT_TEASE:\r\n\t                                        if (this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseImpactTease)) {\r\n\t                                            this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseImpactTease);\r\n\t                                        }\r\n\t                                        break;\r\n\t                                    case TeasingComponent_1.SymbolTeasingActions.IMPACT_NOWIN:\r\n\t                                        if (this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseImpactNowin)) {\r\n\t                                            this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseImpactNowin);\r\n\t                                        }\r\n\t                                        break;\r\n\t                                    case TeasingComponent_1.SymbolTeasingActions.NOWIN:\r\n\t                                        if (this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseNowin)) {\r\n\t                                            this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseNowin);\r\n\t                                        }\r\n\t                                        break;\r\n\t                                    case TeasingComponent_1.SymbolTeasingActions.TEASE:\r\n\t                                        if (this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseTeaser)) {\r\n\t                                            this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseTeaser);\r\n\t                                        }\r\n\t                                        break;\r\n\t                                }\r\n\t                            }\r\n\t                            else {\r\n\t                                if (i == reelIndex && this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseImpact)) {\r\n\t                                    this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseImpact);\r\n\t                                }\r\n\t                                else if (this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseNormal)) {\r\n\t                                    this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseNormal);\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                for (var i = 0; i <= reelIndex; i++) {\r\n\t                    for (var j = 0; j < this.currentSymbols[i].length; j++) {\r\n\t                        if (this.currentSymbols[i][j] != null) {\r\n\t                            if (typeof sta_1 !== \"undefined\") {\r\n\t                                switch (sta_1[i][j].action) {\r\n\t                                    case TeasingComponent_1.SymbolTeasingActions.IMPACT:\r\n\t                                        if (this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseImpact)) {\r\n\t                                            this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseImpact);\r\n\t                                        }\r\n\t                                        break;\r\n\t                                    case TeasingComponent_1.SymbolTeasingActions.NORMAL:\r\n\t                                        if (this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseNormal)) {\r\n\t                                            this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseNormal);\r\n\t                                        }\r\n\t                                        break;\r\n\t                                    case TeasingComponent_1.SymbolTeasingActions.IMPACT_TEASE:\r\n\t                                        if (this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseImpactTease)) {\r\n\t                                            this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseImpactTease);\r\n\t                                        }\r\n\t                                        break;\r\n\t                                    case TeasingComponent_1.SymbolTeasingActions.IMPACT_NOWIN:\r\n\t                                        if (this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseImpactNowin)) {\r\n\t                                            this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseImpactNowin);\r\n\t                                        }\r\n\t                                        break;\r\n\t                                    case TeasingComponent_1.SymbolTeasingActions.NOWIN:\r\n\t                                        if (this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseNowin)) {\r\n\t                                            this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseNowin);\r\n\t                                        }\r\n\t                                        break;\r\n\t                                }\r\n\t                            }\r\n\t                            else {\r\n\t                                if (i == reelIndex && this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseImpact)) {\r\n\t                                    this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseImpact);\r\n\t                                }\r\n\t                                else if (this.allowSymbolGoToCase(i, j, Symbol_1.Symbol.CaseNormal)) {\r\n\t                                    this.currentSymbols[i][j].goToCase(Symbol_1.Symbol.CaseNormal);\r\n\t                                }\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.showWins = function (wins, win) {\r\n\t        this.resetCounter();\r\n\t        var ret = _super.prototype.showWins.call(this, wins, win);\r\n\t        if (wins == null || wins.length === 0) {\r\n\t            this.startStarAnimation();\r\n\t        }\r\n\t        if (win > 0) {\r\n\t            if (this.currentMultiplierIndex > 1) {\r\n\t                this.setActiveElementCaseArray([\r\n\t                    (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                        WinAnimatorExtended.CaseHighWin +\r\n\t                        this.currentMultiplierIndex,\r\n\t                    (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                        WinAnimatorExtended.CaseHighWin,\r\n\t                    WinAnimatorExtended.CaseHighWin + this.currentMultiplierIndex,\r\n\t                    WinAnimatorExtended.CaseHighWin,\r\n\t                    (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                        WinAnimatorExtended.CaseHighWin +\r\n\t                        this.currentMultiplierIndex,\r\n\t                    (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                        WinAnimatorExtended.CaseHighWin,\r\n\t                ]);\r\n\t            }\r\n\t            else {\r\n\t                this.setActiveElementCaseArray([\r\n\t                    (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                        WinAnimatorExtended.CaseWin,\r\n\t                    WinAnimatorExtended.CaseWin,\r\n\t                    (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                        WinAnimatorExtended.CaseWin,\r\n\t                ]);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.setActiveElementCaseArray([\r\n\t                (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                    WinAnimatorExtended.CaseNoWin,\r\n\t                WinAnimatorExtended.CaseNoWin,\r\n\t                (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                    WinAnimatorExtended.CaseNoWin,\r\n\t            ]);\r\n\t        }\r\n\t        return ret;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.showFirstWins = function () {\r\n\t        if (this.currentMultiplierIndex === 0 || this.currentMultiplierIndex === 1) {\r\n\t            this.currentCounterStep = 0;\r\n\t            this.startTimer(WinAnimatorExtended.ShowFirstWinsStep, 15);\r\n\t        }\r\n\t        else {\r\n\t            if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t                ModuleManager_1.ModuleManager.overlayFsBoard();\r\n\t            }\r\n\t            _super.prototype.showFirstWins.call(this);\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.showCustomInitWin = function () {\r\n\t        var _this = this;\r\n\t        _super.prototype.showCustomInitWin.call(this);\r\n\t        if (this.currentWins) {\r\n\t            this.currentWins.forEach(function (win) {\r\n\t                if (win.trigger === neo_games_1.Communication.Game.WinTrigger.Scatter) {\r\n\t                    _this.startTimer(WinAnimatorExtended.EndFirstWinsStep, _this._paylineWinDelay);\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.putSymbolsOnTop = function (symbols) {\r\n\t        var _this = this;\r\n\t        while (this.symbolsContainer.children[0]) {\r\n\t            this.noWinSymbolsContainer.addChild(this.symbolsContainer.children[0]);\r\n\t        }\r\n\t        symbols.forEach(function (symbol) {\r\n\t            _this.symbolsContainer.addChild(symbol);\r\n\t        });\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.showFirstWinsStep = function () {\r\n\t        var win = this.currentWins[this.currentCounterStep];\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNowin);\r\n\t        this.allSymbolsGoToCase(Symbol_1.Symbol.CaseNowin, true);\r\n\t        for (var i = 0; i < this.currentWins.length; i++) {\r\n\t            this.winPaylineGoToCase(i, Payline_1.Payline.CaseNormal);\r\n\t            this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseNormal, false);\r\n\t        }\r\n\t        if (this._paylineEvaluation === exports.WinAnimatorExtendedAttributes.PAYLINE_EVALUATION_TYPES.SEPARATE) {\r\n\t            this.winPaylineGoToCase(this.currentCounterStep, Payline_1.Payline.CaseWin);\r\n\t            var symbols = this.winSymbolsGoToCase(this.currentCounterStep, Symbol_1.Symbol.CaseWin, false);\r\n\t            this.putSymbolsOnTop(symbols);\r\n\t        }\r\n\t        else {\r\n\t            for (var i = 0; i < this.currentWins.length; i++) {\r\n\t                this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseWin, false);\r\n\t                this.winPaylineGoToCase(i, Payline_1.Payline.CaseWin);\r\n\t            }\r\n\t            this.currentCounterStep = this.currentWins.length - 1;\r\n\t        }\r\n\t        if (win.amount > 0) {\r\n\t            this.runCounterStep();\r\n\t        }\r\n\t        this.currentCounterStep++;\r\n\t        this.startTimer(this.currentCounterStep < this.currentWins.length\r\n\t            ? WinAnimatorExtended.ShowFirstWinsStep\r\n\t            : WinAnimatorExtended.FinishWin, this._paylineWinDelay);\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.endFirstWinsStep = function () {\r\n\t        this.currentCounterStep = null;\r\n\t        this.timerStatus = null;\r\n\t        this.emit(WinAnimator_1.WinAnimator.FinishWinAnimator);\r\n\t        this.currentCycle = 0;\r\n\t        if (!this._inCycleWin) {\r\n\t            this.cycleWins();\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.finishWin = function () {\r\n\t        this.emit(WinAnimator_1.WinAnimator.FinishWinCalculation);\r\n\t        this.runCounterOutro();\r\n\t        var endDelay = this._paylineWinEndDelay;\r\n\t        if (this.currentWins) {\r\n\t            this.currentWins.forEach(function (win) {\r\n\t                if (win.trigger === neo_games_1.Communication.Game.WinTrigger.Scatter) {\r\n\t                    endDelay = 0;\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t        this.startTimer(WinAnimatorExtended.EndFirstWinsStep, endDelay);\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.finishFirstWins = function () {\r\n\t        _super.prototype.finishFirstWins.call(this);\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.cycleWins = function () {\r\n\t        if (this.currentWin <= 0) {\r\n\t            return;\r\n\t        }\r\n\t        this._inCycleWin = true;\r\n\t        var skipCycle = false;\r\n\t        if (this.currentWins[this.currentCycle].trigger === neo_games_1.Communication.Game.WinTrigger.Scatter &&\r\n\t            this.currentWins[this.currentCycle].type === neo_games_1.Communication.Game.WinType.freeSpins) {\r\n\t            this.allSymbolsGoToCase(Symbol_1.Symbol.CaseNormal, true);\r\n\t            skipCycle = true;\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.play(\"SND_BaseRecapWinline\");\r\n\t            this.allSymbolsGoToCase(Symbol_1.Symbol.CaseNowin, true);\r\n\t            this.allPaylinesGoToCase(Payline_1.Payline.CaseNowin);\r\n\t            for (var i = 0; i < this.currentWins.length; i++) {\r\n\t                this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseNormal, false);\r\n\t                this.winPaylineGoToCase(i, Payline_1.Payline.CaseNormal);\r\n\t            }\r\n\t            var symbols = this.winSymbolsGoToCase(this.currentCycle, Symbol_1.Symbol.CaseCycle, true);\r\n\t            this.winPaylineGoToCase(this.currentCycle, Payline_1.Payline.CaseCycle);\r\n\t            this.putSymbolsOnTop(symbols);\r\n\t            this.currentCycle = (this.currentCycle + 1) % this.currentWins.length;\r\n\t        }\r\n\t        if (skipCycle) {\r\n\t            this.stopTimer();\r\n\t            this.startTimer(WinAnimator_1.WinAnimator.CycleWins, 1);\r\n\t        }\r\n\t        else {\r\n\t            if (this.currentWins.length > 1) {\r\n\t                this.stopTimer();\r\n\t                this.startTimer(WinAnimator_1.WinAnimator.CycleWins, this._paylineCycleDelay);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.getCycleWinsDelay = function () {\r\n\t        return 90;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.onCalculationFinished = function () {\r\n\t        _super.prototype.onCalculationFinished.call(this);\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.onAnimationFinished = function () {\r\n\t        _super.prototype.onAnimationFinished.call(this);\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.softOutro = function () {\r\n\t        if (ModuleManager_1.ModuleManager.freespinsActive()) {\r\n\t            if (this.currentMultiplierIndex > 1) {\r\n\t                ModuleManager_1.ModuleManager.removeOverlayFsBoard();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.reset = function (showLastSymbols, spin) {\r\n\t        var _this = this;\r\n\t        if (spin === void 0) { spin = false; }\r\n\t        if (!showLastSymbols) {\r\n\t            this.stopStarAnimation();\r\n\t        }\r\n\t        if (this._scatterTimeout) {\r\n\t            clearTimeout(this._scatterTimeout);\r\n\t            this._scatterTimeout = null;\r\n\t        }\r\n\t        this._inCycleWin = false;\r\n\t        this.softOutro();\r\n\t        var activeCase = this.getActiveElementCase();\r\n\t        var caseReg = new RegExp(WinAnimatorExtended.CaseSuffixCycle + \"$\");\r\n\t        if (caseReg.test(activeCase)) {\r\n\t            this.setActiveElementCaseArray([\r\n\t                activeCase.replace(caseReg, \"\") + WinAnimatorExtended.CaseSuffixOutro,\r\n\t                WinAnimatorExtended.CaseReset,\r\n\t            ]);\r\n\t        }\r\n\t        else {\r\n\t            this.setActiveElementCaseArray([\r\n\t                activeCase + WinAnimatorExtended.CaseSuffixOutro,\r\n\t                WinAnimatorExtended.CaseReset,\r\n\t            ]);\r\n\t        }\r\n\t        var outroPlayed = false;\r\n\t        switch (this.timerStatus) {\r\n\t            case WinAnimatorExtended.ShowFirstWinsStep:\r\n\t                this.runCounterOutro(true);\r\n\t                outroPlayed = true;\r\n\t                break;\r\n\t            case WinAnimatorExtended.FinishWin:\r\n\t                this.runCounterOutro(true);\r\n\t                outroPlayed = true;\r\n\t                this.currentCounterStep = null;\r\n\t                this.timerStatus = null;\r\n\t                this.currentCycle = 0;\r\n\t                break;\r\n\t            case WinAnimatorExtended.EndFirstWinsStep:\r\n\t                this.currentCounterStep = null;\r\n\t                this.timerStatus = null;\r\n\t                this.currentCycle = 0;\r\n\t                break;\r\n\t        }\r\n\t        if (this.currentCounterStep != null) {\r\n\t            this.currentCounterStep = null;\r\n\t            if (!outroPlayed) {\r\n\t                this.runCounterOutro(true);\r\n\t            }\r\n\t        }\r\n\t        if (showLastSymbols) {\r\n\t            this.startStarAnimation();\r\n\t        }\r\n\t        if (spin) {\r\n\t            var _loop_1 = function(reelIndex) {\r\n\t                var _loop_2 = function(rowIndex) {\r\n\t                    var symbol = this_1.currentSymbols[reelIndex][rowIndex];\r\n\t                    if (symbol != null && Settings_1.Settings.SymbolsNoTrim.indexOf(symbol.id + 1) != -1) {\r\n\t                        if (this_1.elementInstance[\"wildContainer\"] != null) {\r\n\t                            this_1.currentSymbols[reelIndex][rowIndex] = null;\r\n\t                            this_1.elementInstance[\"wildContainer\"].addChild(symbol);\r\n\t                            if (symbol.getCurrentCase() !== Symbol_1.Symbol.CaseNormal ||\r\n\t                                symbol.getCurrentCase() !== Symbol_1.Symbol.CaseIdle) {\r\n\t                                symbol.goToCase(Symbol_1.Symbol.CaseNormal);\r\n\t                            }\r\n\t                            symbol.goToCase(Symbol_1.Symbol.CaseRotation);\r\n\t                            Tweens_1.Tweens.positionTween(symbol, {\r\n\t                                tweenDelay: this_1._startDelay * reelIndex,\r\n\t                                tweenX: [symbol.x, symbol.x, symbol.x],\r\n\t                                tweenY: [symbol.y, symbol.y - this_1._preRoll, symbol.y],\r\n\t                                tweenDuration: this_1._preRollSpeed * 2,\r\n\t                                callbackFunction: function () {\r\n\t                                    _this.symbolsContainer.addChild(symbol);\r\n\t                                    symbol.goToCase(Symbol_1.Symbol.CaseEmpty);\r\n\t                                    _this.currentSymbols[reelIndex][rowIndex] = symbol;\r\n\t                                },\r\n\t                            });\r\n\t                        }\r\n\t                    }\r\n\t                };\r\n\t                for (var rowIndex = 0; rowIndex < this_1.currentSymbols[reelIndex].length; rowIndex++) {\r\n\t                    _loop_2(rowIndex);\r\n\t                }\r\n\t            };\r\n\t            var this_1 = this;\r\n\t            for (var reelIndex = 0; reelIndex < this.currentSymbols.length; reelIndex++) {\r\n\t                _loop_1(reelIndex);\r\n\t            }\r\n\t        }\r\n\t        PlayList_1.PlayList.stop(\"SND_CycleLoop\");\r\n\t        return _super.prototype.reset.call(this, showLastSymbols);\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.respinReset = function (respin) {\r\n\t        return true;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.idle = function () {\r\n\t        this.setActiveElementCaseArray([\r\n\t            (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                WinAnimatorExtended.CaseIdle,\r\n\t            WinAnimatorExtended.CaseNoWin,\r\n\t            (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                WinAnimatorExtended.CaseIdle,\r\n\t        ]);\r\n\t        _super.prototype.idle.call(this);\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.showInitWins = function (wins, win) {\r\n\t        this.resetCounter();\r\n\t        _super.prototype.showInitWins.call(this, wins, win);\r\n\t        this.startStarAnimation();\r\n\t        if (win > 0) {\r\n\t            if (this.currentMultiplierIndex > 1) {\r\n\t                this.setActiveElementCaseArray([\r\n\t                    (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                        WinAnimatorExtended.CaseHighWin +\r\n\t                        this.currentMultiplierIndex,\r\n\t                    (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                        WinAnimatorExtended.CaseHighWin,\r\n\t                    WinAnimatorExtended.CaseHighWin + this.currentMultiplierIndex,\r\n\t                    WinAnimatorExtended.CaseHighWin,\r\n\t                    (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                        WinAnimatorExtended.CaseHighWin +\r\n\t                        this.currentMultiplierIndex,\r\n\t                    (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                        WinAnimatorExtended.CaseHighWin,\r\n\t                ]);\r\n\t            }\r\n\t            else {\r\n\t                this.setActiveElementCaseArray([\r\n\t                    (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                        WinAnimatorExtended.CaseWin,\r\n\t                    WinAnimatorExtended.CaseWin,\r\n\t                    (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                        WinAnimatorExtended.CaseWin,\r\n\t                ]);\r\n\t            }\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseLoop\", 30);\r\n\t        }\r\n\t        else {\r\n\t            this.setActiveElementCaseArray([\r\n\t                (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                    WinAnimatorExtended.CaseNoWin,\r\n\t                WinAnimatorExtended.CaseNoWin,\r\n\t                (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\r\n\t                    WinAnimatorExtended.CaseNoWin,\r\n\t            ]);\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.setActiveElementCaseArray = function (s, emitEvent, delay) {\r\n\t        if (emitEvent === void 0) { emitEvent = false; }\r\n\t        if (!s.length) {\r\n\t            return;\r\n\t        }\r\n\t        if (!this.visible) {\r\n\t            return;\r\n\t        }\r\n\t        this._activeElementsCase = s[0];\r\n\t        this._activeElements.forEach(function (element) {\r\n\t            for (var i = 0; i < s.length; i++) {\r\n\t                if (element.hasCase(s[i])) {\r\n\t                    element.goToCase(s[i], emitEvent, delay);\r\n\t                    break;\r\n\t                }\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.setActiveElementCase = function (s, emitEvent, delay) {\r\n\t        if (emitEvent === void 0) { emitEvent = false; }\r\n\t        if (!this.visible) {\r\n\t            return;\r\n\t        }\r\n\t        this._activeElementsCase = s;\r\n\t        this._activeElements.forEach(function (element) {\r\n\t            if (element.hasCase(s)) {\r\n\t                element.goToCase(s, emitEvent, delay);\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.getActiveElementCase = function () {\r\n\t        return this._activeElementsCase;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.onTimerComplete = function () {\r\n\t        this.timer.stop();\r\n\t        switch (this.timerStatus) {\r\n\t            case WinAnimatorExtended.ShowFirstWinsStep:\r\n\t                this.showFirstWinsStep();\r\n\t                break;\r\n\t            case WinAnimatorExtended.EndFirstWinsStep:\r\n\t                this.endFirstWinsStep();\r\n\t                break;\r\n\t            case WinAnimatorExtended.FinishWin:\r\n\t                this.finishWin();\r\n\t                break;\r\n\t            default:\r\n\t                _super.prototype.onTimerComplete.call(this);\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.resetCounter = function () {\r\n\t        if (!this.animations || !this.animations[this.getAnimationIndex()]) {\r\n\t            return;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this.animations[this.getAnimationIndex()], \"all\");\r\n\t        this.animations[this.getAnimationIndex()].visible = false;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.runCounterStep = function () {\r\n\t        if (!this.animations || !this.animations[this.getAnimationIndex()]) {\r\n\t            return;\r\n\t        }\r\n\t        var amountFrom = \"0\";\r\n\t        var amountTo = \"0\";\r\n\t        for (var i = 0; i <= this.currentCounterStep; i++) {\r\n\t            var win = this.currentWins[i];\r\n\t            if (win.type === neo_games_1.Communication.Game.WinType.Cash) {\r\n\t                amountTo = neo_common_1.NumberUtils.add(amountTo, this.currentWins[i].amount);\r\n\t            }\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.CoinSize != null) {\r\n\t            ImageTextCounterElement_1.ImageTextCounterElement.Round = true;\r\n\t            this.animations[this.getAnimationIndex()].play(parseInt(neo_common_1.NumberUtils.devide(amountTo, BetManager_1.BetManager.CoinSize).toString()), parseInt(neo_common_1.NumberUtils.devide(amountFrom, BetManager_1.BetManager.CoinSize).toString()));\r\n\t        }\r\n\t        else {\r\n\t            ImageTextCounterElement_1.ImageTextCounterElement.Round = false;\r\n\t            this.animations[this.getAnimationIndex()].play(parseFloat(amountTo), parseFloat(amountFrom));\r\n\t        }\r\n\t        this.animations[this.getAnimationIndex()].visible = true;\r\n\t        Tweens_1.Tweens.removeTweens(this.animations[this.getAnimationIndex()], \"all\");\r\n\t        if (this._winScaleConstantMultiplicative == 0) {\r\n\t            this.animations[this.getAnimationIndex()].scale.x = this._winScaleConstantAdditive;\r\n\t            this.animations[this.getAnimationIndex()].scale.y = this._winScaleConstantAdditive;\r\n\t            return;\r\n\t        }\r\n\t        var scaleFrom = this._winScaleConstantAdditive +\r\n\t            (this._winScaleConstantMultiplicative * this.currentCounterStep) / this.currentWins.length;\r\n\t        var scaleTo = this._winScaleConstantAdditive +\r\n\t            (this._winScaleConstantMultiplicative * (this.currentCounterStep + 1)) / this.currentWins.length;\r\n\t        Tweens_1.Tweens.scaleTween(this.animations[this.getAnimationIndex()], {\r\n\t            tweenValues: [\r\n\t                new PIXI.Point(scaleFrom, scaleFrom),\r\n\t                new PIXI.Point(scaleFrom, scaleFrom),\r\n\t                new PIXI.Point(scaleTo, scaleTo),\r\n\t                new PIXI.Point(scaleTo, scaleTo),\r\n\t            ],\r\n\t            keyTimes: this._winScaleKeyTimes,\r\n\t            tweenDuration: this._winScaleDuration,\r\n\t            tweenEase: this._winScaleEase,\r\n\t        });\r\n\t        this._counterPlayed = true;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.setCustomData = function (value) {\r\n\t        this._customData = value;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.runCounterOutro = function (reset) {\r\n\t        if (reset === void 0) { reset = false; }\r\n\t        if (!this.animations || !this.animations[this.getAnimationIndex()] || !this._counterPlayed) {\r\n\t            return;\r\n\t        }\r\n\t        Tweens_1.Tweens.removeTweens(this.animations[this.getAnimationIndex()], \"all\");\r\n\t        var scale = this._winScaleConstantAdditive +\r\n\t            (this._winScaleConstantMultiplicative * (reset ? this.currentWins.length : this.currentCounterStep)) /\r\n\t                this.currentWins.length;\r\n\t        this.animations[this.getAnimationIndex()].scale.x = scale;\r\n\t        this.animations[this.getAnimationIndex()].scale.y = scale;\r\n\t        this.animations[this.getAnimationIndex()].winValue = this.currentWin;\r\n\t        this.animations[this.getAnimationIndex()].goToOutro();\r\n\t        this._counterPlayed = false;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.finishHighWins = function () {\r\n\t        this.onAnimationFinished();\r\n\t        this.emit(WinAnimator_1.WinAnimator.FinishWinAnimator);\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.getCurrentMultiplierIndex = function () {\r\n\t        return this.currentMultiplierIndex;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.startStarAnimation = function () {\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var row = this.currentSymbols[i];\r\n\t            for (var j = 0; j < row.length; j++) {\r\n\t                var symbol = row[j];\r\n\t                var children = symbol.getChildElements();\r\n\t                var _loop_3 = function(key) {\r\n\t                    if (key.lastIndexOf(\"Star\", 0) === 0) {\r\n\t                        var star_1 = children[key];\r\n\t                        if (star_1 !== null) {\r\n\t                            var timer = FrameTimer_1.CreateFrameTimer(\"symbol\" + i + j + \"_\" + key);\r\n\t                            this_2.starTimerStack.push(timer);\r\n\t                            var rand = Math.floor(Math.random() * 100 * ((i + 1) * (j + 1))) + 1;\r\n\t                            timer.start(rand);\r\n\t                            timer.on(FrameTimer_1.FrameTimerEvents.Complete, function () {\r\n\t                                star_1.play();\r\n\t                            });\r\n\t                        }\r\n\t                    }\r\n\t                };\r\n\t                var this_2 = this;\r\n\t                for (var key in children) {\r\n\t                    _loop_3(key);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.addCurrentSymbol = function (reelIndex, symbolIndex) {\r\n\t        _super.prototype.addCurrentSymbol.call(this, reelIndex, symbolIndex);\r\n\t        this.sortChildrenByZindex();\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.winSymbolsGoToCase = function (winIndex, caseType, useValue) {\r\n\t        var win = this.currentWins[winIndex];\r\n\t        var symbols = _super.prototype.winSymbolsGoToCase.call(this, winIndex, caseType, useValue);\r\n\t        if (useValue && symbols.length > 0 && win.amount > 0) {\r\n\t            this.value.position.x = symbols[0].position.x + symbols[0].offsetX + this.symbolWidth / 2;\r\n\t            this.value.position.y = symbols[0].position.y + symbols[0].offsetY + this.symbolHeight / 2;\r\n\t            this.value.scale.x = this.value.scale.y = 1;\r\n\t            this.value.visible = true;\r\n\t            this.value.play(win.amount);\r\n\t        }\r\n\t        this.sortChildrenByZindex();\r\n\t        return symbols;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.sortChildrenByZindex = function () {\r\n\t        this.symbolsContainer.children.sort(function (a, b) {\r\n\t            if (a.hasOwnProperty(\"zIndex\") && b.hasOwnProperty(\"zIndex\")) {\r\n\t                a.zIndex = a.zIndex || 0;\r\n\t                b.zIndex = b.zIndex || 0;\r\n\t                return a.zIndex - b.zIndex;\r\n\t            }\r\n\t            return 0;\r\n\t        });\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.allSymbolsGoToCase = function (caseType, noWin) {\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            for (var j = 0; j < this.currentSymbols[i].length; j++) {\r\n\t                var symbol = this.currentSymbols[i][j];\r\n\t                if (symbol !== null && this.allowSymbolGoToCase(i, j, caseType)) {\r\n\t                    symbol.goToCase(caseType);\r\n\t                    if (noWin) {\r\n\t                        this.noWinSymbolsContainer.addChild(symbol);\r\n\t                    }\r\n\t                    else {\r\n\t                        this.symbolsContainer.addChild(symbol);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.sortChildrenByZindex();\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.allowSymbolGoToCase = function (reelIndex, symbolIndex, caseType) {\r\n\t        if (caseType == Symbol_1.Symbol.CaseNormal &&\r\n\t            this.currentSymbols[reelIndex][symbolIndex].getCurrentCase() == Symbol_1.Symbol.CaseIdle) {\r\n\t            return false;\r\n\t        }\r\n\t        return _super.prototype.allowSymbolGoToCase.call(this, reelIndex, symbolIndex, caseType);\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.showSymbols = function (reelsData) {\r\n\t        this.currentReels = reelsData;\r\n\t        for (var i = 0; i < reelsData.length; i++) {\r\n\t            for (var j = 0; j < reelsData[i].symbols.length; j++) {\r\n\t                this.removeCurrentSymbol(i, j);\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0; i < reelsData.length; i++) {\r\n\t            for (var j = 0; j < reelsData[i].symbols.length; j++) {\r\n\t                this.addCurrentSymbol(i, j);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.stopStarAnimation = function () {\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var row = this.currentSymbols[i];\r\n\t            for (var j = 0; j < row.length; j++) {\r\n\t                var symbol = row[j];\r\n\t                var children = symbol.getChildElements();\r\n\t                for (var key in children) {\r\n\t                    if (key.lastIndexOf(\"Star\", 0) === 0) {\r\n\t                        var star = children[key];\r\n\t                        if (star !== null) {\r\n\t                            star.stop();\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0, len = this.starTimerStack.length; i < len; i++) {\r\n\t            var timer = this.starTimerStack.pop();\r\n\t            timer.stop();\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.getIdleDelay = function () {\r\n\t        return 160;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.getIdleActiveElementsCount = function () {\r\n\t        return 2;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.isHighWin = function (win) {\r\n\t        return win / BetManager_1.BetManager.Bet >= this.multipliers[2];\r\n\t    };\r\n\t    WinAnimatorExtended.CaseNormal = \"NORMAL\";\r\n\t    WinAnimatorExtended.CaseWin = \"WIN\";\r\n\t    WinAnimatorExtended.CaseNoWin = \"NOWIN\";\r\n\t    WinAnimatorExtended.CaseHighWin = \"HIGHWIN\";\r\n\t    WinAnimatorExtended.CaseReset = \"RESET\";\r\n\t    WinAnimatorExtended.CaseIdle = \"IDLE\";\r\n\t    WinAnimatorExtended.CasePrefixNormal = \"\";\r\n\t    WinAnimatorExtended.CasePrefixFreeSpins = \"FS_\";\r\n\t    WinAnimatorExtended.CaseSuffixCycle = \"_CYCLE\";\r\n\t    WinAnimatorExtended.CaseSuffixOutro = \"_OUTRO\";\r\n\t    WinAnimatorExtended.ShowFirstWinsStep = \"showFirstWinsStep\";\r\n\t    WinAnimatorExtended.EndFirstWinsStep = \"endFirstWinsStep\";\r\n\t    WinAnimatorExtended.FinishWin = \"finishWin\";\r\n\t    WinAnimatorExtended = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], WinAnimatorExtended);\r\n\t    return WinAnimatorExtended;\r\n\t}(WinAnimator_1.WinAnimator));\r\n\texports.WinAnimatorExtended = WinAnimatorExtended;\r\n\texports.WinAnimatorExtendedAttributes = {\r\n\t    ACTIVE_ELEMENTS: \"ActiveElements\",\r\n\t    PAYLINE_DURATION: \"PaylineDuration\",\r\n\t    PAYLINE_WIN_DELAY: \"PaylineWinDelay\",\r\n\t    PAYLINE_WIN_END_DELAY: \"PaylineWinEndDelay\",\r\n\t    PAYLINE_CYCLE_DELAY: \"PaylineCycleDelay\",\r\n\t    PAYLINE_EVALUATION: \"PaylineEvaluation\",\r\n\t    PAYLINE_EVALUATION_TYPES: {\r\n\t        SEPARATE: \"separate\",\r\n\t        TOGETHER: \"together\",\r\n\t    },\r\n\t    CYCLE_ANIMATION: \"CycleAnimation\",\r\n\t    IS_FS_ANIMATOR: \"FreeSpinAnimator\",\r\n\t    WIN_SCALE_CONSTANT_ADDITIVE: \"WinScaleConstantAdditive\",\r\n\t    WIN_SCALE_CONSTANT_MULTIPLICATIVE: \"WinScaleConstantMultiplicative\",\r\n\t    WIN_SCALE_DURATION: \"WinScaleDuration\",\r\n\t    WIN_SCALE_EASE: \"WinScaleEase\",\r\n\t    WIN_SCALE_KEY_TIMES: \"WinScaleKeyTimes\",\r\n\t};\r\n\n\n/***/ },\n/* 175 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar SwitchElement_1 = __webpack_require__(97);\r\n\tvar Spot = (function (_super) {\r\n\t    __extends(Spot, _super);\r\n\t    function Spot() {\r\n\t        _super.call(this);\r\n\t        this.delayedTimer = FrameTimer_1.CreateFrameTimer(\"delayedTimer\");\r\n\t        this.enabled = false;\r\n\t    }\r\n\t    Spot.prototype.delayedGoToCase = function (delay, delayedCase) {\r\n\t        this.delayedCase = delayedCase;\r\n\t        this.delayedTimer.stop();\r\n\t        this.delayedTimer.removeAllListeners(FrameTimer_1.FrameTimerEvents.Complete);\r\n\t        this.delayedTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.delayedToCase.bind(this));\r\n\t        this.delayedTimer.start(delay);\r\n\t    };\r\n\t    Spot.prototype.delayedToCase = function () {\r\n\t        if (this.delayedCase != null || this.delayedCase != \"\") {\r\n\t            this.delayedTimer.stop();\r\n\t            this.delayedTimer.removeAllListeners(FrameTimer_1.FrameTimerEvents.Complete);\r\n\t            this.goToCase(this.delayedCase);\r\n\t            this.delayedCase = \"\";\r\n\t        }\r\n\t    };\r\n\t    Spot = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], Spot);\r\n\t    return Spot;\r\n\t}(SwitchElement_1.SwitchElement));\r\n\texports.Spot = Spot;\r\n\n\n/***/ },\n/* 176 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar BaseActions_1 = __webpack_require__(46);\r\n\tvar HtmlBetSelectorContainerElement = (function (_super) {\r\n\t    __extends(HtmlBetSelectorContainerElement, _super);\r\n\t    function HtmlBetSelectorContainerElement() {\r\n\t        _super.call(this);\r\n\t        BetManager_1.BetManager.CoinCountContainer = this;\r\n\t    }\r\n\t    HtmlBetSelectorContainerElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this._popup = document.createElement(\"div\");\r\n\t        this._popup.classList.add(\"display\");\r\n\t        this._popup.classList.add(\"popupBig\");\r\n\t        if (this.instance != null) {\r\n\t            this.instance.appendChild(this._popup);\r\n\t        }\r\n\t        this.block = true;\r\n\t        this.createTimeout();\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.addValues = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.UseCoins &&\r\n\t            BetManager_1.BetManager.Coins != null &&\r\n\t            BetManager_1.BetManager.CoinSize != null &&\r\n\t            this._popup != null) {\r\n\t            this._values = [];\r\n\t            this._popup.innerHTML = \"\";\r\n\t            var i = 0;\r\n\t            for (var key in BetManager_1.BetManager.Coins) {\r\n\t                if (BetManager_1.BetManager.CoinSize === parseFloat(key)) {\r\n\t                    for (var j = 0; j < BetManager_1.BetManager.Coins[key].length; j++) {\r\n\t                        BetManager_1.BetManager.Coins[key].sort(BetManager_1.BetManager.sortNumber);\r\n\t                        BetManager_1.BetManager.Coins[key].reverse();\r\n\t                        var popupItem = document.createElement(\"div\");\r\n\t                        popupItem.classList.add(\"popupItem\");\r\n\t                        popupItem.onclick = this.onValueClick.bind(this);\r\n\t                        popupItem.setAttribute(\"CoinCount\", BetManager_1.BetManager.Coins[key][j].toString());\r\n\t                        if (BetManager_1.BetManager.CoinCount != null && BetManager_1.BetManager.CoinCount == BetManager_1.BetManager.Coins[key][j]) {\r\n\t                            popupItem.classList.add(\"_active\");\r\n\t                        }\r\n\t                        var popupItemValue = document.createElement(\"div\");\r\n\t                        popupItemValue.classList.add(\"popupValue\");\r\n\t                        popupItemValue.innerText = BetManager_1.BetManager.Coins[key][j].toString();\r\n\t                        popupItem.appendChild(popupItemValue);\r\n\t                        this._values.push(popupItem);\r\n\t                        this._popup.appendChild(popupItem);\r\n\t                        i++;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            this._height = 60 * i + 48 + \"px\";\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.onValueClick = function (e) {\r\n\t        if (this.block) {\r\n\t            return;\r\n\t        }\r\n\t        this.setTimeout();\r\n\t        if (e != null &&\r\n\t            e.currentTarget != null &&\r\n\t            e.currentTarget.hasAttribute(\"CoinCount\") &&\r\n\t            BetManager_1.BetManager.CoinCount != null) {\r\n\t            var coinCount = parseFloat(e.currentTarget.getAttribute(\"CoinCount\"));\r\n\t            if (coinCount === BetManager_1.BetManager.CoinCount) {\r\n\t                this.disable();\r\n\t            }\r\n\t            else {\r\n\t                if (this._values != null) {\r\n\t                    for (var i = 0; i < this._values.length; i++) {\r\n\t                        if (this._values[i].hasAttribute(\"CoinCount\")) {\r\n\t                            if (parseFloat(this._values[i].getAttribute(\"CoinCount\")) === coinCount) {\r\n\t                                this._values[i].classList.add(\"_active\");\r\n\t                            }\r\n\t                            else {\r\n\t                                this._values[i].classList.remove(\"_active\");\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    HtmlController_1.HtmlController.dispatchAction(BaseActions_1.BaseActions.ActionCoinCountSelectValue + coinCount);\r\n\t                    this.disable();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.changeValue = function () {\r\n\t        if (this._values != null) {\r\n\t            for (var i = 0; i < this._values.length; i++) {\r\n\t                if (this._values[i].hasAttribute(\"CoinCount\")) {\r\n\t                    if (parseFloat(this._values[i].getAttribute(\"CoinCount\")) === BetManager_1.BetManager.CoinCount) {\r\n\t                        this._values[i].classList.add(\"_active\");\r\n\t                    }\r\n\t                    else {\r\n\t                        this._values[i].classList.remove(\"_active\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.toggle = function () {\r\n\t        if (this._values != null && this._values.length <= 1) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = false;\r\n\t                this.setTimeout();\r\n\t                if (this._height != null) {\r\n\t                    this.instance.style.height = this._height;\r\n\t                }\r\n\t                this.instance.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            else {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.disable = function () {\r\n\t        if (this.instance != null) {\r\n\t            if (!this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.createTimeout = function () {\r\n\t        this.timeout = null;\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.setTimeout = function () {\r\n\t        var _this = this;\r\n\t        this.clearTimeOut();\r\n\t        var duration = AppContext_1.AppContext.gameConfiguration.SelectorRolloutDuration;\r\n\t        if (duration > 0) {\r\n\t            this.timeout = setTimeout(function () {\r\n\t                _this.disable();\r\n\t            }, duration * 1000);\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement.prototype.clearTimeOut = function () {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.timeout)) {\r\n\t            clearTimeout(this.timeout);\r\n\t            this.timeout = null;\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlBetSelectorContainerElement);\r\n\t    return HtmlBetSelectorContainerElement;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlBetSelectorContainerElement = HtmlBetSelectorContainerElement;\r\n\n\n/***/ },\n/* 177 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar BaseActions_1 = __webpack_require__(46);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar HtmlBetSelectorContainerElement2 = (function (_super) {\r\n\t    __extends(HtmlBetSelectorContainerElement2, _super);\r\n\t    function HtmlBetSelectorContainerElement2() {\r\n\t        _super.call(this);\r\n\t        BetManager_1.BetManager.BetContainer = this;\r\n\t    }\r\n\t    HtmlBetSelectorContainerElement2.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this._popup = document.createElement(\"div\");\r\n\t        this._popup.classList.add(\"display\");\r\n\t        this._popup.classList.add(\"popupBig\");\r\n\t        if (this.instance != null) {\r\n\t            this.instance.appendChild(this._popup);\r\n\t        }\r\n\t        this.block = true;\r\n\t        this.createTimeout();\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.addValues = function () {\r\n\t        if (!AppContext_1.AppContext.gameConfiguration.UseCoins && BetManager_1.BetManager.TotalBets != null && this._popup != null) {\r\n\t            this._values = [];\r\n\t            this._popup.innerHTML = \"\";\r\n\t            var count = 0;\r\n\t            for (var i = BetManager_1.BetManager.TotalBets.length - 1; i >= 0; i--) {\r\n\t                var popupItem = document.createElement(\"div\");\r\n\t                popupItem.classList.add(\"popupItem\");\r\n\t                popupItem.onclick = this.onValueClick.bind(this);\r\n\t                popupItem.setAttribute(\"Bet\", BetManager_1.BetManager.TotalBets[i].toString());\r\n\t                if (BetManager_1.BetManager.Bet != null && BetManager_1.BetManager.Bet == BetManager_1.BetManager.TotalBets[i]) {\r\n\t                    popupItem.classList.add(\"_active\");\r\n\t                }\r\n\t                var popupItemValue = document.createElement(\"div\");\r\n\t                popupItemValue.classList.add(\"popupValue\");\r\n\t                popupItemValue.innerText = Languages_1.Languages.formatText(Languages_1.Languages.FormatMoney, BetManager_1.BetManager.TotalBets[i].toString());\r\n\t                popupItem.appendChild(popupItemValue);\r\n\t                this._values.push(popupItem);\r\n\t                this._popup.appendChild(popupItem);\r\n\t                count++;\r\n\t            }\r\n\t            this._height = 60 * count + 48 + \"px\";\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.onValueClick = function (e) {\r\n\t        if (this.block) {\r\n\t            return;\r\n\t        }\r\n\t        this.setTimeout();\r\n\t        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Bet\") && BetManager_1.BetManager.Bet != null) {\r\n\t            var bet = parseFloat(e.currentTarget.getAttribute(\"Bet\"));\r\n\t            if (bet === BetManager_1.BetManager.Bet) {\r\n\t                this.disable();\r\n\t            }\r\n\t            else {\r\n\t                if (this._values != null) {\r\n\t                    for (var i = 0; i < this._values.length; i++) {\r\n\t                        if (this._values[i].hasAttribute(\"Bet\")) {\r\n\t                            if (parseFloat(this._values[i].getAttribute(\"Bet\")) === bet) {\r\n\t                                this._values[i].classList.add(\"_active\");\r\n\t                            }\r\n\t                            else {\r\n\t                                this._values[i].classList.remove(\"_active\");\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    HtmlController_1.HtmlController.dispatchAction(BaseActions_1.BaseActions.ActionBetSelectValue + bet);\r\n\t                    this.disable();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.changeValue = function () {\r\n\t        if (this._values != null) {\r\n\t            for (var i = 0; i < this._values.length; i++) {\r\n\t                if (this._values[i].hasAttribute(\"Bet\")) {\r\n\t                    if (parseFloat(this._values[i].getAttribute(\"Bet\")) === BetManager_1.BetManager.Bet) {\r\n\t                        this._values[i].classList.add(\"_active\");\r\n\t                    }\r\n\t                    else {\r\n\t                        this._values[i].classList.remove(\"_active\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.toggle = function () {\r\n\t        if (this._values != null && this._values.length <= 1) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = false;\r\n\t                this.setTimeout();\r\n\t                if (this._height != null) {\r\n\t                    this.instance.style.height = this._height;\r\n\t                }\r\n\t                this.instance.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            else {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.disable = function () {\r\n\t        if (this.instance != null) {\r\n\t            if (!this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.createTimeout = function () {\r\n\t        this.timeout = null;\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.setTimeout = function () {\r\n\t        var _this = this;\r\n\t        this.clearTimeOut();\r\n\t        var duration = AppContext_1.AppContext.gameConfiguration.SelectorRolloutDuration;\r\n\t        if (duration > 0) {\r\n\t            this.timeout = setTimeout(function () {\r\n\t                _this.disable();\r\n\t            }, duration * 1000);\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2.prototype.clearTimeOut = function () {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.timeout)) {\r\n\t            clearTimeout(this.timeout);\r\n\t            this.timeout = null;\r\n\t        }\r\n\t    };\r\n\t    HtmlBetSelectorContainerElement2 = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlBetSelectorContainerElement2);\r\n\t    return HtmlBetSelectorContainerElement2;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlBetSelectorContainerElement2 = HtmlBetSelectorContainerElement2;\r\n\n\n/***/ },\n/* 178 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar BaseActions_1 = __webpack_require__(46);\r\n\tvar HtmlDenomContainerElement = (function (_super) {\r\n\t    __extends(HtmlDenomContainerElement, _super);\r\n\t    function HtmlDenomContainerElement() {\r\n\t        _super.call(this);\r\n\t        BetManager_1.BetManager.DenomContainer = this;\r\n\t    }\r\n\t    HtmlDenomContainerElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this._popup = document.createElement(\"div\");\r\n\t        this._popup.classList.add(\"display\");\r\n\t        this._popup.classList.add(\"popupBig\");\r\n\t        if (this.instance != null) {\r\n\t            this.instance.appendChild(this._popup);\r\n\t        }\r\n\t        this.block = true;\r\n\t        this.createTimeout();\r\n\t    };\r\n\t    HtmlDenomContainerElement.prototype.addValues = function () {\r\n\t        if (this._values == null &&\r\n\t            AppContext_1.AppContext.gameConfiguration.UseCoins &&\r\n\t            BetManager_1.BetManager.Coins != null &&\r\n\t            this._popup != null) {\r\n\t            this._values = [];\r\n\t            var i = 0;\r\n\t            var coinSizes = [];\r\n\t            for (var key in BetManager_1.BetManager.Coins) {\r\n\t                coinSizes.push(key);\r\n\t            }\r\n\t            coinSizes.sort(BetManager_1.BetManager.sortNumber);\r\n\t            coinSizes.reverse();\r\n\t            for (i = 0; i < coinSizes.length; i++) {\r\n\t                var popupItem = document.createElement(\"div\");\r\n\t                popupItem.classList.add(\"popupItem\");\r\n\t                popupItem.onclick = this.onValueClick.bind(this);\r\n\t                popupItem.setAttribute(\"CoinSize\", coinSizes[i]);\r\n\t                if (BetManager_1.BetManager.CoinSize != null && BetManager_1.BetManager.CoinSize == parseFloat(coinSizes[i])) {\r\n\t                    popupItem.classList.add(\"_active\");\r\n\t                }\r\n\t                var popupItemValue = document.createElement(\"div\");\r\n\t                popupItemValue.classList.add(\"popupValue\");\r\n\t                popupItemValue.innerText = coinSizes[i];\r\n\t                popupItem.appendChild(popupItemValue);\r\n\t                this._values.push(popupItem);\r\n\t                this._popup.appendChild(popupItem);\r\n\t            }\r\n\t            this._height = 60 * i + 48 + \"px\";\r\n\t        }\r\n\t    };\r\n\t    HtmlDenomContainerElement.prototype.onValueClick = function (e) {\r\n\t        if (this.block) {\r\n\t            return;\r\n\t        }\r\n\t        this.setTimeout();\r\n\t        if (e != null &&\r\n\t            e.currentTarget != null &&\r\n\t            e.currentTarget.hasAttribute(\"CoinSize\") &&\r\n\t            BetManager_1.BetManager.CoinSize != null) {\r\n\t            var coinSize = parseFloat(e.currentTarget.getAttribute(\"CoinSize\"));\r\n\t            if (coinSize === BetManager_1.BetManager.CoinSize) {\r\n\t                this.disable();\r\n\t            }\r\n\t            else {\r\n\t                if (this._values != null) {\r\n\t                    for (var i = 0; i < this._values.length; i++) {\r\n\t                        if (this._values[i].hasAttribute(\"CoinSize\")) {\r\n\t                            if (parseFloat(this._values[i].getAttribute(\"CoinSize\")) === coinSize) {\r\n\t                                this._values[i].classList.add(\"_active\");\r\n\t                            }\r\n\t                            else {\r\n\t                                this._values[i].classList.remove(\"_active\");\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                    HtmlController_1.HtmlController.dispatchAction(BaseActions_1.BaseActions.ActionDenomSelectValue + coinSize);\r\n\t                    this.disable();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlDenomContainerElement.prototype.toggle = function () {\r\n\t        if (this._values != null && this._values.length <= 1) {\r\n\t            return;\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = false;\r\n\t                this.setTimeout();\r\n\t                if (this._height != null) {\r\n\t                    this.instance.style.height = this._height;\r\n\t                }\r\n\t                this.instance.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            else {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlDenomContainerElement.prototype.disable = function () {\r\n\t        if (this.instance != null) {\r\n\t            if (!this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlDenomContainerElement.prototype.createTimeout = function () {\r\n\t        this.timeout = null;\r\n\t    };\r\n\t    HtmlDenomContainerElement.prototype.setTimeout = function () {\r\n\t        var _this = this;\r\n\t        this.clearTimeOut();\r\n\t        var duration = AppContext_1.AppContext.gameConfiguration.SelectorRolloutDuration;\r\n\t        if (duration > 0) {\r\n\t            this.timeout = setTimeout(function () {\r\n\t                _this.disable();\r\n\t            }, duration * 1000);\r\n\t        }\r\n\t    };\r\n\t    HtmlDenomContainerElement.prototype.clearTimeOut = function () {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.timeout)) {\r\n\t            clearTimeout(this.timeout);\r\n\t            this.timeout = null;\r\n\t        }\r\n\t    };\r\n\t    HtmlDenomContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlDenomContainerElement);\r\n\t    return HtmlDenomContainerElement;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlDenomContainerElement = HtmlDenomContainerElement;\r\n\n\n/***/ },\n/* 179 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlButtonElement_1 = __webpack_require__(180);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar HtmlHideButtonElement = (function (_super) {\r\n\t    __extends(HtmlHideButtonElement, _super);\r\n\t    function HtmlHideButtonElement() {\r\n\t        _super.call(this);\r\n\t        this._hideClass = \"\";\r\n\t    }\r\n\t    HtmlHideButtonElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        HtmlController_1.HtmlController.HideButtons.push(this);\r\n\t        if (node.hasAttribute(\"HideClass\")) {\r\n\t            this._hideClass = node.getAttribute(\"HideClass\");\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (!AppContext_1.AppContext.gameConfiguration.HideAmountsEnabled) {\r\n\t                this.instance.classList.add(\"_hidden\");\r\n\t            }\r\n\t            this.instance.onclick = this.toggle.bind(this);\r\n\t            if (AppContext_1.AppContext.current.getHideAmounts() && this._hideClass === \"_hideCredit\") {\r\n\t                this.toggle();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlHideButtonElement.prototype.unHide = function (credit) {\r\n\t        if (credit === void 0) { credit = false; }\r\n\t        if (this.instance != null &&\r\n\t            this._hideClass != \"\" &&\r\n\t            (this._hideClass === \"_hideBet\" || (credit && this._hideClass === \"_hideCredit\"))) {\r\n\t            var elements = document.getElementsByClassName(this._hideClass);\r\n\t            var display = \"block\";\r\n\t            if (this.instance.classList.contains(\"_off\")) {\r\n\t                this.instance.classList.remove(\"_off\");\r\n\t                if (!this.instance.classList.contains(\"_on\")) {\r\n\t                    this.instance.classList.add(\"_on\");\r\n\t                }\r\n\t            }\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                if (element != null) {\r\n\t                    element.style.display = display;\r\n\t                }\r\n\t            }\r\n\t            if (this._hideClass === \"_hideCredit\") {\r\n\t                if (display === \"block\") {\r\n\t                    AppContext_1.AppContext.current.setHideAmounts(false);\r\n\t                }\r\n\t                else {\r\n\t                    AppContext_1.AppContext.current.setHideAmounts(true);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlHideButtonElement.prototype.toggle = function () {\r\n\t        if (this.instance != null && this._hideClass != \"\") {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            var elements = document.getElementsByClassName(this._hideClass);\r\n\t            var display = \"none\";\r\n\t            if (this.instance.classList.contains(\"_on\")) {\r\n\t                this.instance.classList.remove(\"_on\");\r\n\t                if (!this.instance.classList.contains(\"_off\")) {\r\n\t                    this.instance.classList.add(\"_off\");\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this.instance.classList.remove(\"_off\");\r\n\t                if (!this.instance.classList.contains(\"_on\")) {\r\n\t                    this.instance.classList.add(\"_on\");\r\n\t                    display = \"block\";\r\n\t                }\r\n\t            }\r\n\t            for (var i = 0; i < elements.length; i++) {\r\n\t                var element = elements[i];\r\n\t                if (element != null) {\r\n\t                    element.style.display = display;\r\n\t                }\r\n\t            }\r\n\t            if (this._hideClass === \"_hideCredit\") {\r\n\t                if (display === \"block\") {\r\n\t                    AppContext_1.AppContext.current.setHideAmounts(false);\r\n\t                }\r\n\t                else {\r\n\t                    AppContext_1.AppContext.current.setHideAmounts(true);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlHideButtonElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlHideButtonElement);\r\n\t    return HtmlHideButtonElement;\r\n\t}(HtmlButtonElement_1.HtmlButtonElement));\r\n\texports.HtmlHideButtonElement = HtmlHideButtonElement;\r\n\n\n/***/ },\n/* 180 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar HtmlButtonElement = (function (_super) {\r\n\t    __extends(HtmlButtonElement, _super);\r\n\t    function HtmlButtonElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    HtmlButtonElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (node.hasAttribute(\"UIAction\")) {\r\n\t            this.uiaction = node.getAttribute(\"UIAction\").split(\";\");\r\n\t            if (!node.hasAttribute(\"Test\")) {\r\n\t                this.setTestAttributes(node.getAttribute(\"UIAction\"));\r\n\t            }\r\n\t            else {\r\n\t                this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n\t            }\r\n\t            for (var i = 0; i < this.uiaction.length; i++) {\r\n\t                HtmlController_1.HtmlController.registerUiActionElement(this.uiaction[i], this);\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(\"Action\")) {\r\n\t            this.action = node.getAttribute(\"Action\");\r\n\t            this.setTestAttributes(node.getAttribute(\"Action\"));\r\n\t            HtmlController_1.HtmlController.registerActionElement(node.getAttribute(\"Action\"), this);\r\n\t        }\r\n\t        if (node.hasAttribute(\"Test\")) {\r\n\t            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n\t        }\r\n\t        if (this.action != null || this.uiaction != null) {\r\n\t            this.instance.addEventListener(HtmlButtonElement.Click, this.onClick.bind(this));\r\n\t            if (this.action != null) {\r\n\t                this.instance.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            this.instance.addEventListener(HtmlButtonElement.TouchStart, this.onTouchStart.bind(this));\r\n\t            this.instance.addEventListener(HtmlButtonElement.TouchEnd, this.onTouchEnd.bind(this));\r\n\t            this.instance.addEventListener(\"gesturestart\", Scaling_1.Scaling.preventPropagation);\r\n\t            this.instance.addEventListener(\"gesturechange\", Scaling_1.Scaling.preventPropagation);\r\n\t            this.instance.addEventListener(\"gestureend\", Scaling_1.Scaling.preventPropagation);\r\n\t            this.instance.addEventListener(\"touchmove\", Scaling_1.Scaling.preventPropagation);\r\n\t            if (AppContext_1.AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\r\n\t                this.instance.addEventListener(HtmlButtonElement.MouseOver, this.onMouseOver.bind(this));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlButtonElement.prototype.setTestAttributes = function (action) {\r\n\t        this.instance.dataset[\"test\"] = this.renameTestAttributeValue(action);\r\n\t    };\r\n\t    HtmlButtonElement.prototype.renameTestAttributeValue = function (action) {\r\n\t        var isGamblePortraitButton = action.indexOf(\"GAMBLE_\") != -1 && this.instance.classList.contains(\"btnGamble\");\r\n\t        action = isGamblePortraitButton ? action + \"_PORTRAIT\" : action;\r\n\t        switch (action) {\r\n\t            case \"QUICKSPIN_DIALOG_OFF\":\r\n\t                if (this.instance.classList.contains(\"smallCloseBtn\"))\r\n\t                    return \"QUICKSPIN_DIALOG_CLOSE\";\r\n\t                return \"QUICKSPIN_DIALOG_NO\";\r\n\t            case \"QUICKSPIN_TOGGLE;QUICKSPIN_DIALOG_OFF\":\r\n\t                return \"QUICKSPIN_DIALOG_YES\";\r\n\t            case \"SETTINGS_OFF\":\r\n\t                if (this.instance.classList.contains(\"smallCloseBtn\"))\r\n\t                    return \"SETTINGS_CLOSE\";\r\n\t                if (this.instance.classList.contains(\"dialogBtn\") ||\r\n\t                    this.instance.classList.contains(\"settingsPageBtn\"))\r\n\t                    return \"SETTINGS_OK\";\r\n\t                return \"SETTINGS_BACK\";\r\n\t            case \"QUICKSPIN_TOGGLE\":\r\n\t                return \"SETTINGS_TOGGLE\";\r\n\t            case \"EMPTY\":\r\n\t                return \"SIMILAR_GAMES_EXIT\";\r\n\t            case \"EXIT2\":\r\n\t                return \"EXIT_GAME\";\r\n\t            case \"EXIT\":\r\n\t                return \"HOME\";\r\n\t            case \"HELP_OFF\":\r\n\t                if (this.instance.classList.contains(\"closeBtn\"))\r\n\t                    return \"HELP_CLOSE\";\r\n\t                return \"HELP_BACK\";\r\n\t            case \"PAYTABLE_OFF\":\r\n\t                if (this.instance.classList.contains(\"closeBtn\"))\r\n\t                    return \"PAYTABLE_CLOSE\";\r\n\t                return \"PAYTABLE_BACK\";\r\n\t            case \"SETTINGS_ON\":\r\n\t                return \"SETTINGS\";\r\n\t            case \"HELP_ON\":\r\n\t                return \"HELP\";\r\n\t            case \"PAYTABLE_ON\":\r\n\t                return \"PAYTABLE\";\r\n\t            default:\r\n\t                return action;\r\n\t        }\r\n\t    };\r\n\t    HtmlButtonElement.prototype.registerEvents = function () {\r\n\t        if (this.action != null || this.uiaction != null) {\r\n\t            this.instance.addEventListener(HtmlButtonElement.Click, this.onClick.bind(this));\r\n\t            if (this.action != null) {\r\n\t                this.instance.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlButtonElement.prototype.onClick = function (e) {\r\n\t        if (false) {\r\n\t            this.log(\"onClick action: \" + this.action + \" uiaction: \" + this.uiaction);\r\n\t        }\r\n\t        if (this.instance != null && !this.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            if (e && !e.isTrusted && AppContext_1.AppContext.gameConfiguration.DisableUntrustedClicks) {\r\n\t                if (AppContext_1.AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\r\n\t                    this.log(\"Untrusted action: \" + this.action + \", ui: \" + this.action);\r\n\t                    return;\r\n\t                }\r\n\t            }\r\n\t            if (e && e.isTrusted) {\r\n\t                DataManager_1.DataManager.addTrustedUserAction(this.action);\r\n\t            }\r\n\t            if (this.action != null) {\r\n\t                HtmlController_1.HtmlController.dispatchAction(this.action);\r\n\t            }\r\n\t            if (this.uiaction != null) {\r\n\t                for (var i = 0; i < this.uiaction.length; i++) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(this.uiaction[i]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlButtonElement.prototype.onTouchStart = function () {\r\n\t        clearTimeout(this.touchLockTimer);\r\n\t        this.touchLock = true;\r\n\t        if (this.instance != null && !this.instance.classList.contains(\"noHover\")) {\r\n\t            this.instance.classList.add(\"noHover\");\r\n\t        }\r\n\t    };\r\n\t    HtmlButtonElement.prototype.onTouchEnd = function () {\r\n\t        var _this = this;\r\n\t        this.touchLockTimer = setTimeout(function () {\r\n\t            _this.touchLock = false;\r\n\t        }, 20);\r\n\t    };\r\n\t    HtmlButtonElement.prototype.onMouseOver = function () {\r\n\t        if (this.instance != null && this.instance.classList.contains(\"noHover\") && !this.touchLock) {\r\n\t            this.instance.classList.remove(\"noHover\");\r\n\t        }\r\n\t    };\r\n\t    HtmlButtonElement.prototype.changeState = function (value) {\r\n\t        if (this.instance != null) {\r\n\t            if (value) {\r\n\t                this.instance.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t            else {\r\n\t                this.instance.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no instance\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlButtonElement.Click = \"click\";\r\n\t    HtmlButtonElement.TouchStart = \"touchstart\";\r\n\t    HtmlButtonElement.TouchEnd = \"touchend\";\r\n\t    HtmlButtonElement.MouseOver = \"mouseover\";\r\n\t    HtmlButtonElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlButtonElement);\r\n\t    return HtmlButtonElement;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlButtonElement = HtmlButtonElement;\r\n\n\n/***/ },\n/* 181 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar HtmlLanuageContainerElement = (function (_super) {\r\n\t    __extends(HtmlLanuageContainerElement, _super);\r\n\t    function HtmlLanuageContainerElement() {\r\n\t        _super.call(this);\r\n\t        this._flags = {};\r\n\t        this._values = {};\r\n\t    }\r\n\t    HtmlLanuageContainerElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.addValues();\r\n\t    };\r\n\t    HtmlLanuageContainerElement.prototype.addValues = function () {\r\n\t        var languages = AppContext_1.AppContext.current.getAllowedLanguages();\r\n\t        if (this.instance != null && languages != null) {\r\n\t            for (var i = 0; i < languages.length; i++) {\r\n\t                var flag = document.createElement(\"div\");\r\n\t                flag.classList.add(\"flag\");\r\n\t                flag.classList.add(languages[i]);\r\n\t                flag.style.display = \"none\";\r\n\t                flag.setAttribute(\"Lng\", languages[i]);\r\n\t                flag.onclick = this.onValueClick.bind(this);\r\n\t                var value = document.createElement(\"div\");\r\n\t                value.classList.add(\"value\");\r\n\t                value.style.display = \"none\";\r\n\t                value.setAttribute(\"Lng\", languages[i]);\r\n\t                value.onclick = this.onValueClick.bind(this);\r\n\t                if (AppContext_1.AppContext.current.getCurrentLanguage() != null &&\r\n\t                    languages[i] == AppContext_1.AppContext.current.getCurrentLanguage()) {\r\n\t                    flag.style.display = \"block\";\r\n\t                    value.style.display = \"block\";\r\n\t                }\r\n\t                this._flags[languages[i]] = flag;\r\n\t                this._values[languages[i]] = value;\r\n\t                this.instance.appendChild(flag);\r\n\t                this.instance.appendChild(value);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlLanuageContainerElement.prototype.onValueClick = function (e) {\r\n\t        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Lng\")) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            var lang = e.currentTarget.getAttribute(\"Lng\");\r\n\t            if (this._flags != null) {\r\n\t                for (var key in this._flags) {\r\n\t                    this._flags[key].style.display = \"none\";\r\n\t                }\r\n\t            }\r\n\t            if (this._values != null) {\r\n\t                for (var key in this._values) {\r\n\t                    this._values[key].style.display = \"none\";\r\n\t                }\r\n\t            }\r\n\t            HtmlController_1.HtmlController.dispatchUiAction(\"\");\r\n\t            this.changeLanguage();\r\n\t        }\r\n\t    };\r\n\t    HtmlLanuageContainerElement.prototype.changeLanguage = function () {\r\n\t        var actual = AppContext_1.AppContext.current.getCurrentLanguage();\r\n\t        var languages = AppContext_1.AppContext.current.getAllowedLanguages();\r\n\t        var next = \"\";\r\n\t        if (actual != null && languages != null) {\r\n\t            var index = 0;\r\n\t            for (var i = 0; i < languages.length; i++) {\r\n\t                if (languages[i] === actual) {\r\n\t                    index = i;\r\n\t                }\r\n\t            }\r\n\t            if (languages[index + 1] != null) {\r\n\t                next = languages[index + 1];\r\n\t            }\r\n\t            else {\r\n\t                next = languages[0];\r\n\t            }\r\n\t        }\r\n\t        if (this._flags[next] != null) {\r\n\t            this._flags[next].style.display = \"block\";\r\n\t        }\r\n\t        if (this._values[next] != null) {\r\n\t            this._values[next].style.display = \"block\";\r\n\t        }\r\n\t        AppContext_1.AppContext.current.setLanguage(next);\r\n\t    };\r\n\t    HtmlLanuageContainerElement.prototype.disable = function () {\r\n\t        if (this.instance != null) {\r\n\t            if (!this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlLanuageContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlLanuageContainerElement);\r\n\t    return HtmlLanuageContainerElement;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlLanuageContainerElement = HtmlLanuageContainerElement;\r\n\n\n/***/ },\n/* 182 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar HtmlSoundContainerElement = (function (_super) {\r\n\t    __extends(HtmlSoundContainerElement, _super);\r\n\t    function HtmlSoundContainerElement() {\r\n\t        _super.call(this);\r\n\t        this._levels = [\"\", \"\", \"\", \"\"];\r\n\t        this._levelsClasses = [\"_off\", \"_on1\", \"_on2\", \"_on3\"];\r\n\t        this._index = 3;\r\n\t        HtmlController_1.HtmlController.SoundContainer = this;\r\n\t    }\r\n\t    HtmlSoundContainerElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this._soundButton = document.getElementById(\"soundButton\");\r\n\t        this._popup = document.createElement(\"div\");\r\n\t        this._popup.classList.add(\"display\");\r\n\t        this._popup.classList.add(\"popupSmall\");\r\n\t        if (AppContext_1.AppContext.current.isBackgroundMusicEnabled) {\r\n\t            this._backgroundSound = document.createElement(\"div\");\r\n\t            this._backgroundSound.classList.add(\"popupItem\");\r\n\t            var backgroundSoundChild = document.createElement(\"div\");\r\n\t            backgroundSoundChild.classList.add(\"popupValue\");\r\n\t            backgroundSoundChild.classList.add(\"bgSound\");\r\n\t            if (AppContext_1.AppContext.current.getBackgroundMusic()) {\r\n\t                backgroundSoundChild.classList.add(\"_on\");\r\n\t            }\r\n\t            else {\r\n\t                backgroundSoundChild.classList.add(\"_off\");\r\n\t                DataManager_1.DataManager.BackSoundsPlayingFromGame = false;\r\n\t                PlayList_1.PlayList.stopAllInGroup(\"BackgroundMusic\");\r\n\t            }\r\n\t            backgroundSoundChild.onclick = this.onBackgroundClick.bind(this);\r\n\t            this._backgroundSound.appendChild(backgroundSoundChild);\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            this.instance.appendChild(this._popup);\r\n\t            if (this._backgroundSound != null) {\r\n\t                this._popup.appendChild(this._backgroundSound);\r\n\t            }\r\n\t            if (AppContext_1.AppContext.current.isBackgroundMusicEnabled) {\r\n\t                this._popup.parentElement.classList.add(\"bgOn\");\r\n\t            }\r\n\t        }\r\n\t        this.addValues();\r\n\t        this.block = true;\r\n\t        this.createTimeout();\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.addValues = function () {\r\n\t        if (this._values == null && this._popup != null) {\r\n\t            this._values = [];\r\n\t            for (var i = 0; i < this._levels.length; i++) {\r\n\t                var popupItem = document.createElement(\"div\");\r\n\t                popupItem.classList.add(\"popupItem\");\r\n\t                popupItem.onclick = this.onValueClick.bind(this);\r\n\t                popupItem.setAttribute(\"Level\", i.toString());\r\n\t                var popupItemValue = document.createElement(\"div\");\r\n\t                popupItemValue.classList.add(\"popupValue\");\r\n\t                popupItemValue.innerText = this._levels[i];\r\n\t                popupItem.appendChild(popupItemValue);\r\n\t                if (i == 0 && !AppContext_1.AppContext.current.isMuteVolumeAllowed) {\r\n\t                    popupItem.style.display = \"none\";\r\n\t                }\r\n\t                this._values.push(popupItem);\r\n\t                this._popup.appendChild(popupItem);\r\n\t            }\r\n\t            if (!AppContext_1.AppContext.current.isMuteVolumeAllowed) {\r\n\t                if (AppContext_1.AppContext.current.isBackgroundMusicEnabled) {\r\n\t                    this._height = 60 + ((this._levels.length - 1) * 60 + 48) + \"px\";\r\n\t                }\r\n\t                else {\r\n\t                    this._height = (this._levels.length - 1) * 60 + 48 + \"px\";\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (AppContext_1.AppContext.current.isBackgroundMusicEnabled) {\r\n\t                    this._height = 60 + (this._levels.length * 60 + 48) + \"px\";\r\n\t                }\r\n\t                else {\r\n\t                    this._height = this._levels.length * 60 + 48 + \"px\";\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.onValueClick = function (e) {\r\n\t        if (this.block) {\r\n\t            return;\r\n\t        }\r\n\t        this.setTimeout();\r\n\t        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Level\")) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            var level = parseFloat(e.currentTarget.getAttribute(\"Level\"));\r\n\t            if (level === this._index) {\r\n\t            }\r\n\t            else {\r\n\t                this._index = level;\r\n\t                if (this._values != null) {\r\n\t                    for (var i = 0; i < this._values.length; i++) {\r\n\t                        if (this._values[i].hasAttribute(\"Level\")) {\r\n\t                            if (parseFloat(this._values[i].getAttribute(\"Level\")) === level) {\r\n\t                                this._values[i].classList.add(\"_active\");\r\n\t                            }\r\n\t                            else {\r\n\t                                this._values[i].classList.remove(\"_active\");\r\n\t                            }\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t                AppContext_1.AppContext.current.setVolume(level);\r\n\t            }\r\n\t        }\r\n\t        this.changeSoundButton();\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.onBackgroundClick = function (e) {\r\n\t        if (this.block) {\r\n\t            return;\r\n\t        }\r\n\t        this.setTimeout();\r\n\t        if (e != null && e.currentTarget != null) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            if (e.currentTarget.classList.contains(\"_on\")) {\r\n\t                e.currentTarget.classList.remove(\"_on\");\r\n\t                if (!e.currentTarget.classList.contains(\"_off\")) {\r\n\t                    e.currentTarget.classList.add(\"_off\");\r\n\t                }\r\n\t                DataManager_1.DataManager.BackSoundsPlayingFromGame = false;\r\n\t                AppContext_1.AppContext.current.setBackgroundMusic(false);\r\n\t                PlayList_1.PlayList.stopAllInGroup(\"BackgroundMusic\");\r\n\t            }\r\n\t            else {\r\n\t                e.currentTarget.classList.remove(\"_off\");\r\n\t                if (!e.currentTarget.classList.contains(\"_on\")) {\r\n\t                    e.currentTarget.classList.add(\"_on\");\r\n\t                }\r\n\t                DataManager_1.DataManager.BackSoundsPlayingFromGame = true;\r\n\t                AppContext_1.AppContext.current.setBackgroundMusic(true);\r\n\t                PlayList_1.PlayList.stopAllInGroup(\"BackgroundMusic\", true);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.setLevel = function (level) {\r\n\t        this._index = level;\r\n\t        if (this._values != null) {\r\n\t            for (var i = 0; i < this._values.length; i++) {\r\n\t                if (i === level) {\r\n\t                    if (!this._values[i].classList.contains(\"_active\")) {\r\n\t                        this._values[i].classList.add(\"_active\");\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    this._values[i].classList.remove(\"_active\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.changeSoundButton();\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.changeSoundButton = function () {\r\n\t        if (this._soundButton != null) {\r\n\t            if (this._levelsClasses[this._index] != null) {\r\n\t                for (var i = 0; i < this._levelsClasses.length; i++) {\r\n\t                    this._soundButton.classList.remove(this._levelsClasses[i]);\r\n\t                }\r\n\t                this._soundButton.classList.add(this._levelsClasses[this._index]);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.toggle = function () {\r\n\t        if (this.instance != null) {\r\n\t            if (this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = false;\r\n\t                this.setTimeout();\r\n\t                if (this._height != null) {\r\n\t                    this.instance.style.height = this._height;\r\n\t                }\r\n\t                this.instance.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            else {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.disable = function () {\r\n\t        if (this.instance != null) {\r\n\t            if (!this.instance.classList.contains(\"_disabled\")) {\r\n\t                this.block = true;\r\n\t                this.clearTimeOut();\r\n\t                this.instance.removeAttribute(\"style\");\r\n\t                this.instance.classList.add(\"_disabled\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.createTimeout = function () {\r\n\t        this.timeout = null;\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.setTimeout = function () {\r\n\t        var _this = this;\r\n\t        this.clearTimeOut();\r\n\t        var duration = AppContext_1.AppContext.gameConfiguration.SelectorRolloutDuration;\r\n\t        if (duration > 0) {\r\n\t            this.timeout = setTimeout(function () {\r\n\t                _this.disable();\r\n\t            }, duration * 1000);\r\n\t        }\r\n\t    };\r\n\t    HtmlSoundContainerElement.prototype.clearTimeOut = function () {\r\n\t        if (!neo_common_1.Utils.isNullOrUndefined(this.timeout)) {\r\n\t            clearTimeout(this.timeout);\r\n\t            this.timeout = null;\r\n\t        }\r\n\t    };\r\n\t    HtmlSoundContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlSoundContainerElement);\r\n\t    return HtmlSoundContainerElement;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlSoundContainerElement = HtmlSoundContainerElement;\r\n\n\n/***/ },\n/* 183 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlButtonElement_1 = __webpack_require__(180);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar HtmlAutoplayItemButtonElement_1 = __webpack_require__(184);\r\n\tvar HtmlAutoplayButtonElement = (function (_super) {\r\n\t    __extends(HtmlAutoplayButtonElement, _super);\r\n\t    function HtmlAutoplayButtonElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    HtmlAutoplayButtonElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (AppContext_1.AppContext.gameConfiguration.AutoplayMode === \"basic\") {\r\n\t            this.createBasicMode();\r\n\t        }\r\n\t        else if (AppContext_1.AppContext.gameConfiguration.AutoplayMode === \"simple\") {\r\n\t            this.createSimpleMode();\r\n\t        }\r\n\t        else if (AppContext_1.AppContext.gameConfiguration.AutoplayMode === \"advanced\") {\r\n\t            this.createAdvancedMode();\r\n\t        }\r\n\t        else {\r\n\t            this.createBasicMode();\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            this.instance.parentElement.removeChild(this.instance);\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayButtonElement.prototype.createBasicMode = function () {\r\n\t        this.removeOtherMode(\"simpleAutoplayButton\");\r\n\t        this.removeOtherMode(\"advancedAutoplayButton\");\r\n\t    };\r\n\t    HtmlAutoplayButtonElement.prototype.createSimpleMode = function () {\r\n\t        this.removeOtherMode(\"basicAutoplayButton\");\r\n\t        this.removeOtherMode(\"advancedAutoplayButton\");\r\n\t        this._simpleAutoplayCounts = [];\r\n\t        var holder = document.getElementById(\"autoplaySelectorHolder\");\r\n\t        if (holder != null) {\r\n\t            if (AppContext_1.AppContext.gameConfiguration.AutoplayCounts != null &&\r\n\t                AppContext_1.AppContext.gameConfiguration.AutoplayCounts.length > 0) {\r\n\t                AppContext_1.AppContext.gameConfiguration.AutoplayCounts.reverse();\r\n\t                for (var i = 0; i < AppContext_1.AppContext.gameConfiguration.AutoplayCounts.length; i++) {\r\n\t                    var button = new HtmlAutoplayItemButtonElement_1.HtmlAutoplayItemButtonElement();\r\n\t                    var text = document.createElement(\"div\");\r\n\t                    button.action = \"AUTOPLAY\";\r\n\t                    button.registerEvents();\r\n\t                    text.classList.add(\"autoplayCnt\");\r\n\t                    if (AppContext_1.AppContext.gameConfiguration.AutoplayCounts[i] == -1) {\r\n\t                        text.innerText = \"∞\";\r\n\t                        button.autoplayCount = \"∞\";\r\n\t                    }\r\n\t                    else {\r\n\t                        text.innerText = AppContext_1.AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\r\n\t                        button.autoplayCount = AppContext_1.AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\r\n\t                    }\r\n\t                    button.instance.dataset[\"test\"] = \"AUTOPLAY_WIN_CNT_\" + (i + 1);\r\n\t                    if (button.instance != null) {\r\n\t                        button.instance.classList.add(\"autoplayItem\");\r\n\t                        button.instance.appendChild(text);\r\n\t                        HtmlController_1.HtmlController.registerActionElement(\"AUTOPLAY\", button);\r\n\t                        if (holder != null) {\r\n\t                            holder.appendChild(button.instance);\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayButtonElement.prototype.createAdvancedMode = function () {\r\n\t        this.removeOtherMode(\"basicAutoplayButton\");\r\n\t        this.removeOtherMode(\"simpleAutoplayButton\");\r\n\t    };\r\n\t    HtmlAutoplayButtonElement.prototype.removeOtherMode = function (cls) {\r\n\t        var elements = document.getElementsByClassName(cls);\r\n\t        for (var i = 0; i < elements.length; i++) {\r\n\t            var element = elements[i];\r\n\t            if (element != null) {\r\n\t                element.remove();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayButtonElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlAutoplayButtonElement);\r\n\t    return HtmlAutoplayButtonElement;\r\n\t}(HtmlButtonElement_1.HtmlButtonElement));\r\n\texports.HtmlAutoplayButtonElement = HtmlAutoplayButtonElement;\r\n\n\n/***/ },\n/* 184 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlButtonElement_1 = __webpack_require__(180);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar HtmlAutoplayItemButtonElement = (function (_super) {\r\n\t    __extends(HtmlAutoplayItemButtonElement, _super);\r\n\t    function HtmlAutoplayItemButtonElement() {\r\n\t        _super.call(this);\r\n\t        this.autoplayCount = \"∞\";\r\n\t    }\r\n\t    HtmlAutoplayItemButtonElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (node.hasAttribute(\"AUTOPLAY_COUNT\")) {\r\n\t            this.autoplayCount = node.getAttribute(\"AUTOPLAY_COUNT\");\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayItemButtonElement.prototype.onClick = function () {\r\n\t        if (this.autoplayCount != null) {\r\n\t            DataManager_1.DataManager.AutoplayCount = this.autoplayCount;\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        _super.prototype.onClick.call(this);\r\n\t    };\r\n\t    HtmlAutoplayItemButtonElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlAutoplayItemButtonElement);\r\n\t    return HtmlAutoplayItemButtonElement;\r\n\t}(HtmlButtonElement_1.HtmlButtonElement));\r\n\texports.HtmlAutoplayItemButtonElement = HtmlAutoplayItemButtonElement;\r\n\n\n/***/ },\n/* 185 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar HtmlAutoplayDialogContainerElement = (function (_super) {\r\n\t    __extends(HtmlAutoplayDialogContainerElement, _super);\r\n\t    function HtmlAutoplayDialogContainerElement() {\r\n\t        _super.call(this);\r\n\t        this._autoplayDialogCounts = [];\r\n\t        this._autoplayDialogLossLimit = [];\r\n\t        this._autoplayDialogWinLimit = [];\r\n\t        this._count = \"∞\";\r\n\t        this._loss = \"∞\";\r\n\t        this._win = \"∞\";\r\n\t    }\r\n\t    HtmlAutoplayDialogContainerElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.createCounts();\r\n\t        this.createLossLimits();\r\n\t        this.createWinLimits();\r\n\t        this._lossValueElement = document.getElementById(\"autoplayDialogLossLimitValue\");\r\n\t        this._winValueElement = document.getElementById(\"autoplayDialogWinLimitValue\");\r\n\t        this._button = document.getElementById(\"autoplayDialogButton\");\r\n\t        this._button.onclick = this.runAutoplay.bind(this);\r\n\t        this.reset();\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.createCounts = function () {\r\n\t        if (HtmlController_1.HtmlController.ContainerElementsById[\"autoplayDialogCounts\"] != null) {\r\n\t            var element = HtmlController_1.HtmlController.ContainerElementsById[\"autoplayDialogCounts\"];\r\n\t            if (element != null && element.instance != null) {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.AutoplayCounts != null &&\r\n\t                    AppContext_1.AppContext.gameConfiguration.AutoplayCounts.length > 0) {\r\n\t                    for (var i = 0; i < AppContext_1.AppContext.gameConfiguration.AutoplayCounts.length; i++) {\r\n\t                        var item = document.createElement(\"div\");\r\n\t                        var itemValue = document.createElement(\"span\");\r\n\t                        item.classList.add(\"settingItem\");\r\n\t                        itemValue.classList.add(\"settingValue\");\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.AutoplayCounts[i] == -1) {\r\n\t                            itemValue.innerText = \"∞\";\r\n\t                            item.setAttribute(\"Val\", \"∞\");\r\n\t                        }\r\n\t                        else {\r\n\t                            itemValue.innerText = AppContext_1.AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\r\n\t                            item.setAttribute(\"Val\", AppContext_1.AppContext.gameConfiguration.AutoplayCounts[i] + \"\");\r\n\t                        }\r\n\t                        item.dataset[\"test\"] = \"AUTOPLAY_CNT_\" + (i + 1);\r\n\t                        item.appendChild(itemValue);\r\n\t                        item.onclick = this.onCountClick.bind(this);\r\n\t                        element.instance.appendChild(item);\r\n\t                        this._autoplayDialogCounts.push(item);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.createLossLimits = function () {\r\n\t        if (HtmlController_1.HtmlController.ContainerElementsById[\"autoplayDialogLossLimit\"] != null) {\r\n\t            var element = HtmlController_1.HtmlController.ContainerElementsById[\"autoplayDialogLossLimit\"];\r\n\t            if (element != null && element.instance != null) {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.AutoplayLossLimit != null &&\r\n\t                    AppContext_1.AppContext.gameConfiguration.AutoplayLossLimit.length > 0) {\r\n\t                    for (var i = 0; i < AppContext_1.AppContext.gameConfiguration.AutoplayLossLimit.length; i++) {\r\n\t                        var item = document.createElement(\"div\");\r\n\t                        var itemValue = document.createElement(\"span\");\r\n\t                        item.classList.add(\"settingItem\");\r\n\t                        itemValue.classList.add(\"settingValue\");\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.AutoplayLossLimit[i] == -1) {\r\n\t                            itemValue.innerText = \"∞\";\r\n\t                            item.setAttribute(\"Val\", \"∞\");\r\n\t                        }\r\n\t                        else {\r\n\t                            itemValue.innerText = \"x\" + AppContext_1.AppContext.gameConfiguration.AutoplayLossLimit[i] + \"\";\r\n\t                            item.setAttribute(\"Val\", AppContext_1.AppContext.gameConfiguration.AutoplayLossLimit[i] + \"\");\r\n\t                        }\r\n\t                        item.dataset[\"test\"] = \"AUTOPLAY_LOSS_CNT_\" + (i + 1);\r\n\t                        item.appendChild(itemValue);\r\n\t                        item.onclick = this.onLossClick.bind(this);\r\n\t                        element.instance.appendChild(item);\r\n\t                        this._autoplayDialogLossLimit.push(item);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.createWinLimits = function () {\r\n\t        if (HtmlController_1.HtmlController.ContainerElementsById[\"autoplayDialogWinLimit\"] != null) {\r\n\t            var element = HtmlController_1.HtmlController.ContainerElementsById[\"autoplayDialogWinLimit\"];\r\n\t            if (element != null && element.instance != null) {\r\n\t                if (AppContext_1.AppContext.gameConfiguration.AutoplaySingleWinLimit != null &&\r\n\t                    AppContext_1.AppContext.gameConfiguration.AutoplaySingleWinLimit.length > 0) {\r\n\t                    for (var i = 0; i < AppContext_1.AppContext.gameConfiguration.AutoplaySingleWinLimit.length; i++) {\r\n\t                        var item = document.createElement(\"div\");\r\n\t                        var itemValue = document.createElement(\"span\");\r\n\t                        item.classList.add(\"settingItem\");\r\n\t                        itemValue.classList.add(\"settingValue\");\r\n\t                        if (AppContext_1.AppContext.gameConfiguration.AutoplaySingleWinLimit[i] == -1) {\r\n\t                            itemValue.innerText = \"∞\";\r\n\t                            item.setAttribute(\"Val\", \"∞\");\r\n\t                        }\r\n\t                        else {\r\n\t                            itemValue.innerText = \"x\" + AppContext_1.AppContext.gameConfiguration.AutoplaySingleWinLimit[i] + \"\";\r\n\t                            item.setAttribute(\"Val\", AppContext_1.AppContext.gameConfiguration.AutoplaySingleWinLimit[i] + \"\");\r\n\t                        }\r\n\t                        item.dataset[\"test\"] = \"AUTOPLAY_WIN_CNT_\" + (i + 1);\r\n\t                        item.appendChild(itemValue);\r\n\t                        item.onclick = this.onWinClick.bind(this);\r\n\t                        element.instance.appendChild(item);\r\n\t                        this._autoplayDialogWinLimit.push(item);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.reset = function () {\r\n\t        this.resetCounts();\r\n\t        this.resetLossLimits();\r\n\t        this.resetWinLimits();\r\n\t        this.enableCounts();\r\n\t        if (this._lossValueElement != null) {\r\n\t            this._lossValueElement.innerText = \"\";\r\n\t        }\r\n\t        if (this._winValueElement != null) {\r\n\t            this._winValueElement.innerText = \"\";\r\n\t        }\r\n\t        if (this._button != null && !this._button.classList.contains(\"_disabled\")) {\r\n\t            this._button.classList.add(\"_disabled\");\r\n\t        }\r\n\t        this._count = \"∞\";\r\n\t        this._loss = \"∞\";\r\n\t        this._win = \"∞\";\r\n\t        DataManager_1.DataManager.AutoplayCount = \"∞\";\r\n\t        DataManager_1.DataManager.AutoplayLossLimit = \"∞\";\r\n\t        DataManager_1.DataManager.AutoplayWinLimit = \"∞\";\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.resetCounts = function () {\r\n\t        if (this._autoplayDialogCounts != null && this._autoplayDialogCounts.length > 0) {\r\n\t            for (var i = 0; i < this._autoplayDialogCounts.length; i++) {\r\n\t                if (this._autoplayDialogCounts[i].classList.contains(\"_active\")) {\r\n\t                    this._autoplayDialogCounts[i].classList.remove(\"_active\");\r\n\t                }\r\n\t                if (!this._autoplayDialogCounts[i].classList.contains(\"_disabled\")) {\r\n\t                    this._autoplayDialogCounts[i].classList.add(\"_disabled\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.resetLossLimits = function () {\r\n\t        if (this._autoplayDialogLossLimit != null && this._autoplayDialogLossLimit.length > 0) {\r\n\t            for (var i = 0; i < this._autoplayDialogLossLimit.length; i++) {\r\n\t                if (this._autoplayDialogLossLimit[i].classList.contains(\"_active\")) {\r\n\t                    this._autoplayDialogLossLimit[i].classList.remove(\"_active\");\r\n\t                }\r\n\t                if (!this._autoplayDialogLossLimit[i].classList.contains(\"_disabled\")) {\r\n\t                    this._autoplayDialogLossLimit[i].classList.add(\"_disabled\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.resetWinLimits = function () {\r\n\t        if (this._autoplayDialogWinLimit != null && this._autoplayDialogWinLimit.length > 0) {\r\n\t            for (var i = 0; i < this._autoplayDialogWinLimit.length; i++) {\r\n\t                if (this._autoplayDialogWinLimit[i].classList.contains(\"_active\")) {\r\n\t                    this._autoplayDialogWinLimit[i].classList.remove(\"_active\");\r\n\t                }\r\n\t                if (!this._autoplayDialogWinLimit[i].classList.contains(\"_disabled\")) {\r\n\t                    this._autoplayDialogWinLimit[i].classList.add(\"_disabled\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.enableCounts = function () {\r\n\t        if (this._autoplayDialogCounts != null && this._autoplayDialogCounts.length > 0) {\r\n\t            for (var i = 0; i < this._autoplayDialogCounts.length; i++) {\r\n\t                if (this._autoplayDialogCounts[i].classList.contains(\"_disabled\")) {\r\n\t                    this._autoplayDialogCounts[i].classList.remove(\"_disabled\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.enableLossLimits = function () {\r\n\t        if (this._autoplayDialogLossLimit != null && this._autoplayDialogLossLimit.length > 0) {\r\n\t            for (var i = 0; i < this._autoplayDialogLossLimit.length; i++) {\r\n\t                if (this._autoplayDialogLossLimit[i].classList.contains(\"_disabled\")) {\r\n\t                    this._autoplayDialogLossLimit[i].classList.remove(\"_disabled\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.enableWinLimits = function (removeNoLimit) {\r\n\t        if (removeNoLimit === void 0) { removeNoLimit = false; }\r\n\t        var enabledNoLimit = true;\r\n\t        var noLimit;\r\n\t        if (this._autoplayDialogWinLimit != null && this._autoplayDialogWinLimit.length > 0) {\r\n\t            for (var i = 0; i < this._autoplayDialogWinLimit.length; i++) {\r\n\t                if (this._autoplayDialogWinLimit[i].classList.contains(\"_active\")) {\r\n\t                    enabledNoLimit = false;\r\n\t                }\r\n\t                if (this._autoplayDialogWinLimit[i].getAttribute(\"Val\") == \"∞\") {\r\n\t                    noLimit = this._autoplayDialogWinLimit[i];\r\n\t                }\r\n\t                if (this._autoplayDialogWinLimit[i].classList.contains(\"_disabled\")) {\r\n\t                    this._autoplayDialogWinLimit[i].classList.remove(\"_disabled\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (enabledNoLimit && !removeNoLimit) {\r\n\t            if (noLimit != null) {\r\n\t                if (!noLimit.classList.contains(\"_active\")) {\r\n\t                    noLimit.classList.add(\"_active\");\r\n\t                    if (this._winValueElement != null) {\r\n\t                        this._winValueElement.innerText = \"∞\";\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (removeNoLimit) {\r\n\t            if (noLimit != null) {\r\n\t                if (noLimit.classList.contains(\"_active\")) {\r\n\t                    noLimit.classList.remove(\"_active\");\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.onCountClick = function (e) {\r\n\t        if (e != null &&\r\n\t            e.currentTarget != null &&\r\n\t            e.currentTarget.hasAttribute(\"Val\") &&\r\n\t            !e.currentTarget.classList.contains(\"_disabled\")) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            var val = e.currentTarget.getAttribute(\"Val\");\r\n\t            this.resetCounts();\r\n\t            this.enableCounts();\r\n\t            if (!e.currentTarget.classList.contains(\"_active\")) {\r\n\t                e.currentTarget.classList.add(\"_active\");\r\n\t            }\r\n\t            if (e.currentTarget.classList.contains(\"_disabled\")) {\r\n\t                e.currentTarget.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            this._count = val;\r\n\t            this.enableLossLimits();\r\n\t            if (document.getElementById(\"autoplayDialogLossLimitView\") != null) {\r\n\t                document.getElementById(\"autoplayDialogLossLimitView\").scrollIntoView(true);\r\n\t                if (AppContext_1.AppContext.gameDefinition.ClientHostType === \"Mobile\") {\r\n\t                    document.getElementById(\"screen\").scrollTop = 0;\r\n\t                    document.getElementById(\"root\").scrollTop = 0;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.onLossClick = function (e) {\r\n\t        if (e != null &&\r\n\t            e.currentTarget != null &&\r\n\t            e.currentTarget.hasAttribute(\"Val\") &&\r\n\t            !e.currentTarget.classList.contains(\"_disabled\")) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            var val = e.currentTarget.getAttribute(\"Val\");\r\n\t            if (this._lossValueElement != null) {\r\n\t                if (val != \"∞\" && BetManager_1.BetManager.Bet != null) {\r\n\t                    var calculatedValue = neo_common_1.NumberUtils.multiply(val, BetManager_1.BetManager.Bet);\r\n\t                    this._lossValueElement.innerText =\r\n\t                        calculatedValue + \" \" + DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency);\r\n\t                }\r\n\t                else {\r\n\t                    this._lossValueElement.innerText = \"∞\";\r\n\t                }\r\n\t            }\r\n\t            this.resetLossLimits();\r\n\t            this.enableLossLimits();\r\n\t            if (!e.currentTarget.classList.contains(\"_active\")) {\r\n\t                e.currentTarget.classList.add(\"_active\");\r\n\t            }\r\n\t            if (e.currentTarget.classList.contains(\"_disabled\")) {\r\n\t                e.currentTarget.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            if (this._button != null && this._button.classList.contains(\"_disabled\")) {\r\n\t                this._button.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            this._loss = val;\r\n\t            this.enableWinLimits();\r\n\t            if (document.getElementById(\"autoplayDialogWinLimitView\") != null) {\r\n\t                document.getElementById(\"autoplayDialogWinLimitView\").scrollIntoView(true);\r\n\t            }\r\n\t            if (AppContext_1.AppContext.gameDefinition.ClientHostType === \"Mobile\") {\r\n\t                document.getElementById(\"screen\").scrollTop = 0;\r\n\t                document.getElementById(\"root\").scrollTop = 0;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.onWinClick = function (e) {\r\n\t        if (e != null &&\r\n\t            e.currentTarget != null &&\r\n\t            e.currentTarget.hasAttribute(\"Val\") &&\r\n\t            !e.currentTarget.classList.contains(\"_disabled\")) {\r\n\t            PlayList_1.PlayList.play(\"SND_Click\");\r\n\t            var val = e.currentTarget.getAttribute(\"Val\");\r\n\t            if (this._winValueElement != null) {\r\n\t                if (val != \"∞\" && BetManager_1.BetManager.Bet != null) {\r\n\t                    var calculatedValue = neo_common_1.NumberUtils.multiply(val, BetManager_1.BetManager.Bet);\r\n\t                    this._winValueElement.innerText =\r\n\t                        calculatedValue + \" \" + DataManager_1.DataManager.getDataById(GameData_1.GameData.DataCurrency);\r\n\t                }\r\n\t                else {\r\n\t                    this._winValueElement.innerText = \"∞\";\r\n\t                }\r\n\t            }\r\n\t            this.resetWinLimits();\r\n\t            this.enableWinLimits(true);\r\n\t            if (!e.currentTarget.classList.contains(\"_active\")) {\r\n\t                e.currentTarget.classList.add(\"_active\");\r\n\t            }\r\n\t            if (e.currentTarget.classList.contains(\"_disabled\")) {\r\n\t                e.currentTarget.classList.remove(\"_disabled\");\r\n\t            }\r\n\t            this._win = val;\r\n\t            if (AppContext_1.AppContext.gameDefinition.ClientHostType === \"Mobile\") {\r\n\t                if (document.getElementById(\"autoplayDialogButton\") != null) {\r\n\t                    document.getElementById(\"autoplayDialogButton\").scrollIntoView(true);\r\n\t                    document.getElementById(\"screen\").scrollTop = 0;\r\n\t                    document.getElementById(\"root\").scrollTop = 0;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement.prototype.runAutoplay = function (e) {\r\n\t        if (e != null && e.currentTarget != null && !e.currentTarget.classList.contains(\"_disabled\")) {\r\n\t            if (document.getElementById(\"autoPlayDialogTop\") != null) {\r\n\t                document.getElementById(\"autoPlayDialogTop\").scrollTop = 0;\r\n\t            }\r\n\t            if (this._count != null) {\r\n\t                DataManager_1.DataManager.AutoplayCount = this._count;\r\n\t            }\r\n\t            if (this._loss != null && BetManager_1.BetManager.Bet != null) {\r\n\t                if (this._loss == \"∞\") {\r\n\t                    DataManager_1.DataManager.AutoplayLossLimit = this._loss;\r\n\t                }\r\n\t                else {\r\n\t                    DataManager_1.DataManager.AutoplayLossLimit = neo_common_1.NumberUtils.multiply(this._loss, BetManager_1.BetManager.Bet);\r\n\t                }\r\n\t            }\r\n\t            if (this._win != null && BetManager_1.BetManager.Bet != null) {\r\n\t                if (this._win == \"∞\") {\r\n\t                    DataManager_1.DataManager.AutoplayWinLimit = this._win;\r\n\t                }\r\n\t                else {\r\n\t                    DataManager_1.DataManager.AutoplayWinLimit = neo_common_1.NumberUtils.multiply(this._win, BetManager_1.BetManager.Bet);\r\n\t                }\r\n\t            }\r\n\t            HtmlController_1.HtmlController.dispatchAction(\"AUTOPLAY\");\r\n\t        }\r\n\t    };\r\n\t    HtmlAutoplayDialogContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlAutoplayDialogContainerElement);\r\n\t    return HtmlAutoplayDialogContainerElement;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlAutoplayDialogContainerElement = HtmlAutoplayDialogContainerElement;\r\n\n\n/***/ },\n/* 186 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlElement_1 = __webpack_require__(73);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlCanvasElement = (function (_super) {\r\n\t    __extends(HtmlCanvasElement, _super);\r\n\t    function HtmlCanvasElement() {\r\n\t        _super.call(this, \"\");\r\n\t    }\r\n\t    HtmlCanvasElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (node.hasAttribute(\"CanvasId\")) {\r\n\t            this.instance = document.getElementById(node.getAttribute(\"CanvasId\"));\r\n\t            if (this.instance == null) {\r\n\t                if (false) {\r\n\t                    this.log(\"ERROR no element with id: \" + node.getAttribute(\"CanvasId\"));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no CanvasId\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlCanvasElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlCanvasElement);\r\n\t    return HtmlCanvasElement;\r\n\t}(HtmlElement_1.HtmlElement));\r\n\texports.HtmlCanvasElement = HtmlCanvasElement;\r\n\n\n/***/ },\n/* 187 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar HtmlButtonElement_1 = __webpack_require__(180);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar HtmlCheckboxElement = (function (_super) {\r\n\t    __extends(HtmlCheckboxElement, _super);\r\n\t    function HtmlCheckboxElement() {\r\n\t        _super.call(this);\r\n\t        this.checkbox = null;\r\n\t    }\r\n\t    HtmlCheckboxElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.createCheckBox();\r\n\t    };\r\n\t    HtmlCheckboxElement.prototype.createCheckBox = function () {\r\n\t        this.checkbox = document.createElement(\"input\");\r\n\t        this.checkbox.type = \"checkbox\";\r\n\t        this.checkbox.classList.add(\"checkbox\");\r\n\t        this.checkbox.addEventListener(\"input\", this.onCheckbox.bind(this));\r\n\t        if (this.instance != null) {\r\n\t            this.instance.appendChild(this.checkbox);\r\n\t        }\r\n\t        this.instance.classList.add(\"checkboxButton\");\r\n\t    };\r\n\t    HtmlCheckboxElement.prototype.onClick = function () {\r\n\t    };\r\n\t    HtmlCheckboxElement.prototype.onCheckbox = function () {\r\n\t        if (false) {\r\n\t            this.log(\"onClick action: \" + this.action + \" uiaction: \" + this.uiaction);\r\n\t        }\r\n\t        if (this.instance != null && !this.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t            if (this.action != null) {\r\n\t                HtmlController_1.HtmlController.dispatchAction(this.action);\r\n\t            }\r\n\t            if (this.uiaction != null) {\r\n\t                for (var i = 0; i < this.uiaction.length; i++) {\r\n\t                    HtmlController_1.HtmlController.dispatchUiAction(this.uiaction[i]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlCheckboxElement.prototype.setText = function (value) {\r\n\t        if (value === undefined || value === null) {\r\n\t            this.checkbox.checked = !this.checkbox.checked;\r\n\t            return;\r\n\t        }\r\n\t        if (value == \"true\") {\r\n\t            if (this.checkbox.checked) {\r\n\t                return;\r\n\t            }\r\n\t            this.checkbox.checked = true;\r\n\t        }\r\n\t        else {\r\n\t            if (!this.checkbox.checked) {\r\n\t                return;\r\n\t            }\r\n\t            this.checkbox.checked = false;\r\n\t        }\r\n\t    };\r\n\t    HtmlCheckboxElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlCheckboxElement);\r\n\t    return HtmlCheckboxElement;\r\n\t}(HtmlButtonElement_1.HtmlButtonElement));\r\n\texports.HtmlCheckboxElement = HtmlCheckboxElement;\r\n\n\n/***/ },\n/* 188 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar HtmlCustomContainerElement = (function (_super) {\r\n\t    __extends(HtmlCustomContainerElement, _super);\r\n\t    function HtmlCustomContainerElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    HtmlCustomContainerElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t    };\r\n\t    HtmlCustomContainerElement.prototype.changeState = function (value) {\r\n\t        if (this._withGamble == null) {\r\n\t            this._withGamble = document.getElementById(\"withGamble\");\r\n\t        }\r\n\t        if (this._withoutGamble == null) {\r\n\t            this._withoutGamble = document.getElementById(\"withoutGamble\");\r\n\t        }\r\n\t        if (this.instance != null) {\r\n\t            if (value && DataManager_1.DataManager.Autoplay) {\r\n\t                this.instance.classList.remove(HtmlController_1.HtmlController.DisabledClass);\r\n\t                if (AppContext_1.AppContext.gameDefinition.Gamble) {\r\n\t                    if (this._withGamble != null) {\r\n\t                        this._withGamble.style.display = \"block\";\r\n\t                    }\r\n\t                    if (this._withoutGamble != null) {\r\n\t                        this._withoutGamble.style.display = \"none\";\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (this._withGamble != null) {\r\n\t                        this._withGamble.style.display = \"none\";\r\n\t                    }\r\n\t                    if (this._withoutGamble != null) {\r\n\t                        this._withoutGamble.style.display = \"block\";\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (!this.instance.classList.contains(HtmlController_1.HtmlController.DisabledClass)) {\r\n\t                    this.instance.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                this.log(\"ERROR no instance\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlCustomContainerElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlCustomContainerElement);\r\n\t    return HtmlCustomContainerElement;\r\n\t}(HtmlContainerElement_1.HtmlContainerElement));\r\n\texports.HtmlCustomContainerElement = HtmlCustomContainerElement;\r\n\n\n/***/ },\n/* 189 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlElement_1 = __webpack_require__(73);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlDataSliderElement = (function (_super) {\r\n\t    __extends(HtmlDataSliderElement, _super);\r\n\t    function HtmlDataSliderElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    HtmlDataSliderElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t    };\r\n\t    HtmlDataSliderElement.prototype.setText = function (value) {\r\n\t        if (value != null) {\r\n\t            var parsedValue = value.split(\"/\");\r\n\t            if (this.instance != null && parsedValue.length === 2) {\r\n\t                this.instance.style.width = (parseInt(parsedValue[0]) / parseInt(parsedValue[1])) * 100 + \"%\";\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    HtmlDataSliderElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlDataSliderElement);\r\n\t    return HtmlDataSliderElement;\r\n\t}(HtmlElement_1.HtmlElement));\r\n\texports.HtmlDataSliderElement = HtmlDataSliderElement;\r\n\n\n/***/ },\n/* 190 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlElement_1 = __webpack_require__(73);\r\n\tvar HtmlLabelElement = (function (_super) {\r\n\t    __extends(HtmlLabelElement, _super);\r\n\t    function HtmlLabelElement() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    HtmlLabelElement.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (node.hasAttribute(\"For\")) {\r\n\t            this.for = node.getAttribute(\"For\");\r\n\t        }\r\n\t        this.createLabel();\r\n\t        if (this.instance != null) {\r\n\t            this.instance.parentElement.removeChild(this.instance);\r\n\t        }\r\n\t    };\r\n\t    HtmlLabelElement.prototype.createLabel = function () {\r\n\t        var holder = this.instance.parentElement;\r\n\t        var toggleSwitch = document.createElement(\"div\");\r\n\t        var label = document.createElement(\"label\");\r\n\t        toggleSwitch.classList.add(\"toggleSwitch\");\r\n\t        label.htmlFor = this.for;\r\n\t        label.innerHTML = this.instance.innerHTML;\r\n\t        toggleSwitch.appendChild(label);\r\n\t        if (this.instance != null) {\r\n\t            holder.firstChild.appendChild(toggleSwitch);\r\n\t        }\r\n\t    };\r\n\t    HtmlLabelElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlLabelElement);\r\n\t    return HtmlLabelElement;\r\n\t}(HtmlElement_1.HtmlElement));\r\n\texports.HtmlLabelElement = HtmlLabelElement;\r\n\n\n/***/ },\n/* 191 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlElement_1 = __webpack_require__(73);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlText = (function (_super) {\r\n\t    __extends(HtmlText, _super);\r\n\t    function HtmlText() {\r\n\t        _super.call(this, \"\");\r\n\t    }\r\n\t    HtmlText.prototype.create = function (node) {\r\n\t        this.instance = document.createElement(node.nodeName);\r\n\t        if (node.textContent != null) {\r\n\t            this.instance.textContent = node.textContent;\r\n\t        }\r\n\t        if (node.hasAttribute(\"Prefix\")) {\r\n\t            this._prefix = node.getAttribute(\"Prefix\");\r\n\t        }\r\n\t        if (node.hasAttribute(\"Test\")) {\r\n\t            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n\t        }\r\n\t        _super.prototype.create.call(this, node);\r\n\t    };\r\n\t    HtmlText.prototype.setText = function (value) {\r\n\t        _super.prototype.setText.call(this, value);\r\n\t        if (this._prefix != null && this.instance.innerHTML != null && this.instance.innerHTML != \"\") {\r\n\t            this.instance.innerHTML = \"+\" + this.instance.innerHTML;\r\n\t        }\r\n\t    };\r\n\t    HtmlText = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], HtmlText);\r\n\t    return HtmlText;\r\n\t}(HtmlElement_1.HtmlElement));\r\n\texports.HtmlText = HtmlText;\r\n\n\n/***/ },\n/* 192 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlStyle_1 = __webpack_require__(193);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlContainerStyle = (function (_super) {\r\n\t    __extends(HtmlContainerStyle, _super);\r\n\t    function HtmlContainerStyle() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    HtmlContainerStyle.prototype.create = function (node) {\r\n\t        _super.prototype.create.call(this, node);\r\n\t        this.node = node;\r\n\t    };\r\n\t    HtmlContainerStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlStyle)\r\n\t    ], HtmlContainerStyle);\r\n\t    return HtmlContainerStyle;\r\n\t}(HtmlStyle_1.HtmlStyle));\r\n\texports.HtmlContainerStyle = HtmlContainerStyle;\r\n\n\n/***/ },\n/* 193 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlStyle = (function () {\r\n\t    function HtmlStyle() {\r\n\t    }\r\n\t    HtmlStyle.prototype.create = function (node) { };\r\n\t    HtmlStyle.prototype.log = function (s) {\r\n\t        if (false) {\r\n\t            var compName = this.__componentName__;\r\n\t            neo_common_1.Logger.debugGroup(compName, s);\r\n\t        }\r\n\t    };\r\n\t    HtmlStyle = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlStyle)\r\n\t    ], HtmlStyle);\r\n\t    return HtmlStyle;\r\n\t}());\r\n\texports.HtmlStyle = HtmlStyle;\r\n\n\n/***/ },\n/* 194 */\n/***/ function(module, exports) {\n\n\tconsole.log(\"pixiInitialize\");\r\n\tvar ios = !!navigator.platform && /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\r\n\tif (ios) {\r\n\t    PIXI.settings.PRECISION = PIXI.PRECISION.HIGH;\r\n\t}\r\n\tPIXI.settings.GC_MODE = PIXI.GC_MODES.AUTO;\r\n\n\n/***/ }\n/******/ ])))));\n\n\n/** WEBPACK FOOTER **\n ** ./wwwroot/scripts/neo-richpirates.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap e8e143c67411b599e76b\n **/","import {\n    Utils,\n    Logger,\n    PreloaderInfo,\n    Preloader,\n    libraryInitialize as neoCommonInitialize,\n    PreloaderProviderBase,\n} from \"neo-common\";\n\nneoCommonInitialize();\n\nimport { UriHelper, StringUtils } from \"neo-common\";\nimport { GameEngine, ClientHost, Communication, Platforms } from \"neo-games\";\nimport { Strings } from \"../Common/Strings\";\nimport { StageController } from \"./Components/StageController\";\nimport { PreloaderProvider } from \"./Components/Managers/PreloaderProvider\";\nimport { Languages } from \"./Utils/Languages\";\nimport { GameClientHostConsumer } from \"./ClientHost/ClientHostConsumer\";\nimport { GameDefinition } from \"../Common/GameDefinition\";\nimport { GameConfiguration } from \"../Common/GameConfiguration\";\nimport { AppContext } from \"../Common/AppContext\";\nimport { GameData } from \"./Channels/Common/Datas/GameData\";\nimport { HtmlController } from \"./HTMLComponents/HtmlController\";\nimport { GameManager } from \"./Managers/GameManager\";\nimport { DataManager } from \"./Managers/DataManager\";\nimport { PlatformsManager } from \"./Managers/PlatformsManager\";\nimport { FreeRoundBonus } from \"./Channels/Common/Bonuses/FreeRoundBonus\";\nimport { Scaling } from \"./Utils/Scaling\";\nimport { RetentionPanel } from \"./Utils/RetentionPanel\";\n\nif (DEBUG) {\n    require(\"./Utils/PerfDebug/PerfDebug\");\n    require(\"./Utils/PerfDebug/PerfDebugWindow\");\n}\n\nvar gameApp: GameApp;\n\nexport class GameApp extends GameEngine.GameAppBase<GameConfiguration, GameDefinition, GameClientHostConsumer> {\n    public static language: string = \"en-US\";\n    public static key: string = \"RichPirates\";\n\n    public static main(): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"Application\", \"start main\");\n        }\n\n        let urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\n        if (urlInfo[\"query\"][\"lang\"] != null) {\n            GameApp.language = urlInfo[\"query\"][\"lang\"];\n        }\n\n        RetentionPanel.initialize();\n        gameApp = new GameApp();\n        gameApp.load();\n    }\n\n    public static get gameClient(): Communication.Game.GameClient {\n        return gameApp._gameClient;\n    }\n\n    public static exit(): Promise<any> {\n        Platforms.Platforms.gameClosing();\n        if (AppContext.gameConfiguration.ExitUrl != \"\") {\n            Platforms.Platforms.userAction(\"exit\", { url: AppContext.gameConfiguration.ExitUrl });\n        }\n        return gameApp.exit();\n    }\n\n    public static history(): Promise<any> {\n        return gameApp.history();\n    }\n\n    public static continue(): Promise<any> {\n        return gameApp.continue();\n    }\n\n    public static closeRealityCheck(): Promise<any> {\n        return gameApp.closeRealityCheck();\n    }\n\n    protected createGameClient(options: Communication.Game.GameClientOptions): Communication.Game.GameClient {\n        let gameClient: Communication.Game.GameClient = new Communication.Game.GameClient(GameApp.key, options);\n        FreeRoundBonus.initialize(gameClient);\n        return gameClient;\n    }\n\n    protected pauseAnimations(): void {\n        StageController.pauseAnimations();\n    }\n\n    protected resumeAnimations(): void {\n        StageController.resumeAnimations();\n    }\n\n    protected createPreloaderProvider(): PreloaderProviderBase {\n        return new PreloaderProvider();\n    }\n\n    protected createGameDefinition(definition: Object): GameDefinition {\n        return new GameDefinition(definition);\n    }\n\n    protected createGameConfiguration(configuration: Object): GameConfiguration {\n        return new GameConfiguration(configuration);\n    }\n\n    protected createAppContext(): GameEngine.AppContextBase<GameConfiguration, GameDefinition> {\n        return new AppContext(this.gameConfiguration, this.gameDefinition);\n    }\n\n    protected createClientHostConsumer(): GameClientHostConsumer {\n        return new GameClientHostConsumer(this);\n    }\n\n    protected requireStrings(): void {\n        require(\"../Common/Strings\");\n    }\n\n    protected createStage(quality: string, size: GameEngine.Types.GameQualitySize): void {\n        let color = 0x000000;\n        // TODO\n        if (window[\"QUALITY\"] === \"DoubleFHD\") {\n            StageController.createStage(1920, 1080, color, \"canvas\");\n        } else {\n            StageController.createStage(size.width, size.height, color, \"canvas\");\n        }\n    }\n\n    protected initClientHost(): Promise<any> {\n        PlatformsManager.create();\n\n        return Promise.resolve();\n    }\n\n    protected parseLoadResult(loadResult: GameEngine.Types.AppLoadResult): Object {\n        let result: Object = null;\n\n        if (loadResult != null) {\n            if (loadResult.status == GameEngine.Types.AppLoadStatus.Failure) {\n                if (loadResult.error != null) {\n                    result = {\n                        message: loadResult.error.message,\n                        stack: loadResult.error.stack,\n                    };\n                }\n            }\n        }\n\n        return result;\n    }\n\n    protected finalizeLoad(): void {\n        if (this.loadingSucceed) {\n            if (AppContext != null && AppContext.current != null) {\n                let volume = AppContext.current.getVolume();\n                if (!Utils.isNullOrUndefined(volume)) {\n                    if (!Utils.isNullOrUndefined(volume.CurrentStepNo)) {\n                        if (DEBUG) {\n                            Logger.debugGroup(\n                                this.loggerGroup,\n                                `Updating sound volume by step ${volume.CurrentStepNo}.`,\n                            );\n                        }\n\n                        HtmlController.setSound(volume.CurrentStepNo);\n                    } else {\n                        if (DEBUG) {\n                            Logger.debugGroup(\n                                this.loggerGroup,\n                                `client host does not return valid value for volume 'CurrentStepNo'!`,\n                            );\n                        }\n                    }\n                } else {\n                    if (DEBUG) {\n                        Logger.debugGroup(\n                            this.loggerGroup,\n                            `client host does not returns volume data, sound volume was not updated.`,\n                        );\n                    }\n                }\n\n                Scaling.resizeRoot();\n            }\n\n            // Updating build version (for DEBUG only, for RELEASE an empty string is used)\n            let versionBuild = \"\";\n            if (DEBUG) {\n                let versionBuildValues: Array<string> = Preloader.getVersionBuild().split(\"_\");\n                versionBuild = Utils.valueOrDefault(\n                    versionBuildValues && versionBuildValues.length > 0\n                        ? versionBuildValues[versionBuildValues.length - 1]\n                        : \"\",\n                    \"\",\n                );\n            }\n            DataManager.updateGameDataFromModule(GameData.DataBuildVersion, versionBuild);\n            DataManager.configureGameData();\n\n            if (Platforms.Platforms.canPlay) {\n                GameManager.startGame(this._gameClient, this);\n                Platforms.Platforms.gameReady();\n            } else {\n                var loadingScreen = document.getElementById(\"loading\");\n                var element: HTMLElement = document.getElementById(\"progressNumber\");\n\n                if (loadingScreen != null) {\n                    loadingScreen.classList.add(\"_error\");\n                }\n                if (element != null) {\n                    element.innerHTML = Strings.loaded\n                        ? Languages.getRid(\"ERROR_404\")\n                        : \"Internal error. Please contact support.\";\n                    GameApp.gameClient.sendPlayerLogError(\n                        \"ERROR - Loading game\",\n                        this.parseLoadResult(this._loadResult),\n                    );\n                }\n            }\n        } else {\n            Platforms.Platforms.gameFailed();\n            window.onblur = null;\n            window.onfocus = null;\n            PIXI.sound.muteAll();\n\n            var loadingScreen = document.getElementById(\"loading\");\n            var element: HTMLElement = document.getElementById(\"progressNumber\");\n\n            if (loadingScreen != null) {\n                loadingScreen.classList.add(\"_error\");\n            }\n            if (element != null) {\n                element.innerHTML = Strings.loaded\n                    ? Languages.getRid(\"ERROR_404\")\n                    : \"Internal error. Please contact support.\";\n                GameApp.gameClient.sendPlayerLogError(\"ERROR - Loading game\", this.parseLoadResult(this._loadResult));\n            }\n\n            if (DEBUG) {\n                var err = \"\";\n                if (!PreloaderInfo.instance.loadSucceed) {\n                    err += \" Preloader does not load successfully!\";\n                }\n\n                Logger.errorGroup(this.loggerGroup, err);\n            }\n        }\n\n        if (DEBUG) {\n            PerfDebug.setup(StageController.Stage);\n        }\n    }\n\n    static openGameRoundHistory(isGUI: boolean = false): void {\n        if (isGUI) {\n            if (\n                !StringUtils.isNullOrEmpty(AppContext.gameConfiguration.GUIHistoryUrl) &&\n                AppContext.gameConfiguration.GUIHistoryUrl !== \"\"\n            ) {\n                if (\n                    AppContext.gameConfiguration.GUIHistoryUrl.toLowerCase() === \"userci_historyurl\" &&\n                    !StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)\n                ) {\n                    Platforms.Platforms.gotoHistory({ target: AppContext.gameConfiguration.RCIHistoryUrl });\n                    if (Platforms.Platforms.handleOpenHistoryPage) {\n                        return;\n                    }\n                    window.open(AppContext.gameConfiguration.RCIHistoryUrl, \"_blank\");\n                } else if (\n                    AppContext.gameConfiguration.GUIHistoryUrl.toLowerCase() === \"userci_historyurl\" &&\n                    StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)\n                ) {\n                    GameApp.openGameRoundHistoryHome();\n                } else {\n                    Platforms.Platforms.gotoHistory({ target: AppContext.gameConfiguration.GUIHistoryUrl });\n                    if (Platforms.Platforms.handleOpenHistoryPage) {\n                        return;\n                    }\n                    window.open(AppContext.gameConfiguration.GUIHistoryUrl, \"_blank\");\n                }\n            } else {\n                GameApp.openGameRoundHistoryHome();\n            }\n        } else {\n            GameApp.openGameRoundHistoryHome();\n        }\n    }\n\n    static openGameRoundHistoryHome(): void {\n        let gameKey: string = UriHelper.getGameKey();\n        let urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\n        let timeZoneOffset: Number = new Date().getTimezoneOffset();\n\n        if (gameKey != null && urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\n            let serverUrl: string = urlInfo[\"query\"][\"serverUrl\"];\n            let token: string = urlInfo[\"hash\"].substring(1);\n            let lang: string = urlInfo[\"query\"][\"lang\"] ? urlInfo[\"query\"][\"lang\"] : GameApp.language;\n            const historyUrl =\n                serverUrl + \"GameRounds/\" + GameApp.key + \"?culture=\" + lang + \"&tzo=\" + timeZoneOffset + \"&\" + token;\n            Platforms.Platforms.gotoHistory({ target: historyUrl });\n            if (Platforms.Platforms.handleOpenHistoryPage) {\n                return;\n            }\n            window.open(historyUrl, \"_blank\");\n        }\n    }\n\n    static openGameRoundHistoryFromUrl(): void {\n        if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\n            Platforms.Platforms.gotoHistory({ target: AppContext.gameConfiguration.RCIHistoryUrl });\n            if (Platforms.Platforms.handleOpenHistoryPage) {\n                return;\n            }\n            window.open(AppContext.gameConfiguration.RCIHistoryUrl, \"_blank\");\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.HistoryUrl)) {\n            Platforms.Platforms.gotoHistory({ target: AppContext.gameConfiguration.HistoryUrl });\n            if (Platforms.Platforms.handleOpenHistoryPage) {\n                return;\n            }\n            window.open(AppContext.gameConfiguration.HistoryUrl, \"_blank\");\n        }\n    }\n\n    /**\n     * Before exist do reguler 'leave game' request against server\n     * @returns {Promise<any>}\n     */\n    protected beforeExit(): Promise<any> {\n        return this._gameClient.leaveGame();\n    }\n\n    protected handleStringsLoadCompleted(lang: string): void {\n        if (HtmlController.RidElements != null && HtmlController.RidElements.length > 0) {\n            for (let i: number = 0; i < HtmlController.RidElements.length; i++) {\n                HtmlController.RidElements[i].updateText();\n            }\n        }\n\n        let languageElements: NodeListOf<Element> = document.querySelectorAll(\"[language]\");\n        for (let i: number = 0; i < languageElements.length; i++) {\n            languageElements[i].setAttribute(\"language\", lang);\n        }\n    }\n}\n\nGameApp.main();\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameApp.ts\n **/","(function() { module.exports = this[\"NeoCommon\"]; }());\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"NeoCommon\"\n ** module id = 2\n ** module chunks = 0\n **/","(function() { module.exports = this[\"NeoGames\"]; }());\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"NeoGames\"\n ** module id = 3\n ** module chunks = 0\n **/","import { Utils, NumberUtils, ArgValidator, StringUtils, StringsFactory } from \"neo-common\";\nimport { AppContext } from \"./AppContext\";\n\nfunction checkInitialized() {\n    StringsFactory.checkInitialized();\n}\n\nexport class Strings {\n    private static _json: Object;\n\n    constructor(json: Object) {\n        ArgValidator.ensureIsNotNullOrUndefined(json, \"json\");\n        Strings._json = json;\n    }\n\n    public static get loaded(): boolean {\n        return !Utils.isNullOrUndefined(Strings._json);\n    }\n\n    public static get(key: string): string {\n        return Strings._json && Strings._json.hasOwnProperty(key) ? Strings._json[key] : `@@${key}@@`;\n    }\n\n    public static getWithValues(key: string, ...tmpl: Array<any>): string {\n        if (Strings._json && Strings._json.hasOwnProperty(key)) {\n            var value = Strings._json[key];\n            var regexFormat = /(\\%m|\\%s)/gm;\n            var matchCnt = 0;\n            while (regexFormat.exec(value)) {\n                matchCnt++;\n            }\n\n            var args = tmpl;\n            if (matchCnt !== args.length) {\n                throw `Provided argument count (${args.length}) does not match required string params count (${matchCnt})`;\n            }\n\n            var idx = -1;\n            return value.replace(regexFormat, function (match: string) {\n                var val = args[++idx];\n                if (StringUtils.equals(match, \"%m\", true)) {\n                    val = NumberUtils.valueToNumber(\n                        val,\n                        AppContext.gameConfiguration.UseCoins ? 0 : AppContext.gameConfiguration.ShowDecimalPlaces,\n                    );\n                } else if (!StringUtils.equals(match, \"%s\", true)) {\n                    throw `Unknown formatter \"${match} !\"`;\n                }\n                return val;\n            });\n        }\n\n        return `@@${key}@@`;\n    }\n\n    /* SECTION FOR STRINGS GENERATOR - BEGIN (DO NOT MODIFY) */\n    // public static get GAMBLE() { checkInitialized(); return this.get(\"GAMBLE\"); }\n    /* SECTION FOR STRINGS GENERATOR - END */\n}\n\nwindow[\"Strings\"] = Strings;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Common/Strings.ts\n **/","import { Utils, StringUtils } from \"neo-common\";\nimport { GameEngine, ClientHost } from \"neo-games\";\nimport { GameConfiguration } from \"./GameConfiguration\";\nimport { GameDefinition } from \"./GameDefinition\";\nimport { GameApp } from \"../Game/GameApp\";\n\nexport class AppContext extends GameEngine.AppContextBase<GameConfiguration, GameDefinition> {\n    private static _current: AppContext = null;\n\n    constructor(gameConfiguration: GameConfiguration, gameDefinition: GameDefinition) {\n        super(gameConfiguration, gameDefinition, GameApp.key);\n\n        AppContext._current = this;\n    }\n\n    public static get current(): AppContext {\n        return AppContext._current;\n    }\n\n    public static get gameConfiguration(): GameConfiguration {\n        return AppContext._current == null ? null : AppContext._current.gameConfiguration;\n    }\n\n    public static get gameDefinition(): GameDefinition {\n        return AppContext._current.gameDefinition;\n    }\n\n    public static get clientHost(): ClientHost.IClientHost {\n        return AppContext._current.clientHost;\n    }\n\n    public setHideAmounts(hideAmounts: boolean): void {\n        if (AppContext.clientHost != null) {\n            AppContext.clientHost.updateSharedSetting(\"HideAmounts\", hideAmounts.toString());\n        }\n    }\n\n    public getHideAmounts(): boolean {\n        if (AppContext.clientHost != null) {\n            if (AppContext.gameConfiguration.HideAmountsEnabled) {\n                const hideAmounts = AppContext.clientHost.getSharedSetting(\"HideAmounts\");\n\n                if (!Utils.isNullOrUndefined(hideAmounts)) {\n                    return StringUtils.parseBoolean(hideAmounts);\n                }\n            }\n        }\n\n        return false;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Common/AppContext.ts\n **/","import { Utils, Logger, PreloaderInfo } from \"neo-common\";\nimport { Scaling } from \"../Utils/Scaling\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { Communication } from \"neo-games\";\nimport { GameManager } from \"../Managers/GameManager\";\nimport { Focus } from \"../Utils/Focus\";\nimport { Languages } from \"../Utils/Languages\";\nimport { AnimationFramePool } from \"../AnimationFrame/Pool\";\nimport { PageVisibilityHandler } from \"../CustomComponents/PageVisibilityHandler\";\nimport { DataManager } from \"../Managers/DataManager\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\n\n/**\n * StageController creates stage for webgl rendering (with fallback to canvas).\n * Also handle redrawing stage based on tick with requestAnimationFrame.\n * @class StageController\n */\nexport class StageController {\n    static Renderer: any;\n    static Stage: PIXI.Container;\n    static UpdatedTextures: Object = {};\n    static Width: number;\n    static Height: number;\n    static FPS: number = 60;\n    static baseStageContainer: PIXI.Container;\n    static freespinsStageContainer: PIXI.Container;\n    static baseStage: boolean = false;\n    static freespinStage: boolean = false;\n\n    private static _noWebGL: boolean = false;\n    private static _pauseAnimations = false;\n    private static _contextLost = false;\n\n    public static pauseAnimations() {\n        if (DEBUG) {\n            StageController._pauseAnimations = true;\n            Logger.debugGroup(\"StageController\", \"Animations was paused\");\n        }\n    }\n\n    public static resumeAnimations() {\n        if (DEBUG) {\n            if (StageController._pauseAnimations) {\n                StageController._pauseAnimations = false;\n                StageController.redrawStage();\n\n                Logger.debugGroup(\"StageController\", \"Animations was resumed\");\n            }\n        }\n    }\n\n    public static get textureManager(): PIXI.TextureManager {\n        return StageController.Renderer.textureManager;\n    }\n\n    public static updateTexture(texture: PIXI.BaseTexture | PIXI.Texture): WebGLTexture {\n        return this._noWebGL ? null : StageController.Renderer.textureManager.updateTexture(texture);\n    }\n\n    /**\n     * get texture by resource id\n     *\n     * @param id\n     * @returns {PIXI.Texture}\n     */\n    public static getTextureByResourceId(id: string): PIXI.Texture {\n        let texture: PIXI.Texture = PIXI.utils.TextureCache[id];\n        let resourcePath: string = \"\";\n\n        if (Utils.isNullOrUndefined(texture)) {\n            resourcePath = PreloaderInfo.instance.getResourcePathById(id);\n            if (resourcePath) {\n                texture = PIXI.utils.TextureCache[resourcePath];\n\n                if (Utils.isNullOrUndefined(texture)) {\n                    Logger.errorGroup(\n                        \"StageController\",\n                        `Could not find texture by id '${id}' (resourcePath: ${resourcePath})`,\n                    );\n                }\n            } else {\n                Logger.errorGroup(\"StageController\", `Could not find resource path for id '${id}' !`);\n            }\n        }\n        return texture;\n    }\n\n    private static handleLostWebGLContext(): void {\n        if (StageController._contextLost) {\n            return;\n        }\n        DataManager.Autoplay = false;\n        PageVisibilityHandler.Enabled = false;\n        PageVisibilityHandler.pauseAll();\n        HtmlController.dispatchActionAllowed = false;\n\n        let modules = Communication.Game.GameModules;\n        for (let key in modules) {\n            if (modules.hasOwnProperty(key)) {\n                ModuleManager.disableChannelModule(modules[key]);\n            }\n        }\n        GameManager.gameClient.sendPlayerLogError(\"ERROR - WebGL\");\n        AppContext.current.showDialog(Languages.getRid(\"ERROR_WEBGL\"), false, \"\", \"\", \"\", { special: true });\n        StageController._contextLost = true;\n    }\n\n    /**\n     * Create stage, detect renderer, set size and color of stage, start rendering.\n     * @method createStage\n     * @param width number\n     * @param height number\n     * @param color number (background color of canvas)\n     * @param canvasId string\n     * @return void\n     */\n    public static createStage(width: number, height: number, color: number, canvasId: string): void {\n        StageController.Width = width;\n        StageController.Height = height;\n\n        // get canvas from html document\n        const canvas: HTMLCanvasElement = <HTMLCanvasElement>document.getElementById(canvasId);\n        const loading: HTMLCanvasElement = <HTMLCanvasElement>document.getElementById(\"loading\");\n\n        // create rendered\n        const rendererOptions: PIXI.WebGLRendererOptions = { view: canvas, roundPixels: false };\n        (rendererOptions as any).backgroundColor = color;\n        this.Renderer = PIXI.autoDetectRenderer(width, height, rendererOptions, this._noWebGL);\n\n        if (StageController.Renderer instanceof PIXI.CanvasRenderer) {\n            StageController._noWebGL = true;\n        }\n\n        PIXI.settings.GC_MODE = PIXI.GC_MODES.AUTO;\n\n        // append canvas to html document\n        document.body.appendChild(this.Renderer.view);\n\n        // create first conatiner to renderer\n        this.Stage = new PIXI.Container();\n\n        Scaling.scale();\n        Focus.focus();\n        PageVisibilityHandler.handle();\n\n        loading.style.display = \"block\";\n        canvas.style.display = \"none\";\n        canvas.addEventListener(\"webglcontextlost\", StageController.handleLostWebGLContext);\n\n        window[\"__PIXI_STAGE__\"] = this.Stage;\n        window[\"__PIXI_RENDERER__\"] = this.Renderer;\n        this.redrawStage();\n    }\n\n    /**\n     * Method addChild append new containers to stage on top layer.\n     * @method addChild\n     * @param element PIXI.DisplayObject\n     * @return void\n     */\n    public static addChild(element: PIXI.DisplayObject): void {\n        this.Stage.addChild(element);\n    }\n\n    /**\n     * Redraw stage based on requestAnimationFrame.\n     * @method redrawStage\n     * @return void\n     */\n    public static redrawStage(): void {\n        if (StageController._pauseAnimations) {\n            return;\n        }\n\n        AnimationFramePool.draw();\n\n        if (\n            StageController.baseStage &&\n            StageController.baseStageContainer != null &&\n            StageController.freespinStage &&\n            StageController.freespinsStageContainer != null\n        ) {\n            StageController.Renderer.render(StageController.Stage);\n        } else if (StageController.baseStage && StageController.baseStageContainer != null) {\n            StageController.Renderer.render(StageController.baseStageContainer);\n        } else if (StageController.freespinStage && StageController.freespinsStageContainer != null) {\n            StageController.Renderer.render(StageController.freespinsStageContainer);\n        } else {\n            StageController.Renderer.render(StageController.Stage);\n        }\n\n        requestAnimationFrame(StageController.redrawStage);\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    private static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"StageController\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/StageController.ts\n **/","import { Logger } from \"neo-common\";\nimport { Platforms, Plugins } from \"neo-games\";\nimport { StageController } from \"../Components/StageController\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"./FrameTimer\";\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\nimport EventEmitter = PIXI.utils.EventEmitter;\n\n/**\n * @class Scaling\n */\nexport class Scaling {\n    static EventResize: string = \"eventResize\";\n\n    static Root: HTMLElement;\n    static Screen: HTMLElement;\n    static Canvas: HTMLElement;\n    static lastTouch: number;\n\n    static PortraitRatio = 0.9;\n    static PortraitMobileRatio = 0.72;\n\n    static LeftPanelWidth = 0;\n\n    static IsIOs: boolean = false;\n    static IsIOsTablet: boolean = false;\n    static IsIOsWebview: boolean = false;\n\n    static IOsResizeTimer: FrameTimerEventEmitter;\n    static IOsResizeDelay = 60;\n\n    static Emitter: EventEmitter;\n\n    static scale(): void {\n        Scaling.Root = document.getElementById(\"root\");\n        Scaling.Screen = document.getElementById(\"screen\");\n        Scaling.IsIOs = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\n        Scaling.IsIOsTablet = /iPad/.test(navigator.platform);\n        Scaling.IsIOsWebview = Scaling.IsIOs && window.indexedDB !== null;\n        Scaling.IOsResizeTimer = CreateFrameTimer(\"scalingTimer\");\n        Scaling.IOsResizeTimer.on(FrameTimerEvents.Complete, Scaling.resizeRoot.bind(this, true));\n\n        Scaling.Emitter = new EventEmitter();\n\n        Scaling.resizeRoot();\n        window.onresize = Scaling.onResizeRoot;\n\n        document.body.classList.add(window[\"CHANNEL\"] === \"mobile\" ? \"mobile\" : \"desktop\");\n        document.body.classList.add(`ui-v${window[\"UI-VERSION\"]}`);\n\n        if (Scaling.isSafari()) {\n            document.body.classList.add(\"safari\");\n        }\n\n        if (Scaling.isIosChrome()) {\n            document.body.classList.add(\"iOsChrome\");\n        }\n\n        if (Scaling.IsIOs) {\n            Scaling.setupIOs();\n        }\n\n        /**\n         * Fast Touchstart events replaced by click event.\n         */\n        document.addEventListener(\n            \"touchend\",\n            function (event) {\n                if (AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\n                    return;\n                }\n\n                let diff = event.timeStamp - Scaling.lastTouch;\n                Scaling.lastTouch = event.timeStamp;\n                if (!diff || diff > 400) {\n                    return;\n                }\n                event.preventDefault();\n                event.stopPropagation();\n\n                let evt = new MouseEvent(\"click\");\n                event.target.dispatchEvent(evt);\n            },\n            false,\n        );\n    }\n\n    static onResizeRoot(): void {\n        Scaling.resizeRoot();\n        if (Scaling.IsIOsWebview) {\n            setTimeout(() => Scaling.resizeRoot(), 500);\n        }\n    }\n\n    static resizeRoot(delayed: boolean = false, preventEmitEvent: boolean = true): void {\n        if (!delayed && Scaling.IsIOs && Scaling.IOsResizeTimer && (Scaling.inIframe() || Scaling.isIosChrome())) {\n            Scaling.IOsResizeTimer.stop();\n            Scaling.IOsResizeTimer.start(Scaling.IOsResizeDelay);\n        }\n\n        document.body.style.overflow = \"hidden\"; //calculate clientHeight without scrollbars\n        Plugins.StatusBar.updateHeight();\n\n        var sab = parseInt(getComputedStyle(document.documentElement).getPropertyValue(\"--sab\") || \"0\"); //safe area bottom\n        var innerHeight: number = window.innerHeight + Plugins.StatusBar.StatusBarHeight - sab;\n        var innerWidth: number = window.innerWidth + Plugins.StatusBar.StatusBarWidth;\n\n        if (Scaling.IsIOs && Plugins.StatusBar.StatusBarHeight != 0) {\n            //to prevent StatusBar from being positioned below game\n            document.documentElement.style.width = sab > 0 ? window.innerWidth + \"px\" : \"\";\n            document.documentElement.style.height = sab > 0 ? window.innerHeight - sab + \"px\" : \"\";\n            document.documentElement.style.overflow = sab > 0 ? \"visible\" : \"\";\n        }\n\n        var ratioWidth: number = innerWidth / (StageController.Width + Scaling.LeftPanelWidth);\n        var ratioHeight: number = innerHeight / (StageController.Height + Jackpot.Height);\n        var top: number = -(StageController.Height + Jackpot.Height - innerHeight) / 2;\n        var left: number = -(StageController.Width - innerWidth) / 2;\n\n        if (ratioWidth < ratioHeight) {\n            Scaling.Root.style.transform = \"scale(\" + ratioWidth + \")\";\n            left += (Scaling.LeftPanelWidth / 2) * ratioWidth;\n        } else {\n            Scaling.Root.style.transform = \"scale(\" + ratioHeight + \")\";\n            left += (Scaling.LeftPanelWidth / 2) * ratioHeight;\n        }\n\n        Scaling.Root.style.top = top.toString() + \"px\";\n        Scaling.Root.style.left = left.toString() + \"px\";\n\n        let enabledPortrait = true;\n        if (AppContext != null && AppContext.current != null) {\n            enabledPortrait = AppContext.gameConfiguration.UsePortraitMode;\n\n            //disable portrait for ipads\n            if (Scaling.IsIOsTablet) {\n                enabledPortrait = false;\n            }\n\n            if (!enabledPortrait) {\n                document.body.classList.remove(\"portrait\", \"mobile-xs\", \"tablet\", \"tablet-xs\");\n                Scaling.Root.style.height = StageController.Height + Jackpot.Height + \"px\";\n            }\n        }\n\n        if (enabledPortrait && window[\"CHANNEL\"] === \"mobile\") {\n            let portraitRatio = innerWidth / innerHeight;\n            if (innerHeight > innerWidth && portraitRatio < Scaling.PortraitRatio) {\n                document.body.classList.add(\"portrait\");\n                document.body.classList.remove(\"mobile-xs\", \"tablet\", \"tablet-xs\");\n\n                if (portraitRatio > Scaling.PortraitMobileRatio && portraitRatio < Scaling.PortraitRatio) {\n                    document.body.classList.add(\"tablet\");\n\n                    if (portraitRatio > 0.85) {\n                        document.body.classList.add(\"tablet-xs\");\n                    }\n                } else {\n                    if (portraitRatio > 0.61) {\n                        document.body.classList.add(\"mobile-xs\");\n                    }\n                }\n\n                ratioWidth = innerWidth / StageController.Height;\n                left = -(StageController.Height - innerWidth) / 2;\n\n                Scaling.Root.style.transform = \"scale(\" + ratioWidth + \")\";\n                Scaling.Root.style.top = \"0\";\n                Scaling.Root.style.left = left.toString() + \"px\";\n                Scaling.Root.style.height = (StageController.Height / innerWidth) * innerHeight + \"px\";\n            } else {\n                document.body.classList.remove(\"portrait\", \"tablet\");\n                Scaling.Root.style.height = StageController.Height + Jackpot.Height + \"px\";\n            }\n\n            if (document.body.classList.contains(\"portrait\")) {\n                Scaling.Root.classList.remove(\"gameShadow\");\n                Scaling.Screen.classList.add(\"gameShadow\");\n            } else {\n                Scaling.Root.classList.add(\"gameShadow\");\n                Scaling.Screen.classList.remove(\"gameShadow\");\n            }\n        } else {\n            Scaling.Root.style.height = StageController.Height + Jackpot.Height + \"px\";\n            Scaling.Root.classList.add(\"gameShadow\");\n        }\n\n        if (document.documentElement.scrollTop != 0) {\n            document.documentElement.scrollTop = 0;\n        }\n\n        document.body.style.overflow = \"\";\n\n        if (Scaling.Emitter && preventEmitEvent) {\n            Scaling.Emitter.emit(\n                Scaling.EventResize,\n                Scaling.isPortrait(),\n                innerWidth / (innerHeight - Jackpot.Height),\n            );\n        }\n    }\n\n    static setupIOs(): void {\n        document.addEventListener(\"gesturestart\", this.preventPropagation, true);\n        document.addEventListener(\"gesturechange\", this.preventPropagation, true);\n        document.addEventListener(\"gestureend\", this.preventPropagation, true);\n        document.addEventListener(\"touchmove\", this.preventMovePropagation, true);\n    }\n\n    public static preventPropagation(e: Event): void {\n        e.stopPropagation();\n        e.preventDefault();\n    }\n\n    public static preventMovePropagation(e: Event): void {\n        var target = <HTMLElement>e.target;\n        while (target) {\n            if (target == document.documentElement) {\n                target = null;\n            } else if (target.classList.contains(\"mask\") || target.classList.contains(\"dialogContent\")) {\n                return;\n            } else {\n                if (target.parentElement != null) {\n                    target = target.parentElement;\n                }\n            }\n        }\n\n        e.stopPropagation();\n        e.preventDefault();\n    }\n\n    private static isSafari(): boolean {\n        const ua = navigator.userAgent;\n        const vendor = navigator.vendor;\n\n        return /Safari/i.test(ua) && /Apple Computer/.test(vendor);\n    }\n\n    private static isIosChrome(): boolean {\n        return !!(Scaling.IsIOs && (navigator.userAgent.match(\"CriOS\") || navigator.userAgent.match(\"FxiOS\")));\n    }\n\n    private static inIframe(): boolean {\n        try {\n            return window.self !== window.top;\n        } catch (e) {\n            return true;\n        }\n    }\n\n    static onLoadComplete(): void {\n        document.body.classList.add(\"loaded\");\n    }\n\n    public static isPortrait(): boolean {\n        return document.body.classList.contains(\"portrait\");\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string which will be traced to browser console.\n     * @return void\n     */\n    static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"Scaling\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Scaling.ts\n **/","import { Logger, Utils } from \"neo-common\";\nimport { AnimationFrameEventEmitter } from \"../AnimationFrame/AnimationFrame\";\nimport { FrameTimerPool } from \"./FrameTimerPool\";\n\nexport const FrameTimerEvents = {\n    Progress: \"progress\",\n    Complete: \"complete\",\n};\n\n/**\n * FrameTimer is class to count time in frames.\n * FrameTimer is used instead of window.interval or window.timeout.\n * FrameTimer doesnt use miliseconds but count with frames.\n * @class FrameTimer\n */\nexport class FrameTimer extends AnimationFrameEventEmitter {\n    private _timerCounter: number;\n    private _finalTimerCounter: number;\n    private _timerName: string;\n    private _useFrames: boolean = false;\n    private _timer: number;\n    private _playing: boolean = false;\n    private _paused: boolean = false;\n\n    private _uid: string;\n\n    private _startTime: number;\n\n    constructor(timerName: string) {\n        super();\n\n        timerName = Utils.valueOrDefault(timerName, Utils.generateUuid());\n\n        this._timerName = `FrameTimer-${timerName}`;\n\n        this._uid = `FrameTimer_${timerName}_${Utils.generateUuid()}`;\n\n        // default values\n        this._timerCounter = 0;\n        this._finalTimerCounter = 0;\n    }\n\n    protected frame_onFrame(): void {\n        if (this._timerCounter === this._finalTimerCounter) {\n            this.stop();\n            this.conclude();\n        } else {\n            this.super2.emit(FrameTimerEvents.Progress);\n            this._timerCounter++;\n        }\n    }\n\n    protected get frame_name(): string {\n        return this._timerName;\n    }\n\n    /**\n     * Set counter to zero and set duration for counter.\n     * Start counting.\n     * @method start\n     * @param duration - number (frames)\n     * @return void\n     */\n    start(duration: number): void {\n        if (!this._playing) {\n            FrameTimerPool.add(this._uid, this);\n        }\n        this._playing = true;\n        if (this._useFrames) {\n            this._timerCounter = 0;\n            this._finalTimerCounter = duration;\n            this.frame_stop();\n\n            // start counting\n            this.count();\n        } else {\n            /*\n            if(this._timer != null) {\n                clearTimeout(this._timer);\n            }\n            */\n            // finalTimerCounter is target time\n            this._startTime = new Date().getTime();\n            this._finalTimerCounter = duration * 16.7;\n\n            // TODO method\n            this._timer = setTimeout(() => this.conclude(), this._finalTimerCounter);\n\n            if (FrameTimerPool.paused) {\n                this.pause();\n            }\n        }\n    }\n\n    /**\n     * Stop counting.\n     * @method stop\n     * @return void\n     */\n    stop(): void {\n        if (this._playing) {\n            FrameTimerPool.remove(this._uid);\n        }\n        this._playing = false;\n        if (this._useFrames) {\n            this.frame_stop();\n        } else {\n            if (this._timer != null) {\n                clearTimeout(this._timer);\n            }\n        }\n    }\n\n    private conclude(): void {\n        clearTimeout(this._timer);\n        FrameTimerPool.remove(this._uid);\n        this._playing = false;\n        this.super2.emit(FrameTimerEvents.Complete);\n    }\n\n    pause(): void {\n        if (!this._playing || this._paused) {\n            return;\n        }\n        if (this._useFrames) {\n            this.frame_stop();\n        } else {\n            // frameTimerCounter becomes remaining time\n            clearTimeout(this._timer);\n            let currentTime = new Date().getTime();\n            this._finalTimerCounter -= currentTime - this._startTime;\n        }\n        this._paused = true;\n    }\n\n    isPlaying(): boolean {\n        return this._playing;\n    }\n\n    unpause(): void {\n        if (!this._playing || !this._paused) {\n            return;\n        }\n        if (this._useFrames) {\n            this.count();\n        } else {\n            this._startTime = new Date().getTime();\n            window.clearTimeout(this._timer);\n            this._timer = setTimeout(() => this.conclude(), this._finalTimerCounter);\n        }\n        this._paused = false;\n    }\n\n    /**\n     * Count method emit Complete and Progress event while counting with requesrtAnimationFrame.\n     * @method count\n     * @retutn void\n     */\n    count(): void {\n        this.frame_start();\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @retutn void\n     */\n    log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"FrameTimer\", s);\n        }\n    }\n}\n\nexport type FrameTimerEventEmitter = FrameTimer & PIXI.utils.EventEmitter;\n\nexport const CreateFrameTimer = (timerName: string): FrameTimerEventEmitter => {\n    return new FrameTimer(timerName) as FrameTimerEventEmitter;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/FrameTimer.ts\n **/","import { Logger, Utils } from \"neo-common\";\nimport { IAnimationFrame, EventEmmiterClass, BaseElementClass } from \"./Types\";\nimport { AnimationFramePool } from \"./Pool\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\n\nexport function AnimationFrameClass(Superclass?: FunctionConstructor) {\n    var sc: FunctionConstructor = (Superclass || Object) as any;\n\n    return class AnimationFrame extends sc implements IAnimationFrame {\n        private _frame_stopped: boolean;\n        private _frame_starting: boolean;\n        private _frame_stopping: boolean;\n        private _frame_uid: string;\n\n        constructor() {\n            super();\n            this._frame_stopped = true;\n            this._frame_starting = null;\n            this._frame_stopping = null;\n            this._frame_uid = null;\n\n            this.frame_draw = this.frame_draw.bind(this);\n        }\n\n        protected frame_onFrame(): void {\n            throw new Error(`method \"frame_onFrame\" is not implemented!`);\n        }\n\n        protected get frame_name(): string {\n            throw new Error(`property \"frame_name\" is not implemented!`);\n        }\n\n        protected get isFrameStopped(): boolean {\n            return this._frame_stopped;\n        }\n\n        public get frame_uid(): string {\n            if (this._frame_uid === null) {\n                this._frame_uid = this.frame_name + Utils.generateUuid();\n            }\n\n            return this._frame_uid;\n        }\n\n        public frame_draw(): void {\n            if (this._frame_stopped) {\n                return;\n            }\n\n            this.frame_onFrame();\n        }\n\n        private frame_log(msg: string, isError?: boolean): void {\n            isError = Utils.valueOrDefault(isError, false);\n\n            if (DEBUG && !isError) {\n                Logger.debugGroup(\"AnimationFrame\", `[${this.frame_name}-AnimationFrame] ` + msg);\n            }\n\n            if (isError) {\n                Logger.errorGroup(\"AnimationFrame\", `[${this.frame_name}-AnimationFrame] ` + msg);\n            }\n        }\n\n        public frame_start(): void {\n            if (!this._frame_stopped) {\n                return;\n            }\n\n            if (this._frame_starting) {\n                return;\n            }\n\n            this._frame_starting = true;\n\n            try {\n                if (AnimationFramePool.registerFrame(this)) {\n                    this._frame_stopped = false;\n                    //this.frame_log('was started and registered to stage pool');\n                } else {\n                    this.frame_log(\"failed to start (already registered in stage pool!)\", true);\n                }\n            } finally {\n                this._frame_starting = null;\n            }\n\n            // this will do possible precalculations before actual method is called from 'requestAnimationFrame' from StageController\n            this.frame_draw();\n        }\n\n        public frame_stop(): void {\n            if (this._frame_stopped) {\n                return;\n            }\n\n            if (this._frame_stopping) {\n                return;\n            }\n\n            this._frame_stopping = true;\n\n            try {\n                if (AnimationFramePool.unregisterFrame(this)) {\n                    this._frame_stopped = true;\n                    //this.frame_log('was stopped and unregistered from stage pool');\n                } else {\n                    this.frame_log(\"failed to stop (not registered in stage pool!)\", true);\n                }\n            } finally {\n                this._frame_stopping = null;\n            }\n        }\n    };\n}\n\n/**\n * abstract class AnimationFrameEventEmitter, extends both 'PIXI.utils.EventEmitter' and 'AnimationFrame' classes\n */\nexport abstract class AnimationFrameEventEmitter extends AnimationFrameClass(EventEmmiterClass() as any) {\n    protected get super2(): PIXI.utils.EventEmitter {\n        return this as any as PIXI.utils.EventEmitter;\n    }\n}\n\n/**\n * abstract class AnimationFrameBaseElement, extends both 'BaseElement' and 'AnimationFrame' classes\n */\nexport abstract class AnimationFrameBaseElement extends AnimationFrameClass(BaseElementClass() as any) {\n    protected get super2(): BaseElement {\n        return this as any as BaseElement;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/AnimationFrame/AnimationFrame.ts\n **/","import { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\n\nexport interface IAnimationFrame {\n    frame_uid: string;\n    frame_draw(): void;\n}\n\nexport function EventEmmiterClass() {\n    return class EventEmmiterDescendant extends PIXI.utils.EventEmitter {};\n}\n\nexport function BaseElementClass() {\n    return class BaseElementDescendant extends BaseElement {};\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/AnimationFrame/Types.ts\n **/","import { Utils, StringUtils, ArrayUtils, Logger, engineComponent } from \"neo-common\";\nimport { ShapeElement } from \"./ShapeElement\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { StageController } from \"../../StageController\";\nimport { Tweens, TweensAttributes } from \"../../Effects/Tweens\";\nimport { IElement } from \"../Interfaces/IElement\";\nimport { Attributes } from \"../../../Utils/Attributes\";\n\n/**\n * BaseElement class is class which creates holder for other display objects.\n * Also handle all basic properties of display object as X, Y, Rotation, Tween, Scale, Visible, Mask.\n * @class BaseElement\n * @extends PIXI.Container\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class BaseElement extends PIXI.Container implements IElement {\n    /**\n     * Unique component identifier\n     */\n    private _uid: string;\n    private _cloned: boolean;\n    private __destroyed: boolean;\n\n    maskSprite: PIXI.Sprite;\n\n    static _destroyOptions: PIXI.DestroyOptions = {\n        children: true,\n    };\n\n    private _tweenEngine: string;\n\n    private _positionTweenInitialized: boolean;\n    public positionTweenX: Array<number>;\n    public positionTweenY: Array<number>;\n    public positionTweenEase: string;\n    public positionTweenPosition: string;\n    public positionTweenDuration: number;\n    public positionTweenDelay: number;\n\n    private _scaleTweenInitialized: boolean;\n    public scaleTweenX: Array<number>;\n    public scaleTweenY: Array<number>;\n    public scaleTween: Array<PIXI.Point>;\n    public scaleTweenEase: string;\n    public scaleTweenDuration: number;\n    public scaleTweenDelay: number;\n\n    private _rotationTweenInitialized: boolean;\n    public rotationTween: Array<number>;\n    public rotationTweenEase: string;\n    public rotationTweenDuration: number;\n    public rotationTweenDelay: number;\n\n    private _alphaTweenInitialized: boolean;\n    public alphaTween: Array<number>;\n    public alphaTweenEase: string;\n    public alphaTweenDuration: number;\n    public alphaTweenDelay: number;\n\n    constructor() {\n        super();\n\n        this._cloned = false;\n        this.__destroyed = false;\n\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                this._uid = PerfDebug.generateElementUID(this);\n                PerfDebug.newElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    getDebugInfo(): string {\n        if (DEBUG) {\n            let debugInfoFn = (this as any).debugInfo;\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\n        }\n        return \"\";\n    }\n\n    get tweenEngine(): string {\n        return this._tweenEngine;\n    }\n\n    set tweenEngine(engine: string) {\n        this._tweenEngine = engine;\n    }\n\n    /**\n     * @property cloned - indicates if element was cloned or not.\n     * @returns {boolean}\n     */\n    public get cloned(): boolean {\n        return this._cloned;\n    }\n\n    public get destroyed(): boolean {\n        return this.__destroyed;\n    }\n\n    /**\n     * @property uid - unique identifier of element.\n     * @returns {string}\n     */\n    public get uid(): string {\n        return this._uid;\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public get componentName(): string {\n        return (this as any).__componentName__;\n    }\n\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\n        this.assertDestroyed(\"destroy\");\n\n        if (Utils.isNullOrUndefined(options)) {\n            options = BaseElement._destroyOptions;\n        }\n\n        this.internalDestroy(options);\n\n        if (!Utils.isNullOrUndefined(this.children)) {\n            super.destroy(options);\n        }\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.destroy(this);\n            }\n        }\n\n        this.__destroyed = true;\n    }\n\n    /**\n     * todo Destroy tweens by used tween engine\n     * @method internalDestroy - cleanup resources\n     * @param options\n     */\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        Tweens.removeTweens(this);\n    }\n\n    public clone(): any {\n        throw new Error(\"Not implemented\");\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    protected removeAndDestroyChildren(): void {\n        this._removeAndDestroyChildren();\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    _removeAndDestroyChildren(): void {\n        this.assertDestroyed(\"_removeAndDestroyChildren\");\n\n        let destroyOptions: PIXI.DestroyOptions = {\n            children: true,\n        };\n\n        if (this.children != null && this.children.length > 0) {\n            for (let i = this.children.length - 1; i >= 0; i--) {\n                if (this.children[i] != null) {\n                    (this.children[i] as any).destroy(destroyOptions);\n                }\n            }\n        }\n\n        this.removeChildren();\n    }\n\n    protected assertDestroyed(method: string): void {\n        if (DEBUG) {\n            if (this.__destroyed) {\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\n            }\n        }\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    protected markAsCloned(): void {\n        this._markAsCloned();\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    _markAsCloned(): void {\n        this.assertDestroyed(\"markAsCloned()\");\n        this._cloned = true;\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.clone(this);\n\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    // for ProtonElement.ts (to avoid recursive calls of .create)\n    public _create(node: Element): void {\n        this.createByNode(node);\n        this.updateByNode(node);\n    }\n\n    public create(node: Element): void {\n        this._create(node);\n    }\n\n    /**\n     * todo Destroy tweens by used tween engine\n     *\n     * @method _create - setup element from xml node\n     * @param node\n     * @private\n     */\n    public createByNode(node: Element): void {\n        if (DEBUG) {\n            if (\n                node.hasAttribute(BaseElementAttributes.DEBUG) &&\n                node.getAttribute(BaseElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        this.assertDestroyed(\"_create()\");\n\n        if (this.name == null) {\n            this.name = node.nodeName;\n        }\n\n        this.alpha = Attributes.assignFloatAttribute(node, BaseElementAttributes.ALPHA, this.alpha);\n\n        if (node.hasAttribute(BaseElementAttributes.ROTATION)) {\n            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(BaseElementAttributes.ROTATION)));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.START_ROTATION)) {\n            if (node.getAttribute(BaseElementAttributes.START_ROTATION) === BaseElementAttributes.START_ROTATION) {\n                //this.rotation = Math.floor(Math.random() * 360);\n                this.rotation = Math.floor(Math.random() * 360) / 100;\n            }\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.SKEW_X)) {\n            this.skew.x = this.degrees2radians(parseFloat(node.getAttribute(BaseElementAttributes.SKEW_X)));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.SKEW_Y)) {\n            this.skew.y = this.degrees2radians(parseFloat(node.getAttribute(BaseElementAttributes.SKEW_Y)));\n        }\n\n        /* todo Move scale.x && scale.y into SCALE attribute condition ? */\n        this.scale.x = Attributes.assignFloatAttribute(node, BaseElementAttributes.SCALE_X, this.scale.x);\n        this.scale.y = Attributes.assignFloatAttribute(node, BaseElementAttributes.SCALE_Y, this.scale.y);\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE)) {\n            this.scale.x = parseFloat(node.getAttribute(BaseElementAttributes.SCALE));\n            this.scale.y = parseFloat(node.getAttribute(BaseElementAttributes.SCALE));\n        }\n\n        this.position.x = Attributes.assignIntAttribute(node, BaseElementAttributes.X, this.position.x);\n        this.position.y = Attributes.assignIntAttribute(node, BaseElementAttributes.Y, this.position.y);\n\n        this.pivot.x = Attributes.assignIntAttribute(node, BaseElementAttributes.PIVOT_X, this.pivot.x);\n        this.pivot.y = Attributes.assignIntAttribute(node, BaseElementAttributes.PIVOT_Y, this.pivot.y);\n        this.visible = Attributes.assignBooleanAttribute(node, BaseElementAttributes.VISIBLE, this.visible);\n\n        if (node.hasAttribute(BaseElementAttributes.MASK)) {\n            let next: Element = node.parentElement.firstElementChild;\n            while (next != null) {\n                if (next.nodeName === node.getAttribute(BaseElementAttributes.MASK)) {\n                    let shapeElement: ShapeElement = new ShapeElement();\n                    shapeElement.create(next);\n                    this.mask = shapeElement;\n                }\n                next = next.nextElementSibling;\n            }\n\n            if (this.mask == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(BaseElementAttributes.MASK));\n                }\n            }\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.BITMAP_MASK)) {\n            let image = StageController.getTextureByResourceId(node.getAttribute(BaseElementAttributes.BITMAP_MASK));\n\n            if (image != null) {\n                this.maskSprite = new PIXI.Sprite(image);\n                if (node.hasAttribute(BaseElementAttributes.BITMAP_MASK_X)) {\n                    this.maskSprite.position.x = parseFloat(node.getAttribute(BaseElementAttributes.BITMAP_MASK_X));\n                }\n                if (node.hasAttribute(BaseElementAttributes.BITMAP_MASK_Y)) {\n                    this.maskSprite.position.y = parseFloat(node.getAttribute(BaseElementAttributes.BITMAP_MASK_Y));\n                }\n                if (!node.hasAttribute(BaseElementAttributes.BITMAP_MASK_SHOW)) {\n                    this.addChild(this.maskSprite);\n                    this.mask = this.maskSprite;\n                }\n                this.maskSprite.scale.x = node.hasAttribute(BaseElementAttributes.BITMAP_MASK_SCALE_X)\n                    ? parseFloat(node.getAttribute(BaseElementAttributes.BITMAP_MASK_SCALE_X))\n                    : node.hasAttribute(BaseElementAttributes.BITMAP_MASK_SCALE)\n                      ? parseFloat(node.getAttribute(BaseElementAttributes.BITMAP_MASK_SCALE))\n                      : 1;\n                this.maskSprite.scale.y = node.hasAttribute(BaseElementAttributes.BITMAP_MASK_SCALE_Y)\n                    ? parseFloat(node.getAttribute(BaseElementAttributes.BITMAP_MASK_SCALE_Y))\n                    : node.hasAttribute(BaseElementAttributes.BITMAP_MASK_SCALE)\n                      ? parseFloat(node.getAttribute(BaseElementAttributes.BITMAP_MASK_SCALE))\n                      : 1;\n            } else {\n                if (DEBUG) {\n                    this.log(\n                        \"ERROR\" +\n                            this.componentName +\n                            \" no image with name for mask: \" +\n                            node.getAttribute(BaseElementAttributes.BITMAP_MASK),\n                    );\n                }\n            }\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.TWEEN_ENGINE)) {\n            this._tweenEngine = node.getAttribute(BaseElementAttributes.TWEEN_ENGINE);\n        }\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.createElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     * @param node\n     */\n    public updateByNode(node: Element): void {\n        if (!node) {\n            this.logError(\"No node specified for element update!\");\n            return;\n        }\n\n        if (DEBUG) {\n            if (\n                node.hasAttribute(BaseElementAttributes.DEBUG) &&\n                node.getAttribute(BaseElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        if (\n            !node.hasAttribute(BaseElementAttributes.TWEEN_PERSISTENT) ||\n            StringUtils.parseBoolean(node.getAttribute(BaseElementAttributes.TWEEN_PERSISTENT)) != true\n        ) {\n            Tweens.removeTweens(this);\n        }\n\n        this.visible = Attributes.assignBooleanAttribute(node, BaseElementAttributes.VISIBLE, this.visible);\n        this.alpha = Attributes.assignFloatAttribute(node, BaseElementAttributes.ALPHA, this.alpha);\n        this.pivot.x = Attributes.assignIntAttribute(node, BaseElementAttributes.PIVOT_X, this.pivot.x);\n        this.pivot.y = Attributes.assignIntAttribute(node, BaseElementAttributes.PIVOT_Y, this.pivot.y);\n\n        if (node.hasAttribute(BaseElementAttributes.ROTATION)) {\n            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(BaseElementAttributes.ROTATION)));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.START_ROTATION)) {\n            if (node.getAttribute(BaseElementAttributes.START_ROTATION) === BaseElementAttributes.START_ROTATION) {\n                this.rotation = Math.floor(Math.random() * 360) / 100;\n            }\n        }\n\n        this.position.x = Attributes.assignIntAttribute(node, BaseElementAttributes.X, this.position.x);\n        this.position.y = Attributes.assignIntAttribute(node, BaseElementAttributes.Y, this.position.y);\n\n        if (node.hasAttribute(BaseElementAttributes.SKEW_X)) {\n            this.skew.x = this.degrees2radians(parseFloat(node.getAttribute(BaseElementAttributes.SKEW_X)));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.SKEW_Y)) {\n            this.skew.y = this.degrees2radians(parseFloat(node.getAttribute(BaseElementAttributes.SKEW_Y)));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE_X)) {\n            this.scale.x = parseFloat(node.getAttribute(BaseElementAttributes.SCALE_X));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE_Y)) {\n            this.scale.y = parseFloat(node.getAttribute(BaseElementAttributes.SCALE_Y));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE)) {\n            this.scale.x = parseFloat(node.getAttribute(BaseElementAttributes.SCALE));\n            this.scale.y = parseFloat(node.getAttribute(BaseElementAttributes.SCALE));\n        }\n\n        this.runAlphaTween(node);\n        this.runPositionTween(node);\n        this.runRotationTween(node);\n        this.runScaleTween(node);\n        this.runSkewTween(node);\n        this.runTween(node);\n\n        this.updateByNodeInherited(node); // for ProtonElement updating\n    }\n\n    private updateByNodeInherited(node: Element): void {}\n\n    /**\n     * Runs the alpha tween\n     * @method runAlphaTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runAlphaTween(node: Element): boolean {\n        if (!node.hasAttribute(BaseElementAttributes.ALPHA_TWEEN)) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"alpha\");\n\n        let alphaTween: Array<number>;\n\n        let alphaTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.ALPHA_TWEEN_POSITION,\n            null,\n        );\n\n        if (alphaTweenPosition == BaseElementAttributes.ALPHA_TWEEN_POSITION_VALUE.RELATIVE) {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ALPHA_TWEEN)).map(\n                (value) => value + this.alpha,\n            );\n        } else if (alphaTweenPosition == BaseElementAttributes.ALPHA_TWEEN_POSITION_VALUE.SMOOTH) {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ALPHA_TWEEN));\n            if (alphaTween.length) {\n                alphaTween[0] = this.alpha;\n            }\n        } else {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ALPHA_TWEEN));\n        }\n\n        const alphas: Array<number> = alphaTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(node, BaseElementAttributes.ALPHA_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            BaseElementAttributes.ALPHA_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(BaseElementAttributes.ALPHA_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(BaseElementAttributes.ALPHA_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            BaseElementAttributes.ALPHA_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(BaseElementAttributes.ALPHA_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ALPHA_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    /**\n     * Runs the position tween\n     * @method runPositionTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runPositionTween(node: Element): boolean {\n        if (\n            !node.hasAttribute(BaseElementAttributes.POSITION_TWEEN_X) ||\n            !node.hasAttribute(BaseElementAttributes.POSITION_TWEEN_Y)\n        ) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"position\");\n\n        let positionTweenX: Array<number>;\n        let positionTweenY: Array<number>;\n\n        let positionTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.POSITION_TWEEN_POSITION,\n            null,\n        );\n        if (positionTweenPosition == BaseElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_X)).map(\n                (value) => value + this.position.x,\n            );\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_Y)).map(\n                (value) => value + this.position.y,\n            );\n        } else if (positionTweenPosition == BaseElementAttributes.POSITION_TWEEN_POSITION_VALUE.SMOOTH) {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_X));\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_Y));\n            if (positionTweenX.length) {\n                positionTweenX[0] = this.position.x;\n            }\n            if (positionTweenY.length) {\n                positionTweenY[0] = this.position.y;\n            }\n        } else {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_X));\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_Y));\n        }\n\n        const tweenX: Array<number> = positionTweenX || [];\n        const tweenY: Array<number> = positionTweenY || [];\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.POSITION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            BaseElementAttributes.POSITION_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(BaseElementAttributes.POSITION_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(BaseElementAttributes.POSITION_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            BaseElementAttributes.POSITION_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(BaseElementAttributes.POSITION_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.positionTween(this, { tweenX, tweenY, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    public runSkewTween(node: Element): boolean {\n        if (\n            !node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_X) &&\n            !node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_Y)\n        ) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"skew\");\n\n        let skewTweenX: Array<number>;\n        let skewTweenY: Array<number>;\n\n        let skewTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.SKEW_TWEEN_POSITION,\n            null,\n        );\n        if (skewTweenPosition == BaseElementAttributes.SKEW_TWEEN_POSITION_VALUE.RELATIVE) {\n            skewTweenX = node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_X)\n                ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SKEW_TWEEN_X)).map(\n                      (value) => Tweens.degrees2radians(value) + this.skew.x,\n                  )\n                : null;\n            skewTweenY = node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_Y)\n                ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SKEW_TWEEN_Y)).map(\n                      (value) => Tweens.degrees2radians(value) + this.skew.y,\n                  )\n                : null;\n        } else if (skewTweenPosition == BaseElementAttributes.SKEW_TWEEN_POSITION_VALUE.SMOOTH) {\n            skewTweenX = node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_X)\n                ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SKEW_TWEEN_X)).map((value) =>\n                      Tweens.degrees2radians(value),\n                  )\n                : null;\n            skewTweenY = node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_Y)\n                ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SKEW_TWEEN_Y)).map((value) =>\n                      Tweens.degrees2radians(value),\n                  )\n                : null;\n            if (skewTweenX && skewTweenX.length) {\n                skewTweenX[0] = this.skew.x;\n            }\n            if (skewTweenY && skewTweenY.length) {\n                skewTweenY[0] = this.skew.y;\n            }\n        } else {\n            skewTweenX = node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_X)\n                ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SKEW_TWEEN_X)).map((value) =>\n                      Tweens.degrees2radians(value),\n                  )\n                : null;\n            skewTweenY = node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_Y)\n                ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SKEW_TWEEN_Y)).map((value) =>\n                      Tweens.degrees2radians(value),\n                  )\n                : null;\n        }\n\n        const tweenX: Array<number> = skewTweenX || [];\n        const tweenY: Array<number> = skewTweenY || [];\n        const tweenEase: string = Attributes.assignStringAttribute(node, BaseElementAttributes.SKEW_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            BaseElementAttributes.SKEW_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(BaseElementAttributes.SKEW_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(node, BaseElementAttributes.SKEW_TWEEN_LOOP, null);\n        const keyTimes: Array<number> = node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SKEW_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.skewTween(this, { tweenX, tweenY, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    /**\n     * Runs the rotation tween\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runRotationTween(node: Element): boolean {\n        if (!node.hasAttribute(BaseElementAttributes.ROTATION_TWEEN)) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"rotation\");\n\n        let rotationTween: Array<number>;\n\n        let rotationTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.ROTATION_TWEEN_POSITION,\n            null,\n        );\n        if (rotationTweenPosition == BaseElementAttributes.ROTATION_TWEEN_POSITION_VALUE.RELATIVE) {\n            rotationTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ROTATION_TWEEN)).map(\n                (value) => value + Tweens.radians2degrees(this.rotation),\n            );\n        } else if (rotationTweenPosition == BaseElementAttributes.ROTATION_TWEEN_POSITION_VALUE.SMOOTH) {\n            rotationTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ROTATION_TWEEN));\n            if (rotationTween.length) {\n                rotationTween[0] = Tweens.radians2degrees(this.rotation);\n            }\n        } else {\n            rotationTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ROTATION_TWEEN));\n        }\n\n        const degrees: Array<number> = rotationTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.ROTATION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            BaseElementAttributes.ROTATION_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(BaseElementAttributes.ROTATION_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(BaseElementAttributes.ROTATION_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            BaseElementAttributes.ROTATION_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(BaseElementAttributes.ROTATION_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ROTATION_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    /**\n     * Runs the scale tween\n     *\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runScaleTween(node: Element): boolean {\n        if (\n            !node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_X) &&\n            !node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_Y) &&\n            !node.hasAttribute(BaseElementAttributes.SCALE_TWEEN)\n        ) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"scale\");\n\n        let scaleTweenX: Array<number>;\n        let scaleTweenY: Array<number>;\n        let scaleTween: Array<PIXI.Point>;\n        let tweenValues: Array<PIXI.Point> = [];\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_X)) {\n            scaleTweenX = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SCALE_TWEEN_X));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_Y)) {\n            scaleTweenY = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SCALE_TWEEN_Y));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE_TWEEN)) {\n            scaleTween = BaseElement._getPointsFromPointsAttribute(\n                node.getAttribute(BaseElementAttributes.SCALE_TWEEN),\n            ) as Array<PIXI.Point>;\n        }\n\n        let scaleTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.SCALE_TWEEN_POSITION,\n            null,\n        );\n\n        if (scaleTween && scaleTween.length) {\n            if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                tweenValues = scaleTween.map((value: PIXI.Point) => {\n                    return {\n                        x: value.x + this.scale.x,\n                        y: value.y + this.scale.y,\n                    } as PIXI.Point;\n                });\n            } else if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                tweenValues = scaleTween;\n                if (tweenValues.length) {\n                    tweenValues[0].x = this.scale.x;\n                    tweenValues[0].y = this.scale.y;\n                }\n            } else {\n                tweenValues = scaleTween;\n            }\n        } else if (scaleTweenX && scaleTweenY) {\n            if (scaleTweenX.length === scaleTweenY.length) {\n                if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                    tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                        return {\n                            x: scaleXValue + this.scale.x,\n                            y: scaleTweenY[i] + this.scale.y,\n                        } as PIXI.Point;\n                    });\n                } else if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                    tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                        return {\n                            x: scaleXValue,\n                            y: scaleTweenY[i],\n                        } as PIXI.Point;\n                    });\n                    if (tweenValues.length) {\n                        tweenValues[0].x = this.scale.x;\n                        tweenValues[0].y = this.scale.y;\n                    }\n                } else {\n                    tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                        return {\n                            x: scaleXValue,\n                            y: scaleTweenY[i],\n                        } as PIXI.Point;\n                    });\n                }\n            }\n        } else if (scaleTweenX) {\n            if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue + this.scale.x,\n                        y: this.scale.y,\n                    } as PIXI.Point;\n                });\n            } else if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue,\n                        y: this.scale.y,\n                    } as PIXI.Point;\n                });\n                if (tweenValues.length) {\n                    tweenValues[0].x = this.scale.x;\n                }\n            } else {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue,\n                        y: this.scale.y,\n                    } as PIXI.Point;\n                });\n            }\n        } else if (scaleTweenY) {\n            if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                    return {\n                        x: this.scale.x,\n                        y: scaleYValue + this.scale.y,\n                    } as PIXI.Point;\n                });\n            } else if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                    return {\n                        x: this.scale.x,\n                        y: scaleYValue,\n                    } as PIXI.Point;\n                });\n                if (tweenValues.length) {\n                    tweenValues[0].y = this.scale.y;\n                }\n            } else {\n                tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                    return {\n                        x: this.scale.x,\n                        y: scaleYValue,\n                    } as PIXI.Point;\n                });\n            }\n        } else {\n            return false;\n        }\n\n        const tweenEase: string = Attributes.assignStringAttribute(node, BaseElementAttributes.SCALE_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            BaseElementAttributes.SCALE_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(BaseElementAttributes.SCALE_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            BaseElementAttributes.SCALE_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SCALE_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    public runTween(node: Element): boolean {\n        if (node.hasAttribute(TweensAttributes.TWEEN)) {\n            let tweens: Array<string> = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN));\n\n            for (let i: number = 0; i < tweens.length; i++) {\n                //return if there are no values to tween\n                if (!node.hasAttribute(TweensAttributes.TWEEN_VALUES + i)) {\n                    return false;\n                }\n\n                let tween: string = tweens[i];\n\n                const tweenValues: Array<number> = this.formatTweenValues(\n                    tween,\n                    ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_VALUES + i)),\n                );\n                const tweenDuration: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_DURATION + i) || \"120\",\n                );\n                const tweenEase: Array<string> = ArrayUtils.stringArray(\n                    node.getAttribute(TweensAttributes.TWEEN_EASE + i) || \"linear\",\n                );\n                const tweenDelay: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_DELAY + i) || \"0\",\n                );\n                const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n                    node,\n                    TweensAttributes.TWEEN_LOOP + i,\n                    null,\n                );\n\n                Tweens.removeTweens(this, tween);\n\n                if (tween == \"scale\") {\n                    tween = \"scale.x\";\n                    tweens[i] = \"scale.y\";\n                    i--;\n                }\n\n                Tweens.customTween(this, { tween, tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n            }\n        }\n\n        return false;\n    }\n\n    private formatTweenValues(tween: string, values: Array<string>): Array<number> {\n        let tweenValues: Array<number> = [];\n\n        if (tween === \"scale\") {\n            tween = \"scale.x\";\n        }\n        let property: Array<string> = tween.split(\".\");\n        let value: number;\n\n        for (let i: number = 0; i < values.length; i++) {\n            let current = values[i];\n            switch (current[current.length - 1]) {\n                case \"c\": //if we want current value\n                    if (property.length == 1) {\n                        value = this[property[0]];\n                        if (property[0] === \"rotation\") {\n                            value = this.radians2degrees(value);\n                        }\n                        tweenValues.push(value);\n                    } else if (property.length == 2) {\n                        tweenValues.push(this[property[0]][property[1]]);\n                    }\n\n                    break;\n                case \"+\":\n                    value = parseFloat(current.slice(0, -1));\n                    if (tweenValues.length > 0) {\n                        value = tweenValues[tweenValues.length - 1] + value;\n                    }\n                    tweenValues.push(value);\n                    break;\n                case \"-\":\n                    value = parseFloat(current.slice(0, -1));\n                    if (tweenValues.length > 0) {\n                        value = tweenValues[tweenValues.length - 1] - value;\n                    }\n                    tweenValues.push(value);\n                    break;\n                default:\n                    tweenValues.push(parseFloat(current));\n            }\n        }\n\n        return tweenValues;\n    }\n\n    /**\n     * Converts string from \"points attribute\" into array of points. E.g. \"(1,6);(5,2);2;(2,4)\". Point can be specified as single value for both axex.\n     * @method _getPointsFromPointsAttribute\n     * @return Array<PIXI.Points>\n     */\n    protected static _getPointsFromPointsAttribute(pointsString: string): Array<{ x: number; y: number }> {\n        if (!pointsString) {\n            return [];\n        }\n\n        return pointsString\n            .replace(/\\s/g, \"\")\n            .split(\";\")\n            .map((valuesPair: string) =>\n                /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair],\n            )\n            .map((valuesPair: Array<string>) => {\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\n            });\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    /**\n     * Log error into console\n     * @param s\n     */\n    protected logError(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.errorGroup(compName, s);\n        }\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    public degrees2radians(degrees: number): number {\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    public radians2degrees(radians: number): number {\n        return radians * (180 / Math.PI);\n    }\n}\n\nexport const BaseElementAttributes = {\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\n    /* Array of offsets of individual tween values relative to total duration\n     * e.g. 0;0.25;1 with duration 100 meaning first value at T=0, second at T=25, last at T=100\n     */\n    ALPHA_TWEEN_KEY_TIMES: \"AlphaTweenKeyTimes\",\n    ALPHA_TWEEN_POSITION: \"AlphaTweenPosition\",\n    ALPHA_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\" /* values are taken as they are */,\n        RELATIVE: \"relative\" /* values are offset by initial value */,\n        SMOOTH: \"smooth\" /* first value is replaced with initial value */,\n    },\n    /*\n     * A ImageElement instance that defines a mask for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property BitmapMask\n     * @type string\n     * @default null\n     */\n    BITMAP_MASK: \"BitmapMask\",\n    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\n    BITMAP_MASK_X: \"BitmapMaskX\",\n    BITMAP_MASK_Y: \"BitmapMaskY\",\n    BITMAP_MASK_SCALE_X: \"BitmapMaskScaleX\",\n    BITMAP_MASK_SCALE_Y: \"BitmapMaskScaleY\",\n    BITMAP_MASK_SCALE: \"BitmapMaskScale\",\n    DEBUG: \"Debug\",\n    /*\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property Mask\n     * @type ShapeElement\n     * @default null\n     */\n    MASK: \"Mask\",\n    /*\n     * X pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotX\n     * @type number\n     * @default null\n     */\n    PIVOT_X: \"PivotX\",\n    /*\n     * Y pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotY\n     * @type number\n     * @default null\n     */\n    PIVOT_Y: \"PivotY\",\n    POSITION_TWEEN_X: \"PositionTweenX\",\n    POSITION_TWEEN_Y: \"PositionTweenY\",\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\n    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\n    POSITION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n        SMOOTH: \"smooth\",\n    },\n    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\n    /* Array of offsets of individual tween values relative to total duration\n     * e.g. 0;0.25;1 with duration 100 meaning first value at T=0, second at T=25, last at T=100\n     */\n    POSITION_TWEEN_KEY_TIMES: \"PositionTweenKeyTimes\",\n    /*\n     *\n     */\n    ROTATION_TWEEN: \"RotationTween\",\n    /**\n     * @deprecated Use ROTATION_TWEEN instead ROTATION_TWEEN_DEGREES\n     */\n    ROTATION_TWEEN_DEGREES: \"RotationTweenDegrees\",\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\n    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\n    /* Array of offsets of individual tween values relative to total duration\n     * e.g. 0;0.25;1 with duration 100 meaning first value at T=0, second at T=25, last at T=100\n     */\n    ROTATION_TWEEN_KEY_TIMES: \"RotationTweenKeyTimes\",\n    ROTATION_TWEEN_POSITION: \"RotationTweenPosition\",\n    ROTATION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\" /* values are taken as they are */,\n        RELATIVE: \"relative\" /* values are offset by initial value */,\n        SMOOTH: \"smooth\" /* first value is replaced with initial value */,\n    },\n    /*\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    SCALE_TWEEN: \"ScaleTween\",\n    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\n    /**\n     * @deprecated Use SCALE_TWEEN instead SCALE_TWEEN_DURATION\n     */\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\n    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\n    /* Array of offsets of individual tween values relative to total duration\n     * e.g. 0;0.25;1 with duration 100 meaning first value at T=0, second at T=25, last at T=100\n     */\n    SCALE_TWEEN_KEY_TIMES: \"ScaleTweenKeyTimes\",\n    SCALE_TWEEN_POSITION: \"ScaleTweenPosition\",\n    SCALE_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\" /* values are taken as they are */,\n        RELATIVE: \"relative\" /* values are offset by initial value */,\n        SMOOTH: \"smooth\" /* first value is replaced with initial value */,\n    },\n    SCALE_TWEEN_X: \"ScaleTweenX\",\n    SCALE_TWEEN_Y: \"ScaleTweenY\",\n    /*\n     * The factor to stretch this display object horizontally.\n     * For example, setting scaleX to 2 will stretch the display object to twice its nominal width. To horizontally flip an object, set the scale to a negative number.\n     * @property ScaleX\n     * @type Number\n     * @default 1\n     */\n    /*\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n     * @property Scale\n     * @type Number\n     * @default 1\n     */\n    SCALE: \"Scale\",\n    SCALE_X: \"ScaleX\",\n    /*\n     * The factor to stretch this display object vertically.\n     * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n     * @property ScaleY\n     * @type Number\n     * @default 1\n     */\n    SCALE_Y: \"ScaleY\",\n\n    SKEW_X: \"SkewX\",\n    SKEW_Y: \"SkewY\",\n\n    SKEW_TWEEN_X: \"SkewTweenX\",\n    SKEW_TWEEN_Y: \"SkewTweenY\",\n    SKEW_TWEEN_EASE: \"SkewTweenEase\",\n    SKEW_TWEEN_DURATION: \"SkewTweenDuration\",\n    SKEW_TWEEN_DELAY: \"SkewTweenDelay\",\n    SKEW_TWEEN_POSITION: \"SkewTweenPosition\",\n    SKEW_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n        SMOOTH: \"smooth\",\n    },\n    SKEW_TWEEN_LOOP: \"SkewTweenLoop\",\n    SKEW_TWEEN_KEY_TIMES: \"SkewTweenKeyTimes\",\n\n    /*\n     * Random rotation in degrees for this display object.\n     * @property StartRotation\n     * @type Number\n     * @default null\n     */\n    START_ROTATION: \"StartRotation\",\n    TWEEN_ENGINE: \"TweenEngine\",\n    /*\n     * Indicates currently running tweens should not be interrupted during updateByNode call\n     * @property TweenPersistent\n     * @type Boolean\n     * @default false\n     */\n    TWEEN_PERSISTENT: \"TweenPersistent\",\n    /*\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\n     * @property Visible\n     * @type Boolean\n     * @default true\n     */\n    VISIBLE: \"Visible\",\n    /*\n     * X (horizontal) position of the display object, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /*\n     * Y (vertical) position of the display object, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/BaseElement.ts\n **/","import { Logger, Utils, StringUtils, ArrayUtils, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { Tweens, TweensAttributes } from \"../../Effects/Tweens\";\nimport { SwitchStyle } from \"../Styles/SwitchStyle\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { IElement } from \"../Interfaces/IElement\";\nimport { Attributes } from \"../../../Utils/Attributes\";\nimport { BaseElementAttributes } from \"./BaseElement\";\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\n\n/**\n * ShapeElement allows you to display vector art in the display list.\n * Example:\n *   <ShapeElement Class=\"ShapeElement\" X=\"0\" Y=\"0\" Width=\"100\" Height=\"100\" Color=\"FF0000\" Mask=\"ShapeElement\" />\n *\n * @class ShapeElement\n * @extends PIXI.Graphics\n * @implements IElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ShapeElement extends PIXI.Graphics implements IElement {\n    private _uid: string;\n    private _width: number;\n    private _height: number;\n    protected _x: number = 0;\n    protected _y: number = 0;\n    public _lineWidth: number;\n    public _lineColor: number;\n    public _lineAlpha: number;\n    public _fillAlpha: number;\n    public _color: number = 0xff0000;\n\n    protected style: SwitchStyle;\n    public _tweenEngine: string;\n\n    constructor() {\n        super();\n\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\n    }\n\n    get tweenEngine(): string {\n        return this._tweenEngine;\n    }\n\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        Tweens.removeTweens(this);\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        Tweens.removeTweens(this);\n\n        if (this.name == null) {\n            this.name = node.nodeName;\n        }\n\n        if (node.hasAttribute(\"Style\")) {\n            this.style = <SwitchStyle>StyleManager.Styles[node.getAttribute(ShapeElementAttributes.STYLE)];\n            if (this.style != null) {\n                //console.log('test shapeElement style');\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no style with name: \" + node.getAttribute(ShapeElementAttributes.STYLE));\n                }\n            }\n        }\n\n        if (!this.updateByNode(node)) {\n            this.redraw();\n        }\n    }\n\n    public redraw(): void {\n        this.clear();\n        this.beginFill(this._color, this._fillAlpha);\n        this.lineStyle(this._lineWidth, this._lineColor, this._lineAlpha);\n        this.drawRect(this._x, this._y, this._width, this._height);\n        this.endFill();\n    }\n\n    /**\n     * @todo Najst miesta, kde sa vola metoda create(). Ak by bolo vhodne, aby sa tam volala metoda update(), treba volat ju. Tomu treba prisposobit aj obsah metody.\n     *\n     * @param node\n     */\n    public updateByNode(node: Element): boolean {\n        let redraw: boolean = false;\n\n        if (node.hasAttribute(ShapeElementAttributes.LINE_COLOR)) {\n            this._lineColor = parseInt(node.getAttribute(ShapeElementAttributes.LINE_COLOR), 16);\n            redraw = true;\n        }\n        if (node.hasAttribute(ShapeElementAttributes.LINE_WIDTH)) {\n            this._lineWidth = parseInt(node.getAttribute(ShapeElementAttributes.LINE_WIDTH));\n            redraw = true;\n        }\n        if (node.hasAttribute(ShapeElementAttributes.LINE_ALPHA)) {\n            this._lineAlpha = parseInt(node.getAttribute(ShapeElementAttributes.LINE_ALPHA));\n            redraw = true;\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.COLOR)) {\n            this._color = parseInt(node.getAttribute(ShapeElementAttributes.COLOR), 16);\n            redraw = true;\n        }\n        if (node.hasAttribute(ShapeElementAttributes.FILL_ALPHA)) {\n            this._fillAlpha = parseInt(node.getAttribute(ShapeElementAttributes.FILL_ALPHA));\n            redraw = true;\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.BLEND_MODE)) {\n            this.blendMode = CustomUtils.getBlendMode(parseInt(node.getAttribute(ShapeElementAttributes.BLEND_MODE)));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.VISIBLE)) {\n            this.visible = StringUtils.parseBoolean(node.getAttribute(ShapeElementAttributes.VISIBLE));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.POSITION_X)) {\n            this.position.x = parseInt(node.getAttribute(ShapeElementAttributes.POSITION_X));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.POSITION_Y)) {\n            this.position.y = parseInt(node.getAttribute(ShapeElementAttributes.POSITION_Y));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.X)) {\n            this._x = parseInt(node.getAttribute(ShapeElementAttributes.X));\n            redraw = true;\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.Y)) {\n            this._y = parseInt(node.getAttribute(ShapeElementAttributes.Y));\n            redraw = true;\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.WIDTH)) {\n            this._width = parseInt(node.getAttribute(ShapeElementAttributes.WIDTH));\n            redraw = true;\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.HEIGHT)) {\n            this._height = parseInt(node.getAttribute(ShapeElementAttributes.HEIGHT));\n            redraw = true;\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.ALPHA)) {\n            this.alpha = parseFloat(node.getAttribute(ShapeElementAttributes.ALPHA));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.PIVOT_X)) {\n            this.pivot.x = parseFloat(node.getAttribute(ShapeElementAttributes.PIVOT_X));\n        }\n        if (node.hasAttribute(ShapeElementAttributes.PIVOT_Y)) {\n            this.pivot.y = parseFloat(node.getAttribute(ShapeElementAttributes.PIVOT_Y));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.SCALE)) {\n            this.scale.x = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE));\n            this.scale.y = this.scale.x;\n        }\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_X)) {\n            this.scale.x = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE_X));\n        }\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_Y)) {\n            this.scale.y = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE_Y));\n        }\n\n        if (node.hasAttribute(ShapeElementAttributes.MASK)) {\n            let next: Element = node.parentElement.firstElementChild;\n            while (next != null) {\n                if (next.nodeName === node.getAttribute(ShapeElementAttributes.MASK)) {\n                    let shapeElement: ShapeElement = new ShapeElement();\n                    shapeElement.create(next);\n                    this.mask = shapeElement;\n                }\n                next = next.nextElementSibling;\n            }\n\n            if (this.mask == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(ShapeElementAttributes.MASK));\n                }\n            }\n        }\n\n        this.runAlphaTween(node);\n        this.runPositionTween(node);\n        this.runRotationTween(node);\n        this.runScaleTween(node);\n        this.runSkewTween(node);\n        this.runTween(node);\n\n        if (redraw) {\n            this.redraw();\n        }\n        return redraw;\n    }\n\n    /**\n     * Runs the alpha tween\n     * @method runAlphaTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runAlphaTween(node: Element): boolean {\n        if (!node.hasAttribute(BaseElementAttributes.ALPHA_TWEEN)) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"alpha\");\n\n        let alphaTween: Array<number>;\n\n        let alphaTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.ALPHA_TWEEN_POSITION,\n            null,\n        );\n\n        if (alphaTweenPosition == BaseElementAttributes.ALPHA_TWEEN_POSITION_VALUE.RELATIVE) {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ALPHA_TWEEN)).map(\n                (value) => value + this.alpha,\n            );\n        } else if (alphaTweenPosition == BaseElementAttributes.ALPHA_TWEEN_POSITION_VALUE.SMOOTH) {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ALPHA_TWEEN));\n            if (alphaTween.length) {\n                alphaTween[0] = this.alpha;\n            }\n        } else {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ALPHA_TWEEN));\n        }\n\n        const alphas: Array<number> = alphaTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(node, BaseElementAttributes.ALPHA_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            BaseElementAttributes.ALPHA_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(BaseElementAttributes.ALPHA_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(BaseElementAttributes.ALPHA_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            BaseElementAttributes.ALPHA_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(BaseElementAttributes.ALPHA_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ALPHA_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    /**\n     * Runs the position tween\n     * @method runPositionTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runPositionTween(node: Element): boolean {\n        if (\n            !node.hasAttribute(BaseElementAttributes.POSITION_TWEEN_X) ||\n            !node.hasAttribute(BaseElementAttributes.POSITION_TWEEN_Y)\n        ) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"position\");\n\n        let positionTweenX: Array<number>;\n        let positionTweenY: Array<number>;\n\n        let positionTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.POSITION_TWEEN_POSITION,\n            null,\n        );\n        if (positionTweenPosition == BaseElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_X)).map(\n                (value) => value + this.position.x,\n            );\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_Y)).map(\n                (value) => value + this.position.y,\n            );\n        } else if (positionTweenPosition == BaseElementAttributes.POSITION_TWEEN_POSITION_VALUE.SMOOTH) {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_X));\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_Y));\n            if (positionTweenX.length) {\n                positionTweenX[0] = this.position.x;\n            }\n            if (positionTweenY.length) {\n                positionTweenY[0] = this.position.y;\n            }\n        } else {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_X));\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_Y));\n        }\n\n        const tweenX: Array<number> = positionTweenX || [];\n        const tweenY: Array<number> = positionTweenY || [];\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.POSITION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            BaseElementAttributes.POSITION_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(BaseElementAttributes.POSITION_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(BaseElementAttributes.POSITION_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            BaseElementAttributes.POSITION_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(BaseElementAttributes.POSITION_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.positionTween(this, { tweenX, tweenY, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    public runSkewTween(node: Element): boolean {\n        if (\n            !node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_X) &&\n            !node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_Y)\n        ) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"skew\");\n\n        let skewTweenX: Array<number>;\n        let skewTweenY: Array<number>;\n\n        let skewTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.SKEW_TWEEN_POSITION,\n            null,\n        );\n        if (skewTweenPosition == BaseElementAttributes.SKEW_TWEEN_POSITION_VALUE.RELATIVE) {\n            skewTweenX = node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_X)\n                ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SKEW_TWEEN_X)).map(\n                      (value) => Tweens.degrees2radians(value) + this.skew.x,\n                  )\n                : null;\n            skewTweenY = node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_Y)\n                ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SKEW_TWEEN_Y)).map(\n                      (value) => Tweens.degrees2radians(value) + this.skew.y,\n                  )\n                : null;\n        } else if (skewTweenPosition == BaseElementAttributes.SKEW_TWEEN_POSITION_VALUE.SMOOTH) {\n            skewTweenX = node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_X)\n                ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SKEW_TWEEN_X)).map((value) =>\n                      Tweens.degrees2radians(value),\n                  )\n                : null;\n            skewTweenY = node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_Y)\n                ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SKEW_TWEEN_Y)).map((value) =>\n                      Tweens.degrees2radians(value),\n                  )\n                : null;\n            if (skewTweenX && skewTweenX.length) {\n                skewTweenX[0] = this.skew.x;\n            }\n            if (skewTweenY && skewTweenY.length) {\n                skewTweenY[0] = this.skew.y;\n            }\n        } else {\n            skewTweenX = node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_X)\n                ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SKEW_TWEEN_X)).map((value) =>\n                      Tweens.degrees2radians(value),\n                  )\n                : null;\n            skewTweenY = node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_Y)\n                ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SKEW_TWEEN_Y)).map((value) =>\n                      Tweens.degrees2radians(value),\n                  )\n                : null;\n        }\n\n        const tweenX: Array<number> = skewTweenX || [];\n        const tweenY: Array<number> = skewTweenY || [];\n        const tweenEase: string = Attributes.assignStringAttribute(node, BaseElementAttributes.SKEW_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            BaseElementAttributes.SKEW_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(BaseElementAttributes.SKEW_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(node, BaseElementAttributes.SKEW_TWEEN_LOOP, null);\n        const keyTimes: Array<number> = node.hasAttribute(BaseElementAttributes.SKEW_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SKEW_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.skewTween(this, { tweenX, tweenY, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    /**\n     * Runs the rotation tween\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runRotationTween(node: Element): boolean {\n        if (!node.hasAttribute(BaseElementAttributes.ROTATION_TWEEN)) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"rotation\");\n\n        let rotationTween: Array<number>;\n\n        let rotationTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.ROTATION_TWEEN_POSITION,\n            null,\n        );\n        if (rotationTweenPosition == BaseElementAttributes.ROTATION_TWEEN_POSITION_VALUE.RELATIVE) {\n            rotationTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ROTATION_TWEEN)).map(\n                (value) => value + Tweens.radians2degrees(this.rotation),\n            );\n        } else if (rotationTweenPosition == BaseElementAttributes.ROTATION_TWEEN_POSITION_VALUE.SMOOTH) {\n            rotationTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ROTATION_TWEEN));\n            if (rotationTween.length) {\n                rotationTween[0] = Tweens.radians2degrees(this.rotation);\n            }\n        } else {\n            rotationTween = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ROTATION_TWEEN));\n        }\n\n        const degrees: Array<number> = rotationTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.ROTATION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            BaseElementAttributes.ROTATION_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(BaseElementAttributes.ROTATION_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(BaseElementAttributes.ROTATION_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            BaseElementAttributes.ROTATION_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(BaseElementAttributes.ROTATION_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ROTATION_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    /**\n     * Runs the scale tween\n     *\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runScaleTween(node: Element): boolean {\n        if (\n            !node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_X) &&\n            !node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_Y) &&\n            !node.hasAttribute(BaseElementAttributes.SCALE_TWEEN)\n        ) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"scale\");\n\n        let scaleTweenX: Array<number>;\n        let scaleTweenY: Array<number>;\n        let scaleTween: Array<PIXI.Point>;\n        let tweenValues: Array<PIXI.Point> = [];\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_X)) {\n            scaleTweenX = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SCALE_TWEEN_X));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_Y)) {\n            scaleTweenY = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SCALE_TWEEN_Y));\n        }\n\n        if (node.hasAttribute(BaseElementAttributes.SCALE_TWEEN)) {\n            scaleTween = ShapeElement._getPointsFromPointsAttribute(\n                node.getAttribute(BaseElementAttributes.SCALE_TWEEN),\n            ) as Array<PIXI.Point>;\n        }\n\n        let scaleTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            BaseElementAttributes.SCALE_TWEEN_POSITION,\n            null,\n        );\n\n        if (scaleTween && scaleTween.length) {\n            if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                tweenValues = scaleTween.map((value: PIXI.Point) => {\n                    return {\n                        x: value.x + this.scale.x,\n                        y: value.y + this.scale.y,\n                    } as PIXI.Point;\n                });\n            } else if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                tweenValues = scaleTween;\n                if (tweenValues.length) {\n                    tweenValues[0].x = this.scale.x;\n                    tweenValues[0].y = this.scale.y;\n                }\n            } else {\n                tweenValues = scaleTween;\n            }\n        } else if (scaleTweenX && scaleTweenY) {\n            if (scaleTweenX.length === scaleTweenY.length) {\n                if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                    tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                        return {\n                            x: scaleXValue + this.scale.x,\n                            y: scaleTweenY[i] + this.scale.y,\n                        } as PIXI.Point;\n                    });\n                } else if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                    tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                        return {\n                            x: scaleXValue,\n                            y: scaleTweenY[i],\n                        } as PIXI.Point;\n                    });\n                    if (tweenValues.length) {\n                        tweenValues[0].x = this.scale.x;\n                        tweenValues[0].y = this.scale.y;\n                    }\n                } else {\n                    tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                        return {\n                            x: scaleXValue,\n                            y: scaleTweenY[i],\n                        } as PIXI.Point;\n                    });\n                }\n            }\n        } else if (scaleTweenX) {\n            if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue + this.scale.x,\n                        y: this.scale.y,\n                    } as PIXI.Point;\n                });\n            } else if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue,\n                        y: this.scale.y,\n                    } as PIXI.Point;\n                });\n                if (tweenValues.length) {\n                    tweenValues[0].x = this.scale.x;\n                }\n            } else {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue,\n                        y: this.scale.y,\n                    } as PIXI.Point;\n                });\n            }\n        } else if (scaleTweenY) {\n            if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                    return {\n                        x: this.scale.x,\n                        y: scaleYValue + this.scale.y,\n                    } as PIXI.Point;\n                });\n            } else if (scaleTweenPosition == BaseElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                    return {\n                        x: this.scale.x,\n                        y: scaleYValue,\n                    } as PIXI.Point;\n                });\n                if (tweenValues.length) {\n                    tweenValues[0].y = this.scale.y;\n                }\n            } else {\n                tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                    return {\n                        x: this.scale.x,\n                        y: scaleYValue,\n                    } as PIXI.Point;\n                });\n            }\n        } else {\n            return false;\n        }\n\n        const tweenEase: string = Attributes.assignStringAttribute(node, BaseElementAttributes.SCALE_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            BaseElementAttributes.SCALE_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(BaseElementAttributes.SCALE_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            BaseElementAttributes.SCALE_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SCALE_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    public runTween(node: Element): boolean {\n        if (node.hasAttribute(TweensAttributes.TWEEN)) {\n            let tweens: Array<string> = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN));\n\n            for (let i: number = 0; i < tweens.length; i++) {\n                //return if there are no values to tween\n                if (!node.hasAttribute(TweensAttributes.TWEEN_VALUES + i)) {\n                    return false;\n                }\n\n                let tween: string = tweens[i];\n\n                const tweenValues: Array<number> = this.formatTweenValues(\n                    tween,\n                    ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_VALUES + i)),\n                );\n                const tweenDuration: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_DURATION + i) || \"120\",\n                );\n                const tweenEase: Array<string> = ArrayUtils.stringArray(\n                    node.getAttribute(TweensAttributes.TWEEN_EASE + i) || \"linear\",\n                );\n                const tweenDelay: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_DELAY + i) || \"0\",\n                );\n                const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n                    node,\n                    TweensAttributes.TWEEN_LOOP + i,\n                    null,\n                );\n\n                Tweens.removeTweens(this, tween);\n\n                if (tween == \"scale\") {\n                    tween = \"scale.x\";\n                    tweens[i] = \"scale.y\";\n                    i--;\n                }\n\n                Tweens.customTween(this, { tween, tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n            }\n        }\n\n        return false;\n    }\n\n    private formatTweenValues(tween: string, values: Array<string>): Array<number> {\n        let tweenValues: Array<number> = [];\n\n        if (tween === \"scale\") {\n            tween = \"scale.x\";\n        }\n        let property: Array<string> = tween.split(\".\");\n        let value: number;\n\n        for (let i: number = 0; i < values.length; i++) {\n            let current = values[i];\n            switch (current[current.length - 1]) {\n                case \"c\": //if we want current value\n                    if (property.length == 1) {\n                        value = this[property[0]];\n                        if (property[0] === \"rotation\") {\n                            value = this.radians2degrees(value);\n                        }\n                        tweenValues.push(value);\n                    } else if (property.length == 2) {\n                        tweenValues.push(this[property[0]][property[1]]);\n                    }\n\n                    break;\n                case \"+\":\n                    value = parseFloat(current.slice(0, -1));\n                    if (tweenValues.length > 0) {\n                        value = tweenValues[tweenValues.length - 1] + value;\n                    }\n                    tweenValues.push(value);\n                    break;\n                case \"-\":\n                    value = parseFloat(current.slice(0, -1));\n                    if (tweenValues.length > 0) {\n                        value = tweenValues[tweenValues.length - 1] - value;\n                    }\n                    tweenValues.push(value);\n                    break;\n                default:\n                    tweenValues.push(parseFloat(current));\n            }\n        }\n\n        return tweenValues;\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    public degrees2radians(degrees: number): number {\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    public radians2degrees(radians: number): number {\n        return radians * (180 / Math.PI);\n    }\n\n    /**\n     * Converts string from \"points attribute\" into array of points. E.g. \"(1,6);(5,2);2;(2,4)\". Point can be specified as single value for both axex.\n     * @method _getPointsFromPointsAttribute\n     * @return Array<PIXI.Points>\n     */\n    protected static _getPointsFromPointsAttribute(pointsString: string): Array<{ x: number; y: number }> {\n        if (!pointsString) {\n            return [];\n        }\n\n        return pointsString\n            .replace(/\\s/g, \"\")\n            .split(\";\")\n            .map((valuesPair: string) =>\n                /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair],\n            )\n            .map((valuesPair: Array<string>) => {\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\n            });\n    }\n\n    /**\n     * @property uid - unique identifier of element.\n     * @returns {string}\n     */\n    public get uid(): string {\n        return this._uid;\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public get componentName(): string {\n        return (this as any).__componentName__;\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @retutn void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    /**\n     * Log error into console\n     * @param s\n     */\n    protected logError(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.errorGroup(compName, s);\n        }\n    }\n\n    clone(): ShapeElement {\n        let element: ShapeElement = new ShapeElement();\n        element.removeChildren();\n\n        element._x = this._x;\n        element._y = this._y;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.tint = this.tint;\n        element.blendMode = this.blendMode;\n        element.name = this.name;\n        element._tweenEngine = this._tweenEngine;\n\n        element._width = this._width;\n        element._height = this._height;\n        element._lineWidth = this._lineWidth;\n        element._lineColor = this._lineColor;\n        element._lineAlpha = this._lineAlpha;\n        element._fillAlpha = this._fillAlpha;\n        element._color = this._color;\n\n        element.redraw();\n\n        return element;\n    }\n}\n\nexport const ShapeElementAttributes = {\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n    /*\n     * Tween alpha of this display object with children.\n     * For duration use AlphaTweenDuration (number - frames).\n     * For ease use AlphaTwenEase (string - name of easeing function).\n     * @property AlphaTween\n     * @type Array<numbers> - consist of two values (start alpha; end alpha) or three values (start alpha, middle alpha, end alpha)\n     * @default null\n     */\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    /* Array of offsets of individual tween values relative to total duration\n     * e.g. 0;0.25;1 with duration 100 meaning first value at T=0, second at T=25, last at T=100\n     */\n    ALPHA_TWEEN_KEY_TIMES: \"AlphaTweenKeyTimes\",\n    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\n    ALPHA_TWEEN_POSITION: \"AlphaTweenPosition\",\n    ALPHA_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\" /* values are taken as they are */,\n        RELATIVE: \"relative\" /* values are offset by initial value */,\n        SMOOTH: \"smooth\" /* first value is replaced with initial value */,\n    },\n    BLEND_MODE: \"BlendMode\",\n    /*\n     * Shape's fill color.\n     * @property Color\n     * @type hexadecimal\n     * @default ff0000\n     */\n    COLOR: \"Color\",\n    FILL_ALPHA: \"FillAlpha\",\n    /*\n     * Shape's height.\n     * @property Height\n     * @type number\n     * @default null\n     */\n    HEIGHT: \"Height\",\n    LINE_ALPHA: \"LineAlpha\",\n    LINE_COLOR: \"LineColor\",\n    LINE_WIDTH: \"LineWidth\",\n    /*\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property Mask\n     * @type string\n     * @default null\n     */\n    MASK: \"Mask\",\n    PIVOT_X: \"PivotX\",\n    PIVOT_Y: \"PivotY\",\n\n    SCALE_X: \"ScaleX\",\n    SCALE_Y: \"ScaleY\",\n    SCALE: \"Scale\",\n\n    STYLE: \"Style\",\n    /*\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\n     * @property Visible\n     * @type Boolean\n     * @default true\n     */\n    VISIBLE: \"Visible\",\n    /*\n     * Shape's width.\n     * @property Width\n     * @type number\n     * @default null\n     */\n    WIDTH: \"Width\",\n    /*\n     * The X (horizontal) position of the shape, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /*\n     * The Y (vertical) position of the shape, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n\n    POSITION_X: \"PositionX\",\n    POSITION_Y: \"PositionY\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ShapeElement.ts\n **/","export const ComponentTypes = {\n    Element: \"Element\",\n    DisplayObject: \"DisplayObject\",\n    HtmlElement: \"HtmlElement\",\n    PlayList: \"PlayList\",\n    Song: \"Song\",\n    Style: \"Style\",\n    HtmlStyle: \"HtmlStyle\",\n    Controller: \"Controller\",\n    LinkedElement: \"LinkedElement\",\n    ActionSet: \"ActionSet\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/ComponentTypes.ts\n **/","import { Logger } from \"neo-common\";\nimport { GsapEffects } from \"./GsapEffects\";\nimport { TweenLite, TimelineLite } from \"gsap\";\n\n/**\n * Interface for alpha tween arguments\n */\nexport interface IAlphaTweenOptions {\n    alphas: Array<number>;\n    tweenEase?: string;\n    tweenDuration?: number;\n    tweenDelay?: number;\n    tweenLoop?: boolean;\n    keyTimes?: Array<number>;\n    paused?: boolean;\n\n    callbackType?: string;\n    callbackFunction?: (...params: any[]) => any;\n    callbackParams?: any[];\n    callbackScope?: Object;\n}\n\n/**\n * Interface for rotation tween arguments\n */\nexport interface IRotationTweenOptions {\n    degrees: Array<number>;\n    tweenEase?: string;\n    tweenDuration?: number;\n    tweenDelay?: number;\n    tweenLoop?: boolean;\n    keyTimes?: Array<number>;\n    paused?: boolean;\n\n    callbackType?: string;\n    callbackFunction?: (...params: any[]) => any;\n    callbackParams?: any[];\n    callbackScope?: Object;\n}\n\n/**\n * Interface for scale tween arguments\n *\n * todo Implement increment/decrement/... for tween values. E.g.: {'x': '+1.5'}\n */\nexport interface IScaleTweenOptions {\n    tweenValues: Array<PIXI.Point>;\n    tweenEase?: string;\n    tweenDuration?: number;\n    tweenDelay?: number;\n    tweenLoop?: boolean;\n    keyTimes?: Array<number>;\n    paused?: boolean;\n\n    callbackType?: string;\n    callbackFunction?: (...params: any[]) => any;\n    callbackParams?: any[];\n    callbackScope?: Object;\n}\n\n/**\n * Interface for position tween arguments\n */\nexport interface IPositionTweenOptions {\n    tweenX: Array<number>;\n    tweenY: Array<number>;\n    tweenEase?: string;\n    tweenDuration?: number;\n    tweenDelay?: number;\n    tweenLoop?: boolean;\n    keyTimes?: Array<number>;\n    bezier?: Object;\n    paused?: boolean;\n\n    callbackType?: string;\n    callbackFunction?: (...params: any[]) => any;\n    callbackParams?: any[];\n    callbackScope?: Object;\n}\n\nexport interface ISkewTweenOptions {\n    tweenX: Array<number>;\n    tweenY: Array<number>;\n    tweenEase?: string;\n    tweenDuration?: number;\n    tweenDelay?: number;\n    tweenLoop?: boolean;\n    keyTimes?: Array<number>;\n    bezier?: Object;\n    paused?: boolean;\n\n    callbackType?: string;\n    callbackFunction?: (...params: any[]) => any;\n    callbackParams?: any[];\n    callbackScope?: Object;\n}\n\n/**\n * Interface for color tween arguments\n */\nexport interface IColorTweenOptions {\n    tween: string;\n    tweenValues: Array<number>;\n    tweenEase?: string;\n    tweenDuration?: number;\n    tweenDelay?: number;\n    tweenLoop?: boolean;\n    keyTimes?: Array<number>;\n    bezier?: Object;\n    paused?: boolean;\n\n    callbackType?: string;\n    callbackFunction?: (...params: any[]) => any;\n    callbackParams?: any[];\n    callbackScope?: Object;\n}\n\n/**\n * Interface for tween arguments\n */\nexport interface ITweenOptions {\n    tween: string;\n    tweenValues: Array<number>;\n    tweenEase?: Array<string>;\n    tweenDuration?: Array<number>;\n    tweenDelay?: Array<number>;\n    tweenLoop?: boolean;\n    keyTimes?: Array<number>;\n    bezier?: Object;\n    paused?: boolean;\n\n    callbackType?: string;\n    callbackFunction?: (...params: any[]) => any;\n    callbackParams?: any[];\n    callbackScope?: Object;\n}\n\nexport interface ITweenable {\n    uid: string;\n    name?: string;\n    tweenEngine: string;\n    position: PIXI.Point | PIXI.ObservablePoint;\n    scale: PIXI.Point | PIXI.ObservablePoint;\n    alpha: number;\n    rotation: number;\n    skew: PIXI.Point | PIXI.ObservablePoint;\n}\n\n/**\n *  Tweening elements\n *\n *  todo Remove return types of tween methods (Use void) ? Or return type Tweens for chaining methods?\n *  todo Add timestamp of start into tween?\n *  todo Add check for specific properties of objects?\n *\n *  Example:\n *      Tweens.alphaTween(object, {alphas: alphaTween, tweenEase: ease, tweenDuration: tweenDuration, tweenDelay: tweenDelay});\n *      Tweens.rotationTween(object, {degrees: rotateTweenDegrees, tweenEase: ease, tweenDuration: tweenDuration, tweenDelay: tweenDelay});\n *      Tweens.scaleTween(object, {tweenX: scaleTweenX, tweenY: scaleTweenY, tweenEase: ease, tweenDuration: tweenDuration});\n *\n *  @class Tweens\n */\nexport class Tweens {\n    static tweenArray: Array<TimelineLite> | Array<TweenLite> = [];\n    static uid: string;\n\n    /**\n     * Record tween of object. Used for removing tweens applied on object.\n     *\n     * @param uid\n     * @param tween\n     */\n    static registerTween(uid: string, tween: any): void {\n        if (uid != null) {\n            if (Tweens.tweenArray[uid] != null) {\n                Tweens.tweenArray[uid].push(tween);\n            } else {\n                Tweens.tweenArray[uid] = [tween];\n            }\n        }\n    }\n\n    /**\n     *\n     * @returns {any}\n     * @param uid\n     */\n    static getRegisteredTweens(uid?: string): any {\n        // Array<createjs.Tween> | Array<TimelineLite> | Array<TweenLite>\n        if (uid != null) {\n            if (Tweens.tweenArray[uid] != null) {\n                return {\n                    tweens: Tweens.tweenArray[uid],\n                    length: Tweens.tweenArray[uid].length,\n                };\n            }\n            return null;\n        } else {\n            return {\n                tweens: Tweens.tweenArray,\n                length: Object.keys(Tweens.tweenArray).length,\n            };\n        }\n    }\n\n    /**\n     * Only remove tween from registry\n     * @param uid\n     * @param property\n     */\n    static removeTweenFromRegistry(uid: string, property: string = \"all\"): any {\n        if (uid != null) {\n            if (Tweens.tweenArray[uid] != null) {\n                for (let i: number = Tweens.tweenArray[uid].length - 1; i >= 0; i--) {\n                    let tween: any = Tweens.tweenArray[uid][i];\n\n                    if (tween.name === \"alphaTween\" && (property === \"alpha\" || property === \"all\")) {\n                        Tweens.tweenArray[uid][i] = null;\n                        Tweens.tweenArray[uid].splice(i, 1);\n                    }\n                    if (tween.name === \"positionTween\" && (property === \"position\" || property === \"all\")) {\n                        Tweens.tweenArray[uid][i] = null;\n                        Tweens.tweenArray[uid].splice(i, 1);\n                    }\n                    if (tween.name === \"skewTween\" && (property === \"skew\" || property === \"all\")) {\n                        Tweens.tweenArray[uid][i] = null;\n                        Tweens.tweenArray[uid].splice(i, 1);\n                    }\n                    if (tween.name === \"scaleTween\" && (property === \"scale\" || property === \"all\")) {\n                        Tweens.tweenArray[uid][i] = null;\n                        Tweens.tweenArray[uid].splice(i, 1);\n                    }\n                    if (tween.name === \"rotationTween\" && (property === \"rotation\" || property === \"all\")) {\n                        Tweens.tweenArray[uid][i] = null;\n                        Tweens.tweenArray[uid].splice(i, 1);\n                    }\n                    if (\n                        tween.name === property + \"Tween\" &&\n                        property !== \"alpha\" &&\n                        property !== \"position\" &&\n                        property !== \"scale\" &&\n                        property !== \"rotation\"\n                    ) {\n                        Tweens.tweenArray[uid][i] = null;\n                        Tweens.tweenArray[uid].splice(i, 1);\n                    }\n                }\n            }\n        }\n    }\n\n    // TODO add comment\n    static restartTweens(uid: string): any {\n        if (Tweens.tweenArray[uid] != null) {\n            for (let i: number = 0; i < Tweens.tweenArray[uid].length; i++) {\n                Tweens.tweenArray[uid][i].restart();\n            }\n        }\n    }\n\n    /**\n     * Removes tweens of object.\n     *\n     * Kills tween of object when property is specified.\n     * If no property is specified, all tweens of object will be killed.\n     *\n     * @param object\n     * @param property\n     */\n    static removeTweens<T extends ITweenable>(object: T, property: string = \"all\"): any {\n        if (object !== undefined) {\n            if (object.uid != null) {\n                if (Tweens.tweenArray[object.uid] != null) {\n                    if (Tweens.tweenArray[object.uid].length > 0) {\n                        for (let i: number = Tweens.tweenArray[object.uid].length - 1; i >= 0; i--) {\n                            let tween: any = Tweens.tweenArray[object.uid][i];\n\n                            if (tween.name === \"alphaTween\" && (property === \"alpha\" || property === \"all\")) {\n                                tween.kill({ alpha: true }, object);\n\n                                Tweens.tweenArray[object.uid][i] = null;\n                                Tweens.tweenArray[object.uid].splice(i, 1);\n                            }\n                            if (tween.name === \"positionTween\" && (property === \"position\" || property === \"all\")) {\n                                tween.kill(null, object.position);\n\n                                Tweens.tweenArray[object.uid][i] = null;\n                                Tweens.tweenArray[object.uid].splice(i, 1);\n                            }\n                            if (tween.name === \"skewTween\" && (property === \"skew\" || property === \"all\")) {\n                                tween.kill(null, object.position);\n\n                                Tweens.tweenArray[object.uid][i] = null;\n                                Tweens.tweenArray[object.uid].splice(i, 1);\n                            }\n                            if (tween.name === \"scaleTween\" && (property === \"scale\" || property === \"all\")) {\n                                tween.kill(null, object.scale);\n\n                                Tweens.tweenArray[object.uid][i] = null;\n                                Tweens.tweenArray[object.uid].splice(i, 1);\n                            }\n                            if (tween.name === \"rotationTween\" && (property === \"rotation\" || property === \"all\")) {\n                                tween.kill({ rotation: true }, object);\n\n                                Tweens.tweenArray[object.uid][i] = null;\n                                Tweens.tweenArray[object.uid].splice(i, 1);\n                            }\n                            if (\n                                tween.name === property + \"Tween\" &&\n                                property !== \"alpha\" &&\n                                property !== \"position\" &&\n                                property !== \"scale\" &&\n                                property !== \"rotation\"\n                            ) {\n                                tween.kill({ [property]: true }, object);\n\n                                Tweens.tweenArray[object.uid][i] = null;\n                                Tweens.tweenArray[object.uid].splice(i, 1);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Applies alpha tween on object.\n     *\n     * @param object\n     * @param options\n     */\n    static alphaTween<T extends ITweenable>(object: T, options: IAlphaTweenOptions): any {\n        if (options.alphas.length < 2) {\n            return;\n        }\n\n        object.alpha = options.alphas.shift();\n        if (options.keyTimes && options.keyTimes.length) {\n            options.keyTimes = options.keyTimes.slice();\n            options.keyTimes.shift();\n        }\n\n        let tween: any;\n        if (options.alphas.length === 1) {\n            tween = GsapEffects.alphaTween_Tweenlite(object, options);\n        } else if (options.alphas.length > 1) {\n            tween = GsapEffects.alphaTween_TimelineLite(object, options);\n        }\n\n        tween.name = \"alphaTween\";\n        tween.objectName = object.name;\n        this.registerTween(object.uid, tween);\n\n        return tween;\n    }\n\n    /**\n     * Applies position tween on object.\n     * Number of positions points X/Y is variable. Count of X's and Y's must be equal.\n     *\n     * todo Add check if object is not null\n     * @param object: ImageElement | AnimationElement | BaseElement\n     * @param options: PositionTweenOptions\n     */\n    static positionTween<T extends ITweenable>(object: T, options: IPositionTweenOptions): any {\n        /* Todo Implement ability have only one position option. X or Y. */\n        if ((!options.tweenX && !options.tweenY) || (options.tweenX.length < 2 && options.tweenY.length < 2)) {\n            if (DEBUG) {\n                this.log(\"ERROR No tweenX or tweenY option for \" + (object.name ? object.name : \"object\"));\n            }\n            return;\n        }\n\n        // if values for one of the axes are not specified or in valid length, we use default axes value\n        if (options.tweenX.length !== options.tweenY.length) {\n            if (options.tweenX.length > options.tweenY.length) {\n                options.tweenY = Array.apply(null, Array(options.tweenX.length)).map(\n                    (value: any) => object.position.y || 0,\n                );\n            } else {\n                options.tweenX = Array.apply(null, Array(options.tweenY.length)).map(\n                    (value: any) => object.position.x || 0,\n                );\n            }\n        }\n\n        object.position.x = options.tweenX.shift();\n        object.position.y = options.tweenY.shift();\n        if (options.keyTimes && options.keyTimes.length) {\n            options.keyTimes = options.keyTimes.slice();\n            options.keyTimes.shift();\n        }\n\n        let tween: any;\n        if (options.tweenX.length === 1) {\n            tween = GsapEffects.positionTween_Tweenlite(object, options);\n        } else if (options.tweenX.length > 1) {\n            tween = GsapEffects.positionTween_TimelineLite(object, options);\n        }\n\n        tween.name = \"positionTween\";\n        tween.objectName = object.name;\n        this.registerTween(object.uid, tween);\n\n        return tween;\n    }\n\n    static skewTween<T extends ITweenable>(object: T, options: ISkewTweenOptions): any {\n        if ((!options.tweenX && !options.tweenY) || (options.tweenX.length < 2 && options.tweenY.length < 2)) {\n            if (DEBUG) {\n                this.log(\"ERROR No tweenX or tweenY option for \" + (object.name ? object.name : \"object\"));\n            }\n            return;\n        }\n\n        // if values for one of the axes are not specified or in valid length, we use default axes value\n        if (options.tweenX.length !== options.tweenY.length) {\n            if (options.tweenX.length > options.tweenY.length) {\n                options.tweenY = Array.apply(null, Array(options.tweenX.length)).map(\n                    (value: any) => object.skew.y || 0,\n                );\n            } else {\n                options.tweenX = Array.apply(null, Array(options.tweenY.length)).map(\n                    (value: any) => object.skew.x || 0,\n                );\n            }\n        }\n\n        object.skew.x = options.tweenX.shift();\n        object.skew.y = options.tweenY.shift();\n        if (options.keyTimes && options.keyTimes.length) {\n            options.keyTimes = options.keyTimes.slice();\n            options.keyTimes.shift();\n        }\n\n        let tween: any;\n        if (options.tweenX.length === 1) {\n            tween = GsapEffects.skewTween_Tweenlite(object, options);\n        } else if (options.tweenX.length > 1) {\n            tween = GsapEffects.skewTween_TimelineLite(object, options);\n        }\n\n        tween.name = \"skewTween\";\n        tween.objectName = object.name;\n        this.registerTween(object.uid, tween);\n\n        return tween;\n    }\n\n    /**\n     * Applies rotation tween on object.\n     * Number of degrees is variable.\n     *\n     * @param object\n     * @param options\n     */\n    // TODO marek bug\n    static rotationTween(object: ITweenable, options: IRotationTweenOptions): any {\n        if (options.degrees.length < 2) {\n            return;\n        }\n\n        object.rotation = Tweens.degrees2radians(options.degrees.shift());\n        if (options.keyTimes && options.keyTimes.length) {\n            options.keyTimes = options.keyTimes.slice();\n            options.keyTimes.shift();\n        }\n\n        let tween: any;\n        if (options.degrees.length === 1) {\n            tween = GsapEffects.rotationTween_Tweenlite(object, options);\n        } else if (options.degrees.length > 1) {\n            tween = GsapEffects.rotationTween_TimelineLite(object, options);\n        }\n\n        tween.name = \"rotationTween\";\n        tween.objectName = object.name;\n\n        this.registerTween(object.uid, tween);\n\n        return tween;\n    }\n\n    /**\n     * Applies scale tween on object.\n     * Number of scale points X/Y is variable. Count of X's and Y's must be equal.\n     *\n     * @param object: ImageElement | AnimationElement | BaseElement\n     * @param options: ScaleTweenOptions\n     */\n    static scaleTween<T extends ITweenable>(object: T, options: IScaleTweenOptions): any {\n        if (options.tweenValues.length < 2) {\n            if (DEBUG) {\n                this.log(\n                    \"ERROR No ScaleTweenX or ScaleTweenY or ScaleTween option for \" +\n                        (object.name ? object.name : \"object\"),\n                );\n            }\n            return;\n        }\n\n        object.scale.x = options.tweenValues[0].x;\n        object.scale.y = options.tweenValues[0].y;\n        options.tweenValues.shift();\n        if (options.keyTimes && options.keyTimes.length) {\n            options.keyTimes = options.keyTimes.slice();\n            options.keyTimes.shift();\n        }\n        let tween: any;\n        if (options.tweenValues.length === 1) {\n            tween = GsapEffects.scaleTween_Tweenlite(object, options);\n        } else if (options.tweenValues.length > 1) {\n            tween = GsapEffects.scaleTween_TimelineLite(object, options);\n        }\n\n        tween.name = \"scaleTween\";\n        tween.objectName = object.name;\n\n        this.registerTween(object.uid, tween);\n\n        return tween;\n    }\n\n    /**\n     * Applies position tween on object.\n     * Number of positions points X/Y is variable. Count of X's and Y's must be equal.\n     *\n     * todo Add check if object is not null\n     * @param object: ImageElement | AnimationElement | BaseElement\n     * @param options: PositionTweenOptions\n     */\n    static customTween<T extends ITweenable>(object: T, options: ITweenOptions): any {\n        let property: Array<string> = options.tween.split(\".\");\n        options = Tweens.prepareTweenData(options);\n\n        if (property.length == 1) {\n            object[property[0]] = options.tweenValues.shift();\n        } else if (property.length == 2) {\n            object[property[0]][property[1]] = options.tweenValues.shift();\n        }\n\n        let tween: any;\n        if (options.tweenValues.length === 1) {\n            tween = GsapEffects.tween_Tweenlite(object, options);\n        } else if (options.tweenValues.length > 1) {\n            tween = GsapEffects.tween_TimelineLite(object, options);\n        }\n\n        tween.name = property[0] + \"Tween\";\n        tween.objectName = object.name;\n        this.registerTween(object.uid, tween);\n\n        return tween;\n    }\n\n    static colorTween<T extends ITweenable>(object: T, options: IColorTweenOptions): any {\n        if (options.tweenValues.length < 2) {\n            if (DEBUG) {\n                this.log(\"ERROR Not enough tweenValues option for \" + (object.name ? object.name : \"object\"));\n            }\n            return;\n        }\n\n        object[options.tween] = options.tweenValues.shift();\n        if (options.keyTimes && options.keyTimes.length) {\n            options.keyTimes.shift();\n        }\n\n        let tween: any;\n        if (options.tweenValues.length === 1) {\n            tween = GsapEffects.colorTween_Tweenlite(object, options);\n        } else if (options.tweenValues.length > 1) {\n            tween = GsapEffects.colorTween_TimelineLite(object, options);\n        }\n\n        tween.name = options.tween + \"Tween\";\n        tween.objectName = object.name;\n\n        this.registerTween(object.uid, tween);\n\n        return tween;\n    }\n\n    static prepareTweenData(data: ITweenOptions): ITweenOptions {\n        let length = data.tweenValues.length - 1;\n\n        data.tweenEase = Tweens.stringValueToFormatedArray(length, data.tweenEase, \"linear\");\n        data.tweenDelay = Tweens.numberValueToFormatedArray(length, data.tweenDelay, 0);\n        data.tweenDelay = data.tweenDelay.map(function (x: number) {\n            return x * GsapEffects.TickTime;\n        });\n\n        if (data.tweenDuration != null) {\n            if (data.tweenDuration.length == 1) {\n                let partDuration = data.tweenDuration[0] / length;\n                data.tweenDuration = Tweens.numberValueToFormatedArray(length, null, partDuration);\n            } else {\n                data.tweenDuration = Tweens.numberValueToFormatedArray(length, data.tweenDuration, 30);\n            }\n        } else {\n            let defaultValue = Math.floor(Math.random() * 120 + 120);\n            data.tweenDuration = Tweens.numberValueToFormatedArray(length, null, defaultValue);\n        }\n        data.tweenDuration = data.tweenDuration.map(function (x: number) {\n            return x * GsapEffects.TickTime;\n        });\n\n        //we need to convert degrees to radians if we rotating\n        if (data.tween == \"rotation\") {\n            data.tweenValues = data.tweenValues.map(function (x: number) {\n                return Tweens.degrees2radians(x);\n            });\n        }\n\n        return data;\n    }\n\n    /**\n     * Create array of specified length, filled with data values, or value, or default value\n     *\n     * @param {number} length\n     * @param {Array<string> | string} data\n     * @param {string} defaultValue\n     * @returns {Array<string>}\n     */\n    static stringValueToFormatedArray(length: number, data: Array<string>, defaultValue: string): Array<string> {\n        if (data != null) {\n            if (Array.isArray(data)) {\n                if (data.length == length) {\n                    return data;\n                }\n\n                if (data.length < length) {\n                    for (let i: number = data.length; i < length; i++) {\n                        data.push(defaultValue);\n                    }\n                    return data;\n                }\n            } else {\n                return Array.apply(null, Array(length)).map((value: any) => data);\n            }\n        } else {\n            return Array.apply(null, Array(length)).map((value: any) => defaultValue);\n        }\n\n        return null;\n    }\n\n    /**\n     * Create array of specified length, filled with data values, or value, or default value\n     *\n     * @param {number} length\n     * @param {Array<string> | string} data\n     * @param {string} defaultValue\n     * @returns {Array<string>}\n     */\n    static numberValueToFormatedArray(length: number, data: Array<number>, defaultValue: number): Array<number> {\n        if (data != null) {\n            if (Array.isArray(data)) {\n                if (data.length == length) {\n                    return data;\n                }\n\n                if (data.length < length) {\n                    for (let i: number = data.length; i < length; i++) {\n                        data.push(defaultValue);\n                    }\n                    return data;\n                }\n            } else {\n                return Array.apply(null, Array(length)).map((value: any) => data);\n            }\n        } else {\n            return Array.apply(null, Array(length)).map((value: any) => defaultValue);\n        }\n\n        return null;\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    static degrees2radians(degrees: number): number {\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     *\n     * @param radians\n     * @returns {number}\n     */\n    static radians2degrees(radians: number): number {\n        return radians * (180 / Math.PI);\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public static get componentName(): string {\n        return \"Tweens\";\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected static log(s: string): void {\n        if (DEBUG) {\n            let compName = Tweens.componentName;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\nexport const TweensAttributes = {\n    TWEEN: \"Tween\",\n    TWEEN_VALUES: \"TweenValues\",\n    TWEEN_EASE: \"TweenEase\",\n    TWEEN_DURATION: \"TweenDuration\",\n    TWEEN_DELAY: \"TweenDelay\",\n    TWEEN_LOOP: \"TweenLoop\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Effects/Tweens.ts\n **/","import { Logger } from \"neo-common\";\nimport {\n    IRotationTweenOptions,\n    IAlphaTweenOptions,\n    IScaleTweenOptions,\n    IPositionTweenOptions,\n    ISkewTweenOptions,\n    IColorTweenOptions,\n    ITweenable,\n    ITweenOptions,\n} from \"./Tweens\";\nimport { TimelineLite, TweenLite, Bounce } from \"gsap\";\n\n/**\n *  Example:\n *\n *  GsapEffects.alphaTween(object, {alphas: alphaTween, tweenEase: ease, tweenDuration: tweenDuration, tweenDelay: tweenDelay});\n *  GsapEffects.rotationTween(object, {degrees: rotateTweenDegrees, tweenEase: ease, tweenDuration: tweenDuration, tweenDelay: tweenDelay});\n *  GsapEffects.scaleTween(object, {tweenX: scaleTweenX, tweenY: scaleTweenY, tweenEase: ease, tweenDuration: tweenDuration});\n *\n */\nexport class GsapEffects {\n    static UseFrames: boolean = false;\n    static TickTime: number = 0.0167;\n\n    /**\n     * Applies alpha tween on object.\n     *\n     * @param object\n     * @param options\n     */\n    static alphaTween_TimelineLite(object: ITweenable, options: IAlphaTweenOptions): TimelineLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.alphas.length) * GsapEffects.TickTime;\n        const tweenPaused: boolean = options.paused;\n        const tweenEaseArray: Array<string> = (options.tweenEase || \"Linear.easeNone\")\n            .split(\";\")\n            .map((value: string) => GsapEffects.getEaseing(value));\n\n        const alphaTimeline: TimelineLite = new TimelineLite({\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            paused: tweenPaused || false,\n        });\n\n        options.alphas.forEach((alpha: number, i: number) => {\n            alphaTimeline.to(\n                object,\n                options.keyTimes && options.keyTimes[i] != null\n                    ? (i > 0 ? options.keyTimes[i] - options.keyTimes[i - 1] : options.keyTimes[i]) *\n                          tweenDuration *\n                          GsapEffects.TickTime\n                    : tweenDurationPerPart,\n                {\n                    alpha: alpha,\n                    ease: tweenEaseArray[i] || tweenEaseArray[0],\n                    paused: tweenPaused || false,\n                },\n            );\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            alphaTimeline.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            alphaTimeline.eventCallback(\"onComplete\", alphaTimeline.restart);\n        }\n\n        return alphaTimeline;\n    }\n\n    /**\n     *\n     * @param object\n     * @param options\n     * @returns {TweenLite}\n     */\n    static alphaTween_Tweenlite(object: ITweenable, options: IAlphaTweenOptions): TweenLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.alphas.length) * GsapEffects.TickTime;\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\n        const tweenPaused: boolean = options.paused;\n\n        let alphaTweenLite: TweenLite;\n\n        alphaTweenLite = TweenLite.to(object, tweenDurationPerPart, {\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            alpha: options.alphas,\n            ease: tweenEase,\n            paused: tweenPaused || false,\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            alphaTweenLite.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            alphaTweenLite.eventCallback(\"onComplete\", alphaTweenLite.restart);\n        }\n\n        return alphaTweenLite;\n    }\n\n    /**\n     * Applies position tween on object, GSAP version.\n     * Number of position points X/Y is variable. Count of X's and Y's must be equal.\n     *\n     * @param object\n     * @param options\n     */\n    static positionTween_TimelineLite(object: ITweenable, options: IPositionTweenOptions): TimelineLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenX.length) * GsapEffects.TickTime;\n        const tweenPaused: boolean = options.paused;\n        const tweenEaseArray: Array<string> = (options.tweenEase || \"Linear.easeNone\")\n            .split(\";\")\n            .map((value: string) => GsapEffects.getEaseing(value));\n\n        const positionTimeline: TimelineLite = new TimelineLite({\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            //autoRemoveChildren: true,\n        });\n\n        options.tweenX.forEach((tweenX: number, i: number) => {\n            positionTimeline.to(\n                object.position,\n                options.keyTimes && options.keyTimes[i] != null\n                    ? (i > 0 ? options.keyTimes[i] - options.keyTimes[i - 1] : options.keyTimes[i]) *\n                          tweenDuration *\n                          GsapEffects.TickTime\n                    : tweenDurationPerPart,\n                {\n                    useFrames: GsapEffects.UseFrames,\n                    x: tweenX,\n                    y: options.tweenY[i],\n                    ease: tweenEaseArray[i] || tweenEaseArray[0],\n                    paused: tweenPaused || false,\n                },\n            );\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            positionTimeline.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            positionTimeline.eventCallback(\"onComplete\", positionTimeline.restart);\n        }\n\n        return positionTimeline;\n    }\n\n    static skewTween_TimelineLite(object: ITweenable, options: ISkewTweenOptions): TimelineLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenX.length) * GsapEffects.TickTime;\n        const tweenPaused: boolean = options.paused;\n        const tweenEaseArray: Array<string> = (options.tweenEase || \"Linear.easeNone\")\n            .split(\";\")\n            .map((value: string) => GsapEffects.getEaseing(value));\n\n        const skewTimeline: TimelineLite = new TimelineLite({\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            //autoRemoveChildren: true,\n        });\n\n        options.tweenX.forEach((tweenX: number, i: number) => {\n            skewTimeline.to(\n                object.skew,\n                options.keyTimes && options.keyTimes[i] != null\n                    ? (i > 0 ? options.keyTimes[i] - options.keyTimes[i - 1] : options.keyTimes[i]) *\n                          tweenDuration *\n                          GsapEffects.TickTime\n                    : tweenDurationPerPart,\n                {\n                    useFrames: GsapEffects.UseFrames,\n                    x: tweenX,\n                    y: options.tweenY[i],\n                    ease: tweenEaseArray[i] || tweenEaseArray[0],\n                    paused: tweenPaused || false,\n                },\n            );\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            skewTimeline.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            skewTimeline.eventCallback(\"onComplete\", skewTimeline.restart);\n        }\n\n        return skewTimeline;\n    }\n\n    /**\n     *\n     * @param object\n     * @param options\n     * @returns {TweenLite}\n     */\n    static positionTween_Tweenlite(object: ITweenable, options: IPositionTweenOptions): TweenLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenX.length) * GsapEffects.TickTime;\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\n        const tweenBezier: Object = options.bezier;\n        const tweenPaused: boolean = options.paused;\n\n        let positionTweenLite: TweenLite;\n\n        if (tweenBezier != null) {\n            positionTweenLite = TweenLite.to(object.position, tweenDurationPerPart, {\n                bezier: tweenBezier || 0,\n                useFrames: GsapEffects.UseFrames,\n                delay:\n                    options.tweenDelay != null && options.tweenDelay > 0\n                        ? options.tweenDelay * GsapEffects.TickTime\n                        : 0,\n                ease: tweenEase,\n                paused: tweenPaused || false,\n            });\n        } else {\n            positionTweenLite = TweenLite.to(object.position, tweenDurationPerPart, {\n                useFrames: GsapEffects.UseFrames,\n                delay:\n                    options.tweenDelay != null && options.tweenDelay > 0\n                        ? options.tweenDelay * GsapEffects.TickTime\n                        : 0,\n                x: options.tweenX[0],\n                y: options.tweenY[0],\n                ease: tweenEase,\n                paused: tweenPaused || false,\n            });\n        }\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            positionTweenLite.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            positionTweenLite.eventCallback(\"onComplete\", positionTweenLite.restart);\n        }\n\n        return positionTweenLite;\n    }\n\n    static skewTween_Tweenlite(object: ITweenable, options: ISkewTweenOptions): TweenLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenX.length) * GsapEffects.TickTime;\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\n        const tweenBezier: Object = options.bezier;\n        const tweenPaused: boolean = options.paused;\n\n        let skewTweenLite: TweenLite;\n\n        if (tweenBezier != null) {\n            skewTweenLite = TweenLite.to(object.skew, tweenDurationPerPart, {\n                bezier: tweenBezier || 0,\n                useFrames: GsapEffects.UseFrames,\n                delay:\n                    options.tweenDelay != null && options.tweenDelay > 0\n                        ? options.tweenDelay * GsapEffects.TickTime\n                        : 0,\n                ease: tweenEase,\n                paused: tweenPaused || false,\n                roundProps: \"bezier\",\n            });\n        } else {\n            skewTweenLite = TweenLite.to(object.skew, tweenDurationPerPart, {\n                useFrames: GsapEffects.UseFrames,\n                delay:\n                    options.tweenDelay != null && options.tweenDelay > 0\n                        ? options.tweenDelay * GsapEffects.TickTime\n                        : 0,\n                x: options.tweenX[0],\n                y: options.tweenY[0],\n                ease: tweenEase,\n                paused: tweenPaused || false,\n            });\n        }\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            skewTweenLite.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            skewTweenLite.eventCallback(\"onComplete\", skewTweenLite.restart);\n        }\n\n        return skewTweenLite;\n    }\n\n    /**\n     * Applies rotation tween on object.\n     * Number of degrees is variable.\n     *\n     * @param object\n     * @param options\n     */\n    static rotationTween_TimelineLite(object: ITweenable, options: IRotationTweenOptions): TimelineLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.degrees.length) * GsapEffects.TickTime;\n        const tweenPaused: boolean = options.paused;\n        const tweenEaseArray: Array<string> = (options.tweenEase || \"Linear.easeNone\")\n            .split(\";\")\n            .map((value: string) => GsapEffects.getEaseing(value));\n\n        const rotationTimeline: TimelineLite = new TimelineLite({\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            paused: tweenPaused || false,\n            //autoRemoveChildren: true,\n        });\n\n        options.degrees.map(GsapEffects.degrees2radians).forEach((degree: number, i: number) => {\n            rotationTimeline.to(\n                object,\n                options.keyTimes && options.keyTimes[i] != null\n                    ? (i > 0 ? options.keyTimes[i] - options.keyTimes[i - 1] : options.keyTimes[i]) *\n                          tweenDuration *\n                          GsapEffects.TickTime\n                    : tweenDurationPerPart,\n                {\n                    useFrames: GsapEffects.UseFrames,\n                    rotation: degree,\n                    ease: tweenEaseArray[i] || tweenEaseArray[0],\n                    paused: tweenPaused || false,\n                },\n            );\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            rotationTimeline.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            rotationTimeline.eventCallback(\"onComplete\", rotationTimeline.restart);\n\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\n            //positionTweenLite.restart(true, false);\n        }\n\n        return rotationTimeline;\n    }\n\n    /**\n     *\n     * @param object\n     * @param options\n     * @returns {TweenLite}\n     */\n    static rotationTween_Tweenlite(object: ITweenable, options: IRotationTweenOptions): TweenLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.degrees.length) * GsapEffects.TickTime;\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\n        const tweenPaused: boolean = options.paused;\n\n        let rotationTweenLite: TweenLite;\n\n        rotationTweenLite = TweenLite.to(object, tweenDurationPerPart, {\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            rotation: GsapEffects.degrees2radians(options.degrees[0]),\n            ease: tweenEase,\n            paused: tweenPaused || false,\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            rotationTweenLite.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            rotationTweenLite.eventCallback(\"onComplete\", rotationTweenLite.restart);\n        }\n\n        return rotationTweenLite;\n    }\n\n    /**\n     * Applies scale tween on object, GSAP version.\n     * Number of scale points X/Y is variable. Count of X's and Y's must be equal.\n     *\n     * @param object\n     * @param options\n     * @returns {TimelineLite}\n     */\n    static scaleTween_TimelineLite(object: ITweenable, options: IScaleTweenOptions): TimelineLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenValues.length) * GsapEffects.TickTime;\n        const tweenPaused: boolean = options.paused;\n        const tweenEaseArray: Array<string> = (options.tweenEase || \"Linear.easeNone\")\n            .split(\";\")\n            .map((value: string) => GsapEffects.getEaseing(value));\n\n        const scaleTimeline: TimelineLite = new TimelineLite({\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            paused: tweenPaused || false,\n        });\n\n        options.tweenValues.forEach((tweenValue: PIXI.Point, i: number) => {\n            scaleTimeline.to(\n                object.scale,\n                options.keyTimes && options.keyTimes[i] != null\n                    ? (i > 0 ? options.keyTimes[i] - options.keyTimes[i - 1] : options.keyTimes[i]) *\n                          tweenDuration *\n                          GsapEffects.TickTime\n                    : tweenDurationPerPart,\n                {\n                    useFrames: GsapEffects.UseFrames,\n                    x: tweenValue.x,\n                    y: tweenValue.y,\n                    ease: tweenEaseArray[i] || tweenEaseArray[0],\n                    paused: tweenPaused || false,\n                    roundProps: \"bezier\",\n                },\n            );\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            scaleTimeline.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            scaleTimeline.eventCallback(\"onComplete\", scaleTimeline.restart);\n        }\n\n        return scaleTimeline;\n    }\n\n    /**\n     *\n     * @param object\n     * @param options\n     * @returns {TweenLite}\n     */\n    static scaleTween_Tweenlite(object: ITweenable, options: IScaleTweenOptions): TweenLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenValues.length) * GsapEffects.TickTime;\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\n        const tweenPaused: boolean = options.paused;\n\n        let scaleTweenLite: TweenLite;\n\n        scaleTweenLite = TweenLite.to(object.scale, tweenDurationPerPart, {\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            x: options.tweenValues[0].x,\n            y: options.tweenValues[0].y,\n            ease: tweenEase,\n            paused: tweenPaused || false,\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            scaleTweenLite.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            scaleTweenLite.eventCallback(\"onComplete\", scaleTweenLite.restart);\n        }\n\n        return scaleTweenLite;\n    }\n\n    /**\n     * Applies tween on object, GSAP version.\n     * @param object\n     * @param options\n     */\n    static colorTween_TimelineLite(object: ITweenable, options: IColorTweenOptions): TimelineLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenValues.length) * GsapEffects.TickTime;\n        const tweenPaused: boolean = options.paused;\n        const tweenEaseArray: Array<string> = (options.tweenEase || \"Linear.easeNone\")\n            .split(\";\")\n            .map((value: string) => GsapEffects.getEaseing(value));\n\n        const timeline: TimelineLite = new TimelineLite({\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\n            paused: tweenPaused || false,\n        });\n\n        options.tweenValues.forEach((value: number, i: number) => {\n            timeline.to(\n                object,\n                options.keyTimes && options.keyTimes[i] != null\n                    ? (i > 0 ? options.keyTimes[i] - options.keyTimes[i - 1] : options.keyTimes[i]) *\n                          tweenDuration *\n                          GsapEffects.TickTime\n                    : tweenDurationPerPart,\n                {\n                    useFrames: GsapEffects.UseFrames,\n                    ease: tweenEaseArray[i] || tweenEaseArray[0],\n                    paused: tweenPaused || false,\n                    delay: options.tweenDelay[i],\n                    colorProps: {\n                        [options.tween]: value,\n                        format: typeof value == \"number\" ? \"number\" : undefined,\n                    },\n                },\n            );\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            timeline.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            timeline.eventCallback(\"onComplete\", timeline.restart);\n        }\n\n        return timeline;\n    }\n\n    /**\n     * Applies tween on object, GSAP version.\n     * @param object\n     * @param options\n     */\n    static colorTween_Tweenlite(object: ITweenable, options: IColorTweenOptions): TweenLite {\n        const tweenDuration: number =\n            options.tweenDuration == null || isNaN(options.tweenDuration)\n                ? Math.floor(Math.random() * 120 + 120)\n                : options.tweenDuration;\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenValues.length) * GsapEffects.TickTime;\n        const tweenPaused: boolean = options.paused;\n\n        let tweenlite: TweenLite;\n\n        tweenlite = TweenLite.to(object, tweenDurationPerPart, {\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay || 0,\n            ease: GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\",\n            paused: tweenPaused || false,\n            colorProps: {\n                [options.tween]: options.tweenValues[0],\n                format: typeof options.tweenValues[0] == \"number\" ? \"number\" : undefined,\n            },\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            tweenlite.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            tweenlite.eventCallback(\"onComplete\", tweenlite.restart);\n\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\n            //positionTweenLite.restart(true, false);\n        }\n\n        return tweenlite;\n    }\n\n    /**\n     * Applies tween on object, GSAP version.\n     * @param object\n     * @param options\n     */\n    static tween_TimelineLite(object: ITweenable, options: ITweenOptions): TimelineLite {\n        const tween: Array<string> = options.tween.split(\".\");\n        const tweenProperty: string = tween[tween.length - 1];\n        const tweenPaused: boolean = options.paused;\n        const timeline: TimelineLite = new TimelineLite({\n            useFrames: GsapEffects.UseFrames,\n            // delay: (options.tweenDelay != null && options.tweenDelay > 0) ? options.tweenDelay * GsapEffects.TickTime : 0,\n            // autoRemoveChildren: true,\n        });\n\n        options.tweenValues.forEach((value: number, i: number) => {\n            timeline.to(tween.length == 1 ? object : object[tween[0]], options.tweenDuration[i], {\n                useFrames: GsapEffects.UseFrames,\n                [tweenProperty]: value,\n                ease: GsapEffects.getEaseing(options.tweenEase[i]) || \"Linear.easeNone\",\n                paused: tweenPaused || false,\n                delay: options.tweenDelay[i],\n            });\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            timeline.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            timeline.eventCallback(\"onComplete\", timeline.restart);\n\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\n            //positionTweenLite.restart(true, false);\n        }\n\n        return timeline;\n    }\n\n    /**\n     * Applies tween on object, GSAP version.\n     * @param object\n     * @param options\n     */\n    static tween_Tweenlite(object: ITweenable, options: ITweenOptions): TweenLite {\n        const tween: Array<string> = options.tween.split(\".\");\n        const tweenProperty: string = tween[tween.length - 1];\n        const tweenPaused: boolean = options.paused;\n\n        let tweenlite: TweenLite;\n\n        tweenlite = TweenLite.to(tween.length == 1 ? object : object[tween[0]], options.tweenDuration[0], {\n            useFrames: GsapEffects.UseFrames,\n            delay: options.tweenDelay[0],\n            [tweenProperty]: options.tweenValues[0],\n            ease: GsapEffects.getEaseing(options.tweenEase[0]) || \"Linear.easeNone\",\n            paused: tweenPaused || false,\n        });\n\n        if (options.callbackFunction != null) {\n            if (options.callbackType == null) {\n                options.callbackType = \"onComplete\";\n            }\n            tweenlite.eventCallback(\n                options.callbackType,\n                options.callbackFunction,\n                options.callbackParams,\n                options.callbackScope,\n            );\n        }\n\n        if (options.tweenLoop) {\n            //restarts, not including any delay that was defined\n            tweenlite.eventCallback(\"onComplete\", tweenlite.restart);\n\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\n            //positionTweenLite.restart(true, false);\n        }\n\n        return tweenlite;\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    static degrees2radians(degrees: number): number {\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     * Return easing function for tweening.\n     * @method getEaseing\n     * @param ease string - name of easeing\n     * @return any\n     */\n    static getEaseing(ease: string): any {\n        switch (\"\" + ease) {\n            case \"0\":\n            case \"linear\":\n                return \"Linear.easeNone\";\n            case \"1\":\n            case \"backIn\":\n                return \"Back.easeIn\";\n            case \"2\":\n            case \"backInOut\":\n                return \"Back.easeInOut\";\n            case \"3\":\n            case \"backOut\":\n                return \"Back.easeOut\";\n            case \"4\":\n            case \"bounceIn\":\n                return \"Bounce.easeIn\";\n            case \"5\":\n            case \"bounceInOut\":\n                return \"Bounce.easeInOut\";\n            case \"6\":\n            case \"bounceOut\":\n                return \"Bounce.easeOut\";\n            case \"7\":\n            case \"circIn\":\n                return \"Circ.easeIn\";\n            case \"8\":\n            case \"circInOut\":\n                return \"Circ.easeInOut\";\n            case \"9\":\n            case \"circOut\":\n                return \"Circ.easeOut\";\n            case \"10\":\n            case \"cubicIn\":\n                return \"Cubic.easeIn\";\n            case \"11\":\n            case \"cubicInOut\":\n                return \"Cubic.easeInOut\";\n            case \"12\":\n            case \"cubicOut\":\n                return \"Cubic.easeOut\";\n            case \"13\":\n            case \"elasticIn\":\n                return \"Elastic.easeIn\";\n            case \"14\":\n            case \"elasticInOut\":\n                return \"Elastic.easeInOut\";\n            case \"15\":\n            case \"elasticOut\":\n                return \"Elastic.easeOut\";\n            case \"16\":\n            case \"quadIn\":\n                return \"Quad.easeIn\";\n            case \"17\":\n            case \"quadInOut\":\n                return \"Quad.easeInOut\";\n            case \"18\":\n            case \"quadOut\":\n                return \"Quad.easeOut\";\n            case \"19\":\n            case \"quartIn\":\n                return \"Quart.easeIn\";\n            case \"20\":\n            case \"quartInOut\":\n                return \"Quart.easeInOut\";\n            case \"21\":\n            case \"quartOut\":\n                return \"Quart.easeOut\";\n            case \"22\":\n            case \"quintIn\":\n                return \"Quint.easeIn\";\n            case \"23\":\n            case \"quintInOut\":\n                return \"Quint.easeInOut\";\n            case \"24\":\n            case \"quintOut\":\n                return \"Quint.easeOut\";\n            case \"25\":\n            case \"sineIn\":\n                return \"Sine.easeIn\";\n            case \"26\":\n            case \"sineInOut\":\n                return \"Sine.easeInOut\";\n            case \"27\":\n            case \"sineOut\":\n                return \"Sine.easeOut\";\n            case \"28\":\n            case \"expoOut\":\n                return \"Expo.easeOut\";\n            case \"29\":\n            case \"expoIn\":\n                return \"Expo.easeIn\";\n            default:\n                return \"Linear.easeNone\";\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected static log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__ || \"GsapEffects\";\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Effects/GsapEffects.ts\n **/","/*!\n * VERSION: 1.19.0\n * DATE: 2016-07-14\n * UPDATES AND DOCS AT: http://greensock.com\n * \n * Includes all of the following: TweenLite, TweenMax, TimelineLite, TimelineMax, EasePack, CSSPlugin, RoundPropsPlugin, BezierPlugin, AttrPlugin, DirectionalRotationPlugin\n *\n * @license Copyright (c) 2008-2016, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\nvar _gsScope = (typeof(module) !== \"undefined\" && module.exports && typeof(global) !== \"undefined\") ? global : this || window; //helps ensure compatibility with AMD/RequireJS and CommonJS/Node\n(_gsScope._gsQueue || (_gsScope._gsQueue = [])).push( function() {\n\n\t\"use strict\";\n\n\t_gsScope._gsDefine(\"TweenMax\", [\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"], function(Animation, SimpleTimeline, TweenLite) {\n\n\t\tvar _slice = function(a) { //don't use [].slice because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++]));\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\t_applyCycle = function(vars, targets, i) {\n\t\t\t\tvar alt = vars.cycle,\n\t\t\t\t\tp, val;\n\t\t\t\tfor (p in alt) {\n\t\t\t\t\tval = alt[p];\n\t\t\t\t\tvars[p] = (typeof(val) === \"function\") ? val(i, targets[i]) : val[i % val.length];\n\t\t\t\t}\n\t\t\t\tdelete vars.cycle;\n\t\t\t},\n\t\t\tTweenMax = function(target, duration, vars) {\n\t\t\t\tTweenLite.call(this, target, duration, vars);\n\t\t\t\tthis._cycle = 0;\n\t\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\tthis._dirty = true; //ensures that if there is any repeat, the totalDuration will get recalculated to accurately report it.\n\t\t\t\tthis.render = TweenMax.prototype.render; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\t\t\t},\n\t\t\t_tinyNum = 0.0000000001,\n\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t_isSelector = TweenLiteInternals.isSelector,\n\t\t\t_isArray = TweenLiteInternals.isArray,\n\t\t\tp = TweenMax.prototype = TweenLite.to({}, 0.1, {}),\n\t\t\t_blankArray = [];\n\n\t\tTweenMax.version = \"1.19.0\";\n\t\tp.constructor = TweenMax;\n\t\tp.kill()._gc = false;\n\t\tTweenMax.killTweensOf = TweenMax.killDelayedCallsTo = TweenLite.killTweensOf;\n\t\tTweenMax.getTweensOf = TweenLite.getTweensOf;\n\t\tTweenMax.lagSmoothing = TweenLite.lagSmoothing;\n\t\tTweenMax.ticker = TweenLite.ticker;\n\t\tTweenMax.render = TweenLite.render;\n\n\t\tp.invalidate = function() {\n\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\tthis._uncache(true);\n\t\t\treturn TweenLite.prototype.invalidate.call(this);\n\t\t};\n\t\t\n\t\tp.updateTo = function(vars, resetDuration) {\n\t\t\tvar curRatio = this.ratio,\n\t\t\t\timmediate = this.vars.immediateRender || vars.immediateRender,\n\t\t\t\tp;\n\t\t\tif (resetDuration && this._startTime < this._timeline._time) {\n\t\t\t\tthis._startTime = this._timeline._time;\n\t\t\t\tthis._uncache(false);\n\t\t\t\tif (this._gc) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t} else {\n\t\t\t\t\tthis._timeline.insert(this, this._startTime - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (p in vars) {\n\t\t\t\tthis.vars[p] = vars[p];\n\t\t\t}\n\t\t\tif (this._initted || immediate) {\n\t\t\t\tif (resetDuration) {\n\t\t\t\t\tthis._initted = false;\n\t\t\t\t\tif (immediate) {\n\t\t\t\t\t\tthis.render(0, true, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (this._gc) {\n\t\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (this._notifyPluginsOfEnabled && this._firstPT) {\n\t\t\t\t\t\tTweenLite._onPluginEvent(\"_onDisable\", this); //in case a plugin like MotionBlur must perform some cleanup tasks\n\t\t\t\t\t}\n\t\t\t\t\tif (this._time / this._duration > 0.998) { //if the tween has finished (or come extremely close to finishing), we just need to rewind it to 0 and then render it again at the end which forces it to re-initialize (parsing the new vars). We allow tweens that are close to finishing (but haven't quite finished) to work this way too because otherwise, the values are so small when determining where to project the starting values that binary math issues creep in and can make the tween appear to render incorrectly when run backwards. \n\t\t\t\t\t\tvar prevTime = this._totalTime;\n\t\t\t\t\t\tthis.render(0, true, false);\n\t\t\t\t\t\tthis._initted = false;\n\t\t\t\t\t\tthis.render(prevTime, true, false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._initted = false;\n\t\t\t\t\t\tthis._init();\n\t\t\t\t\t\tif (this._time > 0 || immediate) {\n\t\t\t\t\t\t\tvar inv = 1 / (1 - curRatio),\n\t\t\t\t\t\t\t\tpt = this._firstPT, endValue;\n\t\t\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\t\t\tendValue = pt.s + pt.c;\n\t\t\t\t\t\t\t\tpt.c *= inv;\n\t\t\t\t\t\t\t\tpt.s = endValue - pt.c;\n\t\t\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\t\t\t\t\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tif (!this._initted) if (this._duration === 0 && this.vars.repeat) { //zero duration tweens that render immediately have render() called from TweenLite's constructor, before TweenMax's constructor has finished setting _repeat, _repeatDelay, and _yoyo which are critical in determining totalDuration() so we need to call invalidate() which is a low-kb way to get those set properly.\n\t\t\t\tthis.invalidate();\n\t\t\t}\n\t\t\tvar totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(),\n\t\t\t\tprevTime = this._time,\n\t\t\t\tprevTotalTime = this._totalTime, \n\t\t\t\tprevCycle = this._cycle,\n\t\t\t\tduration = this._duration,\n\t\t\t\tprevRawPrevTime = this._rawPrevTime,\n\t\t\t\tisComplete, callback, pt, cycleDuration, r, type, pow, rawPrevTime;\n\t\t\tif (time >= totalDur - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\tthis._totalTime = totalDur;\n\t\t\t\tthis._cycle = this._repeat;\n\t\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\t\tthis._time = 0;\n\t\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;\n\t\t\t\t} else {\n\t\t\t\t\tthis._time = duration;\n\t\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1;\n\t\t\t\t}\n\t\t\t\tif (!this._reversed) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tforce = (force || this._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t}\n\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\tif (this._startTime === this._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -0.0000001) || (prevRawPrevTime === _tinyNum && this.data !== \"isPause\")) if (prevRawPrevTime !== time) { //note: when this.data is \"isPause\", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tthis._totalTime = this._time = this._cycle = 0;\n\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;\n\t\t\t\tif (prevTotalTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t}\n\t\t\t\tif (time < 0) {\n\t\t\t\t\tthis._active = false;\n\t\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (prevRawPrevTime >= 0) {\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!this._initted) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\n\t\t\t\t\tforce = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._totalTime = this._time = time;\n\t\t\t\tif (this._repeat !== 0) {\n\t\t\t\t\tcycleDuration = duration + this._repeatDelay;\n\t\t\t\t\tthis._cycle = (this._totalTime / cycleDuration) >> 0; //originally _totalTime % cycleDuration but floating point errors caused problems, so I normalized it. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\n\t\t\t\t\tif (this._cycle !== 0) if (this._cycle === this._totalTime / cycleDuration && prevTotalTime <= time) {\n\t\t\t\t\t\tthis._cycle--; //otherwise when rendered exactly at the end time, it will act as though it is repeating (at the beginning)\n\t\t\t\t\t}\n\t\t\t\t\tthis._time = this._totalTime - (this._cycle * cycleDuration);\n\t\t\t\t\tif (this._yoyo) if ((this._cycle & 1) !== 0) {\n\t\t\t\t\t\tthis._time = duration - this._time;\n\t\t\t\t\t}\n\t\t\t\t\tif (this._time > duration) {\n\t\t\t\t\t\tthis._time = duration;\n\t\t\t\t\t} else if (this._time < 0) {\n\t\t\t\t\t\tthis._time = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._easeType) {\n\t\t\t\t\tr = this._time / duration;\n\t\t\t\t\ttype = this._easeType;\n\t\t\t\t\tpow = this._easePower;\n\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t}\n\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\tr *= r;\n\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (type === 1) {\n\t\t\t\t\t\tthis.ratio = 1 - r;\n\t\t\t\t\t} else if (type === 2) {\n\t\t\t\t\t\tthis.ratio = r;\n\t\t\t\t\t} else if (this._time / duration < 0.5) {\n\t\t\t\t\t\tthis.ratio = r / 2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.ratio = 1 - (r / 2);\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tthis.ratio = this._ease.getRatio(this._time / duration);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\t\n\t\t\tif (prevTime === this._time && !force && prevCycle === this._cycle) {\n\t\t\t\tif (prevTotalTime !== this._totalTime) if (this._onUpdate) if (!suppressEvents) { //so that onUpdate fires even during the repeatDelay - as long as the totalTime changed, we should trigger onUpdate.\n\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (!this._initted) {\n\t\t\t\tthis._init();\n\t\t\t\tif (!this._initted || this._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!force && this._firstPT && ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration))) { //we stick it in the queue for rendering at the very end of the tick - this is a performance optimization because browsers invalidate styles and force a recalculation if you read, write, and then read style data (so it's better to read/read/read/write/write/write than read/write/read/write/read/write). The down side, of course, is that usually you WANT things to render immediately because you may have code running right after that which depends on the change. Like imagine running TweenLite.set(...) and then immediately after that, creating a nother tween that animates the same property to another value; the starting values of that 2nd tween wouldn't be accurate if lazy is true.\n\t\t\t\t\tthis._time = prevTime;\n\t\t\t\t\tthis._totalTime = prevTotalTime;\n\t\t\t\t\tthis._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\tthis._cycle = prevCycle;\n\t\t\t\t\tTweenLiteInternals.lazyTweens.push(this);\n\t\t\t\t\tthis._lazy = [time, suppressEvents];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\tif (this._time && !isComplete) {\n\t\t\t\t\tthis.ratio = this._ease.getRatio(this._time / duration);\n\t\t\t\t} else if (isComplete && this._ease._calcEnd) {\n\t\t\t\t\tthis.ratio = this._ease.getRatio((this._time === 0) ? 0 : 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._lazy !== false) {\n\t\t\t\tthis._lazy = false;\n\t\t\t}\n\n\t\t\tif (!this._active) if (!this._paused && this._time !== prevTime && time >= 0) {\n\t\t\t\tthis._active = true; //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t}\n\t\t\tif (prevTotalTime === 0) {\n\t\t\t\tif (this._initted === 2 && time > 0) {\n\t\t\t\t\t//this.invalidate();\n\t\t\t\t\tthis._init(); //will just apply overwriting since _initted of (2) means it was a from() tween that had immediateRender:true\n\t\t\t\t}\n\t\t\t\tif (this._startAt) {\n\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\tcallback = \"_dummyGS\"; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.vars.onStart) if (this._totalTime !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\tthis._callback(\"onStart\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tpt = this._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.f) {\n\t\t\t\t\tpt.t[pt.p](pt.c * this.ratio + pt.s);\n\t\t\t\t} else {\n\t\t\t\t\tpt.t[pt.p] = pt.c * this.ratio + pt.s;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\t\n\t\t\tif (this._onUpdate) {\n\t\t\t\tif (time < 0) if (this._startAt && this._startTime) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tthis._startAt.render(time, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents) if (this._totalTime !== prevTotalTime || callback) {\n\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._cycle !== prevCycle) if (!suppressEvents) if (!this._gc) if (this.vars.onRepeat) {\n\t\t\t\tthis._callback(\"onRepeat\");\n\t\t\t}\n\t\t\tif (callback) if (!this._gc || force) { //check gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (time < 0 && this._startAt && !this._onUpdate && this._startTime) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t}\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tthis._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\tthis._callback(callback);\n\t\t\t\t}\n\t\t\t\tif (duration === 0 && this._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \"time\" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\tthis._rawPrevTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t\n//---- STATIC FUNCTIONS -----------------------------------------------------------------------------------------------------------\n\t\t\n\t\tTweenMax.to = function(target, duration, vars) {\n\t\t\treturn new TweenMax(target, duration, vars);\n\t\t};\n\t\t\n\t\tTweenMax.from = function(target, duration, vars) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn new TweenMax(target, duration, vars);\n\t\t};\n\t\t\n\t\tTweenMax.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn new TweenMax(target, duration, toVars);\n\t\t};\n\t\t\n\t\tTweenMax.staggerTo = TweenMax.allTo = function(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tstagger = stagger || 0;\n\t\t\tvar delay = 0,\n\t\t\t\ta = [],\n\t\t\t\tfinalComplete = function() {\n\t\t\t\t\tif (vars.onComplete) {\n\t\t\t\t\t\tvars.onComplete.apply(vars.onCompleteScope || this, arguments);\n\t\t\t\t\t}\n\t\t\t\t\tonCompleteAll.apply(onCompleteAllScope || vars.callbackScope || this, onCompleteAllParams || _blankArray);\n\t\t\t\t},\n\t\t\t\tcycle = vars.cycle,\n\t\t\t\tfromCycle = (vars.startAt && vars.startAt.cycle),\n\t\t\t\tl, copy, i, p;\n\t\t\tif (!_isArray(targets)) {\n\t\t\t\tif (typeof(targets) === \"string\") {\n\t\t\t\t\ttargets = TweenLite.selector(targets) || targets;\n\t\t\t\t}\n\t\t\t\tif (_isSelector(targets)) {\n\t\t\t\t\ttargets = _slice(targets);\n\t\t\t\t}\n\t\t\t}\n\t\t\ttargets = targets || [];\n\t\t\tif (stagger < 0) {\n\t\t\t\ttargets = _slice(targets);\n\t\t\t\ttargets.reverse();\n\t\t\t\tstagger *= -1;\n\t\t\t}\n\t\t\tl = targets.length - 1;\n\t\t\tfor (i = 0; i <= l; i++) {\n\t\t\t\tcopy = {};\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tcopy[p] = vars[p];\n\t\t\t\t}\n\t\t\t\tif (cycle) {\n\t\t\t\t\t_applyCycle(copy, targets, i);\n\t\t\t\t\tif (copy.duration != null) {\n\t\t\t\t\t\tduration = copy.duration;\n\t\t\t\t\t\tdelete copy.duration;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (fromCycle) {\n\t\t\t\t\tfromCycle = copy.startAt = {};\n\t\t\t\t\tfor (p in vars.startAt) {\n\t\t\t\t\t\tfromCycle[p] = vars.startAt[p];\n\t\t\t\t\t}\n\t\t\t\t\t_applyCycle(copy.startAt, targets, i);\n\t\t\t\t}\n\t\t\t\tcopy.delay = delay + (copy.delay || 0);\n\t\t\t\tif (i === l && onCompleteAll) {\n\t\t\t\t\tcopy.onComplete = finalComplete;\n\t\t\t\t}\n\t\t\t\ta[i] = new TweenMax(targets[i], duration, copy);\n\t\t\t\tdelay += stagger;\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\t\t\n\t\tTweenMax.staggerFrom = TweenMax.allFrom = function(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn TweenMax.staggerTo(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\t\t\n\t\tTweenMax.staggerFromTo = TweenMax.allFromTo = function(targets, duration, fromVars, toVars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn TweenMax.staggerTo(targets, duration, toVars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\t\t\t\t\n\t\tTweenMax.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\treturn new TweenMax(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, useFrames:useFrames, overwrite:0});\n\t\t};\n\t\t\n\t\tTweenMax.set = function(target, vars) {\n\t\t\treturn new TweenMax(target, 0, vars);\n\t\t};\n\t\t\n\t\tTweenMax.isTweening = function(target) {\n\t\t\treturn (TweenLite.getTweensOf(target, true).length > 0);\n\t\t};\n\t\t\n\t\tvar _getChildrenOf = function(timeline, includeTimelines) {\n\t\t\t\tvar a = [],\n\t\t\t\t\tcnt = 0,\n\t\t\t\t\ttween = timeline._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tif (tween instanceof TweenLite) {\n\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (includeTimelines) {\n\t\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ta = a.concat(_getChildrenOf(tween, includeTimelines));\n\t\t\t\t\t\tcnt = a.length;\n\t\t\t\t\t}\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t}, \n\t\t\tgetAllTweens = TweenMax.getAllTweens = function(includeTimelines) {\n\t\t\t\treturn _getChildrenOf(Animation._rootTimeline, includeTimelines).concat( _getChildrenOf(Animation._rootFramesTimeline, includeTimelines) );\n\t\t\t};\n\t\t\n\t\tTweenMax.killAll = function(complete, tweens, delayedCalls, timelines) {\n\t\t\tif (tweens == null) {\n\t\t\t\ttweens = true;\n\t\t\t}\n\t\t\tif (delayedCalls == null) {\n\t\t\t\tdelayedCalls = true;\n\t\t\t}\n\t\t\tvar a = getAllTweens((timelines != false)),\n\t\t\t\tl = a.length,\n\t\t\t\tallTrue = (tweens && delayedCalls && timelines),\n\t\t\t\tisDC, tween, i;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\ttween = a[i];\n\t\t\t\tif (allTrue || (tween instanceof SimpleTimeline) || ((isDC = (tween.target === tween.vars.onComplete)) && delayedCalls) || (tweens && !isDC)) {\n\t\t\t\t\tif (complete) {\n\t\t\t\t\t\ttween.totalTime(tween._reversed ? 0 : tween.totalDuration());\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t\n\t\tTweenMax.killChildTweensOf = function(parent, complete) {\n\t\t\tif (parent == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar tl = TweenLiteInternals.tweenLookup,\n\t\t\t\ta, curParent, p, i, l;\n\t\t\tif (typeof(parent) === \"string\") {\n\t\t\t\tparent = TweenLite.selector(parent) || parent;\n\t\t\t}\n\t\t\tif (_isSelector(parent)) {\n\t\t\t\tparent = _slice(parent);\n\t\t\t}\n\t\t\tif (_isArray(parent)) {\n\t\t\t\ti = parent.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tTweenMax.killChildTweensOf(parent[i], complete);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ta = [];\n\t\t\tfor (p in tl) {\n\t\t\t\tcurParent = tl[p].target.parentNode;\n\t\t\t\twhile (curParent) {\n\t\t\t\t\tif (curParent === parent) {\n\t\t\t\t\t\ta = a.concat(tl[p].tweens);\n\t\t\t\t\t}\n\t\t\t\t\tcurParent = curParent.parentNode;\n\t\t\t\t}\n\t\t\t}\n\t\t\tl = a.length;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\tif (complete) {\n\t\t\t\t\ta[i].totalTime(a[i].totalDuration());\n\t\t\t\t}\n\t\t\t\ta[i]._enabled(false, false);\n\t\t\t}\n\t\t};\n\n\t\tvar _changePause = function(pause, tweens, delayedCalls, timelines) {\n\t\t\ttweens = (tweens !== false);\n\t\t\tdelayedCalls = (delayedCalls !== false);\n\t\t\ttimelines = (timelines !== false);\n\t\t\tvar a = getAllTweens(timelines),\n\t\t\t\tallTrue = (tweens && delayedCalls && timelines),\n\t\t\t\ti = a.length,\n\t\t\t\tisDC, tween;\n\t\t\twhile (--i > -1) {\n\t\t\t\ttween = a[i];\n\t\t\t\tif (allTrue || (tween instanceof SimpleTimeline) || ((isDC = (tween.target === tween.vars.onComplete)) && delayedCalls) || (tweens && !isDC)) {\n\t\t\t\t\ttween.paused(pause);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t\n\t\tTweenMax.pauseAll = function(tweens, delayedCalls, timelines) {\n\t\t\t_changePause(true, tweens, delayedCalls, timelines);\n\t\t};\n\t\t\n\t\tTweenMax.resumeAll = function(tweens, delayedCalls, timelines) {\n\t\t\t_changePause(false, tweens, delayedCalls, timelines);\n\t\t};\n\n\t\tTweenMax.globalTimeScale = function(value) {\n\t\t\tvar tl = Animation._rootTimeline,\n\t\t\t\tt = TweenLite.ticker.time;\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn tl._timeScale;\n\t\t\t}\n\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\ttl._startTime = t - ((t - tl._startTime) * tl._timeScale / value);\n\t\t\ttl = Animation._rootFramesTimeline;\n\t\t\tt = TweenLite.ticker.frame;\n\t\t\ttl._startTime = t - ((t - tl._startTime) * tl._timeScale / value);\n\t\t\ttl._timeScale = Animation._rootTimeline._timeScale = value;\n\t\t\treturn value;\n\t\t};\n\t\t\n\t\n//---- GETTERS / SETTERS ----------------------------------------------------------------------------------------------------------\n\t\t\n\t\tp.progress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? this._time / this.duration() : this.totalTime( this.duration() * ((this._yoyo && (this._cycle & 1) !== 0) ? 1 - value : value) + (this._cycle * (this._duration + this._repeatDelay)), suppressEvents);\n\t\t};\n\t\t\n\t\tp.totalProgress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? this._totalTime / this.totalDuration() : this.totalTime( this.totalDuration() * value, suppressEvents);\n\t\t};\n\t\t\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\tif (value > this._duration) {\n\t\t\t\tvalue = this._duration;\n\t\t\t}\n\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\tvalue = (this._duration - value) + (this._cycle * (this._duration + this._repeatDelay));\n\t\t\t} else if (this._repeat !== 0) {\n\t\t\t\tvalue += this._cycle * (this._duration + this._repeatDelay);\n\t\t\t}\n\t\t\treturn this.totalTime(value, suppressEvents);\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._duration; //don't set _dirty = false because there could be repeats that haven't been factored into the _totalDuration yet. Otherwise, if you create a repeated TweenMax and then immediately check its duration(), it would cache the value and the totalDuration would not be correct, thus repeats wouldn't take effect.\n\t\t\t}\n\t\t\treturn Animation.prototype.duration.call(this, value);\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\t//instead of Infinity, we use 999999999999 so that we can accommodate reverses\n\t\t\t\t\tthis._totalDuration = (this._repeat === -1) ? 999999999999 : this._duration * (this._repeat + 1) + (this._repeatDelay * this._repeat);\n\t\t\t\t\tthis._dirty = false;\n\t\t\t\t}\n\t\t\t\treturn this._totalDuration;\n\t\t\t}\n\t\t\treturn (this._repeat === -1) ? this : this.duration( (value - (this._repeat * this._repeatDelay)) / (this._repeat + 1) );\n\t\t};\n\t\t\n\t\tp.repeat = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeat;\n\t\t\t}\n\t\t\tthis._repeat = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\t\t\n\t\tp.repeatDelay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeatDelay;\n\t\t\t}\n\t\t\tthis._repeatDelay = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\t\t\n\t\tp.yoyo = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._yoyo;\n\t\t\t}\n\t\t\tthis._yoyo = value;\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\t\n\t\treturn TweenMax;\n\t\t\n\t}, true);\n\n\n\n\n\n\n\n\n/*\n * ----------------------------------------------------------------\n * TimelineLite\n * ----------------------------------------------------------------\n */\n\t_gsScope._gsDefine(\"TimelineLite\", [\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"], function(Animation, SimpleTimeline, TweenLite) {\n\n\t\tvar TimelineLite = function(vars) {\n\t\t\t\tSimpleTimeline.call(this, vars);\n\t\t\t\tthis._labels = {};\n\t\t\t\tthis.autoRemoveChildren = (this.vars.autoRemoveChildren === true);\n\t\t\t\tthis.smoothChildTiming = (this.vars.smoothChildTiming === true);\n\t\t\t\tthis._sortChildren = true;\n\t\t\t\tthis._onUpdate = this.vars.onUpdate;\n\t\t\t\tvar v = this.vars,\n\t\t\t\t\tval, p;\n\t\t\t\tfor (p in v) {\n\t\t\t\t\tval = v[p];\n\t\t\t\t\tif (_isArray(val)) if (val.join(\"\").indexOf(\"{self}\") !== -1) {\n\t\t\t\t\t\tv[p] = this._swapSelfInParams(val);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (_isArray(v.tweens)) {\n\t\t\t\t\tthis.add(v.tweens, 0, v.align, v.stagger);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_tinyNum = 0.0000000001,\n\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t_internals = TimelineLite._internals = {},\n\t\t\t_isSelector = TweenLiteInternals.isSelector,\n\t\t\t_isArray = TweenLiteInternals.isArray,\n\t\t\t_lazyTweens = TweenLiteInternals.lazyTweens,\n\t\t\t_lazyRender = TweenLiteInternals.lazyRender,\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t_copy = function(vars) {\n\t\t\t\tvar copy = {}, p;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tcopy[p] = vars[p];\n\t\t\t\t}\n\t\t\t\treturn copy;\n\t\t\t},\n\t\t\t_applyCycle = function(vars, targets, i) {\n\t\t\t\tvar alt = vars.cycle,\n\t\t\t\t\tp, val;\n\t\t\t\tfor (p in alt) {\n\t\t\t\t\tval = alt[p];\n\t\t\t\t\tvars[p] = (typeof(val) === \"function\") ? val.call(targets[i], i) : val[i % val.length];\n\t\t\t\t}\n\t\t\t\tdelete vars.cycle;\n\t\t\t},\n\t\t\t_pauseCallback = _internals.pauseCallback = function() {},\n\t\t\t_slice = function(a) { //don't use [].slice because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++]));\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\tp = TimelineLite.prototype = new SimpleTimeline();\n\n\t\tTimelineLite.version = \"1.19.0\";\n\t\tp.constructor = TimelineLite;\n\t\tp.kill()._gc = p._forcingPlayhead = p._hasPause = false;\n\n\t\t/* might use later...\n\t\t//translates a local time inside an animation to the corresponding time on the root/global timeline, factoring in all nesting and timeScales.\n\t\tfunction localToGlobal(time, animation) {\n\t\t\twhile (animation) {\n\t\t\t\ttime = (time / animation._timeScale) + animation._startTime;\n\t\t\t\tanimation = animation.timeline;\n\t\t\t}\n\t\t\treturn time;\n\t\t}\n\n\t\t//translates the supplied time on the root/global timeline into the corresponding local time inside a particular animation, factoring in all nesting and timeScales\n\t\tfunction globalToLocal(time, animation) {\n\t\t\tvar scale = 1;\n\t\t\ttime -= localToGlobal(0, animation);\n\t\t\twhile (animation) {\n\t\t\t\tscale *= animation._timeScale;\n\t\t\t\tanimation = animation.timeline;\n\t\t\t}\n\t\t\treturn time * scale;\n\t\t}\n\t\t*/\n\n\t\tp.to = function(target, duration, vars, position) {\n\t\t\tvar Engine = (vars.repeat && _globals.TweenMax) || TweenLite;\n\t\t\treturn duration ? this.add( new Engine(target, duration, vars), position) : this.set(target, vars, position);\n\t\t};\n\n\t\tp.from = function(target, duration, vars, position) {\n\t\t\treturn this.add( ((vars.repeat && _globals.TweenMax) || TweenLite).from(target, duration, vars), position);\n\t\t};\n\n\t\tp.fromTo = function(target, duration, fromVars, toVars, position) {\n\t\t\tvar Engine = (toVars.repeat && _globals.TweenMax) || TweenLite;\n\t\t\treturn duration ? this.add( Engine.fromTo(target, duration, fromVars, toVars), position) : this.set(target, toVars, position);\n\t\t};\n\n\t\tp.staggerTo = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tvar tl = new TimelineLite({onComplete:onCompleteAll, onCompleteParams:onCompleteAllParams, callbackScope:onCompleteAllScope, smoothChildTiming:this.smoothChildTiming}),\n\t\t\t\tcycle = vars.cycle,\n\t\t\t\tcopy, i;\n\t\t\tif (typeof(targets) === \"string\") {\n\t\t\t\ttargets = TweenLite.selector(targets) || targets;\n\t\t\t}\n\t\t\ttargets = targets || [];\n\t\t\tif (_isSelector(targets)) { //senses if the targets object is a selector. If it is, we should translate it into an array.\n\t\t\t\ttargets = _slice(targets);\n\t\t\t}\n\t\t\tstagger = stagger || 0;\n\t\t\tif (stagger < 0) {\n\t\t\t\ttargets = _slice(targets);\n\t\t\t\ttargets.reverse();\n\t\t\t\tstagger *= -1;\n\t\t\t}\n\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\tcopy = _copy(vars);\n\t\t\t\tif (copy.startAt) {\n\t\t\t\t\tcopy.startAt = _copy(copy.startAt);\n\t\t\t\t\tif (copy.startAt.cycle) {\n\t\t\t\t\t\t_applyCycle(copy.startAt, targets, i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (cycle) {\n\t\t\t\t\t_applyCycle(copy, targets, i);\n\t\t\t\t\tif (copy.duration != null) {\n\t\t\t\t\t\tduration = copy.duration;\n\t\t\t\t\t\tdelete copy.duration;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttl.to(targets[i], duration, copy, i * stagger);\n\t\t\t}\n\t\t\treturn this.add(tl, position);\n\t\t};\n\n\t\tp.staggerFrom = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\tvars.runBackwards = true;\n\t\t\treturn this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\n\t\tp.staggerFromTo = function(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\n\t\tp.call = function(callback, params, scope, position) {\n\t\t\treturn this.add( TweenLite.delayedCall(0, callback, params, scope), position);\n\t\t};\n\n\t\tp.set = function(target, vars, position) {\n\t\t\tposition = this._parseTimeOrLabel(position, 0, true);\n\t\t\tif (vars.immediateRender == null) {\n\t\t\t\tvars.immediateRender = (position === this._time && !this._paused);\n\t\t\t}\n\t\t\treturn this.add( new TweenLite(target, 0, vars), position);\n\t\t};\n\n\t\tTimelineLite.exportRoot = function(vars, ignoreDelayedCalls) {\n\t\t\tvars = vars || {};\n\t\t\tif (vars.smoothChildTiming == null) {\n\t\t\t\tvars.smoothChildTiming = true;\n\t\t\t}\n\t\t\tvar tl = new TimelineLite(vars),\n\t\t\t\troot = tl._timeline,\n\t\t\t\ttween, next;\n\t\t\tif (ignoreDelayedCalls == null) {\n\t\t\t\tignoreDelayedCalls = true;\n\t\t\t}\n\t\t\troot._remove(tl, true);\n\t\t\ttl._startTime = 0;\n\t\t\ttl._rawPrevTime = tl._time = tl._totalTime = root._time;\n\t\t\ttween = root._first;\n\t\t\twhile (tween) {\n\t\t\t\tnext = tween._next;\n\t\t\t\tif (!ignoreDelayedCalls || !(tween instanceof TweenLite && tween.target === tween.vars.onComplete)) {\n\t\t\t\t\ttl.add(tween, tween._startTime - tween._delay);\n\t\t\t\t}\n\t\t\t\ttween = next;\n\t\t\t}\n\t\t\troot.add(tl, 0);\n\t\t\treturn tl;\n\t\t};\n\n\t\tp.add = function(value, position, align, stagger) {\n\t\t\tvar curTime, l, i, child, tl, beforeRawTime;\n\t\t\tif (typeof(position) !== \"number\") {\n\t\t\t\tposition = this._parseTimeOrLabel(position, 0, true, value);\n\t\t\t}\n\t\t\tif (!(value instanceof Animation)) {\n\t\t\t\tif ((value instanceof Array) || (value && value.push && _isArray(value))) {\n\t\t\t\t\talign = align || \"normal\";\n\t\t\t\t\tstagger = stagger || 0;\n\t\t\t\t\tcurTime = position;\n\t\t\t\t\tl = value.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tif (_isArray(child = value[i])) {\n\t\t\t\t\t\t\tchild = new TimelineLite({tweens:child});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.add(child, curTime);\n\t\t\t\t\t\tif (typeof(child) !== \"string\" && typeof(child) !== \"function\") {\n\t\t\t\t\t\t\tif (align === \"sequence\") {\n\t\t\t\t\t\t\t\tcurTime = child._startTime + (child.totalDuration() / child._timeScale);\n\t\t\t\t\t\t\t} else if (align === \"start\") {\n\t\t\t\t\t\t\t\tchild._startTime -= child.delay();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurTime += stagger;\n\t\t\t\t\t}\n\t\t\t\t\treturn this._uncache(true);\n\t\t\t\t} else if (typeof(value) === \"string\") {\n\t\t\t\t\treturn this.addLabel(value, position);\n\t\t\t\t} else if (typeof(value) === \"function\") {\n\t\t\t\t\tvalue = TweenLite.delayedCall(0, value);\n\t\t\t\t} else {\n\t\t\t\t\tthrow(\"Cannot add \" + value + \" into the timeline; it is not a tween, timeline, function, or string.\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tSimpleTimeline.prototype.add.call(this, value, position);\n\n\t\t\t//if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. We should also align the playhead with the parent timeline's when appropriate.\n\t\t\tif (this._gc || this._time === this._duration) if (!this._paused) if (this._duration < this.duration()) {\n\t\t\t\t//in case any of the ancestors had completed but should now be enabled...\n\t\t\t\ttl = this;\n\t\t\t\tbeforeRawTime = (tl.rawTime() > value._startTime); //if the tween is placed on the timeline so that it starts BEFORE the current rawTime, we should align the playhead (move the timeline). This is because sometimes users will create a timeline, let it finish, and much later append a tween and expect it to run instead of jumping to its end state. While technically one could argue that it should jump to its end state, that's not what users intuitively expect.\n\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\tif (beforeRawTime && tl._timeline.smoothChildTiming) {\n\t\t\t\t\t\ttl.totalTime(tl._totalTime, true); //moves the timeline (shifts its startTime) if necessary, and also enables it.\n\t\t\t\t\t} else if (tl._gc) {\n\t\t\t\t\t\ttl._enabled(true, false);\n\t\t\t\t\t}\n\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\tp.remove = function(value) {\n\t\t\tif (value instanceof Animation) {\n\t\t\t\tthis._remove(value, false);\n\t\t\t\tvar tl = value._timeline = value.vars.useFrames ? Animation._rootFramesTimeline : Animation._rootTimeline; //now that it's removed, default it to the root timeline so that if it gets played again, it doesn't jump back into this timeline.\n\t\t\t\tvalue._startTime = (value._paused ? value._pauseTime : tl._time) - ((!value._reversed ? value._totalTime : value.totalDuration() - value._totalTime) / value._timeScale); //ensure that if it gets played again, the timing is correct.\n\t\t\t\treturn this;\n\t\t\t} else if (value instanceof Array || (value && value.push && _isArray(value))) {\n\t\t\t\tvar i = value.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tthis.remove(value[i]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t} else if (typeof(value) === \"string\") {\n\t\t\t\treturn this.removeLabel(value);\n\t\t\t}\n\t\t\treturn this.kill(null, value);\n\t\t};\n\n\t\tp._remove = function(tween, skipDisable) {\n\t\t\tSimpleTimeline.prototype._remove.call(this, tween, skipDisable);\n\t\t\tvar last = this._last;\n\t\t\tif (!last) {\n\t\t\t\tthis._time = this._totalTime = this._duration = this._totalDuration = 0;\n\t\t\t} else if (this._time > last._startTime + last._totalDuration / last._timeScale) {\n\t\t\t\tthis._time = this.duration();\n\t\t\t\tthis._totalTime = this._totalDuration;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.append = function(value, offsetOrLabel) {\n\t\t\treturn this.add(value, this._parseTimeOrLabel(null, offsetOrLabel, true, value));\n\t\t};\n\n\t\tp.insert = p.insertMultiple = function(value, position, align, stagger) {\n\t\t\treturn this.add(value, position || 0, align, stagger);\n\t\t};\n\n\t\tp.appendMultiple = function(tweens, offsetOrLabel, align, stagger) {\n\t\t\treturn this.add(tweens, this._parseTimeOrLabel(null, offsetOrLabel, true, tweens), align, stagger);\n\t\t};\n\n\t\tp.addLabel = function(label, position) {\n\t\t\tthis._labels[label] = this._parseTimeOrLabel(position);\n\t\t\treturn this;\n\t\t};\n\n\t\tp.addPause = function(position, callback, params, scope) {\n\t\t\tvar t = TweenLite.delayedCall(0, _pauseCallback, params, scope || this);\n\t\t\tt.vars.onComplete = t.vars.onReverseComplete = callback;\n\t\t\tt.data = \"isPause\";\n\t\t\tthis._hasPause = true;\n\t\t\treturn this.add(t, position);\n\t\t};\n\n\t\tp.removeLabel = function(label) {\n\t\t\tdelete this._labels[label];\n\t\t\treturn this;\n\t\t};\n\n\t\tp.getLabelTime = function(label) {\n\t\t\treturn (this._labels[label] != null) ? this._labels[label] : -1;\n\t\t};\n\n\t\tp._parseTimeOrLabel = function(timeOrLabel, offsetOrLabel, appendIfAbsent, ignore) {\n\t\t\tvar i;\n\t\t\t//if we're about to add a tween/timeline (or an array of them) that's already a child of this timeline, we should remove it first so that it doesn't contaminate the duration().\n\t\t\tif (ignore instanceof Animation && ignore.timeline === this) {\n\t\t\t\tthis.remove(ignore);\n\t\t\t} else if (ignore && ((ignore instanceof Array) || (ignore.push && _isArray(ignore)))) {\n\t\t\t\ti = ignore.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (ignore[i] instanceof Animation && ignore[i].timeline === this) {\n\t\t\t\t\t\tthis.remove(ignore[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof(offsetOrLabel) === \"string\") {\n\t\t\t\treturn this._parseTimeOrLabel(offsetOrLabel, (appendIfAbsent && typeof(timeOrLabel) === \"number\" && this._labels[offsetOrLabel] == null) ? timeOrLabel - this.duration() : 0, appendIfAbsent);\n\t\t\t}\n\t\t\toffsetOrLabel = offsetOrLabel || 0;\n\t\t\tif (typeof(timeOrLabel) === \"string\" && (isNaN(timeOrLabel) || this._labels[timeOrLabel] != null)) { //if the string is a number like \"1\", check to see if there's a label with that name, otherwise interpret it as a number (absolute value).\n\t\t\t\ti = timeOrLabel.indexOf(\"=\");\n\t\t\t\tif (i === -1) {\n\t\t\t\t\tif (this._labels[timeOrLabel] == null) {\n\t\t\t\t\t\treturn appendIfAbsent ? (this._labels[timeOrLabel] = this.duration() + offsetOrLabel) : offsetOrLabel;\n\t\t\t\t\t}\n\t\t\t\t\treturn this._labels[timeOrLabel] + offsetOrLabel;\n\t\t\t\t}\n\t\t\t\toffsetOrLabel = parseInt(timeOrLabel.charAt(i-1) + \"1\", 10) * Number(timeOrLabel.substr(i+1));\n\t\t\t\ttimeOrLabel = (i > 1) ? this._parseTimeOrLabel(timeOrLabel.substr(0, i-1), 0, appendIfAbsent) : this.duration();\n\t\t\t} else if (timeOrLabel == null) {\n\t\t\t\ttimeOrLabel = this.duration();\n\t\t\t}\n\t\t\treturn Number(timeOrLabel) + offsetOrLabel;\n\t\t};\n\n\t\tp.seek = function(position, suppressEvents) {\n\t\t\treturn this.totalTime((typeof(position) === \"number\") ? position : this._parseTimeOrLabel(position), (suppressEvents !== false));\n\t\t};\n\n\t\tp.stop = function() {\n\t\t\treturn this.paused(true);\n\t\t};\n\n\t\tp.gotoAndPlay = function(position, suppressEvents) {\n\t\t\treturn this.play(position, suppressEvents);\n\t\t};\n\n\t\tp.gotoAndStop = function(position, suppressEvents) {\n\t\t\treturn this.pause(position, suppressEvents);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tif (this._gc) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\tvar totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(),\n\t\t\t\tprevTime = this._time,\n\t\t\t\tprevStart = this._startTime,\n\t\t\t\tprevTimeScale = this._timeScale,\n\t\t\t\tprevPaused = this._paused,\n\t\t\t\ttween, isComplete, next, callback, internalForce, pauseTween, curTime;\n\t\t\tif (time >= totalDur - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\tthis._totalTime = this._time = totalDur;\n\t\t\t\tif (!this._reversed) if (!this._hasPausedChild()) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tinternalForce = !!this._timeline.autoRemoveChildren; //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\tif (this._duration === 0) if ((time <= 0 && time >= -0.0000001) || this._rawPrevTime < 0 || this._rawPrevTime === _tinyNum) if (this._rawPrevTime !== time && this._first) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\tif (this._rawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\ttime = totalDur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7.\n\n\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tthis._totalTime = this._time = 0;\n\t\t\t\tif (prevTime !== 0 || (this._duration === 0 && this._rawPrevTime !== _tinyNum && (this._rawPrevTime > 0 || (time < 0 && this._rawPrevTime >= 0)))) {\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t}\n\t\t\t\tif (time < 0) {\n\t\t\t\t\tthis._active = false;\n\t\t\t\t\tif (this._timeline.autoRemoveChildren && this._reversed) { //ensures proper GC if a timeline is resumed after it's finished reversing.\n\t\t\t\t\t\tinternalForce = isComplete = true;\n\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t} else if (this._rawPrevTime >= 0 && this._first) { //when going back beyond the start, force a render so that zero-duration tweens that sit at the very beginning render their start values properly. Otherwise, if the parent timeline's playhead lands exactly at this timeline's startTime, and then moves backwards, the zero-duration tweens at the beginning would still be at their end state.\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis._rawPrevTime = time;\n\t\t\t\t} else {\n\t\t\t\t\tthis._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\tif (time === 0 && isComplete) { //if there's a zero-duration tween at the very beginning of a timeline and the playhead lands EXACTLY at time 0, that tween will correctly render its end values, but we need to keep the timeline alive for one more render so that the beginning values render properly as the parent's playhead keeps moving beyond the begining. Imagine obj.x starts at 0 and then we do tl.set(obj, {x:100}).to(obj, 1, {x:200}) and then later we tl.reverse()...the goal is to have obj.x revert to 0. If the playhead happens to land on exactly 0, without this chunk of code, it'd complete the timeline and remove it from the rendering queue (not good).\n\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\twhile (tween && tween._startTime === 0) {\n\t\t\t\t\t\t\tif (!tween._duration) {\n\t\t\t\t\t\t\t\tisComplete = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttime = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)\n\t\t\t\t\tif (!this._initted) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif (this._hasPause && !this._forcingPlayhead && !suppressEvents) {\n\t\t\t\t\tif (time >= prevTime) {\n\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\twhile (tween && tween._startTime <= time && !pauseTween) {\n\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && !tween.ratio && !(tween._startTime === 0 && this._rawPrevTime === 0)) {\n\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween = this._last;\n\t\t\t\t\t\twhile (tween && tween._startTime >= time && !pauseTween) {\n\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && tween._rawPrevTime > 0) {\n\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._prev;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (pauseTween) {\n\t\t\t\t\t\tthis._time = time = pauseTween._startTime;\n\t\t\t\t\t\tthis._totalTime = time + (this._cycle * (this._totalDuration + this._repeatDelay));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._totalTime = this._time = this._rawPrevTime = time;\n\t\t\t}\n\t\t\tif ((this._time === prevTime || !this._first) && !force && !internalForce && !pauseTween) {\n\t\t\t\treturn;\n\t\t\t} else if (!this._initted) {\n\t\t\t\tthis._initted = true;\n\t\t\t}\n\n\t\t\tif (!this._active) if (!this._paused && this._time !== prevTime && time > 0) {\n\t\t\t\tthis._active = true;  //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example.\n\t\t\t}\n\n\t\t\tif (prevTime === 0) if (this.vars.onStart) if (this._time !== 0 || !this._duration) if (!suppressEvents) {\n\t\t\t\tthis._callback(\"onStart\");\n\t\t\t}\n\n\t\t\tcurTime = this._time;\n\t\t\tif (curTime >= prevTime) {\n\t\t\t\ttween = this._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= curTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttween = this._last;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._prev; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tpauseTween = tween._prev; //the linked list is organized by _startTime, thus it's possible that a tween could start BEFORE the pause and end after it, in which case it would be positioned before the pause tween in the linked list, but we should render it before we pause() the timeline and cease rendering. This is only a concern when going in reverse.\n\t\t\t\t\t\t\twhile (pauseTween && pauseTween.endTime() > this._time) {\n\t\t\t\t\t\t\t\tpauseTween.render( (pauseTween._reversed ? pauseTween.totalDuration() - ((time - pauseTween._startTime) * pauseTween._timeScale) : (time - pauseTween._startTime) * pauseTween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t\tpauseTween = pauseTween._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpauseTween = null;\n\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this._onUpdate) if (!suppressEvents) {\n\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t}\n\n\t\t\tif (callback) if (!this._gc) if (prevStart === this._startTime || prevTimeScale !== this._timeScale) if (this._time === 0 || totalDur >= this.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onComplete on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tthis._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\tthis._callback(callback);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._hasPausedChild = function() {\n\t\t\tvar tween = this._first;\n\t\t\twhile (tween) {\n\t\t\t\tif (tween._paused || ((tween instanceof TimelineLite) && tween._hasPausedChild())) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp.getChildren = function(nested, tweens, timelines, ignoreBeforeTime) {\n\t\t\tignoreBeforeTime = ignoreBeforeTime || -9999999999;\n\t\t\tvar a = [],\n\t\t\t\ttween = this._first,\n\t\t\t\tcnt = 0;\n\t\t\twhile (tween) {\n\t\t\t\tif (tween._startTime < ignoreBeforeTime) {\n\t\t\t\t\t//do nothing\n\t\t\t\t} else if (tween instanceof TweenLite) {\n\t\t\t\t\tif (tweens !== false) {\n\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (timelines !== false) {\n\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t}\n\t\t\t\t\tif (nested !== false) {\n\t\t\t\t\t\ta = a.concat(tween.getChildren(true, tweens, timelines));\n\t\t\t\t\t\tcnt = a.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\t\tp.getTweensOf = function(target, nested) {\n\t\t\tvar disabled = this._gc,\n\t\t\t\ta = [],\n\t\t\t\tcnt = 0,\n\t\t\t\ttweens, i;\n\t\t\tif (disabled) {\n\t\t\t\tthis._enabled(true, true); //getTweensOf() filters out disabled tweens, and we have to mark them as _gc = true when the timeline completes in order to allow clean garbage collection, so temporarily re-enable the timeline here.\n\t\t\t}\n\t\t\ttweens = TweenLite.getTweensOf(target);\n\t\t\ti = tweens.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (tweens[i].timeline === this || (nested && this._contains(tweens[i]))) {\n\t\t\t\t\ta[cnt++] = tweens[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (disabled) {\n\t\t\t\tthis._enabled(false, true);\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\t\tp.recent = function() {\n\t\t\treturn this._recent;\n\t\t};\n\n\t\tp._contains = function(tween) {\n\t\t\tvar tl = tween.timeline;\n\t\t\twhile (tl) {\n\t\t\t\tif (tl === this) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\ttl = tl.timeline;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp.shiftChildren = function(amount, adjustLabels, ignoreBeforeTime) {\n\t\t\tignoreBeforeTime = ignoreBeforeTime || 0;\n\t\t\tvar tween = this._first,\n\t\t\t\tlabels = this._labels,\n\t\t\t\tp;\n\t\t\twhile (tween) {\n\t\t\t\tif (tween._startTime >= ignoreBeforeTime) {\n\t\t\t\t\ttween._startTime += amount;\n\t\t\t\t}\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\tif (adjustLabels) {\n\t\t\t\tfor (p in labels) {\n\t\t\t\t\tif (labels[p] >= ignoreBeforeTime) {\n\t\t\t\t\t\tlabels[p] += amount;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp._kill = function(vars, target) {\n\t\t\tif (!vars && !target) {\n\t\t\t\treturn this._enabled(false, false);\n\t\t\t}\n\t\t\tvar tweens = (!target) ? this.getChildren(true, true, false) : this.getTweensOf(target),\n\t\t\t\ti = tweens.length,\n\t\t\t\tchanged = false;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (tweens[i]._kill(vars, target)) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tp.clear = function(labels) {\n\t\t\tvar tweens = this.getChildren(false, true, true),\n\t\t\t\ti = tweens.length;\n\t\t\tthis._time = this._totalTime = 0;\n\t\t\twhile (--i > -1) {\n\t\t\t\ttweens[i]._enabled(false, false);\n\t\t\t}\n\t\t\tif (labels !== false) {\n\t\t\t\tthis._labels = {};\n\t\t\t}\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tvar tween = this._first;\n\t\t\twhile (tween) {\n\t\t\t\ttween.invalidate();\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\treturn Animation.prototype.invalidate.call(this);;\n\t\t};\n\n\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\tif (enabled === this._gc) {\n\t\t\t\tvar tween = this._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\ttween._enabled(enabled, true);\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn SimpleTimeline.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t};\n\n\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\tthis._forcingPlayhead = true;\n\t\t\tvar val = Animation.prototype.totalTime.apply(this, arguments);\n\t\t\tthis._forcingPlayhead = false;\n\t\t\treturn val;\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tthis.totalDuration(); //just triggers recalculation\n\t\t\t\t}\n\t\t\t\treturn this._duration;\n\t\t\t}\n\t\t\tif (this.duration() !== 0 && value !== 0) {\n\t\t\t\tthis.timeScale(this._duration / value);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tvar max = 0,\n\t\t\t\t\t\ttween = this._last,\n\t\t\t\t\t\tprevStart = 999999999999,\n\t\t\t\t\t\tprev, end;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tprev = tween._prev; //record it here in case the tween changes position in the sequence...\n\t\t\t\t\t\tif (tween._dirty) {\n\t\t\t\t\t\t\ttween.totalDuration(); //could change the tween._startTime, so make sure the tween's cache is clean before analyzing it.\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tween._startTime > prevStart && this._sortChildren && !tween._paused) { //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence\n\t\t\t\t\t\t\tthis.add(tween, tween._startTime - tween._delay);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprevStart = tween._startTime;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tween._startTime < 0 && !tween._paused) { //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found.\n\t\t\t\t\t\t\tmax -= tween._startTime;\n\t\t\t\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\t\t\t\tthis._startTime += tween._startTime / this._timeScale;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.shiftChildren(-tween._startTime, false, -9999999999);\n\t\t\t\t\t\t\tprevStart = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tend = tween._startTime + (tween._totalDuration / tween._timeScale);\n\t\t\t\t\t\tif (end > max) {\n\t\t\t\t\t\t\tmax = end;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = prev;\n\t\t\t\t\t}\n\t\t\t\t\tthis._duration = this._totalDuration = max;\n\t\t\t\t\tthis._dirty = false;\n\t\t\t\t}\n\t\t\t\treturn this._totalDuration;\n\t\t\t}\n\t\t\treturn (value && this.totalDuration()) ? this.timeScale(this._totalDuration / value) : this;\n\t\t};\n\n\t\tp.paused = function(value) {\n\t\t\tif (!value) { //if there's a pause directly at the spot from where we're unpausing, skip it.\n\t\t\t\tvar tween = this._first,\n\t\t\t\t\ttime = this._time;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tif (tween._startTime === time && tween.data === \"isPause\") {\n\t\t\t\t\t\ttween._rawPrevTime = 0; //remember, _rawPrevTime is how zero-duration tweens/callbacks sense directionality and determine whether or not to fire. If _rawPrevTime is the same as _startTime on the next render, it won't fire.\n\t\t\t\t\t}\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Animation.prototype.paused.apply(this, arguments);\n\t\t};\n\n\t\tp.usesFrames = function() {\n\t\t\tvar tl = this._timeline;\n\t\t\twhile (tl._timeline) {\n\t\t\t\ttl = tl._timeline;\n\t\t\t}\n\t\t\treturn (tl === Animation._rootFramesTimeline);\n\t\t};\n\n\t\tp.rawTime = function() {\n\t\t\treturn this._paused ? this._totalTime : (this._timeline.rawTime() - this._startTime) * this._timeScale;\n\t\t};\n\n\t\treturn TimelineLite;\n\n\t}, true);\n\n\n\n\n\n\n\n\n\t\n\t\n\t\n\t\n\t\n/*\n * ----------------------------------------------------------------\n * TimelineMax\n * ----------------------------------------------------------------\n */\n\t_gsScope._gsDefine(\"TimelineMax\", [\"TimelineLite\",\"TweenLite\",\"easing.Ease\"], function(TimelineLite, TweenLite, Ease) {\n\n\t\tvar TimelineMax = function(vars) {\n\t\t\t\tTimelineLite.call(this, vars);\n\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\tthis._cycle = 0;\n\t\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\t\tthis._dirty = true;\n\t\t\t},\n\t\t\t_tinyNum = 0.0000000001,\n\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t_lazyTweens = TweenLiteInternals.lazyTweens,\n\t\t\t_lazyRender = TweenLiteInternals.lazyRender,\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t_easeNone = new Ease(null, null, 1, 0),\n\t\t\tp = TimelineMax.prototype = new TimelineLite();\n\n\t\tp.constructor = TimelineMax;\n\t\tp.kill()._gc = false;\n\t\tTimelineMax.version = \"1.19.0\";\n\n\t\tp.invalidate = function() {\n\t\t\tthis._yoyo = (this.vars.yoyo === true);\n\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\tthis._uncache(true);\n\t\t\treturn TimelineLite.prototype.invalidate.call(this);\n\t\t};\n\n\t\tp.addCallback = function(callback, position, params, scope) {\n\t\t\treturn this.add( TweenLite.delayedCall(0, callback, params, scope), position);\n\t\t};\n\n\t\tp.removeCallback = function(callback, position) {\n\t\t\tif (callback) {\n\t\t\t\tif (position == null) {\n\t\t\t\t\tthis._kill(null, callback);\n\t\t\t\t} else {\n\t\t\t\t\tvar a = this.getTweensOf(callback, false),\n\t\t\t\t\t\ti = a.length,\n\t\t\t\t\t\ttime = this._parseTimeOrLabel(position);\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (a[i]._startTime === time) {\n\t\t\t\t\t\t\ta[i]._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.removePause = function(position) {\n\t\t\treturn this.removeCallback(TimelineLite._internals.pauseCallback, position);\n\t\t};\n\n\t\tp.tweenTo = function(position, vars) {\n\t\t\tvars = vars || {};\n\t\t\tvar copy = {ease:_easeNone, useFrames:this.usesFrames(), immediateRender:false},\n\t\t\t\tEngine = (vars.repeat && _globals.TweenMax) || TweenLite,\n\t\t\t\tduration, p, t;\n\t\t\tfor (p in vars) {\n\t\t\t\tcopy[p] = vars[p];\n\t\t\t}\n\t\t\tcopy.time = this._parseTimeOrLabel(position);\n\t\t\tduration = (Math.abs(Number(copy.time) - this._time) / this._timeScale) || 0.001;\n\t\t\tt = new Engine(this, duration, copy);\n\t\t\tcopy.onStart = function() {\n\t\t\t\tt.target.paused(true);\n\t\t\t\tif (t.vars.time !== t.target.time() && duration === t.duration()) { //don't make the duration zero - if it's supposed to be zero, don't worry because it's already initting the tween and will complete immediately, effectively making the duration zero anyway. If we make duration zero, the tween won't run at all.\n\t\t\t\t\tt.duration( Math.abs( t.vars.time - t.target.time()) / t.target._timeScale );\n\t\t\t\t}\n\t\t\t\tif (vars.onStart) { //in case the user had an onStart in the vars - we don't want to overwrite it.\n\t\t\t\t\tt._callback(\"onStart\");\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn t;\n\t\t};\n\n\t\tp.tweenFromTo = function(fromPosition, toPosition, vars) {\n\t\t\tvars = vars || {};\n\t\t\tfromPosition = this._parseTimeOrLabel(fromPosition);\n\t\t\tvars.startAt = {onComplete:this.seek, onCompleteParams:[fromPosition], callbackScope:this};\n\t\t\tvars.immediateRender = (vars.immediateRender !== false);\n\t\t\tvar t = this.tweenTo(toPosition, vars);\n\t\t\treturn t.duration((Math.abs( t.vars.time - fromPosition) / this._timeScale) || 0.001);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tif (this._gc) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\tvar totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(),\n\t\t\t\tdur = this._duration,\n\t\t\t\tprevTime = this._time,\n\t\t\t\tprevTotalTime = this._totalTime,\n\t\t\t\tprevStart = this._startTime,\n\t\t\t\tprevTimeScale = this._timeScale,\n\t\t\t\tprevRawPrevTime = this._rawPrevTime,\n\t\t\t\tprevPaused = this._paused,\n\t\t\t\tprevCycle = this._cycle,\n\t\t\t\ttween, isComplete, next, callback, internalForce, cycleDuration, pauseTween, curTime;\n\t\t\tif (time >= totalDur - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\tif (!this._locked) {\n\t\t\t\t\tthis._totalTime = totalDur;\n\t\t\t\t\tthis._cycle = this._repeat;\n\t\t\t\t}\n\t\t\t\tif (!this._reversed) if (!this._hasPausedChild()) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tinternalForce = !!this._timeline.autoRemoveChildren; //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\tif (this._duration === 0) if ((time <= 0 && time >= -0.0000001) || prevRawPrevTime < 0 || prevRawPrevTime === _tinyNum) if (prevRawPrevTime !== time && this._first) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._rawPrevTime = (this._duration || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\t\tthis._time = time = 0;\n\t\t\t\t} else {\n\t\t\t\t\tthis._time = dur;\n\t\t\t\t\ttime = dur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7. We cannot do less then 0.0001 because the same issue can occur when the duration is extremely large like 999999999999 in which case adding 0.00000001, for example, causes it to act like nothing was added.\n\t\t\t\t}\n\n\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tif (!this._locked) {\n\t\t\t\t\tthis._totalTime = this._cycle = 0;\n\t\t\t\t}\n\t\t\t\tthis._time = 0;\n\t\t\t\tif (prevTime !== 0 || (dur === 0 && prevRawPrevTime !== _tinyNum && (prevRawPrevTime > 0 || (time < 0 && prevRawPrevTime >= 0)) && !this._locked)) { //edge case for checking time < 0 && prevRawPrevTime >= 0: a zero-duration fromTo() tween inside a zero-duration timeline (yeah, very rare)\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t}\n\t\t\t\tif (time < 0) {\n\t\t\t\t\tthis._active = false;\n\t\t\t\t\tif (this._timeline.autoRemoveChildren && this._reversed) {\n\t\t\t\t\t\tinternalForce = isComplete = true;\n\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t} else if (prevRawPrevTime >= 0 && this._first) { //when going back beyond the start, force a render so that zero-duration tweens that sit at the very beginning render their start values properly. Otherwise, if the parent timeline's playhead lands exactly at this timeline's startTime, and then moves backwards, the zero-duration tweens at the beginning would still be at their end state.\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis._rawPrevTime = time;\n\t\t\t\t} else {\n\t\t\t\t\tthis._rawPrevTime = (dur || !suppressEvents || time || this._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\tif (time === 0 && isComplete) { //if there's a zero-duration tween at the very beginning of a timeline and the playhead lands EXACTLY at time 0, that tween will correctly render its end values, but we need to keep the timeline alive for one more render so that the beginning values render properly as the parent's playhead keeps moving beyond the begining. Imagine obj.x starts at 0 and then we do tl.set(obj, {x:100}).to(obj, 1, {x:200}) and then later we tl.reverse()...the goal is to have obj.x revert to 0. If the playhead happens to land on exactly 0, without this chunk of code, it'd complete the timeline and remove it from the rendering queue (not good).\n\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\twhile (tween && tween._startTime === 0) {\n\t\t\t\t\t\t\tif (!tween._duration) {\n\t\t\t\t\t\t\t\tisComplete = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttime = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)\n\t\t\t\t\tif (!this._initted) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tif (dur === 0 && prevRawPrevTime < 0) { //without this, zero-duration repeating timelines (like with a simple callback nested at the very beginning and a repeatDelay) wouldn't render the first time through.\n\t\t\t\t\tinternalForce = true;\n\t\t\t\t}\n\t\t\t\tthis._time = this._rawPrevTime = time;\n\t\t\t\tif (!this._locked) {\n\t\t\t\t\tthis._totalTime = time;\n\t\t\t\t\tif (this._repeat !== 0) {\n\t\t\t\t\t\tcycleDuration = dur + this._repeatDelay;\n\t\t\t\t\t\tthis._cycle = (this._totalTime / cycleDuration) >> 0; //originally _totalTime % cycleDuration but floating point errors caused problems, so I normalized it. (4 % 0.8 should be 0 but it gets reported as 0.79999999!)\n\t\t\t\t\t\tif (this._cycle !== 0) if (this._cycle === this._totalTime / cycleDuration && prevTotalTime <= time) {\n\t\t\t\t\t\t\tthis._cycle--; //otherwise when rendered exactly at the end time, it will act as though it is repeating (at the beginning)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._time = this._totalTime - (this._cycle * cycleDuration);\n\t\t\t\t\t\tif (this._yoyo) if ((this._cycle & 1) !== 0) {\n\t\t\t\t\t\t\tthis._time = dur - this._time;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this._time > dur) {\n\t\t\t\t\t\t\tthis._time = dur;\n\t\t\t\t\t\t\ttime = dur + 0.0001; //to avoid occasional floating point rounding error\n\t\t\t\t\t\t} else if (this._time < 0) {\n\t\t\t\t\t\t\tthis._time = time = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttime = this._time;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._hasPause && !this._forcingPlayhead && !suppressEvents) {\n\t\t\t\t\ttime = this._time;\n\t\t\t\t\tif (time >= prevTime) {\n\t\t\t\t\t\ttween = this._first;\n\t\t\t\t\t\twhile (tween && tween._startTime <= time && !pauseTween) {\n\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && !tween.ratio && !(tween._startTime === 0 && this._rawPrevTime === 0)) {\n\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween = this._last;\n\t\t\t\t\t\twhile (tween && tween._startTime >= time && !pauseTween) {\n\t\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && tween._rawPrevTime > 0) {\n\t\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._prev;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (pauseTween) {\n\t\t\t\t\t\tthis._time = time = pauseTween._startTime;\n\t\t\t\t\t\tthis._totalTime = time + (this._cycle * (this._totalDuration + this._repeatDelay));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif (this._cycle !== prevCycle) if (!this._locked) {\n\t\t\t\t/*\n\t\t\t\tmake sure children at the end/beginning of the timeline are rendered properly. If, for example,\n\t\t\t\ta 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which\n\t\t\t\twould get transated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there\n\t\t\t\tcould be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So\n\t\t\t\twe need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must\n\t\t\t\tensure that zero-duration tweens at the very beginning or end of the TimelineMax work.\n\t\t\t\t*/\n\t\t\t\tvar backwards = (this._yoyo && (prevCycle & 1) !== 0),\n\t\t\t\t\twrap = (backwards === (this._yoyo && (this._cycle & 1) !== 0)),\n\t\t\t\t\trecTotalTime = this._totalTime,\n\t\t\t\t\trecCycle = this._cycle,\n\t\t\t\t\trecRawPrevTime = this._rawPrevTime,\n\t\t\t\t\trecTime = this._time;\n\n\t\t\t\tthis._totalTime = prevCycle * dur;\n\t\t\t\tif (this._cycle < prevCycle) {\n\t\t\t\t\tbackwards = !backwards;\n\t\t\t\t} else {\n\t\t\t\t\tthis._totalTime += dur;\n\t\t\t\t}\n\t\t\t\tthis._time = prevTime; //temporarily revert _time so that render() renders the children in the correct order. Without this, tweens won't rewind correctly. We could arhictect things in a \"cleaner\" way by splitting out the rendering queue into a separate method but for performance reasons, we kept it all inside this method.\n\n\t\t\t\tthis._rawPrevTime = (dur === 0) ? prevRawPrevTime - 0.0001 : prevRawPrevTime;\n\t\t\t\tthis._cycle = prevCycle;\n\t\t\t\tthis._locked = true; //prevents changes to totalTime and skips repeat/yoyo behavior when we recursively call render()\n\t\t\t\tprevTime = (backwards) ? 0 : dur;\n\t\t\t\tthis.render(prevTime, suppressEvents, (dur === 0));\n\t\t\t\tif (!suppressEvents) if (!this._gc) {\n\t\t\t\t\tif (this.vars.onRepeat) {\n\t\t\t\t\t\tthis._callback(\"onRepeat\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (prevTime !== this._time) { //in case there's a callback like onComplete in a nested tween/timeline that changes the playhead position, like via seek(), we should just abort.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (wrap) {\n\t\t\t\t\tprevTime = (backwards) ? dur + 0.0001 : -0.0001;\n\t\t\t\t\tthis.render(prevTime, true, false);\n\t\t\t\t}\n\t\t\t\tthis._locked = false;\n\t\t\t\tif (this._paused && !prevPaused) { //if the render() triggered callback that paused this timeline, we should abort (very rare, but possible)\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._time = recTime;\n\t\t\t\tthis._totalTime = recTotalTime;\n\t\t\t\tthis._cycle = recCycle;\n\t\t\t\tthis._rawPrevTime = recRawPrevTime;\n\t\t\t}\n\n\t\t\tif ((this._time === prevTime || !this._first) && !force && !internalForce && !pauseTween) {\n\t\t\t\tif (prevTotalTime !== this._totalTime) if (this._onUpdate) if (!suppressEvents) { //so that onUpdate fires even during the repeatDelay - as long as the totalTime changed, we should trigger onUpdate.\n\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (!this._initted) {\n\t\t\t\tthis._initted = true;\n\t\t\t}\n\n\t\t\tif (!this._active) if (!this._paused && this._totalTime !== prevTotalTime && time > 0) {\n\t\t\t\tthis._active = true;  //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example.\n\t\t\t}\n\n\t\t\tif (prevTotalTime === 0) if (this.vars.onStart) if (this._totalTime !== 0 || !this._totalDuration) if (!suppressEvents) {\n\t\t\t\tthis._callback(\"onStart\");\n\t\t\t}\n\n\t\t\tcurTime = this._time;\n\t\t\tif (curTime >= prevTime) {\n\t\t\t\ttween = this._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= this._time && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttween = this._last;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._prev; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== this._time || (this._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tpauseTween = tween._prev; //the linked list is organized by _startTime, thus it's possible that a tween could start BEFORE the pause and end after it, in which case it would be positioned before the pause tween in the linked list, but we should render it before we pause() the timeline and cease rendering. This is only a concern when going in reverse.\n\t\t\t\t\t\t\twhile (pauseTween && pauseTween.endTime() > this._time) {\n\t\t\t\t\t\t\t\tpauseTween.render( (pauseTween._reversed ? pauseTween.totalDuration() - ((time - pauseTween._startTime) * pauseTween._timeScale) : (time - pauseTween._startTime) * pauseTween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t\tpauseTween = pauseTween._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpauseTween = null;\n\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this._onUpdate) if (!suppressEvents) {\n\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t}\n\t\t\tif (callback) if (!this._locked) if (!this._gc) if (prevStart === this._startTime || prevTimeScale !== this._timeScale) if (this._time === 0 || totalDur >= this.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onComplete on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tthis._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\tthis._callback(callback);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp.getActive = function(nested, tweens, timelines) {\n\t\t\tif (nested == null) {\n\t\t\t\tnested = true;\n\t\t\t}\n\t\t\tif (tweens == null) {\n\t\t\t\ttweens = true;\n\t\t\t}\n\t\t\tif (timelines == null) {\n\t\t\t\ttimelines = false;\n\t\t\t}\n\t\t\tvar a = [],\n\t\t\t\tall = this.getChildren(nested, tweens, timelines),\n\t\t\t\tcnt = 0,\n\t\t\t\tl = all.length,\n\t\t\t\ti, tween;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\ttween = all[i];\n\t\t\t\tif (tween.isActive()) {\n\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\n\t\tp.getLabelAfter = function(time) {\n\t\t\tif (!time) if (time !== 0) { //faster than isNan()\n\t\t\t\ttime = this._time;\n\t\t\t}\n\t\t\tvar labels = this.getLabelsArray(),\n\t\t\t\tl = labels.length,\n\t\t\t\ti;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\tif (labels[i].time > time) {\n\t\t\t\t\treturn labels[i].name;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t\tp.getLabelBefore = function(time) {\n\t\t\tif (time == null) {\n\t\t\t\ttime = this._time;\n\t\t\t}\n\t\t\tvar labels = this.getLabelsArray(),\n\t\t\t\ti = labels.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (labels[i].time < time) {\n\t\t\t\t\treturn labels[i].name;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t\tp.getLabelsArray = function() {\n\t\t\tvar a = [],\n\t\t\t\tcnt = 0,\n\t\t\t\tp;\n\t\t\tfor (p in this._labels) {\n\t\t\t\ta[cnt++] = {time:this._labels[p], name:p};\n\t\t\t}\n\t\t\ta.sort(function(a,b) {\n\t\t\t\treturn a.time - b.time;\n\t\t\t});\n\t\t\treturn a;\n\t\t};\n\n\n//---- GETTERS / SETTERS -------------------------------------------------------------------------------------------------------\n\n\t\tp.progress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? this._time / this.duration() : this.totalTime( this.duration() * ((this._yoyo && (this._cycle & 1) !== 0) ? 1 - value : value) + (this._cycle * (this._duration + this._repeatDelay)), suppressEvents);\n\t\t};\n\n\t\tp.totalProgress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? this._totalTime / this.totalDuration() : this.totalTime( this.totalDuration() * value, suppressEvents);\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tTimelineLite.prototype.totalDuration.call(this); //just forces refresh\n\t\t\t\t\t//Instead of Infinity, we use 999999999999 so that we can accommodate reverses.\n\t\t\t\t\tthis._totalDuration = (this._repeat === -1) ? 999999999999 : this._duration * (this._repeat + 1) + (this._repeatDelay * this._repeat);\n\t\t\t\t}\n\t\t\t\treturn this._totalDuration;\n\t\t\t}\n\t\t\treturn (this._repeat === -1 || !value) ? this : this.timeScale( this.totalDuration() / value );\n\t\t};\n\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\tif (value > this._duration) {\n\t\t\t\tvalue = this._duration;\n\t\t\t}\n\t\t\tif (this._yoyo && (this._cycle & 1) !== 0) {\n\t\t\t\tvalue = (this._duration - value) + (this._cycle * (this._duration + this._repeatDelay));\n\t\t\t} else if (this._repeat !== 0) {\n\t\t\t\tvalue += this._cycle * (this._duration + this._repeatDelay);\n\t\t\t}\n\t\t\treturn this.totalTime(value, suppressEvents);\n\t\t};\n\n\t\tp.repeat = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeat;\n\t\t\t}\n\t\t\tthis._repeat = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.repeatDelay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeatDelay;\n\t\t\t}\n\t\t\tthis._repeatDelay = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.yoyo = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._yoyo;\n\t\t\t}\n\t\t\tthis._yoyo = value;\n\t\t\treturn this;\n\t\t};\n\n\t\tp.currentLabel = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.getLabelBefore(this._time + 0.00000001);\n\t\t\t}\n\t\t\treturn this.seek(value, true);\n\t\t};\n\n\t\treturn TimelineMax;\n\n\t}, true);\n\t\n\n\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n/*\n * ----------------------------------------------------------------\n * BezierPlugin\n * ----------------------------------------------------------------\n */\n\t(function() {\n\n\t\tvar _RAD2DEG = 180 / Math.PI,\n\t\t\t_r1 = [],\n\t\t\t_r2 = [],\n\t\t\t_r3 = [],\n\t\t\t_corProps = {},\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\tSegment = function(a, b, c, d) {\n\t\t\t\tif (c === d) { //if c and d match, the final autoRotate value could lock at -90 degrees, so differentiate them slightly.\n\t\t\t\t\tc = d - (d - b) / 1000000;\n\t\t\t\t}\n\t\t\t\tif (a === b) { //if a and b match, the starting autoRotate value could lock at -90 degrees, so differentiate them slightly.\n\t\t\t\t\tb = a + (c - a) / 1000000;\n\t\t\t\t}\n\t\t\t\tthis.a = a;\n\t\t\t\tthis.b = b;\n\t\t\t\tthis.c = c;\n\t\t\t\tthis.d = d;\n\t\t\t\tthis.da = d - a;\n\t\t\t\tthis.ca = c - a;\n\t\t\t\tthis.ba = b - a;\n\t\t\t},\n\t\t\t_correlate = \",x,y,z,left,top,right,bottom,marginTop,marginLeft,marginRight,marginBottom,paddingLeft,paddingTop,paddingRight,paddingBottom,backgroundPosition,backgroundPosition_y,\",\n\t\t\tcubicToQuadratic = function(a, b, c, d) {\n\t\t\t\tvar q1 = {a:a},\n\t\t\t\t\tq2 = {},\n\t\t\t\t\tq3 = {},\n\t\t\t\t\tq4 = {c:d},\n\t\t\t\t\tmab = (a + b) / 2,\n\t\t\t\t\tmbc = (b + c) / 2,\n\t\t\t\t\tmcd = (c + d) / 2,\n\t\t\t\t\tmabc = (mab + mbc) / 2,\n\t\t\t\t\tmbcd = (mbc + mcd) / 2,\n\t\t\t\t\tm8 = (mbcd - mabc) / 8;\n\t\t\t\tq1.b = mab + (a - mab) / 4;\n\t\t\t\tq2.b = mabc + m8;\n\t\t\t\tq1.c = q2.a = (q1.b + q2.b) / 2;\n\t\t\t\tq2.c = q3.a = (mabc + mbcd) / 2;\n\t\t\t\tq3.b = mbcd - m8;\n\t\t\t\tq4.b = mcd + (d - mcd) / 4;\n\t\t\t\tq3.c = q4.a = (q3.b + q4.b) / 2;\n\t\t\t\treturn [q1, q2, q3, q4];\n\t\t\t},\n\t\t\t_calculateControlPoints = function(a, curviness, quad, basic, correlate) {\n\t\t\t\tvar l = a.length - 1,\n\t\t\t\t\tii = 0,\n\t\t\t\t\tcp1 = a[0].a,\n\t\t\t\t\ti, p1, p2, p3, seg, m1, m2, mm, cp2, qb, r1, r2, tl;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tseg = a[ii];\n\t\t\t\t\tp1 = seg.a;\n\t\t\t\t\tp2 = seg.d;\n\t\t\t\t\tp3 = a[ii+1].d;\n\n\t\t\t\t\tif (correlate) {\n\t\t\t\t\t\tr1 = _r1[i];\n\t\t\t\t\t\tr2 = _r2[i];\n\t\t\t\t\t\ttl = ((r2 + r1) * curviness * 0.25) / (basic ? 0.5 : _r3[i] || 0.5);\n\t\t\t\t\t\tm1 = p2 - (p2 - p1) * (basic ? curviness * 0.5 : (r1 !== 0 ? tl / r1 : 0));\n\t\t\t\t\t\tm2 = p2 + (p3 - p2) * (basic ? curviness * 0.5 : (r2 !== 0 ? tl / r2 : 0));\n\t\t\t\t\t\tmm = p2 - (m1 + (((m2 - m1) * ((r1 * 3 / (r1 + r2)) + 0.5) / 4) || 0));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tm1 = p2 - (p2 - p1) * curviness * 0.5;\n\t\t\t\t\t\tm2 = p2 + (p3 - p2) * curviness * 0.5;\n\t\t\t\t\t\tmm = p2 - (m1 + m2) / 2;\n\t\t\t\t\t}\n\t\t\t\t\tm1 += mm;\n\t\t\t\t\tm2 += mm;\n\n\t\t\t\t\tseg.c = cp2 = m1;\n\t\t\t\t\tif (i !== 0) {\n\t\t\t\t\t\tseg.b = cp1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tseg.b = cp1 = seg.a + (seg.c - seg.a) * 0.6; //instead of placing b on a exactly, we move it inline with c so that if the user specifies an ease like Back.easeIn or Elastic.easeIn which goes BEYOND the beginning, it will do so smoothly.\n\t\t\t\t\t}\n\n\t\t\t\t\tseg.da = p2 - p1;\n\t\t\t\t\tseg.ca = cp2 - p1;\n\t\t\t\t\tseg.ba = cp1 - p1;\n\n\t\t\t\t\tif (quad) {\n\t\t\t\t\t\tqb = cubicToQuadratic(p1, cp1, cp2, p2);\n\t\t\t\t\t\ta.splice(ii, 1, qb[0], qb[1], qb[2], qb[3]);\n\t\t\t\t\t\tii += 4;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tii++;\n\t\t\t\t\t}\n\n\t\t\t\t\tcp1 = m2;\n\t\t\t\t}\n\t\t\t\tseg = a[ii];\n\t\t\t\tseg.b = cp1;\n\t\t\t\tseg.c = cp1 + (seg.d - cp1) * 0.4; //instead of placing c on d exactly, we move it inline with b so that if the user specifies an ease like Back.easeOut or Elastic.easeOut which goes BEYOND the end, it will do so smoothly.\n\t\t\t\tseg.da = seg.d - seg.a;\n\t\t\t\tseg.ca = seg.c - seg.a;\n\t\t\t\tseg.ba = cp1 - seg.a;\n\t\t\t\tif (quad) {\n\t\t\t\t\tqb = cubicToQuadratic(seg.a, cp1, seg.c, seg.d);\n\t\t\t\t\ta.splice(ii, 1, qb[0], qb[1], qb[2], qb[3]);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_parseAnchors = function(values, p, correlate, prepend) {\n\t\t\t\tvar a = [],\n\t\t\t\t\tl, i, p1, p2, p3, tmp;\n\t\t\t\tif (prepend) {\n\t\t\t\t\tvalues = [prepend].concat(values);\n\t\t\t\t\ti = values.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (typeof( (tmp = values[i][p]) ) === \"string\") if (tmp.charAt(1) === \"=\") {\n\t\t\t\t\t\t\tvalues[i][p] = prepend[p] + Number(tmp.charAt(0) + tmp.substr(2)); //accommodate relative values. Do it inline instead of breaking it out into a function for speed reasons\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tl = values.length - 2;\n\t\t\t\tif (l < 0) {\n\t\t\t\t\ta[0] = new Segment(values[0][p], 0, 0, values[(l < -1) ? 0 : 1][p]);\n\t\t\t\t\treturn a;\n\t\t\t\t}\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tp1 = values[i][p];\n\t\t\t\t\tp2 = values[i+1][p];\n\t\t\t\t\ta[i] = new Segment(p1, 0, 0, p2);\n\t\t\t\t\tif (correlate) {\n\t\t\t\t\t\tp3 = values[i+2][p];\n\t\t\t\t\t\t_r1[i] = (_r1[i] || 0) + (p2 - p1) * (p2 - p1);\n\t\t\t\t\t\t_r2[i] = (_r2[i] || 0) + (p3 - p2) * (p3 - p2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ta[i] = new Segment(values[i][p], 0, 0, values[i+1][p]);\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\tbezierThrough = function(values, curviness, quadratic, basic, correlate, prepend) {\n\t\t\t\tvar obj = {},\n\t\t\t\t\tprops = [],\n\t\t\t\t\tfirst = prepend || values[0],\n\t\t\t\t\ti, p, a, j, r, l, seamless, last;\n\t\t\t\tcorrelate = (typeof(correlate) === \"string\") ? \",\"+correlate+\",\" : _correlate;\n\t\t\t\tif (curviness == null) {\n\t\t\t\t\tcurviness = 1;\n\t\t\t\t}\n\t\t\t\tfor (p in values[0]) {\n\t\t\t\t\tprops.push(p);\n\t\t\t\t}\n\t\t\t\t//check to see if the last and first values are identical (well, within 0.05). If so, make seamless by appending the second element to the very end of the values array and the 2nd-to-last element to the very beginning (we'll remove those segments later)\n\t\t\t\tif (values.length > 1) {\n\t\t\t\t\tlast = values[values.length - 1];\n\t\t\t\t\tseamless = true;\n\t\t\t\t\ti = props.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tp = props[i];\n\t\t\t\t\t\tif (Math.abs(first[p] - last[p]) > 0.05) { //build in a tolerance of +/-0.05 to accommodate rounding errors.\n\t\t\t\t\t\t\tseamless = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (seamless) {\n\t\t\t\t\t\tvalues = values.concat(); //duplicate the array to avoid contaminating the original which the user may be reusing for other tweens\n\t\t\t\t\t\tif (prepend) {\n\t\t\t\t\t\t\tvalues.unshift(prepend);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalues.push(values[1]);\n\t\t\t\t\t\tprepend = values[values.length - 3];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_r1.length = _r2.length = _r3.length = 0;\n\t\t\t\ti = props.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tp = props[i];\n\t\t\t\t\t_corProps[p] = (correlate.indexOf(\",\"+p+\",\") !== -1);\n\t\t\t\t\tobj[p] = _parseAnchors(values, p, _corProps[p], prepend);\n\t\t\t\t}\n\t\t\t\ti = _r1.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t_r1[i] = Math.sqrt(_r1[i]);\n\t\t\t\t\t_r2[i] = Math.sqrt(_r2[i]);\n\t\t\t\t}\n\t\t\t\tif (!basic) {\n\t\t\t\t\ti = props.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (_corProps[p]) {\n\t\t\t\t\t\t\ta = obj[props[i]];\n\t\t\t\t\t\t\tl = a.length - 1;\n\t\t\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\t\t\tr = (a[j+1].da / _r2[j] + a[j].da / _r1[j]) || 0;\n\t\t\t\t\t\t\t\t_r3[j] = (_r3[j] || 0) + r * r;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ti = _r3.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t_r3[i] = Math.sqrt(_r3[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti = props.length;\n\t\t\t\tj = quadratic ? 4 : 1;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tp = props[i];\n\t\t\t\t\ta = obj[p];\n\t\t\t\t\t_calculateControlPoints(a, curviness, quadratic, basic, _corProps[p]); //this method requires that _parseAnchors() and _setSegmentRatios() ran first so that _r1, _r2, and _r3 values are populated for all properties\n\t\t\t\t\tif (seamless) {\n\t\t\t\t\t\ta.splice(0, j);\n\t\t\t\t\t\ta.splice(a.length - j, j);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t},\n\t\t\t_parseBezierData = function(values, type, prepend) {\n\t\t\t\ttype = type || \"soft\";\n\t\t\t\tvar obj = {},\n\t\t\t\t\tinc = (type === \"cubic\") ? 3 : 2,\n\t\t\t\t\tsoft = (type === \"soft\"),\n\t\t\t\t\tprops = [],\n\t\t\t\t\ta, b, c, d, cur, i, j, l, p, cnt, tmp;\n\t\t\t\tif (soft && prepend) {\n\t\t\t\t\tvalues = [prepend].concat(values);\n\t\t\t\t}\n\t\t\t\tif (values == null || values.length < inc + 1) { throw \"invalid Bezier data\"; }\n\t\t\t\tfor (p in values[0]) {\n\t\t\t\t\tprops.push(p);\n\t\t\t\t}\n\t\t\t\ti = props.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tp = props[i];\n\t\t\t\t\tobj[p] = cur = [];\n\t\t\t\t\tcnt = 0;\n\t\t\t\t\tl = values.length;\n\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\ta = (prepend == null) ? values[j][p] : (typeof( (tmp = values[j][p]) ) === \"string\" && tmp.charAt(1) === \"=\") ? prepend[p] + Number(tmp.charAt(0) + tmp.substr(2)) : Number(tmp);\n\t\t\t\t\t\tif (soft) if (j > 1) if (j < l - 1) {\n\t\t\t\t\t\t\tcur[cnt++] = (a + cur[cnt-2]) / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcur[cnt++] = a;\n\t\t\t\t\t}\n\t\t\t\t\tl = cnt - inc + 1;\n\t\t\t\t\tcnt = 0;\n\t\t\t\t\tfor (j = 0; j < l; j += inc) {\n\t\t\t\t\t\ta = cur[j];\n\t\t\t\t\t\tb = cur[j+1];\n\t\t\t\t\t\tc = cur[j+2];\n\t\t\t\t\t\td = (inc === 2) ? 0 : cur[j+3];\n\t\t\t\t\t\tcur[cnt++] = tmp = (inc === 3) ? new Segment(a, b, c, d) : new Segment(a, (2 * b + a) / 3, (2 * b + c) / 3, c);\n\t\t\t\t\t}\n\t\t\t\t\tcur.length = cnt;\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t},\n\t\t\t_addCubicLengths = function(a, steps, resolution) {\n\t\t\t\tvar inc = 1 / resolution,\n\t\t\t\t\tj = a.length,\n\t\t\t\t\td, d1, s, da, ca, ba, p, i, inv, bez, index;\n\t\t\t\twhile (--j > -1) {\n\t\t\t\t\tbez = a[j];\n\t\t\t\t\ts = bez.a;\n\t\t\t\t\tda = bez.d - s;\n\t\t\t\t\tca = bez.c - s;\n\t\t\t\t\tba = bez.b - s;\n\t\t\t\t\td = d1 = 0;\n\t\t\t\t\tfor (i = 1; i <= resolution; i++) {\n\t\t\t\t\t\tp = inc * i;\n\t\t\t\t\t\tinv = 1 - p;\n\t\t\t\t\t\td = d1 - (d1 = (p * p * da + 3 * inv * (p * ca + inv * ba)) * p);\n\t\t\t\t\t\tindex = j * resolution + i - 1;\n\t\t\t\t\t\tsteps[index] = (steps[index] || 0) + d * d;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_parseLengthData = function(obj, resolution) {\n\t\t\t\tresolution = resolution >> 0 || 6;\n\t\t\t\tvar a = [],\n\t\t\t\t\tlengths = [],\n\t\t\t\t\td = 0,\n\t\t\t\t\ttotal = 0,\n\t\t\t\t\tthreshold = resolution - 1,\n\t\t\t\t\tsegments = [],\n\t\t\t\t\tcurLS = [], //current length segments array\n\t\t\t\t\tp, i, l, index;\n\t\t\t\tfor (p in obj) {\n\t\t\t\t\t_addCubicLengths(obj[p], a, resolution);\n\t\t\t\t}\n\t\t\t\tl = a.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\td += Math.sqrt(a[i]);\n\t\t\t\t\tindex = i % resolution;\n\t\t\t\t\tcurLS[index] = d;\n\t\t\t\t\tif (index === threshold) {\n\t\t\t\t\t\ttotal += d;\n\t\t\t\t\t\tindex = (i / resolution) >> 0;\n\t\t\t\t\t\tsegments[index] = curLS;\n\t\t\t\t\t\tlengths[index] = total;\n\t\t\t\t\t\td = 0;\n\t\t\t\t\t\tcurLS = [];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {length:total, lengths:lengths, segments:segments};\n\t\t\t},\n\n\n\n\t\t\tBezierPlugin = _gsScope._gsDefine.plugin({\n\t\t\t\t\tpropName: \"bezier\",\n\t\t\t\t\tpriority: -1,\n\t\t\t\t\tversion: \"1.3.7\",\n\t\t\t\t\tAPI: 2,\n\t\t\t\t\tglobal:true,\n\n\t\t\t\t\t//gets called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\t\tinit: function(target, vars, tween) {\n\t\t\t\t\t\tthis._target = target;\n\t\t\t\t\t\tif (vars instanceof Array) {\n\t\t\t\t\t\t\tvars = {values:vars};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._func = {};\n\t\t\t\t\t\tthis._mod = {};\n\t\t\t\t\t\tthis._props = [];\n\t\t\t\t\t\tthis._timeRes = (vars.timeResolution == null) ? 6 : parseInt(vars.timeResolution, 10);\n\t\t\t\t\t\tvar values = vars.values || [],\n\t\t\t\t\t\t\tfirst = {},\n\t\t\t\t\t\t\tsecond = values[0],\n\t\t\t\t\t\t\tautoRotate = vars.autoRotate || tween.vars.orientToBezier,\n\t\t\t\t\t\t\tp, isFunc, i, j, prepend;\n\n\t\t\t\t\t\tthis._autoRotate = autoRotate ? (autoRotate instanceof Array) ? autoRotate : [[\"x\",\"y\",\"rotation\",((autoRotate === true) ? 0 : Number(autoRotate) || 0)]] : null;\n\t\t\t\t\t\tfor (p in second) {\n\t\t\t\t\t\t\tthis._props.push(p);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ti = this._props.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = this._props[i];\n\n\t\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t\t\tisFunc = this._func[p] = (typeof(target[p]) === \"function\");\n\t\t\t\t\t\t\tfirst[p] = (!isFunc) ? parseFloat(target[p]) : target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ]();\n\t\t\t\t\t\t\tif (!prepend) if (first[p] !== values[0][p]) {\n\t\t\t\t\t\t\t\tprepend = first;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._beziers = (vars.type !== \"cubic\" && vars.type !== \"quadratic\" && vars.type !== \"soft\") ? bezierThrough(values, isNaN(vars.curviness) ? 1 : vars.curviness, false, (vars.type === \"thruBasic\"), vars.correlate, prepend) : _parseBezierData(values, vars.type, first);\n\t\t\t\t\t\tthis._segCount = this._beziers[p].length;\n\n\t\t\t\t\t\tif (this._timeRes) {\n\t\t\t\t\t\t\tvar ld = _parseLengthData(this._beziers, this._timeRes);\n\t\t\t\t\t\t\tthis._length = ld.length;\n\t\t\t\t\t\t\tthis._lengths = ld.lengths;\n\t\t\t\t\t\t\tthis._segments = ld.segments;\n\t\t\t\t\t\t\tthis._l1 = this._li = this._s1 = this._si = 0;\n\t\t\t\t\t\t\tthis._l2 = this._lengths[0];\n\t\t\t\t\t\t\tthis._curSeg = this._segments[0];\n\t\t\t\t\t\t\tthis._s2 = this._curSeg[0];\n\t\t\t\t\t\t\tthis._prec = 1 / this._curSeg.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ((autoRotate = this._autoRotate)) {\n\t\t\t\t\t\t\tthis._initialRotations = [];\n\t\t\t\t\t\t\tif (!(autoRotate[0] instanceof Array)) {\n\t\t\t\t\t\t\t\tthis._autoRotate = autoRotate = [autoRotate];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ti = autoRotate.length;\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tfor (j = 0; j < 3; j++) {\n\t\t\t\t\t\t\t\t\tp = autoRotate[i][j];\n\t\t\t\t\t\t\t\t\tthis._func[p] = (typeof(target[p]) === \"function\") ? target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ] : false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tp = autoRotate[i][2];\n\t\t\t\t\t\t\t\tthis._initialRotations[i] = (this._func[p] ? this._func[p].call(this._target) : this._target[p]) || 0;\n\t\t\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._startRatio = tween.vars.runBackwards ? 1 : 0; //we determine the starting ratio when the tween inits which is always 0 unless the tween has runBackwards:true (indicating it's a from() tween) in which case it's 1.\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\n\t\t\t\t\t//called each time the values should be updated, and the ratio gets passed as the only parameter (typically it's a value between 0 and 1, but it can exceed those when using an ease like Elastic.easeOut or Back.easeOut, etc.)\n\t\t\t\t\tset: function(v) {\n\t\t\t\t\t\tvar segments = this._segCount,\n\t\t\t\t\t\t\tfunc = this._func,\n\t\t\t\t\t\t\ttarget = this._target,\n\t\t\t\t\t\t\tnotStart = (v !== this._startRatio),\n\t\t\t\t\t\t\tcurIndex, inv, i, p, b, t, val, l, lengths, curSeg;\n\t\t\t\t\t\tif (!this._timeRes) {\n\t\t\t\t\t\t\tcurIndex = (v < 0) ? 0 : (v >= 1) ? segments - 1 : (segments * v) >> 0;\n\t\t\t\t\t\t\tt = (v - (curIndex * (1 / segments))) * segments;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlengths = this._lengths;\n\t\t\t\t\t\t\tcurSeg = this._curSeg;\n\t\t\t\t\t\t\tv *= this._length;\n\t\t\t\t\t\t\ti = this._li;\n\t\t\t\t\t\t\t//find the appropriate segment (if the currently cached one isn't correct)\n\t\t\t\t\t\t\tif (v > this._l2 && i < segments - 1) {\n\t\t\t\t\t\t\t\tl = segments - 1;\n\t\t\t\t\t\t\t\twhile (i < l && (this._l2 = lengths[++i]) <= v) {\t}\n\t\t\t\t\t\t\t\tthis._l1 = lengths[i-1];\n\t\t\t\t\t\t\t\tthis._li = i;\n\t\t\t\t\t\t\t\tthis._curSeg = curSeg = this._segments[i];\n\t\t\t\t\t\t\t\tthis._s2 = curSeg[(this._s1 = this._si = 0)];\n\t\t\t\t\t\t\t} else if (v < this._l1 && i > 0) {\n\t\t\t\t\t\t\t\twhile (i > 0 && (this._l1 = lengths[--i]) >= v) { }\n\t\t\t\t\t\t\t\tif (i === 0 && v < this._l1) {\n\t\t\t\t\t\t\t\t\tthis._l1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis._l2 = lengths[i];\n\t\t\t\t\t\t\t\tthis._li = i;\n\t\t\t\t\t\t\t\tthis._curSeg = curSeg = this._segments[i];\n\t\t\t\t\t\t\t\tthis._s1 = curSeg[(this._si = curSeg.length - 1) - 1] || 0;\n\t\t\t\t\t\t\t\tthis._s2 = curSeg[this._si];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurIndex = i;\n\t\t\t\t\t\t\t//now find the appropriate sub-segment (we split it into the number of pieces that was defined by \"precision\" and measured each one)\n\t\t\t\t\t\t\tv -= this._l1;\n\t\t\t\t\t\t\ti = this._si;\n\t\t\t\t\t\t\tif (v > this._s2 && i < curSeg.length - 1) {\n\t\t\t\t\t\t\t\tl = curSeg.length - 1;\n\t\t\t\t\t\t\t\twhile (i < l && (this._s2 = curSeg[++i]) <= v) {\t}\n\t\t\t\t\t\t\t\tthis._s1 = curSeg[i-1];\n\t\t\t\t\t\t\t\tthis._si = i;\n\t\t\t\t\t\t\t} else if (v < this._s1 && i > 0) {\n\t\t\t\t\t\t\t\twhile (i > 0 && (this._s1 = curSeg[--i]) >= v) {\t}\n\t\t\t\t\t\t\t\tif (i === 0 && v < this._s1) {\n\t\t\t\t\t\t\t\t\tthis._s1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis._s2 = curSeg[i];\n\t\t\t\t\t\t\t\tthis._si = i;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tt = ((i + (v - this._s1) / (this._s2 - this._s1)) * this._prec) || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinv = 1 - t;\n\n\t\t\t\t\t\ti = this._props.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = this._props[i];\n\t\t\t\t\t\t\tb = this._beziers[p][curIndex];\n\t\t\t\t\t\t\tval = (t * t * b.da + 3 * inv * (t * b.ca + inv * b.ba)) * t + b.a;\n\t\t\t\t\t\t\tif (this._mod[p]) {\n\t\t\t\t\t\t\t\tval = this._mod[p](val, target);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (func[p]) {\n\t\t\t\t\t\t\t\ttarget[p](val);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttarget[p] = val;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this._autoRotate) {\n\t\t\t\t\t\t\tvar ar = this._autoRotate,\n\t\t\t\t\t\t\t\tb2, x1, y1, x2, y2, add, conv;\n\t\t\t\t\t\t\ti = ar.length;\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tp = ar[i][2];\n\t\t\t\t\t\t\t\tadd = ar[i][3] || 0;\n\t\t\t\t\t\t\t\tconv = (ar[i][4] === true) ? 1 : _RAD2DEG;\n\t\t\t\t\t\t\t\tb = this._beziers[ar[i][0]];\n\t\t\t\t\t\t\t\tb2 = this._beziers[ar[i][1]];\n\n\t\t\t\t\t\t\t\tif (b && b2) { //in case one of the properties got overwritten.\n\t\t\t\t\t\t\t\t\tb = b[curIndex];\n\t\t\t\t\t\t\t\t\tb2 = b2[curIndex];\n\n\t\t\t\t\t\t\t\t\tx1 = b.a + (b.b - b.a) * t;\n\t\t\t\t\t\t\t\t\tx2 = b.b + (b.c - b.b) * t;\n\t\t\t\t\t\t\t\t\tx1 += (x2 - x1) * t;\n\t\t\t\t\t\t\t\t\tx2 += ((b.c + (b.d - b.c) * t) - x2) * t;\n\n\t\t\t\t\t\t\t\t\ty1 = b2.a + (b2.b - b2.a) * t;\n\t\t\t\t\t\t\t\t\ty2 = b2.b + (b2.c - b2.b) * t;\n\t\t\t\t\t\t\t\t\ty1 += (y2 - y1) * t;\n\t\t\t\t\t\t\t\t\ty2 += ((b2.c + (b2.d - b2.c) * t) - y2) * t;\n\n\t\t\t\t\t\t\t\t\tval = notStart ? Math.atan2(y2 - y1, x2 - x1) * conv + add : this._initialRotations[i];\n\n\t\t\t\t\t\t\t\t\tif (this._mod[p]) {\n\t\t\t\t\t\t\t\t\t\tval = this._mod[p](val, target); //for modProps\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (func[p]) {\n\t\t\t\t\t\t\t\t\t\ttarget[p](val);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ttarget[p] = val;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t}),\n\t\t\tp = BezierPlugin.prototype;\n\n\n\t\tBezierPlugin.bezierThrough = bezierThrough;\n\t\tBezierPlugin.cubicToQuadratic = cubicToQuadratic;\n\t\tBezierPlugin._autoCSS = true; //indicates that this plugin can be inserted into the \"css\" object using the autoCSS feature of TweenLite\n\t\tBezierPlugin.quadraticToCubic = function(a, b, c) {\n\t\t\treturn new Segment(a, (2 * b + a) / 3, (2 * b + c) / 3, c);\n\t\t};\n\n\t\tBezierPlugin._cssRegister = function() {\n\t\t\tvar CSSPlugin = _globals.CSSPlugin;\n\t\t\tif (!CSSPlugin) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar _internals = CSSPlugin._internals,\n\t\t\t\t_parseToProxy = _internals._parseToProxy,\n\t\t\t\t_setPluginRatio = _internals._setPluginRatio,\n\t\t\t\tCSSPropTween = _internals.CSSPropTween;\n\t\t\t_internals._registerComplexSpecialProp(\"bezier\", {parser:function(t, e, prop, cssp, pt, plugin) {\n\t\t\t\tif (e instanceof Array) {\n\t\t\t\t\te = {values:e};\n\t\t\t\t}\n\t\t\t\tplugin = new BezierPlugin();\n\t\t\t\tvar values = e.values,\n\t\t\t\t\tl = values.length - 1,\n\t\t\t\t\tpluginValues = [],\n\t\t\t\t\tv = {},\n\t\t\t\t\ti, p, data;\n\t\t\t\tif (l < 0) {\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t\tfor (i = 0; i <= l; i++) {\n\t\t\t\t\tdata = _parseToProxy(t, values[i], cssp, pt, plugin, (l !== i));\n\t\t\t\t\tpluginValues[i] = data.end;\n\t\t\t\t}\n\t\t\t\tfor (p in e) {\n\t\t\t\t\tv[p] = e[p]; //duplicate the vars object because we need to alter some things which would cause problems if the user plans to reuse the same vars object for another tween.\n\t\t\t\t}\n\t\t\t\tv.values = pluginValues;\n\t\t\t\tpt = new CSSPropTween(t, \"bezier\", 0, 0, data.pt, 2);\n\t\t\t\tpt.data = data;\n\t\t\t\tpt.plugin = plugin;\n\t\t\t\tpt.setRatio = _setPluginRatio;\n\t\t\t\tif (v.autoRotate === 0) {\n\t\t\t\t\tv.autoRotate = true;\n\t\t\t\t}\n\t\t\t\tif (v.autoRotate && !(v.autoRotate instanceof Array)) {\n\t\t\t\t\ti = (v.autoRotate === true) ? 0 : Number(v.autoRotate);\n\t\t\t\t\tv.autoRotate = (data.end.left != null) ? [[\"left\",\"top\",\"rotation\",i,false]] : (data.end.x != null) ? [[\"x\",\"y\",\"rotation\",i,false]] : false;\n\t\t\t\t}\n\t\t\t\tif (v.autoRotate) {\n\t\t\t\t\tif (!cssp._transform) {\n\t\t\t\t\t\tcssp._enableTransforms(false);\n\t\t\t\t\t}\n\t\t\t\t\tdata.autoRotate = cssp._target._gsTransform;\n\t\t\t\t\tdata.proxy.rotation = data.autoRotate.rotation || 0;\n\t\t\t\t\tcssp._overwriteProps.push(\"rotation\");\n\t\t\t\t}\n\t\t\t\tplugin._onInitTween(data.proxy, v, cssp._tween);\n\t\t\t\treturn pt;\n\t\t\t}});\n\t\t};\n\n\t\tp._mod = function(lookup) {\n\t\t\tvar op = this._overwriteProps,\n\t\t\t\ti = op.length,\n\t\t\t\tval;\n\t\t\twhile (--i > -1) {\n\t\t\t\tval = lookup[op[i]];\n\t\t\t\tif (val && typeof(val) === \"function\") {\n\t\t\t\t\tthis._mod[op[i]] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._kill = function(lookup) {\n\t\t\tvar a = this._props,\n\t\t\t\tp, i;\n\t\t\tfor (p in this._beziers) {\n\t\t\t\tif (p in lookup) {\n\t\t\t\t\tdelete this._beziers[p];\n\t\t\t\t\tdelete this._func[p];\n\t\t\t\t\ti = a.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (a[i] === p) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ta = this._autoRotate;\n\t\t\tif (a) {\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (lookup[a[i][2]]) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this._super._kill.call(this, lookup);\n\t\t};\n\n\t}());\n\n\n\n\n\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n/*\n * ----------------------------------------------------------------\n * CSSPlugin\n * ----------------------------------------------------------------\n */\n\t_gsScope._gsDefine(\"plugins.CSSPlugin\", [\"plugins.TweenPlugin\",\"TweenLite\"], function(TweenPlugin, TweenLite) {\n\n\t\t/** @constructor **/\n\t\tvar CSSPlugin = function() {\n\t\t\t\tTweenPlugin.call(this, \"css\");\n\t\t\t\tthis._overwriteProps.length = 0;\n\t\t\t\tthis.setRatio = CSSPlugin.prototype.setRatio; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\t\t\t},\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t_hasPriority, //turns true whenever a CSSPropTween instance is created that has a priority other than 0. This helps us discern whether or not we should spend the time organizing the linked list or not after a CSSPlugin's _onInitTween() method is called.\n\t\t\t_suffixMap, //we set this in _onInitTween() each time as a way to have a persistent variable we can use in other methods like _parse() without having to pass it around as a parameter and we keep _parse() decoupled from a particular CSSPlugin instance\n\t\t\t_cs, //computed style (we store this in a shared variable to conserve memory and make minification tighter\n\t\t\t_overwriteProps, //alias to the currently instantiating CSSPlugin's _overwriteProps array. We use this closure in order to avoid having to pass a reference around from method to method and aid in minification.\n\t\t\t_specialProps = {},\n\t\t\tp = CSSPlugin.prototype = new TweenPlugin(\"css\");\n\n\t\tp.constructor = CSSPlugin;\n\t\tCSSPlugin.version = \"1.19.0\";\n\t\tCSSPlugin.API = 2;\n\t\tCSSPlugin.defaultTransformPerspective = 0;\n\t\tCSSPlugin.defaultSkewType = \"compensated\";\n\t\tCSSPlugin.defaultSmoothOrigin = true;\n\t\tp = \"px\"; //we'll reuse the \"p\" variable to keep file size down\n\t\tCSSPlugin.suffixMap = {top:p, right:p, bottom:p, left:p, width:p, height:p, fontSize:p, padding:p, margin:p, perspective:p, lineHeight:\"\"};\n\n\n\t\tvar _numExp = /(?:\\-|\\.|\\b)(\\d|\\.|e\\-)+/g,\n\t\t\t_relNumExp = /(?:\\d|\\-\\d|\\.\\d|\\-\\.\\d|\\+=\\d|\\-=\\d|\\+=.\\d|\\-=\\.\\d)+/g,\n\t\t\t_valuesExp = /(?:\\+=|\\-=|\\-|\\b)[\\d\\-\\.]+[a-zA-Z0-9]*(?:%|\\b)/gi, //finds all the values that begin with numbers or += or -= and then a number. Includes suffixes. We use this to split complex values apart like \"1px 5px 20px rgb(255,102,51)\"\n\t\t\t_NaNExp = /(?![+-]?\\d*\\.?\\d+|[+-]|e[+-]\\d+)[^0-9]/g, //also allows scientific notation and doesn't kill the leading -/+ in -= and +=\n\t\t\t_suffixExp = /(?:\\d|\\-|\\+|=|#|\\.)*/g,\n\t\t\t_opacityExp = /opacity *= *([^)]*)/i,\n\t\t\t_opacityValExp = /opacity:([^;]*)/i,\n\t\t\t_alphaFilterExp = /alpha\\(opacity *=.+?\\)/i,\n\t\t\t_rgbhslExp = /^(rgb|hsl)/,\n\t\t\t_capsExp = /([A-Z])/g,\n\t\t\t_camelExp = /-([a-z])/gi,\n\t\t\t_urlExp = /(^(?:url\\(\\\"|url\\())|(?:(\\\"\\))$|\\)$)/gi, //for pulling out urls from url(...) or url(\"...\") strings (some browsers wrap urls in quotes, some don't when reporting things like backgroundImage)\n\t\t\t_camelFunc = function(s, g) { return g.toUpperCase(); },\n\t\t\t_horizExp = /(?:Left|Right|Width)/i,\n\t\t\t_ieGetMatrixExp = /(M11|M12|M21|M22)=[\\d\\-\\.e]+/gi,\n\t\t\t_ieSetMatrixExp = /progid\\:DXImageTransform\\.Microsoft\\.Matrix\\(.+?\\)/i,\n\t\t\t_commasOutsideParenExp = /,(?=[^\\)]*(?:\\(|$))/gi, //finds any commas that are not within parenthesis\n\t\t\t_complexExp = /[\\s,\\(]/i, //for testing a string to find if it has a space, comma, or open parenthesis (clues that it's a complex value)\n\t\t\t_DEG2RAD = Math.PI / 180,\n\t\t\t_RAD2DEG = 180 / Math.PI,\n\t\t\t_forcePT = {},\n\t\t\t_doc = document,\n\t\t\t_createElement = function(type) {\n\t\t\t\treturn _doc.createElementNS ? _doc.createElementNS(\"http://www.w3.org/1999/xhtml\", type) : _doc.createElement(type);\n\t\t\t},\n\t\t\t_tempDiv = _createElement(\"div\"),\n\t\t\t_tempImg = _createElement(\"img\"),\n\t\t\t_internals = CSSPlugin._internals = {_specialProps:_specialProps}, //provides a hook to a few internal methods that we need to access from inside other plugins\n\t\t\t_agent = navigator.userAgent,\n\t\t\t_autoRound,\n\t\t\t_reqSafariFix, //we won't apply the Safari transform fix until we actually come across a tween that affects a transform property (to maintain best performance).\n\n\t\t\t_isSafari,\n\t\t\t_isFirefox, //Firefox has a bug that causes 3D transformed elements to randomly disappear unless a repaint is forced after each update on each element.\n\t\t\t_isSafariLT6, //Safari (and Android 4 which uses a flavor of Safari) has a bug that prevents changes to \"top\" and \"left\" properties from rendering properly if changed on the same frame as a transform UNLESS we set the element's WebkitBackfaceVisibility to hidden (weird, I know). Doing this for Android 3 and earlier seems to actually cause other problems, though (fun!)\n\t\t\t_ieVers,\n\t\t\t_supportsOpacity = (function() { //we set _isSafari, _ieVers, _isFirefox, and _supportsOpacity all in one function here to reduce file size slightly, especially in the minified version.\n\t\t\t\tvar i = _agent.indexOf(\"Android\"),\n\t\t\t\t\ta = _createElement(\"a\");\n\t\t\t\t_isSafari = (_agent.indexOf(\"Safari\") !== -1 && _agent.indexOf(\"Chrome\") === -1 && (i === -1 || Number(_agent.substr(i+8, 1)) > 3));\n\t\t\t\t_isSafariLT6 = (_isSafari && (Number(_agent.substr(_agent.indexOf(\"Version/\")+8, 1)) < 6));\n\t\t\t\t_isFirefox = (_agent.indexOf(\"Firefox\") !== -1);\n\t\t\t\tif ((/MSIE ([0-9]{1,}[\\.0-9]{0,})/).exec(_agent) || (/Trident\\/.*rv:([0-9]{1,}[\\.0-9]{0,})/).exec(_agent)) {\n\t\t\t\t\t_ieVers = parseFloat( RegExp.$1 );\n\t\t\t\t}\n\t\t\t\tif (!a) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\ta.style.cssText = \"top:1px;opacity:.55;\";\n\t\t\t\treturn /^0.55/.test(a.style.opacity);\n\t\t\t}()),\n\t\t\t_getIEOpacity = function(v) {\n\t\t\t\treturn (_opacityExp.test( ((typeof(v) === \"string\") ? v : (v.currentStyle ? v.currentStyle.filter : v.style.filter) || \"\") ) ? ( parseFloat( RegExp.$1 ) / 100 ) : 1);\n\t\t\t},\n\t\t\t_log = function(s) {//for logging messages, but in a way that won't throw errors in old versions of IE.\n\t\t\t\tif (window.console) {\n\t\t\t\t\tconsole.log(s);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_target, //when initting a CSSPlugin, we set this variable so that we can access it from within many other functions without having to pass it around as params\n\t\t\t_index, //when initting a CSSPlugin, we set this variable so that we can access it from within many other functions without having to pass it around as params\n\n\t\t\t_prefixCSS = \"\", //the non-camelCase vendor prefix like \"-o-\", \"-moz-\", \"-ms-\", or \"-webkit-\"\n\t\t\t_prefix = \"\", //camelCase vendor prefix like \"O\", \"ms\", \"Webkit\", or \"Moz\".\n\n\t\t\t// @private feed in a camelCase property name like \"transform\" and it will check to see if it is valid as-is or if it needs a vendor prefix. It returns the corrected camelCase property name (i.e. \"WebkitTransform\" or \"MozTransform\" or \"transform\" or null if no such property is found, like if the browser is IE8 or before, \"transform\" won't be found at all)\n\t\t\t_checkPropPrefix = function(p, e) {\n\t\t\t\te = e || _tempDiv;\n\t\t\t\tvar s = e.style,\n\t\t\t\t\ta, i;\n\t\t\t\tif (s[p] !== undefined) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t\tp = p.charAt(0).toUpperCase() + p.substr(1);\n\t\t\t\ta = [\"O\",\"Moz\",\"ms\",\"Ms\",\"Webkit\"];\n\t\t\t\ti = 5;\n\t\t\t\twhile (--i > -1 && s[a[i]+p] === undefined) { }\n\t\t\t\tif (i >= 0) {\n\t\t\t\t\t_prefix = (i === 3) ? \"ms\" : a[i];\n\t\t\t\t\t_prefixCSS = \"-\" + _prefix.toLowerCase() + \"-\";\n\t\t\t\t\treturn _prefix + p;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\n\t\t\t_getComputedStyle = _doc.defaultView ? _doc.defaultView.getComputedStyle : function() {},\n\n\t\t\t/**\n\t\t\t * @private Returns the css style for a particular property of an element. For example, to get whatever the current \"left\" css value for an element with an ID of \"myElement\", you could do:\n\t\t\t * var currentLeft = CSSPlugin.getStyle( document.getElementById(\"myElement\"), \"left\");\n\t\t\t *\n\t\t\t * @param {!Object} t Target element whose style property you want to query\n\t\t\t * @param {!string} p Property name (like \"left\" or \"top\" or \"marginTop\", etc.)\n\t\t\t * @param {Object=} cs Computed style object. This just provides a way to speed processing if you're going to get several properties on the same element in quick succession - you can reuse the result of the getComputedStyle() call.\n\t\t\t * @param {boolean=} calc If true, the value will not be read directly from the element's \"style\" property (if it exists there), but instead the getComputedStyle() result will be used. This can be useful when you want to ensure that the browser itself is interpreting the value.\n\t\t\t * @param {string=} dflt Default value that should be returned in the place of null, \"none\", \"auto\" or \"auto auto\".\n\t\t\t * @return {?string} The current property value\n\t\t\t */\n\t\t\t_getStyle = CSSPlugin.getStyle = function(t, p, cs, calc, dflt) {\n\t\t\t\tvar rv;\n\t\t\t\tif (!_supportsOpacity) if (p === \"opacity\") { //several versions of IE don't use the standard \"opacity\" property - they use things like filter:alpha(opacity=50), so we parse that here.\n\t\t\t\t\treturn _getIEOpacity(t);\n\t\t\t\t}\n\t\t\t\tif (!calc && t.style[p]) {\n\t\t\t\t\trv = t.style[p];\n\t\t\t\t} else if ((cs = cs || _getComputedStyle(t))) {\n\t\t\t\t\trv = cs[p] || cs.getPropertyValue(p) || cs.getPropertyValue(p.replace(_capsExp, \"-$1\").toLowerCase());\n\t\t\t\t} else if (t.currentStyle) {\n\t\t\t\t\trv = t.currentStyle[p];\n\t\t\t\t}\n\t\t\t\treturn (dflt != null && (!rv || rv === \"none\" || rv === \"auto\" || rv === \"auto auto\")) ? dflt : rv;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Pass the target element, the property name, the numeric value, and the suffix (like \"%\", \"em\", \"px\", etc.) and it will spit back the equivalent pixel number.\n\t\t\t * @param {!Object} t Target element\n\t\t\t * @param {!string} p Property name (like \"left\", \"top\", \"marginLeft\", etc.)\n\t\t\t * @param {!number} v Value\n\t\t\t * @param {string=} sfx Suffix (like \"px\" or \"%\" or \"em\")\n\t\t\t * @param {boolean=} recurse If true, the call is a recursive one. In some browsers (like IE7/8), occasionally the value isn't accurately reported initially, but if we run the function again it will take effect.\n\t\t\t * @return {number} value in pixels\n\t\t\t */\n\t\t\t_convertToPixels = _internals.convertToPixels = function(t, p, v, sfx, recurse) {\n\t\t\t\tif (sfx === \"px\" || !sfx) { return v; }\n\t\t\t\tif (sfx === \"auto\" || !v) { return 0; }\n\t\t\t\tvar horiz = _horizExp.test(p),\n\t\t\t\t\tnode = t,\n\t\t\t\t\tstyle = _tempDiv.style,\n\t\t\t\t\tneg = (v < 0),\n\t\t\t\t\tprecise = (v === 1),\n\t\t\t\t\tpix, cache, time;\n\t\t\t\tif (neg) {\n\t\t\t\t\tv = -v;\n\t\t\t\t}\n\t\t\t\tif (precise) {\n\t\t\t\t\tv *= 100;\n\t\t\t\t}\n\t\t\t\tif (sfx === \"%\" && p.indexOf(\"border\") !== -1) {\n\t\t\t\t\tpix = (v / 100) * (horiz ? t.clientWidth : t.clientHeight);\n\t\t\t\t} else {\n\t\t\t\t\tstyle.cssText = \"border:0 solid red;position:\" + _getStyle(t, \"position\") + \";line-height:0;\";\n\t\t\t\t\tif (sfx === \"%\" || !node.appendChild || sfx.charAt(0) === \"v\" || sfx === \"rem\") {\n\t\t\t\t\t\tnode = t.parentNode || _doc.body;\n\t\t\t\t\t\tcache = node._gsCache;\n\t\t\t\t\t\ttime = TweenLite.ticker.frame;\n\t\t\t\t\t\tif (cache && horiz && cache.time === time) { //performance optimization: we record the width of elements along with the ticker frame so that we can quickly get it again on the same tick (seems relatively safe to assume it wouldn't change on the same tick)\n\t\t\t\t\t\t\treturn cache.width * v / 100;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle[(horiz ? \"width\" : \"height\")] = v + sfx;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[(horiz ? \"borderLeftWidth\" : \"borderTopWidth\")] = v + sfx;\n\t\t\t\t\t}\n\t\t\t\t\tnode.appendChild(_tempDiv);\n\t\t\t\t\tpix = parseFloat(_tempDiv[(horiz ? \"offsetWidth\" : \"offsetHeight\")]);\n\t\t\t\t\tnode.removeChild(_tempDiv);\n\t\t\t\t\tif (horiz && sfx === \"%\" && CSSPlugin.cacheWidths !== false) {\n\t\t\t\t\t\tcache = node._gsCache = node._gsCache || {};\n\t\t\t\t\t\tcache.time = time;\n\t\t\t\t\t\tcache.width = pix / v * 100;\n\t\t\t\t\t}\n\t\t\t\t\tif (pix === 0 && !recurse) {\n\t\t\t\t\t\tpix = _convertToPixels(t, p, v, sfx, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (precise) {\n\t\t\t\t\tpix /= 100;\n\t\t\t\t}\n\t\t\t\treturn neg ? -pix : pix;\n\t\t\t},\n\t\t\t_calculateOffset = _internals.calculateOffset = function(t, p, cs) { //for figuring out \"top\" or \"left\" in px when it's \"auto\". We need to factor in margin with the offsetLeft/offsetTop\n\t\t\t\tif (_getStyle(t, \"position\", cs) !== \"absolute\") { return 0; }\n\t\t\t\tvar dim = ((p === \"left\") ? \"Left\" : \"Top\"),\n\t\t\t\t\tv = _getStyle(t, \"margin\" + dim, cs);\n\t\t\t\treturn t[\"offset\" + dim] - (_convertToPixels(t, p, parseFloat(v), v.replace(_suffixExp, \"\")) || 0);\n\t\t\t},\n\n\t\t\t// @private returns at object containing ALL of the style properties in camelCase and their associated values.\n\t\t\t_getAllStyles = function(t, cs) {\n\t\t\t\tvar s = {},\n\t\t\t\t\ti, tr, p;\n\t\t\t\tif ((cs = cs || _getComputedStyle(t, null))) {\n\t\t\t\t\tif ((i = cs.length)) {\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = cs[i];\n\t\t\t\t\t\t\tif (p.indexOf(\"-transform\") === -1 || _transformPropCSS === p) { //Some webkit browsers duplicate transform values, one non-prefixed and one prefixed (\"transform\" and \"WebkitTransform\"), so we must weed out the extra one here.\n\t\t\t\t\t\t\t\ts[p.replace(_camelExp, _camelFunc)] = cs.getPropertyValue(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else { //some browsers behave differently - cs.length is always 0, so we must do a for...in loop.\n\t\t\t\t\t\tfor (i in cs) {\n\t\t\t\t\t\t\tif (i.indexOf(\"Transform\") === -1 || _transformProp === i) { //Some webkit browsers duplicate transform values, one non-prefixed and one prefixed (\"transform\" and \"WebkitTransform\"), so we must weed out the extra one here.\n\t\t\t\t\t\t\t\ts[i] = cs[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if ((cs = t.currentStyle || t.style)) {\n\t\t\t\t\tfor (i in cs) {\n\t\t\t\t\t\tif (typeof(i) === \"string\" && s[i] === undefined) {\n\t\t\t\t\t\t\ts[i.replace(_camelExp, _camelFunc)] = cs[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!_supportsOpacity) {\n\t\t\t\t\ts.opacity = _getIEOpacity(t);\n\t\t\t\t}\n\t\t\t\ttr = _getTransform(t, cs, false);\n\t\t\t\ts.rotation = tr.rotation;\n\t\t\t\ts.skewX = tr.skewX;\n\t\t\t\ts.scaleX = tr.scaleX;\n\t\t\t\ts.scaleY = tr.scaleY;\n\t\t\t\ts.x = tr.x;\n\t\t\t\ts.y = tr.y;\n\t\t\t\tif (_supports3D) {\n\t\t\t\t\ts.z = tr.z;\n\t\t\t\t\ts.rotationX = tr.rotationX;\n\t\t\t\t\ts.rotationY = tr.rotationY;\n\t\t\t\t\ts.scaleZ = tr.scaleZ;\n\t\t\t\t}\n\t\t\t\tif (s.filters) {\n\t\t\t\t\tdelete s.filters;\n\t\t\t\t}\n\t\t\t\treturn s;\n\t\t\t},\n\n\t\t\t// @private analyzes two style objects (as returned by _getAllStyles()) and only looks for differences between them that contain tweenable values (like a number or color). It returns an object with a \"difs\" property which refers to an object containing only those isolated properties and values for tweening, and a \"firstMPT\" property which refers to the first MiniPropTween instance in a linked list that recorded all the starting values of the different properties so that we can revert to them at the end or beginning of the tween - we don't want the cascading to get messed up. The forceLookup parameter is an optional generic object with properties that should be forced into the results - this is necessary for className tweens that are overwriting others because imagine a scenario where a rollover/rollout adds/removes a class and the user swipes the mouse over the target SUPER fast, thus nothing actually changed yet and the subsequent comparison of the properties would indicate they match (especially when px rounding is taken into consideration), thus no tweening is necessary even though it SHOULD tween and remove those properties after the tween (otherwise the inline styles will contaminate things). See the className SpecialProp code for details.\n\t\t\t_cssDif = function(t, s1, s2, vars, forceLookup) {\n\t\t\t\tvar difs = {},\n\t\t\t\t\tstyle = t.style,\n\t\t\t\t\tval, p, mpt;\n\t\t\t\tfor (p in s2) {\n\t\t\t\t\tif (p !== \"cssText\") if (p !== \"length\") if (isNaN(p)) if (s1[p] !== (val = s2[p]) || (forceLookup && forceLookup[p])) if (p.indexOf(\"Origin\") === -1) if (typeof(val) === \"number\" || typeof(val) === \"string\") {\n\t\t\t\t\t\tdifs[p] = (val === \"auto\" && (p === \"left\" || p === \"top\")) ? _calculateOffset(t, p) : ((val === \"\" || val === \"auto\" || val === \"none\") && typeof(s1[p]) === \"string\" && s1[p].replace(_NaNExp, \"\") !== \"\") ? 0 : val; //if the ending value is defaulting (\"\" or \"auto\"), we check the starting value and if it can be parsed into a number (a string which could have a suffix too, like 700px), then we swap in 0 for \"\" or \"auto\" so that things actually tween.\n\t\t\t\t\t\tif (style[p] !== undefined) { //for className tweens, we must remember which properties already existed inline - the ones that didn't should be removed when the tween isn't in progress because they were only introduced to facilitate the transition between classes.\n\t\t\t\t\t\t\tmpt = new MiniPropTween(style, p, style[p], mpt);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (vars) {\n\t\t\t\t\tfor (p in vars) { //copy properties (except className)\n\t\t\t\t\t\tif (p !== \"className\") {\n\t\t\t\t\t\t\tdifs[p] = vars[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {difs:difs, firstMPT:mpt};\n\t\t\t},\n\t\t\t_dimensions = {width:[\"Left\",\"Right\"], height:[\"Top\",\"Bottom\"]},\n\t\t\t_margins = [\"marginLeft\",\"marginRight\",\"marginTop\",\"marginBottom\"],\n\n\t\t\t/**\n\t\t\t * @private Gets the width or height of an element\n\t\t\t * @param {!Object} t Target element\n\t\t\t * @param {!string} p Property name (\"width\" or \"height\")\n\t\t\t * @param {Object=} cs Computed style object (if one exists). Just a speed optimization.\n\t\t\t * @return {number} Dimension (in pixels)\n\t\t\t */\n\t\t\t_getDimension = function(t, p, cs) {\n\t\t\t\tif ((t.nodeName + \"\").toLowerCase() === \"svg\") { //Chrome no longer supports offsetWidth/offsetHeight on SVG elements.\n\t\t\t\t\treturn (cs || _getComputedStyle(t))[p] || 0;\n\t\t\t\t} else if (t.getBBox && _isSVG(t)) {\n\t\t\t\t\treturn t.getBBox()[p] || 0;\n\t\t\t\t}\n\t\t\t\tvar v = parseFloat((p === \"width\") ? t.offsetWidth : t.offsetHeight),\n\t\t\t\t\ta = _dimensions[p],\n\t\t\t\t\ti = a.length;\n\t\t\t\tcs = cs || _getComputedStyle(t, null);\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tv -= parseFloat( _getStyle(t, \"padding\" + a[i], cs, true) ) || 0;\n\t\t\t\t\tv -= parseFloat( _getStyle(t, \"border\" + a[i] + \"Width\", cs, true) ) || 0;\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t},\n\n\t\t\t// @private Parses position-related complex strings like \"top left\" or \"50px 10px\" or \"70% 20%\", etc. which are used for things like transformOrigin or backgroundPosition. Optionally decorates a supplied object (recObj) with the following properties: \"ox\" (offsetX), \"oy\" (offsetY), \"oxp\" (if true, \"ox\" is a percentage not a pixel value), and \"oxy\" (if true, \"oy\" is a percentage not a pixel value)\n\t\t\t_parsePosition = function(v, recObj) {\n\t\t\t\tif (v === \"contain\" || v === \"auto\" || v === \"auto auto\") { //note: Firefox uses \"auto auto\" as default whereas Chrome uses \"auto\".\n\t\t\t\t\treturn v + \" \";\n\t\t\t\t}\n\t\t\t\tif (v == null || v === \"\") {\n\t\t\t\t\tv = \"0 0\";\n\t\t\t\t}\n\t\t\t\tvar a = v.split(\" \"),\n\t\t\t\t\tx = (v.indexOf(\"left\") !== -1) ? \"0%\" : (v.indexOf(\"right\") !== -1) ? \"100%\" : a[0],\n\t\t\t\t\ty = (v.indexOf(\"top\") !== -1) ? \"0%\" : (v.indexOf(\"bottom\") !== -1) ? \"100%\" : a[1],\n\t\t\t\t\ti;\n\t\t\t\tif (a.length > 3 && !recObj) { //multiple positions\n\t\t\t\t\ta = v.split(\", \").join(\",\").split(\",\");\n\t\t\t\t\tv = [];\n\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\tv.push(_parsePosition(a[i]));\n\t\t\t\t\t}\n\t\t\t\t\treturn v.join(\",\");\n\t\t\t\t}\n\t\t\t\tif (y == null) {\n\t\t\t\t\ty = (x === \"center\") ? \"50%\" : \"0\";\n\t\t\t\t} else if (y === \"center\") {\n\t\t\t\t\ty = \"50%\";\n\t\t\t\t}\n\t\t\t\tif (x === \"center\" || (isNaN(parseFloat(x)) && (x + \"\").indexOf(\"=\") === -1)) { //remember, the user could flip-flop the values and say \"bottom center\" or \"center bottom\", etc. \"center\" is ambiguous because it could be used to describe horizontal or vertical, hence the isNaN(). If there's an \"=\" sign in the value, it's relative.\n\t\t\t\t\tx = \"50%\";\n\t\t\t\t}\n\t\t\t\tv = x + \" \" + y + ((a.length > 2) ? \" \" + a[2] : \"\");\n\t\t\t\tif (recObj) {\n\t\t\t\t\trecObj.oxp = (x.indexOf(\"%\") !== -1);\n\t\t\t\t\trecObj.oyp = (y.indexOf(\"%\") !== -1);\n\t\t\t\t\trecObj.oxr = (x.charAt(1) === \"=\");\n\t\t\t\t\trecObj.oyr = (y.charAt(1) === \"=\");\n\t\t\t\t\trecObj.ox = parseFloat(x.replace(_NaNExp, \"\"));\n\t\t\t\t\trecObj.oy = parseFloat(y.replace(_NaNExp, \"\"));\n\t\t\t\t\trecObj.v = v;\n\t\t\t\t}\n\t\t\t\treturn recObj || v;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Takes an ending value (typically a string, but can be a number) and a starting value and returns the change between the two, looking for relative value indicators like += and -= and it also ignores suffixes (but make sure the ending value starts with a number or +=/-= and that the starting value is a NUMBER!)\n\t\t\t * @param {(number|string)} e End value which is typically a string, but could be a number\n\t\t\t * @param {(number|string)} b Beginning value which is typically a string but could be a number\n\t\t\t * @return {number} Amount of change between the beginning and ending values (relative values that have a \"+=\" or \"-=\" are recognized)\n\t\t\t */\n\t\t\t_parseChange = function(e, b) {\n\t\t\t\tif (typeof(e) === \"function\") {\n\t\t\t\t\te = e(_index, _target);\n\t\t\t\t}\n\t\t\t\treturn (typeof(e) === \"string\" && e.charAt(1) === \"=\") ? parseInt(e.charAt(0) + \"1\", 10) * parseFloat(e.substr(2)) : (parseFloat(e) - parseFloat(b)) || 0;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Takes a value and a default number, checks if the value is relative, null, or numeric and spits back a normalized number accordingly. Primarily used in the _parseTransform() function.\n\t\t\t * @param {Object} v Value to be parsed\n\t\t\t * @param {!number} d Default value (which is also used for relative calculations if \"+=\" or \"-=\" is found in the first parameter)\n\t\t\t * @return {number} Parsed value\n\t\t\t */\n\t\t\t_parseVal = function(v, d) {\n\t\t\t\tif (typeof(v) === \"function\") {\n\t\t\t\t\tv = v(_index, _target);\n\t\t\t\t}\n\t\t\t\treturn (v == null) ? d : (typeof(v) === \"string\" && v.charAt(1) === \"=\") ? parseInt(v.charAt(0) + \"1\", 10) * parseFloat(v.substr(2)) + d : parseFloat(v) || 0;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Translates strings like \"40deg\" or \"40\" or 40rad\" or \"+=40deg\" or \"270_short\" or \"-90_cw\" or \"+=45_ccw\" to a numeric radian angle. Of course a starting/default value must be fed in too so that relative values can be calculated properly.\n\t\t\t * @param {Object} v Value to be parsed\n\t\t\t * @param {!number} d Default value (which is also used for relative calculations if \"+=\" or \"-=\" is found in the first parameter)\n\t\t\t * @param {string=} p property name for directionalEnd (optional - only used when the parsed value is directional (\"_short\", \"_cw\", or \"_ccw\" suffix). We need a way to store the uncompensated value so that at the end of the tween, we set it to exactly what was requested with no directional compensation). Property name would be \"rotation\", \"rotationX\", or \"rotationY\"\n\t\t\t * @param {Object=} directionalEnd An object that will store the raw end values for directional angles (\"_short\", \"_cw\", or \"_ccw\" suffix). We need a way to store the uncompensated value so that at the end of the tween, we set it to exactly what was requested with no directional compensation.\n\t\t\t * @return {number} parsed angle in radians\n\t\t\t */\n\t\t\t_parseAngle = function(v, d, p, directionalEnd) {\n\t\t\t\tvar min = 0.000001,\n\t\t\t\t\tcap, split, dif, result, isRelative;\n\t\t\t\tif (typeof(v) === \"function\") {\n\t\t\t\t\tv = v(_index, _target);\n\t\t\t\t}\n\t\t\t\tif (v == null) {\n\t\t\t\t\tresult = d;\n\t\t\t\t} else if (typeof(v) === \"number\") {\n\t\t\t\t\tresult = v;\n\t\t\t\t} else {\n\t\t\t\t\tcap = 360;\n\t\t\t\t\tsplit = v.split(\"_\");\n\t\t\t\t\tisRelative = (v.charAt(1) === \"=\");\n\t\t\t\t\tdif = (isRelative ? parseInt(v.charAt(0) + \"1\", 10) * parseFloat(split[0].substr(2)) : parseFloat(split[0])) * ((v.indexOf(\"rad\") === -1) ? 1 : _RAD2DEG) - (isRelative ? 0 : d);\n\t\t\t\t\tif (split.length) {\n\t\t\t\t\t\tif (directionalEnd) {\n\t\t\t\t\t\t\tdirectionalEnd[p] = d + dif;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v.indexOf(\"short\") !== -1) {\n\t\t\t\t\t\t\tdif = dif % cap;\n\t\t\t\t\t\t\tif (dif !== dif % (cap / 2)) {\n\t\t\t\t\t\t\t\tdif = (dif < 0) ? dif + cap : dif - cap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v.indexOf(\"_cw\") !== -1 && dif < 0) {\n\t\t\t\t\t\t\tdif = ((dif + cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t} else if (v.indexOf(\"ccw\") !== -1 && dif > 0) {\n\t\t\t\t\t\t\tdif = ((dif - cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tresult = d + dif;\n\t\t\t\t}\n\t\t\t\tif (result < min && result > -min) {\n\t\t\t\t\tresult = 0;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\n\t\t\t_colorLookup = {aqua:[0,255,255],\n\t\t\t\tlime:[0,255,0],\n\t\t\t\tsilver:[192,192,192],\n\t\t\t\tblack:[0,0,0],\n\t\t\t\tmaroon:[128,0,0],\n\t\t\t\tteal:[0,128,128],\n\t\t\t\tblue:[0,0,255],\n\t\t\t\tnavy:[0,0,128],\n\t\t\t\twhite:[255,255,255],\n\t\t\t\tfuchsia:[255,0,255],\n\t\t\t\tolive:[128,128,0],\n\t\t\t\tyellow:[255,255,0],\n\t\t\t\torange:[255,165,0],\n\t\t\t\tgray:[128,128,128],\n\t\t\t\tpurple:[128,0,128],\n\t\t\t\tgreen:[0,128,0],\n\t\t\t\tred:[255,0,0],\n\t\t\t\tpink:[255,192,203],\n\t\t\t\tcyan:[0,255,255],\n\t\t\t\ttransparent:[255,255,255,0]},\n\n\t\t\t_hue = function(h, m1, m2) {\n\t\t\t\th = (h < 0) ? h + 1 : (h > 1) ? h - 1 : h;\n\t\t\t\treturn ((((h * 6 < 1) ? m1 + (m2 - m1) * h * 6 : (h < 0.5) ? m2 : (h * 3 < 2) ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * 255) + 0.5) | 0;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Parses a color (like #9F0, #FF9900, rgb(255,51,153) or hsl(108, 50%, 10%)) into an array with 3 elements for red, green, and blue or if toHSL parameter is true, it will populate the array with hue, saturation, and lightness values. If a relative value is found in an hsl() or hsla() string, it will preserve those relative prefixes and all the values in the array will be strings instead of numbers (in all other cases it will be populated with numbers).\n\t\t\t * @param {(string|number)} v The value the should be parsed which could be a string like #9F0 or rgb(255,102,51) or rgba(255,0,0,0.5) or it could be a number like 0xFF00CC or even a named color like red, blue, purple, etc.\n\t\t\t * @param {(boolean)} toHSL If true, an hsl() or hsla() value will be returned instead of rgb() or rgba()\n\t\t\t * @return {Array.<number>} An array containing red, green, and blue (and optionally alpha) in that order, or if the toHSL parameter was true, the array will contain hue, saturation and lightness (and optionally alpha) in that order. Always numbers unless there's a relative prefix found in an hsl() or hsla() string and toHSL is true.\n\t\t\t */\n\t\t\t_parseColor = CSSPlugin.parseColor = function(v, toHSL) {\n\t\t\t\tvar a, r, g, b, h, s, l, max, min, d, wasHSL;\n\t\t\t\tif (!v) {\n\t\t\t\t\ta = _colorLookup.black;\n\t\t\t\t} else if (typeof(v) === \"number\") {\n\t\t\t\t\ta = [v >> 16, (v >> 8) & 255, v & 255];\n\t\t\t\t} else {\n\t\t\t\t\tif (v.charAt(v.length - 1) === \",\") { //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:\"2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)\" - in this example \"blue,\" has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value.\n\t\t\t\t\t\tv = v.substr(0, v.length - 1);\n\t\t\t\t\t}\n\t\t\t\t\tif (_colorLookup[v]) {\n\t\t\t\t\t\ta = _colorLookup[v];\n\t\t\t\t\t} else if (v.charAt(0) === \"#\") {\n\t\t\t\t\t\tif (v.length === 4) { //for shorthand like #9F0\n\t\t\t\t\t\t\tr = v.charAt(1);\n\t\t\t\t\t\t\tg = v.charAt(2);\n\t\t\t\t\t\t\tb = v.charAt(3);\n\t\t\t\t\t\t\tv = \"#\" + r + r + g + g + b + b;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tv = parseInt(v.substr(1), 16);\n\t\t\t\t\t\ta = [v >> 16, (v >> 8) & 255, v & 255];\n\t\t\t\t\t} else if (v.substr(0, 3) === \"hsl\") {\n\t\t\t\t\t\ta = wasHSL = v.match(_numExp);\n\t\t\t\t\t\tif (!toHSL) {\n\t\t\t\t\t\t\th = (Number(a[0]) % 360) / 360;\n\t\t\t\t\t\t\ts = Number(a[1]) / 100;\n\t\t\t\t\t\t\tl = Number(a[2]) / 100;\n\t\t\t\t\t\t\tg = (l <= 0.5) ? l * (s + 1) : l + s - l * s;\n\t\t\t\t\t\t\tr = l * 2 - g;\n\t\t\t\t\t\t\tif (a.length > 3) {\n\t\t\t\t\t\t\t\ta[3] = Number(v[3]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ta[0] = _hue(h + 1 / 3, r, g);\n\t\t\t\t\t\t\ta[1] = _hue(h, r, g);\n\t\t\t\t\t\t\ta[2] = _hue(h - 1 / 3, r, g);\n\t\t\t\t\t\t} else if (v.indexOf(\"=\") !== -1) { //if relative values are found, just return the raw strings with the relative prefixes in place.\n\t\t\t\t\t\t\treturn v.match(_relNumExp);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta = v.match(_numExp) || _colorLookup.transparent;\n\t\t\t\t\t}\n\t\t\t\t\ta[0] = Number(a[0]);\n\t\t\t\t\ta[1] = Number(a[1]);\n\t\t\t\t\ta[2] = Number(a[2]);\n\t\t\t\t\tif (a.length > 3) {\n\t\t\t\t\t\ta[3] = Number(a[3]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (toHSL && !wasHSL) {\n\t\t\t\t\tr = a[0] / 255;\n\t\t\t\t\tg = a[1] / 255;\n\t\t\t\t\tb = a[2] / 255;\n\t\t\t\t\tmax = Math.max(r, g, b);\n\t\t\t\t\tmin = Math.min(r, g, b);\n\t\t\t\t\tl = (max + min) / 2;\n\t\t\t\t\tif (max === min) {\n\t\t\t\t\t\th = s = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\td = max - min;\n\t\t\t\t\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\t\t\t\t\th = (max === r) ? (g - b) / d + (g < b ? 6 : 0) : (max === g) ? (b - r) / d + 2 : (r - g) / d + 4;\n\t\t\t\t\t\th *= 60;\n\t\t\t\t\t}\n\t\t\t\t\ta[0] = (h + 0.5) | 0;\n\t\t\t\t\ta[1] = (s * 100 + 0.5) | 0;\n\t\t\t\t\ta[2] = (l * 100 + 0.5) | 0;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\t_formatColors = function(s, toHSL) {\n\t\t\t\tvar colors = s.match(_colorExp) || [],\n\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\tparsed = colors.length ? \"\" : s,\n\t\t\t\t\ti, color, temp;\n\t\t\t\tfor (i = 0; i < colors.length; i++) {\n\t\t\t\t\tcolor = colors[i];\n\t\t\t\t\ttemp = s.substr(charIndex, s.indexOf(color, charIndex)-charIndex);\n\t\t\t\t\tcharIndex += temp.length + color.length;\n\t\t\t\t\tcolor = _parseColor(color, toHSL);\n\t\t\t\t\tif (color.length === 3) {\n\t\t\t\t\t\tcolor.push(1);\n\t\t\t\t\t}\n\t\t\t\t\tparsed += temp + (toHSL ? \"hsla(\" + color[0] + \",\" + color[1] + \"%,\" + color[2] + \"%,\" + color[3] : \"rgba(\" + color.join(\",\")) + \")\";\n\t\t\t\t}\n\t\t\t\treturn parsed + s.substr(charIndex);\n\t\t\t},\n\t\t\t_colorExp = \"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3}){1,2}\\\\b\"; //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc.\n\n\t\tfor (p in _colorLookup) {\n\t\t\t_colorExp += \"|\" + p + \"\\\\b\";\n\t\t}\n\t\t_colorExp = new RegExp(_colorExp+\")\", \"gi\");\n\n\t\tCSSPlugin.colorStringFilter = function(a) {\n\t\t\tvar combined = a[0] + a[1],\n\t\t\t\ttoHSL;\n\t\t\tif (_colorExp.test(combined)) {\n\t\t\t\ttoHSL = (combined.indexOf(\"hsl(\") !== -1 || combined.indexOf(\"hsla(\") !== -1);\n\t\t\t\ta[0] = _formatColors(a[0], toHSL);\n\t\t\t\ta[1] = _formatColors(a[1], toHSL);\n\t\t\t}\n\t\t\t_colorExp.lastIndex = 0;\n\t\t};\n\n\t\tif (!TweenLite.defaultStringFilter) {\n\t\t\tTweenLite.defaultStringFilter = CSSPlugin.colorStringFilter;\n\t\t}\n\n\t\t/**\n\t\t * @private Returns a formatter function that handles taking a string (or number in some cases) and returning a consistently formatted one in terms of delimiters, quantity of values, etc. For example, we may get boxShadow values defined as \"0px red\" or \"0px 0px 10px rgb(255,0,0)\" or \"0px 0px 20px 20px #F00\" and we need to ensure that what we get back is described with 4 numbers and a color. This allows us to feed it into the _parseComplex() method and split the values up appropriately. The neat thing about this _getFormatter() function is that the dflt defines a pattern as well as a default, so for example, _getFormatter(\"0px 0px 0px 0px #777\", true) not only sets the default as 0px for all distances and #777 for the color, but also sets the pattern such that 4 numbers and a color will always get returned.\n\t\t * @param {!string} dflt The default value and pattern to follow. So \"0px 0px 0px 0px #777\" will ensure that 4 numbers and a color will always get returned.\n\t\t * @param {boolean=} clr If true, the values should be searched for color-related data. For example, boxShadow values typically contain a color whereas borderRadius don't.\n\t\t * @param {boolean=} collapsible If true, the value is a top/left/right/bottom style one that acts like margin or padding, where if only one value is received, it's used for all 4; if 2 are received, the first is duplicated for 3rd (bottom) and the 2nd is duplicated for the 4th spot (left), etc.\n\t\t * @return {Function} formatter function\n\t\t */\n\t\tvar _getFormatter = function(dflt, clr, collapsible, multi) {\n\t\t\t\tif (dflt == null) {\n\t\t\t\t\treturn function(v) {return v;};\n\t\t\t\t}\n\t\t\t\tvar dColor = clr ? (dflt.match(_colorExp) || [\"\"])[0] : \"\",\n\t\t\t\t\tdVals = dflt.split(dColor).join(\"\").match(_valuesExp) || [],\n\t\t\t\t\tpfx = dflt.substr(0, dflt.indexOf(dVals[0])),\n\t\t\t\t\tsfx = (dflt.charAt(dflt.length - 1) === \")\") ? \")\" : \"\",\n\t\t\t\t\tdelim = (dflt.indexOf(\" \") !== -1) ? \" \" : \",\",\n\t\t\t\t\tnumVals = dVals.length,\n\t\t\t\t\tdSfx = (numVals > 0) ? dVals[0].replace(_numExp, \"\") : \"\",\n\t\t\t\t\tformatter;\n\t\t\t\tif (!numVals) {\n\t\t\t\t\treturn function(v) {return v;};\n\t\t\t\t}\n\t\t\t\tif (clr) {\n\t\t\t\t\tformatter = function(v) {\n\t\t\t\t\t\tvar color, vals, i, a;\n\t\t\t\t\t\tif (typeof(v) === \"number\") {\n\t\t\t\t\t\t\tv += dSfx;\n\t\t\t\t\t\t} else if (multi && _commasOutsideParenExp.test(v)) {\n\t\t\t\t\t\t\ta = v.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\t\t\ta[i] = formatter(a[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn a.join(\",\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcolor = (v.match(_colorExp) || [dColor])[0];\n\t\t\t\t\t\tvals = v.split(color).join(\"\").match(_valuesExp) || [];\n\t\t\t\t\t\ti = vals.length;\n\t\t\t\t\t\tif (numVals > i--) {\n\t\t\t\t\t\t\twhile (++i < numVals) {\n\t\t\t\t\t\t\t\tvals[i] = collapsible ? vals[(((i - 1) / 2) | 0)] : dVals[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn pfx + vals.join(delim) + delim + color + sfx + (v.indexOf(\"inset\") !== -1 ? \" inset\" : \"\");\n\t\t\t\t\t};\n\t\t\t\t\treturn formatter;\n\n\t\t\t\t}\n\t\t\t\tformatter = function(v) {\n\t\t\t\t\tvar vals, a, i;\n\t\t\t\t\tif (typeof(v) === \"number\") {\n\t\t\t\t\t\tv += dSfx;\n\t\t\t\t\t} else if (multi && _commasOutsideParenExp.test(v)) {\n\t\t\t\t\t\ta = v.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\t\ta[i] = formatter(a[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn a.join(\",\");\n\t\t\t\t\t}\n\t\t\t\t\tvals = v.match(_valuesExp) || [];\n\t\t\t\t\ti = vals.length;\n\t\t\t\t\tif (numVals > i--) {\n\t\t\t\t\t\twhile (++i < numVals) {\n\t\t\t\t\t\t\tvals[i] = collapsible ? vals[(((i - 1) / 2) | 0)] : dVals[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn pfx + vals.join(delim) + sfx;\n\t\t\t\t};\n\t\t\t\treturn formatter;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private returns a formatter function that's used for edge-related values like marginTop, marginLeft, paddingBottom, paddingRight, etc. Just pass a comma-delimited list of property names related to the edges.\n\t\t\t * @param {!string} props a comma-delimited list of property names in order from top to left, like \"marginTop,marginRight,marginBottom,marginLeft\"\n\t\t\t * @return {Function} a formatter function\n\t\t\t */\n\t\t\t_getEdgeParser = function(props) {\n\t\t\t\tprops = props.split(\",\");\n\t\t\t\treturn function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\t\tvar a = (e + \"\").split(\" \"),\n\t\t\t\t\t\ti;\n\t\t\t\t\tvars = {};\n\t\t\t\t\tfor (i = 0; i < 4; i++) {\n\t\t\t\t\t\tvars[props[i]] = a[i] = a[i] || a[(((i - 1) / 2) >> 0)];\n\t\t\t\t\t}\n\t\t\t\t\treturn cssp.parse(t, vars, pt, plugin);\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t// @private used when other plugins must tween values first, like BezierPlugin or ThrowPropsPlugin, etc. That plugin's setRatio() gets called first so that the values are updated, and then we loop through the MiniPropTweens which handle copying the values into their appropriate slots so that they can then be applied correctly in the main CSSPlugin setRatio() method. Remember, we typically create a proxy object that has a bunch of uniquely-named properties that we feed to the sub-plugin and it does its magic normally, and then we must interpret those values and apply them to the css because often numbers must get combined/concatenated, suffixes added, etc. to work with css, like boxShadow could have 4 values plus a color.\n\t\t\t_setPluginRatio = _internals._setPluginRatio = function(v) {\n\t\t\t\tthis.plugin.setRatio(v);\n\t\t\t\tvar d = this.data,\n\t\t\t\t\tproxy = d.proxy,\n\t\t\t\t\tmpt = d.firstMPT,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tval, pt, i, str, p;\n\t\t\t\twhile (mpt) {\n\t\t\t\t\tval = proxy[mpt.v];\n\t\t\t\t\tif (mpt.r) {\n\t\t\t\t\t\tval = Math.round(val);\n\t\t\t\t\t} else if (val < min && val > -min) {\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tmpt.t[mpt.p] = val;\n\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t}\n\t\t\t\tif (d.autoRotate) {\n\t\t\t\t\td.autoRotate.rotation = d.mod ? d.mod(proxy.rotation, this.t) : proxy.rotation; //special case for ModifyPlugin to hook into an auto-rotating bezier\n\t\t\t\t}\n\t\t\t\t//at the end, we must set the CSSPropTween's \"e\" (end) value dynamically here because that's what is used in the final setRatio() method. Same for \"b\" at the beginning.\n\t\t\t\tif (v === 1 || v === 0) {\n\t\t\t\t\tmpt = d.firstMPT;\n\t\t\t\t\tp = (v === 1) ? \"e\" : \"b\";\n\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\tpt = mpt.t;\n\t\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\t\tpt[p] = pt.s + pt.xs0;\n\t\t\t\t\t\t} else if (pt.type === 1) {\n\t\t\t\t\t\t\tstr = pt.xs0 + pt.s + pt.xs1;\n\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt[p] = str;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private @constructor Used by a few SpecialProps to hold important values for proxies. For example, _parseToProxy() creates a MiniPropTween instance for each property that must get tweened on the proxy, and we record the original property name as well as the unique one we create for the proxy, plus whether or not the value needs to be rounded plus the original value.\n\t\t\t * @param {!Object} t target object whose property we're tweening (often a CSSPropTween)\n\t\t\t * @param {!string} p property name\n\t\t\t * @param {(number|string|object)} v value\n\t\t\t * @param {MiniPropTween=} next next MiniPropTween in the linked list\n\t\t\t * @param {boolean=} r if true, the tweened value should be rounded to the nearest integer\n\t\t\t */\n\t\t\tMiniPropTween = function(t, p, v, next, r) {\n\t\t\t\tthis.t = t;\n\t\t\t\tthis.p = p;\n\t\t\t\tthis.v = v;\n\t\t\t\tthis.r = r;\n\t\t\t\tif (next) {\n\t\t\t\t\tnext._prev = this;\n\t\t\t\t\tthis._next = next;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Most other plugins (like BezierPlugin and ThrowPropsPlugin and others) can only tween numeric values, but CSSPlugin must accommodate special values that have a bunch of extra data (like a suffix or strings between numeric values, etc.). For example, boxShadow has values like \"10px 10px 20px 30px rgb(255,0,0)\" which would utterly confuse other plugins. This method allows us to split that data apart and grab only the numeric data and attach it to uniquely-named properties of a generic proxy object ({}) so that we can feed that to virtually any plugin to have the numbers tweened. However, we must also keep track of which properties from the proxy go with which CSSPropTween values and instances. So we create a linked list of MiniPropTweens. Each one records a target (the original CSSPropTween), property (like \"s\" or \"xn1\" or \"xn2\") that we're tweening and the unique property name that was used for the proxy (like \"boxShadow_xn1\" and \"boxShadow_xn2\") and whether or not they need to be rounded. That way, in the _setPluginRatio() method we can simply copy the values over from the proxy to the CSSPropTween instance(s). Then, when the main CSSPlugin setRatio() method runs and applies the CSSPropTween values accordingly, they're updated nicely. So the external plugin tweens the numbers, _setPluginRatio() copies them over, and setRatio() acts normally, applying css-specific values to the element.\n\t\t\t * This method returns an object that has the following properties:\n\t\t\t *  - proxy: a generic object containing the starting values for all the properties that will be tweened by the external plugin.  This is what we feed to the external _onInitTween() as the target\n\t\t\t *  - end: a generic object containing the ending values for all the properties that will be tweened by the external plugin. This is what we feed to the external plugin's _onInitTween() as the destination values\n\t\t\t *  - firstMPT: the first MiniPropTween in the linked list\n\t\t\t *  - pt: the first CSSPropTween in the linked list that was created when parsing. If shallow is true, this linked list will NOT attach to the one passed into the _parseToProxy() as the \"pt\" (4th) parameter.\n\t\t\t * @param {!Object} t target object to be tweened\n\t\t\t * @param {!(Object|string)} vars the object containing the information about the tweening values (typically the end/destination values) that should be parsed\n\t\t\t * @param {!CSSPlugin} cssp The CSSPlugin instance\n\t\t\t * @param {CSSPropTween=} pt the next CSSPropTween in the linked list\n\t\t\t * @param {TweenPlugin=} plugin the external TweenPlugin instance that will be handling tweening the numeric values\n\t\t\t * @param {boolean=} shallow if true, the resulting linked list from the parse will NOT be attached to the CSSPropTween that was passed in as the \"pt\" (4th) parameter.\n\t\t\t * @return An object containing the following properties: proxy, end, firstMPT, and pt (see above for descriptions)\n\t\t\t */\n\t\t\t_parseToProxy = _internals._parseToProxy = function(t, vars, cssp, pt, plugin, shallow) {\n\t\t\t\tvar bpt = pt,\n\t\t\t\t\tstart = {},\n\t\t\t\t\tend = {},\n\t\t\t\t\ttransform = cssp._transform,\n\t\t\t\t\toldForce = _forcePT,\n\t\t\t\t\ti, p, xp, mpt, firstPT;\n\t\t\t\tcssp._transform = null;\n\t\t\t\t_forcePT = vars;\n\t\t\t\tpt = firstPT = cssp.parse(t, vars, pt, plugin);\n\t\t\t\t_forcePT = oldForce;\n\t\t\t\t//break off from the linked list so the new ones are isolated.\n\t\t\t\tif (shallow) {\n\t\t\t\t\tcssp._transform = transform;\n\t\t\t\t\tif (bpt) {\n\t\t\t\t\t\tbpt._prev = null;\n\t\t\t\t\t\tif (bpt._prev) {\n\t\t\t\t\t\t\tbpt._prev._next = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (pt && pt !== bpt) {\n\t\t\t\t\tif (pt.type <= 1) {\n\t\t\t\t\t\tp = pt.p;\n\t\t\t\t\t\tend[p] = pt.s + pt.c;\n\t\t\t\t\t\tstart[p] = pt.s;\n\t\t\t\t\t\tif (!shallow) {\n\t\t\t\t\t\t\tmpt = new MiniPropTween(pt, \"s\", p, mpt, pt.r);\n\t\t\t\t\t\t\tpt.c = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pt.type === 1) {\n\t\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\t\twhile (--i > 0) {\n\t\t\t\t\t\t\t\txp = \"xn\" + i;\n\t\t\t\t\t\t\t\tp = pt.p + \"_\" + xp;\n\t\t\t\t\t\t\t\tend[p] = pt.data[xp];\n\t\t\t\t\t\t\t\tstart[p] = pt[xp];\n\t\t\t\t\t\t\t\tif (!shallow) {\n\t\t\t\t\t\t\t\t\tmpt = new MiniPropTween(pt, xp, p, mpt, pt.rxp[xp]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t\treturn {proxy:start, end:end, firstMPT:mpt, pt:firstPT};\n\t\t\t},\n\n\n\n\t\t\t/**\n\t\t\t * @constructor Each property that is tweened has at least one CSSPropTween associated with it. These instances store important information like the target, property, starting value, amount of change, etc. They can also optionally have a number of \"extra\" strings and numeric values named xs1, xn1, xs2, xn2, xs3, xn3, etc. where \"s\" indicates string and \"n\" indicates number. These can be pieced together in a complex-value tween (type:1) that has alternating types of data like a string, number, string, number, etc. For example, boxShadow could be \"5px 5px 8px rgb(102, 102, 51)\". In that value, there are 6 numbers that may need to tween and then pieced back together into a string again with spaces, suffixes, etc. xs0 is special in that it stores the suffix for standard (type:0) tweens, -OR- the first string (prefix) in a complex-value (type:1) CSSPropTween -OR- it can be the non-tweening value in a type:-1 CSSPropTween. We do this to conserve memory.\n\t\t\t * CSSPropTweens have the following optional properties as well (not defined through the constructor):\n\t\t\t *  - l: Length in terms of the number of extra properties that the CSSPropTween has (default: 0). For example, for a boxShadow we may need to tween 5 numbers in which case l would be 5; Keep in mind that the start/end values for the first number that's tweened are always stored in the s and c properties to conserve memory. All additional values thereafter are stored in xn1, xn2, etc.\n\t\t\t *  - xfirst: The first instance of any sub-CSSPropTweens that are tweening properties of this instance. For example, we may split up a boxShadow tween so that there's a main CSSPropTween of type:1 that has various xs* and xn* values associated with the h-shadow, v-shadow, blur, color, etc. Then we spawn a CSSPropTween for each of those that has a higher priority and runs BEFORE the main CSSPropTween so that the values are all set by the time it needs to re-assemble them. The xfirst gives us an easy way to identify the first one in that chain which typically ends at the main one (because they're all prepende to the linked list)\n\t\t\t *  - plugin: The TweenPlugin instance that will handle the tweening of any complex values. For example, sometimes we don't want to use normal subtweens (like xfirst refers to) to tween the values - we might want ThrowPropsPlugin or BezierPlugin some other plugin to do the actual tweening, so we create a plugin instance and store a reference here. We need this reference so that if we get a request to round values or disable a tween, we can pass along that request.\n\t\t\t *  - data: Arbitrary data that needs to be stored with the CSSPropTween. Typically if we're going to have a plugin handle the tweening of a complex-value tween, we create a generic object that stores the END values that we're tweening to and the CSSPropTween's xs1, xs2, etc. have the starting values. We store that object as data. That way, we can simply pass that object to the plugin and use the CSSPropTween as the target.\n\t\t\t *  - setRatio: Only used for type:2 tweens that require custom functionality. In this case, we call the CSSPropTween's setRatio() method and pass the ratio each time the tween updates. This isn't quite as efficient as doing things directly in the CSSPlugin's setRatio() method, but it's very convenient and flexible.\n\t\t\t * @param {!Object} t Target object whose property will be tweened. Often a DOM element, but not always. It could be anything.\n\t\t\t * @param {string} p Property to tween (name). For example, to tween element.width, p would be \"width\".\n\t\t\t * @param {number} s Starting numeric value\n\t\t\t * @param {number} c Change in numeric value over the course of the entire tween. For example, if element.width starts at 5 and should end at 100, c would be 95.\n\t\t\t * @param {CSSPropTween=} next The next CSSPropTween in the linked list. If one is defined, we will define its _prev as the new instance, and the new instance's _next will be pointed at it.\n\t\t\t * @param {number=} type The type of CSSPropTween where -1 = a non-tweening value, 0 = a standard simple tween, 1 = a complex value (like one that has multiple numbers in a comma- or space-delimited string like border:\"1px solid red\"), and 2 = one that uses a custom setRatio function that does all of the work of applying the values on each update.\n\t\t\t * @param {string=} n Name of the property that should be used for overwriting purposes which is typically the same as p but not always. For example, we may need to create a subtween for the 2nd part of a \"clip:rect(...)\" tween in which case \"p\" might be xs1 but \"n\" is still \"clip\"\n\t\t\t * @param {boolean=} r If true, the value(s) should be rounded\n\t\t\t * @param {number=} pr Priority in the linked list order. Higher priority CSSPropTweens will be updated before lower priority ones. The default priority is 0.\n\t\t\t * @param {string=} b Beginning value. We store this to ensure that it is EXACTLY what it was when the tween began without any risk of interpretation issues.\n\t\t\t * @param {string=} e Ending value. We store this to ensure that it is EXACTLY what the user defined at the end of the tween without any risk of interpretation issues.\n\t\t\t */\n\t\t\tCSSPropTween = _internals.CSSPropTween = function(t, p, s, c, next, type, n, r, pr, b, e) {\n\t\t\t\tthis.t = t; //target\n\t\t\t\tthis.p = p; //property\n\t\t\t\tthis.s = s; //starting value\n\t\t\t\tthis.c = c; //change value\n\t\t\t\tthis.n = n || p; //name that this CSSPropTween should be associated to (usually the same as p, but not always - n is what overwriting looks at)\n\t\t\t\tif (!(t instanceof CSSPropTween)) {\n\t\t\t\t\t_overwriteProps.push(this.n);\n\t\t\t\t}\n\t\t\t\tthis.r = r; //round (boolean)\n\t\t\t\tthis.type = type || 0; //0 = normal tween, -1 = non-tweening (in which case xs0 will be applied to the target's property, like tp.t[tp.p] = tp.xs0), 1 = complex-value SpecialProp, 2 = custom setRatio() that does all the work\n\t\t\t\tif (pr) {\n\t\t\t\t\tthis.pr = pr;\n\t\t\t\t\t_hasPriority = true;\n\t\t\t\t}\n\t\t\t\tthis.b = (b === undefined) ? s : b;\n\t\t\t\tthis.e = (e === undefined) ? s + c : e;\n\t\t\t\tif (next) {\n\t\t\t\t\tthis._next = next;\n\t\t\t\t\tnext._prev = this;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t_addNonTweeningNumericPT = function(target, prop, start, end, next, overwriteProp) { //cleans up some code redundancies and helps minification. Just a fast way to add a NUMERIC non-tweening CSSPropTween\n\t\t\t\tvar pt = new CSSPropTween(target, prop, start, end - start, next, -1, overwriteProp);\n\t\t\t\tpt.b = start;\n\t\t\t\tpt.e = pt.xs0 = end;\n\t\t\t\treturn pt;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Takes a target, the beginning value and ending value (as strings) and parses them into a CSSPropTween (possibly with child CSSPropTweens) that accommodates multiple numbers, colors, comma-delimited values, etc. For example:\n\t\t\t * sp.parseComplex(element, \"boxShadow\", \"5px 10px 20px rgb(255,102,51)\", \"0px 0px 0px red\", true, \"0px 0px 0px rgb(0,0,0,0)\", pt);\n\t\t\t * It will walk through the beginning and ending values (which should be in the same format with the same number and type of values) and figure out which parts are numbers, what strings separate the numeric/tweenable values, and then create the CSSPropTweens accordingly. If a plugin is defined, no child CSSPropTweens will be created. Instead, the ending values will be stored in the \"data\" property of the returned CSSPropTween like: {s:-5, xn1:-10, xn2:-20, xn3:255, xn4:0, xn5:0} so that it can be fed to any other plugin and it'll be plain numeric tweens but the recomposition of the complex value will be handled inside CSSPlugin's setRatio().\n\t\t\t * If a setRatio is defined, the type of the CSSPropTween will be set to 2 and recomposition of the values will be the responsibility of that method.\n\t\t\t *\n\t\t\t * @param {!Object} t Target whose property will be tweened\n\t\t\t * @param {!string} p Property that will be tweened (its name, like \"left\" or \"backgroundColor\" or \"boxShadow\")\n\t\t\t * @param {string} b Beginning value\n\t\t\t * @param {string} e Ending value\n\t\t\t * @param {boolean} clrs If true, the value could contain a color value like \"rgb(255,0,0)\" or \"#F00\" or \"red\". The default is false, so no colors will be recognized (a performance optimization)\n\t\t\t * @param {(string|number|Object)} dflt The default beginning value that should be used if no valid beginning value is defined or if the number of values inside the complex beginning and ending values don't match\n\t\t\t * @param {?CSSPropTween} pt CSSPropTween instance that is the current head of the linked list (we'll prepend to this).\n\t\t\t * @param {number=} pr Priority in the linked list order. Higher priority properties will be updated before lower priority ones. The default priority is 0.\n\t\t\t * @param {TweenPlugin=} plugin If a plugin should handle the tweening of extra properties, pass the plugin instance here. If one is defined, then NO subtweens will be created for any extra properties (the properties will be created - just not additional CSSPropTween instances to tween them) because the plugin is expected to do so. However, the end values WILL be populated in the \"data\" property, like {s:100, xn1:50, xn2:300}\n\t\t\t * @param {function(number)=} setRatio If values should be set in a custom function instead of being pieced together in a type:1 (complex-value) CSSPropTween, define that custom function here.\n\t\t\t * @return {CSSPropTween} The first CSSPropTween in the linked list which includes the new one(s) added by the parseComplex() call.\n\t\t\t */\n\t\t\t_parseComplex = CSSPlugin.parseComplex = function(t, p, b, e, clrs, dflt, pt, pr, plugin, setRatio) {\n\t\t\t\t//DEBUG: _log(\"parseComplex: \"+p+\", b: \"+b+\", e: \"+e);\n\t\t\t\tb = b || dflt || \"\";\n\t\t\t\tif (typeof(e) === \"function\") {\n\t\t\t\t\te = e(_index, _target);\n\t\t\t\t}\n\t\t\t\tpt = new CSSPropTween(t, p, 0, 0, pt, (setRatio ? 2 : 1), null, false, pr, b, e);\n\t\t\t\te += \"\"; //ensures it's a string\n\t\t\t\tif (clrs && _colorExp.test(e + b)) { //if colors are found, normalize the formatting to rgba() or hsla().\n\t\t\t\t\te = [b, e];\n\t\t\t\t\tCSSPlugin.colorStringFilter(e);\n\t\t\t\t\tb = e[0];\n\t\t\t\t\te = e[1];\n\t\t\t\t}\n\t\t\t\tvar ba = b.split(\", \").join(\",\").split(\" \"), //beginning array\n\t\t\t\t\tea = e.split(\", \").join(\",\").split(\" \"), //ending array\n\t\t\t\t\tl = ba.length,\n\t\t\t\t\tautoRound = (_autoRound !== false),\n\t\t\t\t\ti, xi, ni, bv, ev, bnums, enums, bn, hasAlpha, temp, cv, str, useHSL;\n\t\t\t\tif (e.indexOf(\",\") !== -1 || b.indexOf(\",\") !== -1) {\n\t\t\t\t\tba = ba.join(\" \").replace(_commasOutsideParenExp, \", \").split(\" \");\n\t\t\t\t\tea = ea.join(\" \").replace(_commasOutsideParenExp, \", \").split(\" \");\n\t\t\t\t\tl = ba.length;\n\t\t\t\t}\n\t\t\t\tif (l !== ea.length) {\n\t\t\t\t\t//DEBUG: _log(\"mismatched formatting detected on \" + p + \" (\" + b + \" vs \" + e + \")\");\n\t\t\t\t\tba = (dflt || \"\").split(\" \");\n\t\t\t\t\tl = ba.length;\n\t\t\t\t}\n\t\t\t\tpt.plugin = plugin;\n\t\t\t\tpt.setRatio = setRatio;\n\t\t\t\t_colorExp.lastIndex = 0;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tbv = ba[i];\n\t\t\t\t\tev = ea[i];\n\t\t\t\t\tbn = parseFloat(bv);\n\t\t\t\t\t//if the value begins with a number (most common). It's fine if it has a suffix like px\n\t\t\t\t\tif (bn || bn === 0) {\n\t\t\t\t\t\tpt.appendXtra(\"\", bn, _parseChange(ev, bn), ev.replace(_relNumExp, \"\"), (autoRound && ev.indexOf(\"px\") !== -1), true);\n\n\t\t\t\t\t//if the value is a color\n\t\t\t\t\t} else if (clrs && _colorExp.test(bv)) {\n\t\t\t\t\t\tstr = ev.indexOf(\")\") + 1;\n\t\t\t\t\t\tstr = \")\" + (str ? ev.substr(str) : \"\"); //if there's a comma or ) at the end, retain it.\n\t\t\t\t\t\tuseHSL = (ev.indexOf(\"hsl\") !== -1 && _supportsOpacity);\n\t\t\t\t\t\tbv = _parseColor(bv, useHSL);\n\t\t\t\t\t\tev = _parseColor(ev, useHSL);\n\t\t\t\t\t\thasAlpha = (bv.length + ev.length > 6);\n\t\t\t\t\t\tif (hasAlpha && !_supportsOpacity && ev[3] === 0) { //older versions of IE don't support rgba(), so if the destination alpha is 0, just use \"transparent\" for the end color\n\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += pt.l ? \" transparent\" : \"transparent\";\n\t\t\t\t\t\t\tpt.e = pt.e.split(ea[i]).join(\"transparent\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!_supportsOpacity) { //old versions of IE don't support rgba().\n\t\t\t\t\t\t\t\thasAlpha = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (useHSL) {\n\t\t\t\t\t\t\t\tpt.appendXtra((hasAlpha ? \"hsla(\" : \"hsl(\"), bv[0], _parseChange(ev[0], bv[0]), \",\", false, true)\n\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[1], _parseChange(ev[1], bv[1]), \"%,\", false)\n\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[2], _parseChange(ev[2], bv[2]), (hasAlpha ? \"%,\" : \"%\" + str), false);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpt.appendXtra((hasAlpha ? \"rgba(\" : \"rgb(\"), bv[0], ev[0] - bv[0], \",\", true, true)\n\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[1], ev[1] - bv[1], \",\", true)\n\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[2], ev[2] - bv[2], (hasAlpha ? \",\" : str), true);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (hasAlpha) {\n\t\t\t\t\t\t\t\tbv = (bv.length < 4) ? 1 : bv[3];\n\t\t\t\t\t\t\t\tpt.appendXtra(\"\", bv, ((ev.length < 4) ? 1 : ev[3]) - bv, str, false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_colorExp.lastIndex = 0; //otherwise the test() on the RegExp could move the lastIndex and taint future results.\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbnums = bv.match(_numExp); //gets each group of numbers in the beginning value string and drops them into an array\n\n\t\t\t\t\t\t//if no number is found, treat it as a non-tweening value and just append the string to the current xs.\n\t\t\t\t\t\tif (!bnums) {\n\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += (pt.l || pt[\"xs\" + pt.l]) ? \" \" + ev : ev;\n\n\t\t\t\t\t\t//loop through all the numbers that are found and construct the extra values on the pt.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tenums = ev.match(_relNumExp); //get each group of numbers in the end value string and drop them into an array. We allow relative values too, like +=50 or -=.5\n\t\t\t\t\t\t\tif (!enums || enums.length !== bnums.length) {\n\t\t\t\t\t\t\t\t//DEBUG: _log(\"mismatched formatting detected on \" + p + \" (\" + b + \" vs \" + e + \")\");\n\t\t\t\t\t\t\t\treturn pt;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tni = 0;\n\t\t\t\t\t\t\tfor (xi = 0; xi < bnums.length; xi++) {\n\t\t\t\t\t\t\t\tcv = bnums[xi];\n\t\t\t\t\t\t\t\ttemp = bv.indexOf(cv, ni);\n\t\t\t\t\t\t\t\tpt.appendXtra(bv.substr(ni, temp - ni), Number(cv), _parseChange(enums[xi], cv), \"\", (autoRound && bv.substr(temp + cv.length, 2) === \"px\"), (xi === 0));\n\t\t\t\t\t\t\t\tni = temp + cv.length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += bv.substr(ni);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//if there are relative values (\"+=\" or \"-=\" prefix), we need to adjust the ending value to eliminate the prefixes and combine the values properly.\n\t\t\t\tif (e.indexOf(\"=\") !== -1) if (pt.data) {\n\t\t\t\t\tstr = pt.xs0 + pt.data.s;\n\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\tstr += pt[\"xs\" + i] + pt.data[\"xn\" + i];\n\t\t\t\t\t}\n\t\t\t\t\tpt.e = str + pt[\"xs\" + i];\n\t\t\t\t}\n\t\t\t\tif (!pt.l) {\n\t\t\t\t\tpt.type = -1;\n\t\t\t\t\tpt.xs0 = pt.e;\n\t\t\t\t}\n\t\t\t\treturn pt.xfirst || pt;\n\t\t\t},\n\t\t\ti = 9;\n\n\n\t\tp = CSSPropTween.prototype;\n\t\tp.l = p.pr = 0; //length (number of extra properties like xn1, xn2, xn3, etc.\n\t\twhile (--i > 0) {\n\t\t\tp[\"xn\" + i] = 0;\n\t\t\tp[\"xs\" + i] = \"\";\n\t\t}\n\t\tp.xs0 = \"\";\n\t\tp._next = p._prev = p.xfirst = p.data = p.plugin = p.setRatio = p.rxp = null;\n\n\n\t\t/**\n\t\t * Appends and extra tweening value to a CSSPropTween and automatically manages any prefix and suffix strings. The first extra value is stored in the s and c of the main CSSPropTween instance, but thereafter any extras are stored in the xn1, xn2, xn3, etc. The prefixes and suffixes are stored in the xs0, xs1, xs2, etc. properties. For example, if I walk through a clip value like \"rect(10px, 5px, 0px, 20px)\", the values would be stored like this:\n\t\t * xs0:\"rect(\", s:10, xs1:\"px, \", xn1:5, xs2:\"px, \", xn2:0, xs3:\"px, \", xn3:20, xn4:\"px)\"\n\t\t * And they'd all get joined together when the CSSPlugin renders (in the setRatio() method).\n\t\t * @param {string=} pfx Prefix (if any)\n\t\t * @param {!number} s Starting value\n\t\t * @param {!number} c Change in numeric value over the course of the entire tween. For example, if the start is 5 and the end is 100, the change would be 95.\n\t\t * @param {string=} sfx Suffix (if any)\n\t\t * @param {boolean=} r Round (if true).\n\t\t * @param {boolean=} pad If true, this extra value should be separated by the previous one by a space. If there is no previous extra and pad is true, it will automatically drop the space.\n\t\t * @return {CSSPropTween} returns itself so that multiple methods can be chained together.\n\t\t */\n\t\tp.appendXtra = function(pfx, s, c, sfx, r, pad) {\n\t\t\tvar pt = this,\n\t\t\t\tl = pt.l;\n\t\t\tpt[\"xs\" + l] += (pad && (l || pt[\"xs\" + l])) ? \" \" + pfx : pfx || \"\";\n\t\t\tif (!c) if (l !== 0 && !pt.plugin) { //typically we'll combine non-changing values right into the xs to optimize performance, but we don't combine them when there's a plugin that will be tweening the values because it may depend on the values being split apart, like for a bezier, if a value doesn't change between the first and second iteration but then it does on the 3rd, we'll run into trouble because there's no xn slot for that value!\n\t\t\t\tpt[\"xs\" + l] += s + (sfx || \"\");\n\t\t\t\treturn pt;\n\t\t\t}\n\t\t\tpt.l++;\n\t\t\tpt.type = pt.setRatio ? 2 : 1;\n\t\t\tpt[\"xs\" + pt.l] = sfx || \"\";\n\t\t\tif (l > 0) {\n\t\t\t\tpt.data[\"xn\" + l] = s + c;\n\t\t\t\tpt.rxp[\"xn\" + l] = r; //round extra property (we need to tap into this in the _parseToProxy() method)\n\t\t\t\tpt[\"xn\" + l] = s;\n\t\t\t\tif (!pt.plugin) {\n\t\t\t\t\tpt.xfirst = new CSSPropTween(pt, \"xn\" + l, s, c, pt.xfirst || pt, 0, pt.n, r, pt.pr);\n\t\t\t\t\tpt.xfirst.xs0 = 0; //just to ensure that the property stays numeric which helps modern browsers speed up processing. Remember, in the setRatio() method, we do pt.t[pt.p] = val + pt.xs0 so if pt.xs0 is \"\" (the default), it'll cast the end value as a string. When a property is a number sometimes and a string sometimes, it prevents the compiler from locking in the data type, slowing things down slightly.\n\t\t\t\t}\n\t\t\t\treturn pt;\n\t\t\t}\n\t\t\tpt.data = {s:s + c};\n\t\t\tpt.rxp = {};\n\t\t\tpt.s = s;\n\t\t\tpt.c = c;\n\t\t\tpt.r = r;\n\t\t\treturn pt;\n\t\t};\n\n\t\t/**\n\t\t * @constructor A SpecialProp is basically a css property that needs to be treated in a non-standard way, like if it may contain a complex value like boxShadow:\"5px 10px 15px rgb(255, 102, 51)\" or if it is associated with another plugin like ThrowPropsPlugin or BezierPlugin. Every SpecialProp is associated with a particular property name like \"boxShadow\" or \"throwProps\" or \"bezier\" and it will intercept those values in the vars object that's passed to the CSSPlugin and handle them accordingly.\n\t\t * @param {!string} p Property name (like \"boxShadow\" or \"throwProps\")\n\t\t * @param {Object=} options An object containing any of the following configuration options:\n\t\t *                      - defaultValue: the default value\n\t\t *                      - parser: A function that should be called when the associated property name is found in the vars. This function should return a CSSPropTween instance and it should ensure that it is properly inserted into the linked list. It will receive 4 paramters: 1) The target, 2) The value defined in the vars, 3) The CSSPlugin instance (whose _firstPT should be used for the linked list), and 4) A computed style object if one was calculated (this is a speed optimization that allows retrieval of starting values quicker)\n\t\t *                      - formatter: a function that formats any value received for this special property (for example, boxShadow could take \"5px 5px red\" and format it to \"5px 5px 0px 0px red\" so that both the beginning and ending values have a common order and quantity of values.)\n\t\t *                      - prefix: if true, we'll determine whether or not this property requires a vendor prefix (like Webkit or Moz or ms or O)\n\t\t *                      - color: set this to true if the value for this SpecialProp may contain color-related values like rgb(), rgba(), etc.\n\t\t *                      - priority: priority in the linked list order. Higher priority SpecialProps will be updated before lower priority ones. The default priority is 0.\n\t\t *                      - multi: if true, the formatter should accommodate a comma-delimited list of values, like boxShadow could have multiple boxShadows listed out.\n\t\t *                      - collapsible: if true, the formatter should treat the value like it's a top/right/bottom/left value that could be collapsed, like \"5px\" would apply to all, \"5px, 10px\" would use 5px for top/bottom and 10px for right/left, etc.\n\t\t *                      - keyword: a special keyword that can [optionally] be found inside the value (like \"inset\" for boxShadow). This allows us to validate beginning/ending values to make sure they match (if the keyword is found in one, it'll be added to the other for consistency by default).\n\t\t */\n\t\tvar SpecialProp = function(p, options) {\n\t\t\t\toptions = options || {};\n\t\t\t\tthis.p = options.prefix ? _checkPropPrefix(p) || p : p;\n\t\t\t\t_specialProps[p] = _specialProps[this.p] = this;\n\t\t\t\tthis.format = options.formatter || _getFormatter(options.defaultValue, options.color, options.collapsible, options.multi);\n\t\t\t\tif (options.parser) {\n\t\t\t\t\tthis.parse = options.parser;\n\t\t\t\t}\n\t\t\t\tthis.clrs = options.color;\n\t\t\t\tthis.multi = options.multi;\n\t\t\t\tthis.keyword = options.keyword;\n\t\t\t\tthis.dflt = options.defaultValue;\n\t\t\t\tthis.pr = options.priority || 0;\n\t\t\t},\n\n\t\t\t//shortcut for creating a new SpecialProp that can accept multiple properties as a comma-delimited list (helps minification). dflt can be an array for multiple values (we don't do a comma-delimited list because the default value may contain commas, like rect(0px,0px,0px,0px)). We attach this method to the SpecialProp class/object instead of using a private _createSpecialProp() method so that we can tap into it externally if necessary, like from another plugin.\n\t\t\t_registerComplexSpecialProp = _internals._registerComplexSpecialProp = function(p, options, defaults) {\n\t\t\t\tif (typeof(options) !== \"object\") {\n\t\t\t\t\toptions = {parser:defaults}; //to make backwards compatible with older versions of BezierPlugin and ThrowPropsPlugin\n\t\t\t\t}\n\t\t\t\tvar a = p.split(\",\"),\n\t\t\t\t\td = options.defaultValue,\n\t\t\t\t\ti, temp;\n\t\t\t\tdefaults = defaults || [d];\n\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\toptions.prefix = (i === 0 && options.prefix);\n\t\t\t\t\toptions.defaultValue = defaults[i] || d;\n\t\t\t\t\ttemp = new SpecialProp(a[i], options);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t//creates a placeholder special prop for a plugin so that the property gets caught the first time a tween of it is attempted, and at that time it makes the plugin register itself, thus taking over for all future tweens of that property. This allows us to not mandate that things load in a particular order and it also allows us to log() an error that informs the user when they attempt to tween an external plugin-related property without loading its .js file.\n\t\t\t_registerPluginProp = _internals._registerPluginProp = function(p) {\n\t\t\t\tif (!_specialProps[p]) {\n\t\t\t\t\tvar pluginName = p.charAt(0).toUpperCase() + p.substr(1) + \"Plugin\";\n\t\t\t\t\t_registerComplexSpecialProp(p, {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\t\t\tvar pluginClass = _globals.com.greensock.plugins[pluginName];\n\t\t\t\t\t\tif (!pluginClass) {\n\t\t\t\t\t\t\t_log(\"Error: \" + pluginName + \" js file not loaded.\");\n\t\t\t\t\t\t\treturn pt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpluginClass._cssRegister();\n\t\t\t\t\t\treturn _specialProps[p].parse(t, e, p, cssp, pt, plugin, vars);\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t};\n\n\n\t\tp = SpecialProp.prototype;\n\n\t\t/**\n\t\t * Alias for _parseComplex() that automatically plugs in certain values for this SpecialProp, like its property name, whether or not colors should be sensed, the default value, and priority. It also looks for any keyword that the SpecialProp defines (like \"inset\" for boxShadow) and ensures that the beginning and ending values have the same number of values for SpecialProps where multi is true (like boxShadow and textShadow can have a comma-delimited list)\n\t\t * @param {!Object} t target element\n\t\t * @param {(string|number|object)} b beginning value\n\t\t * @param {(string|number|object)} e ending (destination) value\n\t\t * @param {CSSPropTween=} pt next CSSPropTween in the linked list\n\t\t * @param {TweenPlugin=} plugin If another plugin will be tweening the complex value, that TweenPlugin instance goes here.\n\t\t * @param {function=} setRatio If a custom setRatio() method should be used to handle this complex value, that goes here.\n\t\t * @return {CSSPropTween=} First CSSPropTween in the linked list\n\t\t */\n\t\tp.parseComplex = function(t, b, e, pt, plugin, setRatio) {\n\t\t\tvar kwd = this.keyword,\n\t\t\t\ti, ba, ea, l, bi, ei;\n\t\t\t//if this SpecialProp's value can contain a comma-delimited list of values (like boxShadow or textShadow), we must parse them in a special way, and look for a keyword (like \"inset\" for boxShadow) and ensure that the beginning and ending BOTH have it if the end defines it as such. We also must ensure that there are an equal number of values specified (we can't tween 1 boxShadow to 3 for example)\n\t\t\tif (this.multi) if (_commasOutsideParenExp.test(e) || _commasOutsideParenExp.test(b)) {\n\t\t\t\tba = b.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\tea = e.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t} else if (kwd) {\n\t\t\t\tba = [b];\n\t\t\t\tea = [e];\n\t\t\t}\n\t\t\tif (ea) {\n\t\t\t\tl = (ea.length > ba.length) ? ea.length : ba.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tb = ba[i] = ba[i] || this.dflt;\n\t\t\t\t\te = ea[i] = ea[i] || this.dflt;\n\t\t\t\t\tif (kwd) {\n\t\t\t\t\t\tbi = b.indexOf(kwd);\n\t\t\t\t\t\tei = e.indexOf(kwd);\n\t\t\t\t\t\tif (bi !== ei) {\n\t\t\t\t\t\t\tif (ei === -1) { //if the keyword isn't in the end value, remove it from the beginning one.\n\t\t\t\t\t\t\t\tba[i] = ba[i].split(kwd).join(\"\");\n\t\t\t\t\t\t\t} else if (bi === -1) { //if the keyword isn't in the beginning, add it.\n\t\t\t\t\t\t\t\tba[i] += \" \" + kwd;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tb = ba.join(\", \");\n\t\t\t\te = ea.join(\", \");\n\t\t\t}\n\t\t\treturn _parseComplex(t, this.p, b, e, this.clrs, this.dflt, pt, this.pr, plugin, setRatio);\n\t\t};\n\n\t\t/**\n\t\t * Accepts a target and end value and spits back a CSSPropTween that has been inserted into the CSSPlugin's linked list and conforms with all the conventions we use internally, like type:-1, 0, 1, or 2, setting up any extra property tweens, priority, etc. For example, if we have a boxShadow SpecialProp and call:\n\t\t * this._firstPT = sp.parse(element, \"5px 10px 20px rgb(2550,102,51)\", \"boxShadow\", this);\n\t\t * It should figure out the starting value of the element's boxShadow, compare it to the provided end value and create all the necessary CSSPropTweens of the appropriate types to tween the boxShadow. The CSSPropTween that gets spit back should already be inserted into the linked list (the 4th parameter is the current head, so prepend to that).\n\t\t * @param {!Object} t Target object whose property is being tweened\n\t\t * @param {Object} e End value as provided in the vars object (typically a string, but not always - like a throwProps would be an object).\n\t\t * @param {!string} p Property name\n\t\t * @param {!CSSPlugin} cssp The CSSPlugin instance that should be associated with this tween.\n\t\t * @param {?CSSPropTween} pt The CSSPropTween that is the current head of the linked list (we'll prepend to it)\n\t\t * @param {TweenPlugin=} plugin If a plugin will be used to tween the parsed value, this is the plugin instance.\n\t\t * @param {Object=} vars Original vars object that contains the data for parsing.\n\t\t * @return {CSSPropTween} The first CSSPropTween in the linked list which includes the new one(s) added by the parse() call.\n\t\t */\n\t\tp.parse = function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\treturn this.parseComplex(t.style, this.format(_getStyle(t, this.p, _cs, false, this.dflt)), this.format(e), pt, plugin);\n\t\t};\n\n\t\t/**\n\t\t * Registers a special property that should be intercepted from any \"css\" objects defined in tweens. This allows you to handle them however you want without CSSPlugin doing it for you. The 2nd parameter should be a function that accepts 3 parameters:\n\t\t *  1) Target object whose property should be tweened (typically a DOM element)\n\t\t *  2) The end/destination value (could be a string, number, object, or whatever you want)\n\t\t *  3) The tween instance (you probably don't need to worry about this, but it can be useful for looking up information like the duration)\n\t\t *\n\t\t * Then, your function should return a function which will be called each time the tween gets rendered, passing a numeric \"ratio\" parameter to your function that indicates the change factor (usually between 0 and 1). For example:\n\t\t *\n\t\t * CSSPlugin.registerSpecialProp(\"myCustomProp\", function(target, value, tween) {\n\t\t *      var start = target.style.width;\n\t\t *      return function(ratio) {\n\t\t *              target.style.width = (start + value * ratio) + \"px\";\n\t\t *              console.log(\"set width to \" + target.style.width);\n\t\t *          }\n\t\t * }, 0);\n\t\t *\n\t\t * Then, when I do this tween, it will trigger my special property:\n\t\t *\n\t\t * TweenLite.to(element, 1, {css:{myCustomProp:100}});\n\t\t *\n\t\t * In the example, of course, we're just changing the width, but you can do anything you want.\n\t\t *\n\t\t * @param {!string} name Property name (or comma-delimited list of property names) that should be intercepted and handled by your function. For example, if I define \"myCustomProp\", then it would handle that portion of the following tween: TweenLite.to(element, 1, {css:{myCustomProp:100}})\n\t\t * @param {!function(Object, Object, Object, string):function(number)} onInitTween The function that will be called when a tween of this special property is performed. The function will receive 4 parameters: 1) Target object that should be tweened, 2) Value that was passed to the tween, 3) The tween instance itself (rarely used), and 4) The property name that's being tweened. Your function should return a function that should be called on every update of the tween. That function will receive a single parameter that is a \"change factor\" value (typically between 0 and 1) indicating the amount of change as a ratio. You can use this to determine how to set the values appropriately in your function.\n\t\t * @param {number=} priority Priority that helps the engine determine the order in which to set the properties (default: 0). Higher priority properties will be updated before lower priority ones.\n\t\t */\n\t\tCSSPlugin.registerSpecialProp = function(name, onInitTween, priority) {\n\t\t\t_registerComplexSpecialProp(name, {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\tvar rv = new CSSPropTween(t, p, 0, 0, pt, 2, p, false, priority);\n\t\t\t\trv.plugin = plugin;\n\t\t\t\trv.setRatio = onInitTween(t, e, cssp._tween, p);\n\t\t\t\treturn rv;\n\t\t\t}, priority:priority});\n\t\t};\n\n\n\n\n\n\n\t\t//transform-related methods and properties\n\t\tCSSPlugin.useSVGTransformAttr = _isSafari || _isFirefox; //Safari and Firefox both have some rendering bugs when applying CSS transforms to SVG elements, so default to using the \"transform\" attribute instead (users can override this).\n\t\tvar _transformProps = (\"scaleX,scaleY,scaleZ,x,y,z,skewX,skewY,rotation,rotationX,rotationY,perspective,xPercent,yPercent\").split(\",\"),\n\t\t\t_transformProp = _checkPropPrefix(\"transform\"), //the Javascript (camelCase) transform property, like msTransform, WebkitTransform, MozTransform, or OTransform.\n\t\t\t_transformPropCSS = _prefixCSS + \"transform\",\n\t\t\t_transformOriginProp = _checkPropPrefix(\"transformOrigin\"),\n\t\t\t_supports3D = (_checkPropPrefix(\"perspective\") !== null),\n\t\t\tTransform = _internals.Transform = function() {\n\t\t\t\tthis.perspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0;\n\t\t\t\tthis.force3D = (CSSPlugin.defaultForce3D === false || !_supports3D) ? false : CSSPlugin.defaultForce3D || \"auto\";\n\t\t\t},\n\t\t\t_SVGElement = window.SVGElement,\n\t\t\t_useSVGTransformAttr,\n\t\t\t//Some browsers (like Firefox and IE) don't honor transform-origin properly in SVG elements, so we need to manually adjust the matrix accordingly. We feature detect here rather than always doing the conversion for certain browsers because they may fix the problem at some point in the future.\n\n\t\t\t_createSVG = function(type, container, attributes) {\n\t\t\t\tvar element = _doc.createElementNS(\"http://www.w3.org/2000/svg\", type),\n\t\t\t\t\treg = /([a-z])([A-Z])/g,\n\t\t\t\t\tp;\n\t\t\t\tfor (p in attributes) {\n\t\t\t\t\telement.setAttributeNS(null, p.replace(reg, \"$1-$2\").toLowerCase(), attributes[p]);\n\t\t\t\t}\n\t\t\t\tcontainer.appendChild(element);\n\t\t\t\treturn element;\n\t\t\t},\n\t\t\t_docElement = _doc.documentElement,\n\t\t\t_forceSVGTransformAttr = (function() {\n\t\t\t\t//IE and Android stock don't support CSS transforms on SVG elements, so we must write them to the \"transform\" attribute. We populate this variable in the _parseTransform() method, and only if/when we come across an SVG element\n\t\t\t\tvar force = _ieVers || (/Android/i.test(_agent) && !window.chrome),\n\t\t\t\t\tsvg, rect, width;\n\t\t\t\tif (_doc.createElementNS && !force) { //IE8 and earlier doesn't support SVG anyway\n\t\t\t\t\tsvg = _createSVG(\"svg\", _docElement);\n\t\t\t\t\trect = _createSVG(\"rect\", svg, {width:100, height:50, x:100});\n\t\t\t\t\twidth = rect.getBoundingClientRect().width;\n\t\t\t\t\trect.style[_transformOriginProp] = \"50% 50%\";\n\t\t\t\t\trect.style[_transformProp] = \"scaleX(0.5)\";\n\t\t\t\t\tforce = (width === rect.getBoundingClientRect().width && !(_isFirefox && _supports3D)); //note: Firefox fails the test even though it does support CSS transforms in 3D. Since we can't push 3D stuff into the transform attribute, we force Firefox to pass the test here (as long as it does truly support 3D).\n\t\t\t\t\t_docElement.removeChild(svg);\n\t\t\t\t}\n\t\t\t\treturn force;\n\t\t\t})(),\n\t\t\t_parseSVGOrigin = function(e, local, decoratee, absolute, smoothOrigin, skipRecord) {\n\t\t\t\tvar tm = e._gsTransform,\n\t\t\t\t\tm = _getMatrix(e, true),\n\t\t\t\t\tv, x, y, xOrigin, yOrigin, a, b, c, d, tx, ty, determinant, xOriginOld, yOriginOld;\n\t\t\t\tif (tm) {\n\t\t\t\t\txOriginOld = tm.xOrigin; //record the original values before we alter them.\n\t\t\t\t\tyOriginOld = tm.yOrigin;\n\t\t\t\t}\n\t\t\t\tif (!absolute || (v = absolute.split(\" \")).length < 2) {\n\t\t\t\t\tb = e.getBBox();\n\t\t\t\t\tlocal = _parsePosition(local).split(\" \");\n\t\t\t\t\tv = [(local[0].indexOf(\"%\") !== -1 ? parseFloat(local[0]) / 100 * b.width : parseFloat(local[0])) + b.x,\n\t\t\t\t\t\t (local[1].indexOf(\"%\") !== -1 ? parseFloat(local[1]) / 100 * b.height : parseFloat(local[1])) + b.y];\n\t\t\t\t}\n\t\t\t\tdecoratee.xOrigin = xOrigin = parseFloat(v[0]);\n\t\t\t\tdecoratee.yOrigin = yOrigin = parseFloat(v[1]);\n\t\t\t\tif (absolute && m !== _identity2DMatrix) { //if svgOrigin is being set, we must invert the matrix and determine where the absolute point is, factoring in the current transforms. Otherwise, the svgOrigin would be based on the element's non-transformed position on the canvas.\n\t\t\t\t\ta = m[0];\n\t\t\t\t\tb = m[1];\n\t\t\t\t\tc = m[2];\n\t\t\t\t\td = m[3];\n\t\t\t\t\ttx = m[4];\n\t\t\t\t\tty = m[5];\n\t\t\t\t\tdeterminant = (a * d - b * c);\n\t\t\t\t\tx = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + ((c * ty - d * tx) / determinant);\n\t\t\t\t\ty = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - ((a * ty - b * tx) / determinant);\n\t\t\t\t\txOrigin = decoratee.xOrigin = v[0] = x;\n\t\t\t\t\tyOrigin = decoratee.yOrigin = v[1] = y;\n\t\t\t\t}\n\t\t\t\tif (tm) { //avoid jump when transformOrigin is changed - adjust the x/y values accordingly\n\t\t\t\t\tif (skipRecord) {\n\t\t\t\t\t\tdecoratee.xOffset = tm.xOffset;\n\t\t\t\t\t\tdecoratee.yOffset = tm.yOffset;\n\t\t\t\t\t\ttm = decoratee;\n\t\t\t\t\t}\n\t\t\t\t\tif (smoothOrigin || (smoothOrigin !== false && CSSPlugin.defaultSmoothOrigin !== false)) {\n\t\t\t\t\t\tx = xOrigin - xOriginOld;\n\t\t\t\t\t\ty = yOrigin - yOriginOld;\n\t\t\t\t\t\t//originally, we simply adjusted the x and y values, but that would cause problems if, for example, you created a rotational tween part-way through an x/y tween. Managing the offset in a separate variable gives us ultimate flexibility.\n\t\t\t\t\t\t//tm.x -= x - (x * m[0] + y * m[2]);\n\t\t\t\t\t\t//tm.y -= y - (x * m[1] + y * m[3]);\n\t\t\t\t\t\ttm.xOffset += (x * m[0] + y * m[2]) - x;\n\t\t\t\t\t\ttm.yOffset += (x * m[1] + y * m[3]) - y;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttm.xOffset = tm.yOffset = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!skipRecord) {\n\t\t\t\t\te.setAttribute(\"data-svg-origin\", v.join(\" \"));\n\t\t\t\t}\n\t\t\t},\n\t\t\t_canGetBBox = function(e) {\n\t\t\t\ttry {\n\t\t\t\t\treturn e.getBBox(); //Firefox throws errors if you try calling getBBox() on an SVG element that's not rendered (like in a <symbol> or <defs>). https://bugzilla.mozilla.org/show_bug.cgi?id=612118\n\t\t\t\t} catch (e) {}\n\t\t\t},\n\t\t\t_isSVG = function(e) { //reports if the element is an SVG on which getBBox() actually works\n\t\t\t\treturn !!(_SVGElement && e.getBBox && e.getCTM && _canGetBBox(e) && (!e.parentNode || (e.parentNode.getBBox && e.parentNode.getCTM)));\n\t\t\t},\n\t\t\t_identity2DMatrix = [1,0,0,1,0,0],\n\t\t\t_getMatrix = function(e, force2D) {\n\t\t\t\tvar tm = e._gsTransform || new Transform(),\n\t\t\t\t\trnd = 100000,\n\t\t\t\t\tstyle = e.style,\n\t\t\t\t\tisDefault, s, m, n, dec, none;\n\t\t\t\tif (_transformProp) {\n\t\t\t\t\ts = _getStyle(e, _transformPropCSS, null, true);\n\t\t\t\t} else if (e.currentStyle) {\n\t\t\t\t\t//for older versions of IE, we need to interpret the filter portion that is in the format: progid:DXImageTransform.Microsoft.Matrix(M11=6.123233995736766e-17, M12=-1, M21=1, M22=6.123233995736766e-17, sizingMethod='auto expand') Notice that we need to swap b and c compared to a normal matrix.\n\t\t\t\t\ts = e.currentStyle.filter.match(_ieGetMatrixExp);\n\t\t\t\t\ts = (s && s.length === 4) ? [s[0].substr(4), Number(s[2].substr(4)), Number(s[1].substr(4)), s[3].substr(4), (tm.x || 0), (tm.y || 0)].join(\",\") : \"\";\n\t\t\t\t}\n\t\t\t\tisDefault = (!s || s === \"none\" || s === \"matrix(1, 0, 0, 1, 0, 0)\");\n\t\t\t\tif (isDefault && _transformProp && ((none = (_getComputedStyle(e).display === \"none\")) || !e.parentNode)) {\n\t\t\t\t\tif (none) { //browsers don't report transforms accurately unless the element is in the DOM and has a display value that's not \"none\".\n\t\t\t\t\t\tn = style.display;\n\t\t\t\t\t\tstyle.display = \"block\";\n\t\t\t\t\t}\n\t\t\t\t\tif (!e.parentNode) {\n\t\t\t\t\t\tdec = 1; //flag\n\t\t\t\t\t\t_docElement.appendChild(e);\n\t\t\t\t\t}\n\t\t\t\t\ts = _getStyle(e, _transformPropCSS, null, true);\n\t\t\t\t\tisDefault = (!s || s === \"none\" || s === \"matrix(1, 0, 0, 1, 0, 0)\");\n\t\t\t\t\tif (n) {\n\t\t\t\t\t\tstyle.display = n;\n\t\t\t\t\t} else if (none) {\n\t\t\t\t\t\t_removeProp(style, \"display\");\n\t\t\t\t\t}\n\t\t\t\t\tif (dec) {\n\t\t\t\t\t\t_docElement.removeChild(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (tm.svg || (e.getBBox && _isSVG(e))) {\n\t\t\t\t\tif (isDefault && (style[_transformProp] + \"\").indexOf(\"matrix\") !== -1) { //some browsers (like Chrome 40) don't correctly report transforms that are applied inline on an SVG element (they don't get included in the computed style), so we double-check here and accept matrix values\n\t\t\t\t\t\ts = style[_transformProp];\n\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t}\n\t\t\t\t\tm = e.getAttribute(\"transform\");\n\t\t\t\t\tif (isDefault && m) {\n\t\t\t\t\t\tif (m.indexOf(\"matrix\") !== -1) { //just in case there's a \"transform\" value specified as an attribute instead of CSS style. Accept either a matrix() or simple translate() value though.\n\t\t\t\t\t\t\ts = m;\n\t\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t\t} else if (m.indexOf(\"translate\") !== -1) {\n\t\t\t\t\t\t\ts = \"matrix(1,0,0,1,\" + m.match(/(?:\\-|\\b)[\\d\\-\\.e]+\\b/gi).join(\",\") + \")\";\n\t\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isDefault) {\n\t\t\t\t\treturn _identity2DMatrix;\n\t\t\t\t}\n\t\t\t\t//split the matrix values out into an array (m for matrix)\n\t\t\t\tm = (s || \"\").match(_numExp) || [];\n\t\t\t\ti = m.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tn = Number(m[i]);\n\t\t\t\t\tm[i] = (dec = n - (n |= 0)) ? ((dec * rnd + (dec < 0 ? -0.5 : 0.5)) | 0) / rnd + n : n; //convert strings to Numbers and round to 5 decimal places to avoid issues with tiny numbers. Roughly 20x faster than Number.toFixed(). We also must make sure to round before dividing so that values like 0.9999999999 become 1 to avoid glitches in browser rendering and interpretation of flipped/rotated 3D matrices. And don't just multiply the number by rnd, floor it, and then divide by rnd because the bitwise operations max out at a 32-bit signed integer, thus it could get clipped at a relatively low value (like 22,000.00000 for example).\n\t\t\t\t}\n\t\t\t\treturn (force2D && m.length > 6) ? [m[0], m[1], m[4], m[5], m[12], m[13]] : m;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Parses the transform values for an element, returning an object with x, y, z, scaleX, scaleY, scaleZ, rotation, rotationX, rotationY, skewX, and skewY properties. Note: by default (for performance reasons), all skewing is combined into skewX and rotation but skewY still has a place in the transform object so that we can record how much of the skew is attributed to skewX vs skewY. Remember, a skewY of 10 looks the same as a rotation of 10 and skewX of -10.\n\t\t\t * @param {!Object} t target element\n\t\t\t * @param {Object=} cs computed style object (optional)\n\t\t\t * @param {boolean=} rec if true, the transform values will be recorded to the target element's _gsTransform object, like target._gsTransform = {x:0, y:0, z:0, scaleX:1...}\n\t\t\t * @param {boolean=} parse if true, we'll ignore any _gsTransform values that already exist on the element, and force a reparsing of the css (calculated style)\n\t\t\t * @return {object} object containing all of the transform properties/values like {x:0, y:0, z:0, scaleX:1...}\n\t\t\t */\n\t\t\t_getTransform = _internals.getTransform = function(t, cs, rec, parse) {\n\t\t\t\tif (t._gsTransform && rec && !parse) {\n\t\t\t\t\treturn t._gsTransform; //if the element already has a _gsTransform, use that. Note: some browsers don't accurately return the calculated style for the transform (particularly for SVG), so it's almost always safest to just use the values we've already applied rather than re-parsing things.\n\t\t\t\t}\n\t\t\t\tvar tm = rec ? t._gsTransform || new Transform() : new Transform(),\n\t\t\t\t\tinvX = (tm.scaleX < 0), //in order to interpret things properly, we need to know if the user applied a negative scaleX previously so that we can adjust the rotation and skewX accordingly. Otherwise, if we always interpret a flipped matrix as affecting scaleY and the user only wants to tween the scaleX on multiple sequential tweens, it would keep the negative scaleY without that being the user's intent.\n\t\t\t\t\tmin = 0.00002,\n\t\t\t\t\trnd = 100000,\n\t\t\t\t\tzOrigin = _supports3D ? parseFloat(_getStyle(t, _transformOriginProp, cs, false, \"0 0 0\").split(\" \")[2]) || tm.zOrigin  || 0 : 0,\n\t\t\t\t\tdefaultTransformPerspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0,\n\t\t\t\t\tm, i, scaleX, scaleY, rotation, skewX;\n\n\t\t\t\ttm.svg = !!(t.getBBox && _isSVG(t));\n\t\t\t\tif (tm.svg) {\n\t\t\t\t\t_parseSVGOrigin(t, _getStyle(t, _transformOriginProp, cs, false, \"50% 50%\") + \"\", tm, t.getAttribute(\"data-svg-origin\"));\n\t\t\t\t\t_useSVGTransformAttr = CSSPlugin.useSVGTransformAttr || _forceSVGTransformAttr;\n\t\t\t\t}\n\t\t\t\tm = _getMatrix(t);\n\t\t\t\tif (m !== _identity2DMatrix) {\n\n\t\t\t\t\tif (m.length === 16) {\n\t\t\t\t\t\t//we'll only look at these position-related 6 variables first because if x/y/z all match, it's relatively safe to assume we don't need to re-parse everything which risks losing important rotational information (like rotationX:180 plus rotationY:180 would look the same as rotation:180 - there's no way to know for sure which direction was taken based solely on the matrix3d() values)\n\t\t\t\t\t\tvar a11 = m[0], a21 = m[1], a31 = m[2], a41 = m[3],\n\t\t\t\t\t\t\ta12 = m[4], a22 = m[5], a32 = m[6], a42 = m[7],\n\t\t\t\t\t\t\ta13 = m[8], a23 = m[9], a33 = m[10],\n\t\t\t\t\t\t\ta14 = m[12], a24 = m[13], a34 = m[14],\n\t\t\t\t\t\t\ta43 = m[11],\n\t\t\t\t\t\t\tangle = Math.atan2(a32, a33),\n\t\t\t\t\t\t\tt1, t2, t3, t4, cos, sin;\n\n\t\t\t\t\t\t//we manually compensate for non-zero z component of transformOrigin to work around bugs in Safari\n\t\t\t\t\t\tif (tm.zOrigin) {\n\t\t\t\t\t\t\ta34 = -tm.zOrigin;\n\t\t\t\t\t\t\ta14 = a13*a34-m[12];\n\t\t\t\t\t\t\ta24 = a23*a34-m[13];\n\t\t\t\t\t\t\ta34 = a33*a34+tm.zOrigin-m[14];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttm.rotationX = angle * _RAD2DEG;\n\t\t\t\t\t\t//rotationX\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\tt1 = a12*cos+a13*sin;\n\t\t\t\t\t\t\tt2 = a22*cos+a23*sin;\n\t\t\t\t\t\t\tt3 = a32*cos+a33*sin;\n\t\t\t\t\t\t\ta13 = a12*-sin+a13*cos;\n\t\t\t\t\t\t\ta23 = a22*-sin+a23*cos;\n\t\t\t\t\t\t\ta33 = a32*-sin+a33*cos;\n\t\t\t\t\t\t\ta43 = a42*-sin+a43*cos;\n\t\t\t\t\t\t\ta12 = t1;\n\t\t\t\t\t\t\ta22 = t2;\n\t\t\t\t\t\t\ta32 = t3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//rotationY\n\t\t\t\t\t\tangle = Math.atan2(-a31, a33);\n\t\t\t\t\t\ttm.rotationY = angle * _RAD2DEG;\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\tt1 = a11*cos-a13*sin;\n\t\t\t\t\t\t\tt2 = a21*cos-a23*sin;\n\t\t\t\t\t\t\tt3 = a31*cos-a33*sin;\n\t\t\t\t\t\t\ta23 = a21*sin+a23*cos;\n\t\t\t\t\t\t\ta33 = a31*sin+a33*cos;\n\t\t\t\t\t\t\ta43 = a41*sin+a43*cos;\n\t\t\t\t\t\t\ta11 = t1;\n\t\t\t\t\t\t\ta21 = t2;\n\t\t\t\t\t\t\ta31 = t3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//rotationZ\n\t\t\t\t\t\tangle = Math.atan2(a21, a11);\n\t\t\t\t\t\ttm.rotation = angle * _RAD2DEG;\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\ta11 = a11*cos+a12*sin;\n\t\t\t\t\t\t\tt2 = a21*cos+a22*sin;\n\t\t\t\t\t\t\ta22 = a21*-sin+a22*cos;\n\t\t\t\t\t\t\ta32 = a31*-sin+a32*cos;\n\t\t\t\t\t\t\ta21 = t2;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (tm.rotationX && Math.abs(tm.rotationX) + Math.abs(tm.rotation) > 359.9) { //when rotationY is set, it will often be parsed as 180 degrees different than it should be, and rotationX and rotation both being 180 (it looks the same), so we adjust for that here.\n\t\t\t\t\t\t\ttm.rotationX = tm.rotation = 0;\n\t\t\t\t\t\t\ttm.rotationY = 180 - tm.rotationY;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttm.scaleX = ((Math.sqrt(a11 * a11 + a21 * a21) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\ttm.scaleY = ((Math.sqrt(a22 * a22 + a23 * a23) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\ttm.scaleZ = ((Math.sqrt(a32 * a32 + a33 * a33) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\tif (tm.rotationX || tm.rotationY) {\n\t\t\t\t\t\t\ttm.skewX = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttm.skewX = (a12 || a22) ? Math.atan2(a12, a22) * _RAD2DEG + tm.rotation : tm.skewX || 0;\n\t\t\t\t\t\t\tif (Math.abs(tm.skewX) > 90 && Math.abs(tm.skewX) < 270) {\n\t\t\t\t\t\t\t\tif (invX) {\n\t\t\t\t\t\t\t\t\ttm.scaleX *= -1;\n\t\t\t\t\t\t\t\t\ttm.skewX += (tm.rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t\ttm.rotation += (tm.rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttm.scaleY *= -1;\n\t\t\t\t\t\t\t\t\ttm.skewX += (tm.skewX <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttm.perspective = a43 ? 1 / ((a43 < 0) ? -a43 : a43) : 0;\n\t\t\t\t\t\ttm.x = a14;\n\t\t\t\t\t\ttm.y = a24;\n\t\t\t\t\t\ttm.z = a34;\n\t\t\t\t\t\tif (tm.svg) {\n\t\t\t\t\t\t\ttm.x -= tm.xOrigin - (tm.xOrigin * a11 - tm.yOrigin * a12);\n\t\t\t\t\t\t\ttm.y -= tm.yOrigin - (tm.yOrigin * a21 - tm.xOrigin * a22);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ((!_supports3D || parse || !m.length || tm.x !== m[4] || tm.y !== m[5] || (!tm.rotationX && !tm.rotationY))) { //sometimes a 6-element matrix is returned even when we performed 3D transforms, like if rotationX and rotationY are 180. In cases like this, we still need to honor the 3D transforms. If we just rely on the 2D info, it could affect how the data is interpreted, like scaleY might get set to -1 or rotation could get offset by 180 degrees. For example, do a TweenLite.to(element, 1, {css:{rotationX:180, rotationY:180}}) and then later, TweenLite.to(element, 1, {css:{rotationX:0}}) and without this conditional logic in place, it'd jump to a state of being unrotated when the 2nd tween starts. Then again, we need to honor the fact that the user COULD alter the transforms outside of CSSPlugin, like by manually applying new css, so we try to sense that by looking at x and y because if those changed, we know the changes were made outside CSSPlugin and we force a reinterpretation of the matrix values. Also, in Webkit browsers, if the element's \"display\" is \"none\", its calculated style value will always return empty, so if we've already recorded the values in the _gsTransform object, we'll just rely on those.\n\t\t\t\t\t\tvar k = (m.length >= 6),\n\t\t\t\t\t\t\ta = k ? m[0] : 1,\n\t\t\t\t\t\t\tb = m[1] || 0,\n\t\t\t\t\t\t\tc = m[2] || 0,\n\t\t\t\t\t\t\td = k ? m[3] : 1;\n\t\t\t\t\t\ttm.x = m[4] || 0;\n\t\t\t\t\t\ttm.y = m[5] || 0;\n\t\t\t\t\t\tscaleX = Math.sqrt(a * a + b * b);\n\t\t\t\t\t\tscaleY = Math.sqrt(d * d + c * c);\n\t\t\t\t\t\trotation = (a || b) ? Math.atan2(b, a) * _RAD2DEG : tm.rotation || 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).\n\t\t\t\t\t\tskewX = (c || d) ? Math.atan2(c, d) * _RAD2DEG + rotation : tm.skewX || 0;\n\t\t\t\t\t\tif (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {\n\t\t\t\t\t\t\tif (invX) {\n\t\t\t\t\t\t\t\tscaleX *= -1;\n\t\t\t\t\t\t\t\tskewX += (rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t\trotation += (rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tscaleY *= -1;\n\t\t\t\t\t\t\t\tskewX += (skewX <= 0) ? 180 : -180;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttm.scaleX = scaleX;\n\t\t\t\t\t\ttm.scaleY = scaleY;\n\t\t\t\t\t\ttm.rotation = rotation;\n\t\t\t\t\t\ttm.skewX = skewX;\n\t\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\t\ttm.rotationX = tm.rotationY = tm.z = 0;\n\t\t\t\t\t\t\ttm.perspective = defaultTransformPerspective;\n\t\t\t\t\t\t\ttm.scaleZ = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tm.svg) {\n\t\t\t\t\t\t\ttm.x -= tm.xOrigin - (tm.xOrigin * a + tm.yOrigin * c);\n\t\t\t\t\t\t\ttm.y -= tm.yOrigin - (tm.xOrigin * b + tm.yOrigin * d);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttm.zOrigin = zOrigin;\n\t\t\t\t\t//some browsers have a hard time with very small values like 2.4492935982947064e-16 (notice the \"e-\" towards the end) and would render the object slightly off. So we round to 0 in these cases. The conditional logic here is faster than calling Math.abs(). Also, browsers tend to render a SLIGHTLY rotated object in a fuzzy way, so we need to snap to exactly 0 when appropriate.\n\t\t\t\t\tfor (i in tm) {\n\t\t\t\t\t\tif (tm[i] < min) if (tm[i] > -min) {\n\t\t\t\t\t\t\ttm[i] = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//DEBUG: _log(\"parsed rotation of \" + t.getAttribute(\"id\")+\": \"+(tm.rotationX)+\", \"+(tm.rotationY)+\", \"+(tm.rotation)+\", scale: \"+tm.scaleX+\", \"+tm.scaleY+\", \"+tm.scaleZ+\", position: \"+tm.x+\", \"+tm.y+\", \"+tm.z+\", perspective: \"+tm.perspective+ \", origin: \"+ tm.xOrigin+ \",\"+ tm.yOrigin);\n\t\t\t\tif (rec) {\n\t\t\t\t\tt._gsTransform = tm; //record to the object's _gsTransform which we use so that tweens can control individual properties independently (we need all the properties to accurately recompose the matrix in the setRatio() method)\n\t\t\t\t\tif (tm.svg) { //if we're supposed to apply transforms to the SVG element's \"transform\" attribute, make sure there aren't any CSS transforms applied or they'll override the attribute ones. Also clear the transform attribute if we're using CSS, just to be clean.\n\t\t\t\t\t\tif (_useSVGTransformAttr && t.style[_transformProp]) {\n\t\t\t\t\t\t\tTweenLite.delayedCall(0.001, function(){ //if we apply this right away (before anything has rendered), we risk there being no transforms for a brief moment and it also interferes with adjusting the transformOrigin in a tween with immediateRender:true (it'd try reading the matrix and it wouldn't have the appropriate data in place because we just removed it).\n\t\t\t\t\t\t\t\t_removeProp(t.style, _transformProp);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if (!_useSVGTransformAttr && t.getAttribute(\"transform\")) {\n\t\t\t\t\t\t\tTweenLite.delayedCall(0.001, function(){\n\t\t\t\t\t\t\t\tt.removeAttribute(\"transform\");\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn tm;\n\t\t\t},\n\n\t\t\t//for setting 2D transforms in IE6, IE7, and IE8 (must use a \"filter\" to emulate the behavior of modern day browser transforms)\n\t\t\t_setIETransformRatio = function(v) {\n\t\t\t\tvar t = this.data, //refers to the element's _gsTransform object\n\t\t\t\t\tang = -t.rotation * _DEG2RAD,\n\t\t\t\t\tskew = ang + t.skewX * _DEG2RAD,\n\t\t\t\t\trnd = 100000,\n\t\t\t\t\ta = ((Math.cos(ang) * t.scaleX * rnd) | 0) / rnd,\n\t\t\t\t\tb = ((Math.sin(ang) * t.scaleX * rnd) | 0) / rnd,\n\t\t\t\t\tc = ((Math.sin(skew) * -t.scaleY * rnd) | 0) / rnd,\n\t\t\t\t\td = ((Math.cos(skew) * t.scaleY * rnd) | 0) / rnd,\n\t\t\t\t\tstyle = this.t.style,\n\t\t\t\t\tcs = this.t.currentStyle,\n\t\t\t\t\tfilters, val;\n\t\t\t\tif (!cs) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tval = b; //just for swapping the variables an inverting them (reused \"val\" to avoid creating another variable in memory). IE's filter matrix uses a non-standard matrix configuration (angle goes the opposite way, and b and c are reversed and inverted)\n\t\t\t\tb = -c;\n\t\t\t\tc = -val;\n\t\t\t\tfilters = cs.filter;\n\t\t\t\tstyle.filter = \"\"; //remove filters so that we can accurately measure offsetWidth/offsetHeight\n\t\t\t\tvar w = this.t.offsetWidth,\n\t\t\t\t\th = this.t.offsetHeight,\n\t\t\t\t\tclip = (cs.position !== \"absolute\"),\n\t\t\t\t\tm = \"progid:DXImageTransform.Microsoft.Matrix(M11=\" + a + \", M12=\" + b + \", M21=\" + c + \", M22=\" + d,\n\t\t\t\t\tox = t.x + (w * t.xPercent / 100),\n\t\t\t\t\toy = t.y + (h * t.yPercent / 100),\n\t\t\t\t\tdx, dy;\n\n\t\t\t\t//if transformOrigin is being used, adjust the offset x and y\n\t\t\t\tif (t.ox != null) {\n\t\t\t\t\tdx = ((t.oxp) ? w * t.ox * 0.01 : t.ox) - w / 2;\n\t\t\t\t\tdy = ((t.oyp) ? h * t.oy * 0.01 : t.oy) - h / 2;\n\t\t\t\t\tox += dx - (dx * a + dy * b);\n\t\t\t\t\toy += dy - (dx * c + dy * d);\n\t\t\t\t}\n\n\t\t\t\tif (!clip) {\n\t\t\t\t\tm += \", sizingMethod='auto expand')\";\n\t\t\t\t} else {\n\t\t\t\t\tdx = (w / 2);\n\t\t\t\t\tdy = (h / 2);\n\t\t\t\t\t//translate to ensure that transformations occur around the correct origin (default is center).\n\t\t\t\t\tm += \", Dx=\" + (dx - (dx * a + dy * b) + ox) + \", Dy=\" + (dy - (dx * c + dy * d) + oy) + \")\";\n\t\t\t\t}\n\t\t\t\tif (filters.indexOf(\"DXImageTransform.Microsoft.Matrix(\") !== -1) {\n\t\t\t\t\tstyle.filter = filters.replace(_ieSetMatrixExp, m);\n\t\t\t\t} else {\n\t\t\t\t\tstyle.filter = m + \" \" + filters; //we must always put the transform/matrix FIRST (before alpha(opacity=xx)) to avoid an IE bug that slices part of the object when rotation is applied with alpha.\n\t\t\t\t}\n\n\t\t\t\t//at the end or beginning of the tween, if the matrix is normal (1, 0, 0, 1) and opacity is 100 (or doesn't exist), remove the filter to improve browser performance.\n\t\t\t\tif (v === 0 || v === 1) if (a === 1) if (b === 0) if (c === 0) if (d === 1) if (!clip || m.indexOf(\"Dx=0, Dy=0\") !== -1) if (!_opacityExp.test(filters) || parseFloat(RegExp.$1) === 100) if (filters.indexOf(\"gradient(\" && filters.indexOf(\"Alpha\")) === -1) {\n\t\t\t\t\tstyle.removeAttribute(\"filter\");\n\t\t\t\t}\n\n\t\t\t\t//we must set the margins AFTER applying the filter in order to avoid some bugs in IE8 that could (in rare scenarios) cause them to be ignored intermittently (vibration).\n\t\t\t\tif (!clip) {\n\t\t\t\t\tvar mult = (_ieVers < 8) ? 1 : -1, //in Internet Explorer 7 and before, the box model is broken, causing the browser to treat the width/height of the actual rotated filtered image as the width/height of the box itself, but Microsoft corrected that in IE8. We must use a negative offset in IE8 on the right/bottom\n\t\t\t\t\t\tmarg, prop, dif;\n\t\t\t\t\tdx = t.ieOffsetX || 0;\n\t\t\t\t\tdy = t.ieOffsetY || 0;\n\t\t\t\t\tt.ieOffsetX = Math.round((w - ((a < 0 ? -a : a) * w + (b < 0 ? -b : b) * h)) / 2 + ox);\n\t\t\t\t\tt.ieOffsetY = Math.round((h - ((d < 0 ? -d : d) * h + (c < 0 ? -c : c) * w)) / 2 + oy);\n\t\t\t\t\tfor (i = 0; i < 4; i++) {\n\t\t\t\t\t\tprop = _margins[i];\n\t\t\t\t\t\tmarg = cs[prop];\n\t\t\t\t\t\t//we need to get the current margin in case it is being tweened separately (we want to respect that tween's changes)\n\t\t\t\t\t\tval = (marg.indexOf(\"px\") !== -1) ? parseFloat(marg) : _convertToPixels(this.t, prop, parseFloat(marg), marg.replace(_suffixExp, \"\")) || 0;\n\t\t\t\t\t\tif (val !== t[prop]) {\n\t\t\t\t\t\t\tdif = (i < 2) ? -t.ieOffsetX : -t.ieOffsetY; //if another tween is controlling a margin, we cannot only apply the difference in the ieOffsets, so we essentially zero-out the dx and dy here in that case. We record the margin(s) later so that we can keep comparing them, making this code very flexible.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdif = (i < 2) ? dx - t.ieOffsetX : dy - t.ieOffsetY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle[prop] = (t[prop] = Math.round( val - dif * ((i === 0 || i === 2) ? 1 : mult) )) + \"px\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/* translates a super small decimal to a string WITHOUT scientific notation\n\t\t\t_safeDecimal = function(n) {\n\t\t\t\tvar s = (n < 0 ? -n : n) + \"\",\n\t\t\t\t\ta = s.split(\"e-\");\n\t\t\t\treturn (n < 0 ? \"-0.\" : \"0.\") + new Array(parseInt(a[1], 10) || 0).join(\"0\") + a[0].split(\".\").join(\"\");\n\t\t\t},\n\t\t\t*/\n\n\t\t\t_setTransformRatio = _internals.set3DTransformRatio = _internals.setTransformRatio = function(v) {\n\t\t\t\tvar t = this.data, //refers to the element's _gsTransform object\n\t\t\t\t\tstyle = this.t.style,\n\t\t\t\t\tangle = t.rotation,\n\t\t\t\t\trotationX = t.rotationX,\n\t\t\t\t\trotationY = t.rotationY,\n\t\t\t\t\tsx = t.scaleX,\n\t\t\t\t\tsy = t.scaleY,\n\t\t\t\t\tsz = t.scaleZ,\n\t\t\t\t\tx = t.x,\n\t\t\t\t\ty = t.y,\n\t\t\t\t\tz = t.z,\n\t\t\t\t\tisSVG = t.svg,\n\t\t\t\t\tperspective = t.perspective,\n\t\t\t\t\tforce3D = t.force3D,\n\t\t\t\t\ta11, a12, a13, a21, a22, a23, a31, a32, a33, a41, a42, a43,\n\t\t\t\t\tzOrigin, min, cos, sin, t1, t2, transform, comma, zero, skew, rnd;\n\t\t\t\t//check to see if we should render as 2D (and SVGs must use 2D when _useSVGTransformAttr is true)\n\t\t\t\tif (((((v === 1 || v === 0) && force3D === \"auto\" && (this.tween._totalTime === this.tween._totalDuration || !this.tween._totalTime)) || !force3D) && !z && !perspective && !rotationY && !rotationX && sz === 1) || (_useSVGTransformAttr && isSVG) || !_supports3D) { //on the final render (which could be 0 for a from tween), if there are no 3D aspects, render in 2D to free up memory and improve performance especially on mobile devices. Check the tween's totalTime/totalDuration too in order to make sure it doesn't happen between repeats if it's a repeating tween.\n\n\t\t\t\t\t//2D\n\t\t\t\t\tif (angle || t.skewX || isSVG) {\n\t\t\t\t\t\tangle *= _DEG2RAD;\n\t\t\t\t\t\tskew = t.skewX * _DEG2RAD;\n\t\t\t\t\t\trnd = 100000;\n\t\t\t\t\t\ta11 = Math.cos(angle) * sx;\n\t\t\t\t\t\ta21 = Math.sin(angle) * sx;\n\t\t\t\t\t\ta12 = Math.sin(angle - skew) * -sy;\n\t\t\t\t\t\ta22 = Math.cos(angle - skew) * sy;\n\t\t\t\t\t\tif (skew && t.skewType === \"simple\") { //by default, we compensate skewing on the other axis to make it look more natural, but you can set the skewType to \"simple\" to use the uncompensated skewing that CSS does\n\t\t\t\t\t\t\tt1 = Math.tan(skew - t.skewY * _DEG2RAD);\n\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\ta12 *= t1;\n\t\t\t\t\t\t\ta22 *= t1;\n\t\t\t\t\t\t\tif (t.skewY) {\n\t\t\t\t\t\t\t\tt1 = Math.tan(t.skewY * _DEG2RAD);\n\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\ta11 *= t1;\n\t\t\t\t\t\t\t\ta21 *= t1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (isSVG) {\n\t\t\t\t\t\t\tx += t.xOrigin - (t.xOrigin * a11 + t.yOrigin * a12) + t.xOffset;\n\t\t\t\t\t\t\ty += t.yOrigin - (t.xOrigin * a21 + t.yOrigin * a22) + t.yOffset;\n\t\t\t\t\t\t\tif (_useSVGTransformAttr && (t.xPercent || t.yPercent)) { //The SVG spec doesn't support percentage-based translation in the \"transform\" attribute, so we merge it into the matrix to simulate it.\n\t\t\t\t\t\t\t\tmin = this.t.getBBox();\n\t\t\t\t\t\t\t\tx += t.xPercent * 0.01 * min.width;\n\t\t\t\t\t\t\t\ty += t.yPercent * 0.01 * min.height;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmin = 0.000001;\n\t\t\t\t\t\t\tif (x < min) if (x > -min) {\n\t\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (y < min) if (y > -min) {\n\t\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttransform = (((a11 * rnd) | 0) / rnd) + \",\" + (((a21 * rnd) | 0) / rnd) + \",\" + (((a12 * rnd) | 0) / rnd) + \",\" + (((a22 * rnd) | 0) / rnd) + \",\" + x + \",\" + y + \")\";\n\t\t\t\t\t\tif (isSVG && _useSVGTransformAttr) {\n\t\t\t\t\t\t\tthis.t.setAttribute(\"transform\", \"matrix(\" + transform);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t//some browsers have a hard time with very small values like 2.4492935982947064e-16 (notice the \"e-\" towards the end) and would render the object slightly off. So we round to 5 decimal places.\n\t\t\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix(\" : \"matrix(\") + transform;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix(\" : \"matrix(\") + sx + \",0,0,\" + sy + \",\" + x + \",\" + y + \")\";\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\t\t\t\tif (_isFirefox) { //Firefox has a bug (at least in v25) that causes it to render the transparent part of 32-bit PNG images as black when displayed inside an iframe and the 3D scale is very small and doesn't change sufficiently enough between renders (like if you use a Power4.easeInOut to scale from 0 to 1 where the beginning values only change a tiny amount to begin the tween before accelerating). In this case, we force the scale to be 0.00002 instead which is visually the same but works around the Firefox issue.\n\t\t\t\t\tmin = 0.0001;\n\t\t\t\t\tif (sx < min && sx > -min) {\n\t\t\t\t\t\tsx = sz = 0.00002;\n\t\t\t\t\t}\n\t\t\t\t\tif (sy < min && sy > -min) {\n\t\t\t\t\t\tsy = sz = 0.00002;\n\t\t\t\t\t}\n\t\t\t\t\tif (perspective && !t.z && !t.rotationX && !t.rotationY) { //Firefox has a bug that causes elements to have an odd super-thin, broken/dotted black border on elements that have a perspective set but aren't utilizing 3D space (no rotationX, rotationY, or z).\n\t\t\t\t\t\tperspective = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (angle || t.skewX) {\n\t\t\t\t\tangle *= _DEG2RAD;\n\t\t\t\t\tcos = a11 = Math.cos(angle);\n\t\t\t\t\tsin = a21 = Math.sin(angle);\n\t\t\t\t\tif (t.skewX) {\n\t\t\t\t\t\tangle -= t.skewX * _DEG2RAD;\n\t\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\t\tif (t.skewType === \"simple\") { //by default, we compensate skewing on the other axis to make it look more natural, but you can set the skewType to \"simple\" to use the uncompensated skewing that CSS does\n\t\t\t\t\t\t\tt1 = Math.tan((t.skewX - t.skewY) * _DEG2RAD);\n\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\tcos *= t1;\n\t\t\t\t\t\t\tsin *= t1;\n\t\t\t\t\t\t\tif (t.skewY) {\n\t\t\t\t\t\t\t\tt1 = Math.tan(t.skewY * _DEG2RAD);\n\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\ta11 *= t1;\n\t\t\t\t\t\t\t\ta21 *= t1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ta12 = -sin;\n\t\t\t\t\ta22 = cos;\n\n\t\t\t\t} else if (!rotationY && !rotationX && sz === 1 && !perspective && !isSVG) { //if we're only translating and/or 2D scaling, this is faster...\n\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) translate3d(\" : \"translate3d(\") + x + \"px,\" + y + \"px,\" + z +\"px)\" + ((sx !== 1 || sy !== 1) ? \" scale(\" + sx + \",\" + sy + \")\" : \"\");\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\ta11 = a22 = 1;\n\t\t\t\t\ta12 = a21 = 0;\n\t\t\t\t}\n\t\t\t\t// KEY  INDEX   AFFECTS\n\t\t\t\t// a11  0       rotation, rotationY, scaleX\n\t\t\t\t// a21  1       rotation, rotationY, scaleX\n\t\t\t\t// a31  2       rotationY, scaleX\n\t\t\t\t// a41  3       rotationY, scaleX\n\t\t\t\t// a12  4       rotation, skewX, rotationX, scaleY\n\t\t\t\t// a22  5       rotation, skewX, rotationX, scaleY\n\t\t\t\t// a32  6       rotationX, scaleY\n\t\t\t\t// a42  7       rotationX, scaleY\n\t\t\t\t// a13  8       rotationY, rotationX, scaleZ\n\t\t\t\t// a23  9       rotationY, rotationX, scaleZ\n\t\t\t\t// a33  10      rotationY, rotationX, scaleZ\n\t\t\t\t// a43  11      rotationY, rotationX, perspective, scaleZ\n\t\t\t\t// a14  12      x, zOrigin, svgOrigin\n\t\t\t\t// a24  13      y, zOrigin, svgOrigin\n\t\t\t\t// a34  14      z, zOrigin\n\t\t\t\t// a44  15\n\t\t\t\t// rotation: Math.atan2(a21, a11)\n\t\t\t\t// rotationY: Math.atan2(a13, a33) (or Math.atan2(a13, a11))\n\t\t\t\t// rotationX: Math.atan2(a32, a33)\n\t\t\t\ta33 = 1;\n\t\t\t\ta13 = a23 = a31 = a32 = a41 = a42 = 0;\n\t\t\t\ta43 = (perspective) ? -1 / perspective : 0;\n\t\t\t\tzOrigin = t.zOrigin;\n\t\t\t\tmin = 0.000001; //threshold below which browsers use scientific notation which won't work.\n\t\t\t\tcomma = \",\";\n\t\t\t\tzero = \"0\";\n\t\t\t\tangle = rotationY * _DEG2RAD;\n\t\t\t\tif (angle) {\n\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\ta31 = -sin;\n\t\t\t\t\ta41 = a43*-sin;\n\t\t\t\t\ta13 = a11*sin;\n\t\t\t\t\ta23 = a21*sin;\n\t\t\t\t\ta33 = cos;\n\t\t\t\t\ta43 *= cos;\n\t\t\t\t\ta11 *= cos;\n\t\t\t\t\ta21 *= cos;\n\t\t\t\t}\n\t\t\t\tangle = rotationX * _DEG2RAD;\n\t\t\t\tif (angle) {\n\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\tt1 = a12*cos+a13*sin;\n\t\t\t\t\tt2 = a22*cos+a23*sin;\n\t\t\t\t\ta32 = a33*sin;\n\t\t\t\t\ta42 = a43*sin;\n\t\t\t\t\ta13 = a12*-sin+a13*cos;\n\t\t\t\t\ta23 = a22*-sin+a23*cos;\n\t\t\t\t\ta33 = a33*cos;\n\t\t\t\t\ta43 = a43*cos;\n\t\t\t\t\ta12 = t1;\n\t\t\t\t\ta22 = t2;\n\t\t\t\t}\n\t\t\t\tif (sz !== 1) {\n\t\t\t\t\ta13*=sz;\n\t\t\t\t\ta23*=sz;\n\t\t\t\t\ta33*=sz;\n\t\t\t\t\ta43*=sz;\n\t\t\t\t}\n\t\t\t\tif (sy !== 1) {\n\t\t\t\t\ta12*=sy;\n\t\t\t\t\ta22*=sy;\n\t\t\t\t\ta32*=sy;\n\t\t\t\t\ta42*=sy;\n\t\t\t\t}\n\t\t\t\tif (sx !== 1) {\n\t\t\t\t\ta11*=sx;\n\t\t\t\t\ta21*=sx;\n\t\t\t\t\ta31*=sx;\n\t\t\t\t\ta41*=sx;\n\t\t\t\t}\n\n\t\t\t\tif (zOrigin || isSVG) {\n\t\t\t\t\tif (zOrigin) {\n\t\t\t\t\t\tx += a13*-zOrigin;\n\t\t\t\t\t\ty += a23*-zOrigin;\n\t\t\t\t\t\tz += a33*-zOrigin+zOrigin;\n\t\t\t\t\t}\n\t\t\t\t\tif (isSVG) { //due to bugs in some browsers, we need to manage the transform-origin of SVG manually\n\t\t\t\t\t\tx += t.xOrigin - (t.xOrigin * a11 + t.yOrigin * a12) + t.xOffset;\n\t\t\t\t\t\ty += t.yOrigin - (t.xOrigin * a21 + t.yOrigin * a22) + t.yOffset;\n\t\t\t\t\t}\n\t\t\t\t\tif (x < min && x > -min) {\n\t\t\t\t\t\tx = zero;\n\t\t\t\t\t}\n\t\t\t\t\tif (y < min && y > -min) {\n\t\t\t\t\t\ty = zero;\n\t\t\t\t\t}\n\t\t\t\t\tif (z < min && z > -min) {\n\t\t\t\t\t\tz = 0; //don't use string because we calculate perspective later and need the number.\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//optimized way of concatenating all the values into a string. If we do it all in one shot, it's slower because of the way browsers have to create temp strings and the way it affects memory. If we do it piece-by-piece with +=, it's a bit slower too. We found that doing it in these sized chunks works best overall:\n\t\t\t\ttransform = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix3d(\" : \"matrix3d(\");\n\t\t\t\ttransform += ((a11 < min && a11 > -min) ? zero : a11) + comma + ((a21 < min && a21 > -min) ? zero : a21) + comma + ((a31 < min && a31 > -min) ? zero : a31);\n\t\t\t\ttransform += comma + ((a41 < min && a41 > -min) ? zero : a41) + comma + ((a12 < min && a12 > -min) ? zero : a12) + comma + ((a22 < min && a22 > -min) ? zero : a22);\n\t\t\t\tif (rotationX || rotationY || sz !== 1) { //performance optimization (often there's no rotationX or rotationY, so we can skip these calculations)\n\t\t\t\t\ttransform += comma + ((a32 < min && a32 > -min) ? zero : a32) + comma + ((a42 < min && a42 > -min) ? zero : a42) + comma + ((a13 < min && a13 > -min) ? zero : a13);\n\t\t\t\t\ttransform += comma + ((a23 < min && a23 > -min) ? zero : a23) + comma + ((a33 < min && a33 > -min) ? zero : a33) + comma + ((a43 < min && a43 > -min) ? zero : a43) + comma;\n\t\t\t\t} else {\n\t\t\t\t\ttransform += \",0,0,0,0,1,0,\";\n\t\t\t\t}\n\t\t\t\ttransform += x + comma + y + comma + z + comma + (perspective ? (1 + (-z / perspective)) : 1) + \")\";\n\n\t\t\t\tstyle[_transformProp] = transform;\n\t\t\t};\n\n\t\tp = Transform.prototype;\n\t\tp.x = p.y = p.z = p.skewX = p.skewY = p.rotation = p.rotationX = p.rotationY = p.zOrigin = p.xPercent = p.yPercent = p.xOffset = p.yOffset = 0;\n\t\tp.scaleX = p.scaleY = p.scaleZ = 1;\n\n\t\t_registerComplexSpecialProp(\"transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,svgOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType,xPercent,yPercent,smoothOrigin\", {parser:function(t, e, parsingProp, cssp, pt, plugin, vars) {\n\t\t\tif (cssp._lastParsedTransform === vars) { return pt; } //only need to parse the transform once, and only if the browser supports it.\n\t\t\tcssp._lastParsedTransform = vars;\n\t\t\tvar swapFunc;\n\t\t\tif (typeof(vars[parsingProp]) === \"function\") { //whatever property triggers the initial parsing might be a function-based value in which case it already got called in parse(), thus we don't want to call it again in here. The most efficient way to avoid this is to temporarily swap the value directly into the vars object, and then after we do all our parsing in this function, we'll swap it back again.\n\t\t\t\tswapFunc = vars[parsingProp];\n\t\t\t\tvars[parsingProp] = e;\n\t\t\t}\n\t\t\tvar originalGSTransform = t._gsTransform,\n\t\t\t\tstyle = t.style,\n\t\t\t\tmin = 0.000001,\n\t\t\t\ti = _transformProps.length,\n\t\t\t\tv = vars,\n\t\t\t\tendRotations = {},\n\t\t\t\ttransformOriginString = \"transformOrigin\",\n\t\t\t\tm1 = _getTransform(t, _cs, true, v.parseTransform),\n\t\t\t\torig = v.transform && ((typeof(v.transform) === \"function\") ? v.transform(_index, _target) : v.transform),\n\t\t\t\tm2, copy, has3D, hasChange, dr, x, y, matrix, p;\n\t\t\tcssp._transform = m1;\n\t\t\tif (orig && typeof(orig) === \"string\" && _transformProp) { //for values like transform:\"rotate(60deg) scale(0.5, 0.8)\"\n\t\t\t\tcopy = _tempDiv.style; //don't use the original target because it might be SVG in which case some browsers don't report computed style correctly.\n\t\t\t\tcopy[_transformProp] = orig;\n\t\t\t\tcopy.display = \"block\"; //if display is \"none\", the browser often refuses to report the transform properties correctly.\n\t\t\t\tcopy.position = \"absolute\";\n\t\t\t\t_doc.body.appendChild(_tempDiv);\n\t\t\t\tm2 = _getTransform(_tempDiv, null, false);\n\t\t\t\tif (m1.svg) { //if it's an SVG element, x/y part of the matrix will be affected by whatever we use as the origin and the offsets, so compensate here...\n\t\t\t\t\tx = m1.xOrigin;\n\t\t\t\t\ty = m1.yOrigin;\n\t\t\t\t\tm2.x -= m1.xOffset;\n\t\t\t\t\tm2.y -= m1.yOffset;\n\t\t\t\t\tif (v.transformOrigin || v.svgOrigin) { //if this tween is altering the origin, we must factor that in here. The actual work of recording the transformOrigin values and setting up the PropTween is done later (still inside this function) so we cannot leave the changes intact here - we only want to update the x/y accordingly.\n\t\t\t\t\t\torig = {};\n\t\t\t\t\t\t_parseSVGOrigin(t, _parsePosition(v.transformOrigin), orig, v.svgOrigin, v.smoothOrigin, true);\n\t\t\t\t\t\tx = orig.xOrigin;\n\t\t\t\t\t\ty = orig.yOrigin;\n\t\t\t\t\t\tm2.x -= orig.xOffset - m1.xOffset;\n\t\t\t\t\t\tm2.y -= orig.yOffset - m1.yOffset;\n\t\t\t\t\t}\n\t\t\t\t\tif (x || y) {\n\t\t\t\t\t\tmatrix = _getMatrix(_tempDiv, true);\n\t\t\t\t\t\tm2.x -= x - (x * matrix[0] + y * matrix[2]);\n\t\t\t\t\t\tm2.y -= y - (x * matrix[1] + y * matrix[3]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_doc.body.removeChild(_tempDiv);\n\t\t\t\tif (!m2.perspective) {\n\t\t\t\t\tm2.perspective = m1.perspective; //tweening to no perspective gives very unintuitive results - just keep the same perspective in that case.\n\t\t\t\t}\n\t\t\t\tif (v.xPercent != null) {\n\t\t\t\t\tm2.xPercent = _parseVal(v.xPercent, m1.xPercent);\n\t\t\t\t}\n\t\t\t\tif (v.yPercent != null) {\n\t\t\t\t\tm2.yPercent = _parseVal(v.yPercent, m1.yPercent);\n\t\t\t\t}\n\t\t\t} else if (typeof(v) === \"object\") { //for values like scaleX, scaleY, rotation, x, y, skewX, and skewY or transform:{...} (object)\n\t\t\t\tm2 = {scaleX:_parseVal((v.scaleX != null) ? v.scaleX : v.scale, m1.scaleX),\n\t\t\t\t\tscaleY:_parseVal((v.scaleY != null) ? v.scaleY : v.scale, m1.scaleY),\n\t\t\t\t\tscaleZ:_parseVal(v.scaleZ, m1.scaleZ),\n\t\t\t\t\tx:_parseVal(v.x, m1.x),\n\t\t\t\t\ty:_parseVal(v.y, m1.y),\n\t\t\t\t\tz:_parseVal(v.z, m1.z),\n\t\t\t\t\txPercent:_parseVal(v.xPercent, m1.xPercent),\n\t\t\t\t\tyPercent:_parseVal(v.yPercent, m1.yPercent),\n\t\t\t\t\tperspective:_parseVal(v.transformPerspective, m1.perspective)};\n\t\t\t\tdr = v.directionalRotation;\n\t\t\t\tif (dr != null) {\n\t\t\t\t\tif (typeof(dr) === \"object\") {\n\t\t\t\t\t\tfor (copy in dr) {\n\t\t\t\t\t\t\tv[copy] = dr[copy];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv.rotation = dr;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof(v.x) === \"string\" && v.x.indexOf(\"%\") !== -1) {\n\t\t\t\t\tm2.x = 0;\n\t\t\t\t\tm2.xPercent = _parseVal(v.x, m1.xPercent);\n\t\t\t\t}\n\t\t\t\tif (typeof(v.y) === \"string\" && v.y.indexOf(\"%\") !== -1) {\n\t\t\t\t\tm2.y = 0;\n\t\t\t\t\tm2.yPercent = _parseVal(v.y, m1.yPercent);\n\t\t\t\t}\n\n\t\t\t\tm2.rotation = _parseAngle((\"rotation\" in v) ? v.rotation : (\"shortRotation\" in v) ? v.shortRotation + \"_short\" : (\"rotationZ\" in v) ? v.rotationZ : m1.rotation - m1.skewY, m1.rotation - m1.skewY, \"rotation\", endRotations); //see notes below about skewY for why we subtract it from rotation here\n\t\t\t\tif (_supports3D) {\n\t\t\t\t\tm2.rotationX = _parseAngle((\"rotationX\" in v) ? v.rotationX : (\"shortRotationX\" in v) ? v.shortRotationX + \"_short\" : m1.rotationX || 0, m1.rotationX, \"rotationX\", endRotations);\n\t\t\t\t\tm2.rotationY = _parseAngle((\"rotationY\" in v) ? v.rotationY : (\"shortRotationY\" in v) ? v.shortRotationY + \"_short\" : m1.rotationY || 0, m1.rotationY, \"rotationY\", endRotations);\n\t\t\t\t}\n\t\t\t\tm2.skewX = _parseAngle(v.skewX, m1.skewX - m1.skewY); //see notes below about skewY and why we subtract it from skewX here\n\n\t\t\t\t//note: for performance reasons, we combine all skewing into the skewX and rotation values, ignoring skewY but we must still record it so that we can discern how much of the overall skew is attributed to skewX vs. skewY. Otherwise, if the skewY would always act relative (tween skewY to 10deg, for example, multiple times and if we always combine things into skewX, we can't remember that skewY was 10 from last time). Remember, a skewY of 10 degrees looks the same as a rotation of 10 degrees plus a skewX of -10 degrees.\n\t\t\t\tif ((m2.skewY = _parseAngle(v.skewY, m1.skewY))) {\n\t\t\t\t\tm2.skewX += m2.skewY;\n\t\t\t\t\tm2.rotation += m2.skewY;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_supports3D && v.force3D != null) {\n\t\t\t\tm1.force3D = v.force3D;\n\t\t\t\thasChange = true;\n\t\t\t}\n\n\t\t\tm1.skewType = v.skewType || m1.skewType || CSSPlugin.defaultSkewType;\n\n\t\t\thas3D = (m1.force3D || m1.z || m1.rotationX || m1.rotationY || m2.z || m2.rotationX || m2.rotationY || m2.perspective);\n\t\t\tif (!has3D && v.scale != null) {\n\t\t\t\tm2.scaleZ = 1; //no need to tween scaleZ.\n\t\t\t}\n\n\t\t\twhile (--i > -1) {\n\t\t\t\tp = _transformProps[i];\n\t\t\t\torig = m2[p] - m1[p];\n\t\t\t\tif (orig > min || orig < -min || v[p] != null || _forcePT[p] != null) {\n\t\t\t\t\thasChange = true;\n\t\t\t\t\tpt = new CSSPropTween(m1, p, m1[p], orig, pt);\n\t\t\t\t\tif (p in endRotations) {\n\t\t\t\t\t\tpt.e = endRotations[p]; //directional rotations typically have compensated values during the tween, but we need to make sure they end at exactly what the user requested\n\t\t\t\t\t}\n\t\t\t\t\tpt.xs0 = 0; //ensures the value stays numeric in setRatio()\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\tcssp._overwriteProps.push(pt.n);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\torig = v.transformOrigin;\n\t\t\tif (m1.svg && (orig || v.svgOrigin)) {\n\t\t\t\tx = m1.xOffset; //when we change the origin, in order to prevent things from jumping we adjust the x/y so we must record those here so that we can create PropTweens for them and flip them at the same time as the origin\n\t\t\t\ty = m1.yOffset;\n\t\t\t\t_parseSVGOrigin(t, _parsePosition(orig), m2, v.svgOrigin, v.smoothOrigin);\n\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"xOrigin\", (originalGSTransform ? m1 : m2).xOrigin, m2.xOrigin, pt, transformOriginString); //note: if there wasn't a transformOrigin defined yet, just start with the destination one; it's wasteful otherwise, and it causes problems with fromTo() tweens. For example, TweenLite.to(\"#wheel\", 3, {rotation:180, transformOrigin:\"50% 50%\", delay:1}); TweenLite.fromTo(\"#wheel\", 3, {scale:0.5, transformOrigin:\"50% 50%\"}, {scale:1, delay:2}); would cause a jump when the from values revert at the beginning of the 2nd tween.\n\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"yOrigin\", (originalGSTransform ? m1 : m2).yOrigin, m2.yOrigin, pt, transformOriginString);\n\t\t\t\tif (x !== m1.xOffset || y !== m1.yOffset) {\n\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"xOffset\", (originalGSTransform ? x : m1.xOffset), m1.xOffset, pt, transformOriginString);\n\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"yOffset\", (originalGSTransform ? y : m1.yOffset), m1.yOffset, pt, transformOriginString);\n\t\t\t\t}\n\t\t\t\torig = _useSVGTransformAttr ? null : \"0px 0px\"; //certain browsers (like firefox) completely botch transform-origin, so we must remove it to prevent it from contaminating transforms. We manage it ourselves with xOrigin and yOrigin\n\t\t\t}\n\t\t\tif (orig || (_supports3D && has3D && m1.zOrigin)) { //if anything 3D is happening and there's a transformOrigin with a z component that's non-zero, we must ensure that the transformOrigin's z-component is set to 0 so that we can manually do those calculations to get around Safari bugs. Even if the user didn't specifically define a \"transformOrigin\" in this particular tween (maybe they did it via css directly).\n\t\t\t\tif (_transformProp) {\n\t\t\t\t\thasChange = true;\n\t\t\t\t\tp = _transformOriginProp;\n\t\t\t\t\torig = (orig || _getStyle(t, p, _cs, false, \"50% 50%\")) + \"\"; //cast as string to avoid errors\n\t\t\t\t\tpt = new CSSPropTween(style, p, 0, 0, pt, -1, transformOriginString);\n\t\t\t\t\tpt.b = style[p];\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\tcopy = m1.zOrigin;\n\t\t\t\t\t\torig = orig.split(\" \");\n\t\t\t\t\t\tm1.zOrigin = ((orig.length > 2 && !(copy !== 0 && orig[2] === \"0px\")) ? parseFloat(orig[2]) : copy) || 0; //Safari doesn't handle the z part of transformOrigin correctly, so we'll manually handle it in the _set3DTransformRatio() method.\n\t\t\t\t\t\tpt.xs0 = pt.e = orig[0] + \" \" + (orig[1] || \"50%\") + \" 0px\"; //we must define a z value of 0px specifically otherwise iOS 5 Safari will stick with the old one (if one was defined)!\n\t\t\t\t\t\tpt = new CSSPropTween(m1, \"zOrigin\", 0, 0, pt, -1, pt.n); //we must create a CSSPropTween for the _gsTransform.zOrigin so that it gets reset properly at the beginning if the tween runs backward (as opposed to just setting m1.zOrigin here)\n\t\t\t\t\t\tpt.b = copy;\n\t\t\t\t\t\tpt.xs0 = pt.e = m1.zOrigin;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.xs0 = pt.e = orig;\n\t\t\t\t\t}\n\n\t\t\t\t\t//for older versions of IE (6-8), we need to manually calculate things inside the setRatio() function. We record origin x and y (ox and oy) and whether or not the values are percentages (oxp and oyp).\n\t\t\t\t} else {\n\t\t\t\t\t_parsePosition(orig + \"\", m1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasChange) {\n\t\t\t\tcssp._transformType = (!(m1.svg && _useSVGTransformAttr) && (has3D || this._transformType === 3)) ? 3 : 2; //quicker than calling cssp._enableTransforms();\n\t\t\t}\n\t\t\tif (swapFunc) {\n\t\t\t\tvars[parsingProp] = swapFunc;\n\t\t\t}\n\t\t\treturn pt;\n\t\t}, prefix:true});\n\n\t\t_registerComplexSpecialProp(\"boxShadow\", {defaultValue:\"0px 0px 0px 0px #999\", prefix:true, color:true, multi:true, keyword:\"inset\"});\n\n\t\t_registerComplexSpecialProp(\"borderRadius\", {defaultValue:\"0px\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\te = this.format(e);\n\t\t\tvar props = [\"borderTopLeftRadius\",\"borderTopRightRadius\",\"borderBottomRightRadius\",\"borderBottomLeftRadius\"],\n\t\t\t\tstyle = t.style,\n\t\t\t\tea1, i, es2, bs2, bs, es, bn, en, w, h, esfx, bsfx, rel, hn, vn, em;\n\t\t\tw = parseFloat(t.offsetWidth);\n\t\t\th = parseFloat(t.offsetHeight);\n\t\t\tea1 = e.split(\" \");\n\t\t\tfor (i = 0; i < props.length; i++) { //if we're dealing with percentages, we must convert things separately for the horizontal and vertical axis!\n\t\t\t\tif (this.p.indexOf(\"border\")) { //older browsers used a prefix\n\t\t\t\t\tprops[i] = _checkPropPrefix(props[i]);\n\t\t\t\t}\n\t\t\t\tbs = bs2 = _getStyle(t, props[i], _cs, false, \"0px\");\n\t\t\t\tif (bs.indexOf(\" \") !== -1) {\n\t\t\t\t\tbs2 = bs.split(\" \");\n\t\t\t\t\tbs = bs2[0];\n\t\t\t\t\tbs2 = bs2[1];\n\t\t\t\t}\n\t\t\t\tes = es2 = ea1[i];\n\t\t\t\tbn = parseFloat(bs);\n\t\t\t\tbsfx = bs.substr((bn + \"\").length);\n\t\t\t\trel = (es.charAt(1) === \"=\");\n\t\t\t\tif (rel) {\n\t\t\t\t\ten = parseInt(es.charAt(0)+\"1\", 10);\n\t\t\t\t\tes = es.substr(2);\n\t\t\t\t\ten *= parseFloat(es);\n\t\t\t\t\tesfx = es.substr((en + \"\").length - (en < 0 ? 1 : 0)) || \"\";\n\t\t\t\t} else {\n\t\t\t\t\ten = parseFloat(es);\n\t\t\t\t\tesfx = es.substr((en + \"\").length);\n\t\t\t\t}\n\t\t\t\tif (esfx === \"\") {\n\t\t\t\t\tesfx = _suffixMap[p] || bsfx;\n\t\t\t\t}\n\t\t\t\tif (esfx !== bsfx) {\n\t\t\t\t\thn = _convertToPixels(t, \"borderLeft\", bn, bsfx); //horizontal number (we use a bogus \"borderLeft\" property just because the _convertToPixels() method searches for the keywords \"Left\", \"Right\", \"Top\", and \"Bottom\" to determine of it's a horizontal or vertical property, and we need \"border\" in the name so that it knows it should measure relative to the element itself, not its parent.\n\t\t\t\t\tvn = _convertToPixels(t, \"borderTop\", bn, bsfx); //vertical number\n\t\t\t\t\tif (esfx === \"%\") {\n\t\t\t\t\t\tbs = (hn / w * 100) + \"%\";\n\t\t\t\t\t\tbs2 = (vn / h * 100) + \"%\";\n\t\t\t\t\t} else if (esfx === \"em\") {\n\t\t\t\t\t\tem = _convertToPixels(t, \"borderLeft\", 1, \"em\");\n\t\t\t\t\t\tbs = (hn / em) + \"em\";\n\t\t\t\t\t\tbs2 = (vn / em) + \"em\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbs = hn + \"px\";\n\t\t\t\t\t\tbs2 = vn + \"px\";\n\t\t\t\t\t}\n\t\t\t\t\tif (rel) {\n\t\t\t\t\t\tes = (parseFloat(bs) + en) + esfx;\n\t\t\t\t\t\tes2 = (parseFloat(bs2) + en) + esfx;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = _parseComplex(style, props[i], bs + \" \" + bs2, es + \" \" + es2, false, \"0px\", pt);\n\t\t\t}\n\t\t\treturn pt;\n\t\t}, prefix:true, formatter:_getFormatter(\"0px 0px 0px 0px\", false, true)});\n\t\t_registerComplexSpecialProp(\"borderBottomLeftRadius,borderBottomRightRadius,borderTopLeftRadius,borderTopRightRadius\", {defaultValue:\"0px\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\treturn _parseComplex(t.style, p, this.format(_getStyle(t, p, _cs, false, \"0px 0px\")), this.format(e), false, \"0px\", pt);\n\t\t}, prefix:true, formatter:_getFormatter(\"0px 0px\", false, true)});\n\t\t_registerComplexSpecialProp(\"backgroundPosition\", {defaultValue:\"0 0\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar bp = \"background-position\",\n\t\t\t\tcs = (_cs || _getComputedStyle(t, null)),\n\t\t\t\tbs = this.format( ((cs) ? _ieVers ? cs.getPropertyValue(bp + \"-x\") + \" \" + cs.getPropertyValue(bp + \"-y\") : cs.getPropertyValue(bp) : t.currentStyle.backgroundPositionX + \" \" + t.currentStyle.backgroundPositionY) || \"0 0\"), //Internet Explorer doesn't report background-position correctly - we must query background-position-x and background-position-y and combine them (even in IE10). Before IE9, we must do the same with the currentStyle object and use camelCase\n\t\t\t\tes = this.format(e),\n\t\t\t\tba, ea, i, pct, overlap, src;\n\t\t\tif ((bs.indexOf(\"%\") !== -1) !== (es.indexOf(\"%\") !== -1) && es.split(\",\").length < 2) {\n\t\t\t\tsrc = _getStyle(t, \"backgroundImage\").replace(_urlExp, \"\");\n\t\t\t\tif (src && src !== \"none\") {\n\t\t\t\t\tba = bs.split(\" \");\n\t\t\t\t\tea = es.split(\" \");\n\t\t\t\t\t_tempImg.setAttribute(\"src\", src); //set the temp IMG's src to the background-image so that we can measure its width/height\n\t\t\t\t\ti = 2;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tbs = ba[i];\n\t\t\t\t\t\tpct = (bs.indexOf(\"%\") !== -1);\n\t\t\t\t\t\tif (pct !== (ea[i].indexOf(\"%\") !== -1)) {\n\t\t\t\t\t\t\toverlap = (i === 0) ? t.offsetWidth - _tempImg.width : t.offsetHeight - _tempImg.height;\n\t\t\t\t\t\t\tba[i] = pct ? (parseFloat(bs) / 100 * overlap) + \"px\" : (parseFloat(bs) / overlap * 100) + \"%\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbs = ba.join(\" \");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.parseComplex(t.style, bs, es, pt, plugin);\n\t\t}, formatter:_parsePosition});\n\t\t_registerComplexSpecialProp(\"backgroundSize\", {defaultValue:\"0 0\", formatter:function(v) {\n\t\t\tv += \"\"; //ensure it's a string\n\t\t\treturn _parsePosition(v.indexOf(\" \") === -1 ? v + \" \" + v : v); //if set to something like \"100% 100%\", Safari typically reports the computed style as just \"100%\" (no 2nd value), but we should ensure that there are two values, so copy the first one. Otherwise, it'd be interpreted as \"100% 0\" (wrong).\n\t\t}});\n\t\t_registerComplexSpecialProp(\"perspective\", {defaultValue:\"0px\", prefix:true});\n\t\t_registerComplexSpecialProp(\"perspectiveOrigin\", {defaultValue:\"50% 50%\", prefix:true});\n\t\t_registerComplexSpecialProp(\"transformStyle\", {prefix:true});\n\t\t_registerComplexSpecialProp(\"backfaceVisibility\", {prefix:true});\n\t\t_registerComplexSpecialProp(\"userSelect\", {prefix:true});\n\t\t_registerComplexSpecialProp(\"margin\", {parser:_getEdgeParser(\"marginTop,marginRight,marginBottom,marginLeft\")});\n\t\t_registerComplexSpecialProp(\"padding\", {parser:_getEdgeParser(\"paddingTop,paddingRight,paddingBottom,paddingLeft\")});\n\t\t_registerComplexSpecialProp(\"clip\", {defaultValue:\"rect(0px,0px,0px,0px)\", parser:function(t, e, p, cssp, pt, plugin){\n\t\t\tvar b, cs, delim;\n\t\t\tif (_ieVers < 9) { //IE8 and earlier don't report a \"clip\" value in the currentStyle - instead, the values are split apart into clipTop, clipRight, clipBottom, and clipLeft. Also, in IE7 and earlier, the values inside rect() are space-delimited, not comma-delimited.\n\t\t\t\tcs = t.currentStyle;\n\t\t\t\tdelim = _ieVers < 8 ? \" \" : \",\";\n\t\t\t\tb = \"rect(\" + cs.clipTop + delim + cs.clipRight + delim + cs.clipBottom + delim + cs.clipLeft + \")\";\n\t\t\t\te = this.format(e).split(\",\").join(delim);\n\t\t\t} else {\n\t\t\t\tb = this.format(_getStyle(t, this.p, _cs, false, this.dflt));\n\t\t\t\te = this.format(e);\n\t\t\t}\n\t\t\treturn this.parseComplex(t.style, b, e, pt, plugin);\n\t\t}});\n\t\t_registerComplexSpecialProp(\"textShadow\", {defaultValue:\"0px 0px 0px #999\", color:true, multi:true});\n\t\t_registerComplexSpecialProp(\"autoRound,strictUnits\", {parser:function(t, e, p, cssp, pt) {return pt;}}); //just so that we can ignore these properties (not tween them)\n\t\t_registerComplexSpecialProp(\"border\", {defaultValue:\"0px solid #000\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar bw = _getStyle(t, \"borderTopWidth\", _cs, false, \"0px\"),\n\t\t\t\tend = this.format(e).split(\" \"),\n\t\t\t\tesfx = end[0].replace(_suffixExp, \"\");\n\t\t\tif (esfx !== \"px\") { //if we're animating to a non-px value, we need to convert the beginning width to that unit.\n\t\t\t\tbw = (parseFloat(bw) / _convertToPixels(t, \"borderTopWidth\", 1, esfx)) + esfx;\n\t\t\t}\n\t\t\treturn this.parseComplex(t.style, this.format(bw + \" \" + _getStyle(t, \"borderTopStyle\", _cs, false, \"solid\") + \" \" + _getStyle(t, \"borderTopColor\", _cs, false, \"#000\")), end.join(\" \"), pt, plugin);\n\t\t\t}, color:true, formatter:function(v) {\n\t\t\t\tvar a = v.split(\" \");\n\t\t\t\treturn a[0] + \" \" + (a[1] || \"solid\") + \" \" + (v.match(_colorExp) || [\"#000\"])[0];\n\t\t\t}});\n\t\t_registerComplexSpecialProp(\"borderWidth\", {parser:_getEdgeParser(\"borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth\")}); //Firefox doesn't pick up on borderWidth set in style sheets (only inline).\n\t\t_registerComplexSpecialProp(\"float,cssFloat,styleFloat\", {parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar s = t.style,\n\t\t\t\tprop = (\"cssFloat\" in s) ? \"cssFloat\" : \"styleFloat\";\n\t\t\treturn new CSSPropTween(s, prop, 0, 0, pt, -1, p, false, 0, s[prop], e);\n\t\t}});\n\n\t\t//opacity-related\n\t\tvar _setIEOpacityRatio = function(v) {\n\t\t\t\tvar t = this.t, //refers to the element's style property\n\t\t\t\t\tfilters = t.filter || _getStyle(this.data, \"filter\") || \"\",\n\t\t\t\t\tval = (this.s + this.c * v) | 0,\n\t\t\t\t\tskip;\n\t\t\t\tif (val === 100) { //for older versions of IE that need to use a filter to apply opacity, we should remove the filter if opacity hits 1 in order to improve performance, but make sure there isn't a transform (matrix) or gradient in the filters.\n\t\t\t\t\tif (filters.indexOf(\"atrix(\") === -1 && filters.indexOf(\"radient(\") === -1 && filters.indexOf(\"oader(\") === -1) {\n\t\t\t\t\t\tt.removeAttribute(\"filter\");\n\t\t\t\t\t\tskip = (!_getStyle(this.data, \"filter\")); //if a class is applied that has an alpha filter, it will take effect (we don't want that), so re-apply our alpha filter in that case. We must first remove it and then check.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.filter = filters.replace(_alphaFilterExp, \"\");\n\t\t\t\t\t\tskip = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!skip) {\n\t\t\t\t\tif (this.xn1) {\n\t\t\t\t\t\tt.filter = filters = filters || (\"alpha(opacity=\" + val + \")\"); //works around bug in IE7/8 that prevents changes to \"visibility\" from being applied properly if the filter is changed to a different alpha on the same frame.\n\t\t\t\t\t}\n\t\t\t\t\tif (filters.indexOf(\"pacity\") === -1) { //only used if browser doesn't support the standard opacity style property (IE 7 and 8). We omit the \"O\" to avoid case-sensitivity issues\n\t\t\t\t\t\tif (val !== 0 || !this.xn1) { //bugs in IE7/8 won't render the filter properly if opacity is ADDED on the same frame/render as \"visibility\" changes (this.xn1 is 1 if this tween is an \"autoAlpha\" tween)\n\t\t\t\t\t\t\tt.filter = filters + \" alpha(opacity=\" + val + \")\"; //we round the value because otherwise, bugs in IE7/8 can prevent \"visibility\" changes from being applied properly.\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.filter = filters.replace(_opacityExp, \"opacity=\" + val);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t_registerComplexSpecialProp(\"opacity,alpha,autoAlpha\", {defaultValue:\"1\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar b = parseFloat(_getStyle(t, \"opacity\", _cs, false, \"1\")),\n\t\t\t\tstyle = t.style,\n\t\t\t\tisAutoAlpha = (p === \"autoAlpha\");\n\t\t\tif (typeof(e) === \"string\" && e.charAt(1) === \"=\") {\n\t\t\t\te = ((e.charAt(0) === \"-\") ? -1 : 1) * parseFloat(e.substr(2)) + b;\n\t\t\t}\n\t\t\tif (isAutoAlpha && b === 1 && _getStyle(t, \"visibility\", _cs) === \"hidden\" && e !== 0) { //if visibility is initially set to \"hidden\", we should interpret that as intent to make opacity 0 (a convenience)\n\t\t\t\tb = 0;\n\t\t\t}\n\t\t\tif (_supportsOpacity) {\n\t\t\t\tpt = new CSSPropTween(style, \"opacity\", b, e - b, pt);\n\t\t\t} else {\n\t\t\t\tpt = new CSSPropTween(style, \"opacity\", b * 100, (e - b) * 100, pt);\n\t\t\t\tpt.xn1 = isAutoAlpha ? 1 : 0; //we need to record whether or not this is an autoAlpha so that in the setRatio(), we know to duplicate the setting of the alpha in order to work around a bug in IE7 and IE8 that prevents changes to \"visibility\" from taking effect if the filter is changed to a different alpha(opacity) at the same time. Setting it to the SAME value first, then the new value works around the IE7/8 bug.\n\t\t\t\tstyle.zoom = 1; //helps correct an IE issue.\n\t\t\t\tpt.type = 2;\n\t\t\t\tpt.b = \"alpha(opacity=\" + pt.s + \")\";\n\t\t\t\tpt.e = \"alpha(opacity=\" + (pt.s + pt.c) + \")\";\n\t\t\t\tpt.data = t;\n\t\t\t\tpt.plugin = plugin;\n\t\t\t\tpt.setRatio = _setIEOpacityRatio;\n\t\t\t}\n\t\t\tif (isAutoAlpha) { //we have to create the \"visibility\" PropTween after the opacity one in the linked list so that they run in the order that works properly in IE8 and earlier\n\t\t\t\tpt = new CSSPropTween(style, \"visibility\", 0, 0, pt, -1, null, false, 0, ((b !== 0) ? \"inherit\" : \"hidden\"), ((e === 0) ? \"hidden\" : \"inherit\"));\n\t\t\t\tpt.xs0 = \"inherit\";\n\t\t\t\tcssp._overwriteProps.push(pt.n);\n\t\t\t\tcssp._overwriteProps.push(p);\n\t\t\t}\n\t\t\treturn pt;\n\t\t}});\n\n\n\t\tvar _removeProp = function(s, p) {\n\t\t\t\tif (p) {\n\t\t\t\t\tif (s.removeProperty) {\n\t\t\t\t\t\tif (p.substr(0,2) === \"ms\" || p.substr(0,6) === \"webkit\") { //Microsoft and some Webkit browsers don't conform to the standard of capitalizing the first prefix character, so we adjust so that when we prefix the caps with a dash, it's correct (otherwise it'd be \"ms-transform\" instead of \"-ms-transform\" for IE9, for example)\n\t\t\t\t\t\t\tp = \"-\" + p;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts.removeProperty(p.replace(_capsExp, \"-$1\").toLowerCase());\n\t\t\t\t\t} else { //note: old versions of IE use \"removeAttribute()\" instead of \"removeProperty()\"\n\t\t\t\t\t\ts.removeAttribute(p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_setClassNameRatio = function(v) {\n\t\t\t\tthis.t._gsClassPT = this;\n\t\t\t\tif (v === 1 || v === 0) {\n\t\t\t\t\tthis.t.setAttribute(\"class\", (v === 0) ? this.b : this.e);\n\t\t\t\t\tvar mpt = this.data, //first MiniPropTween\n\t\t\t\t\t\ts = this.t.style;\n\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\tif (!mpt.v) {\n\t\t\t\t\t\t\t_removeProp(s, mpt.p);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ts[mpt.p] = mpt.v;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t}\n\t\t\t\t\tif (v === 1 && this.t._gsClassPT === this) {\n\t\t\t\t\t\tthis.t._gsClassPT = null;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.t.getAttribute(\"class\") !== this.e) {\n\t\t\t\t\tthis.t.setAttribute(\"class\", this.e);\n\t\t\t\t}\n\t\t\t};\n\t\t_registerComplexSpecialProp(\"className\", {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\tvar b = t.getAttribute(\"class\") || \"\", //don't use t.className because it doesn't work consistently on SVG elements; getAttribute(\"class\") and setAttribute(\"class\", value\") is more reliable.\n\t\t\t\tcssText = t.style.cssText,\n\t\t\t\tdifData, bs, cnpt, cnptLookup, mpt;\n\t\t\tpt = cssp._classNamePT = new CSSPropTween(t, p, 0, 0, pt, 2);\n\t\t\tpt.setRatio = _setClassNameRatio;\n\t\t\tpt.pr = -11;\n\t\t\t_hasPriority = true;\n\t\t\tpt.b = b;\n\t\t\tbs = _getAllStyles(t, _cs);\n\t\t\t//if there's a className tween already operating on the target, force it to its end so that the necessary inline styles are removed and the class name is applied before we determine the end state (we don't want inline styles interfering that were there just for class-specific values)\n\t\t\tcnpt = t._gsClassPT;\n\t\t\tif (cnpt) {\n\t\t\t\tcnptLookup = {};\n\t\t\t\tmpt = cnpt.data; //first MiniPropTween which stores the inline styles - we need to force these so that the inline styles don't contaminate things. Otherwise, there's a small chance that a tween could start and the inline values match the destination values and they never get cleaned.\n\t\t\t\twhile (mpt) {\n\t\t\t\t\tcnptLookup[mpt.p] = 1;\n\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t}\n\t\t\t\tcnpt.setRatio(1);\n\t\t\t}\n\t\t\tt._gsClassPT = pt;\n\t\t\tpt.e = (e.charAt(1) !== \"=\") ? e : b.replace(new RegExp(\"(?:\\\\s|^)\" + e.substr(2) + \"(?![\\\\w-])\"), \"\") + ((e.charAt(0) === \"+\") ? \" \" + e.substr(2) : \"\");\n\t\t\tt.setAttribute(\"class\", pt.e);\n\t\t\tdifData = _cssDif(t, bs, _getAllStyles(t), vars, cnptLookup);\n\t\t\tt.setAttribute(\"class\", b);\n\t\t\tpt.data = difData.firstMPT;\n\t\t\tt.style.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity).\n\t\t\tpt = pt.xfirst = cssp.parse(t, difData.difs, pt, plugin); //we record the CSSPropTween as the xfirst so that we can handle overwriting propertly (if \"className\" gets overwritten, we must kill all the properties associated with the className part of the tween, so we can loop through from xfirst to the pt itself)\n\t\t\treturn pt;\n\t\t}});\n\n\n\t\tvar _setClearPropsRatio = function(v) {\n\t\t\tif (v === 1 || v === 0) if (this.data._totalTime === this.data._totalDuration && this.data.data !== \"isFromStart\") { //this.data refers to the tween. Only clear at the END of the tween (remember, from() tweens make the ratio go from 1 to 0, so we can't just check that and if the tween is the zero-duration one that's created internally to render the starting values in a from() tween, ignore that because otherwise, for example, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in).\n\t\t\t\tvar s = this.t.style,\n\t\t\t\t\ttransformParse = _specialProps.transform.parse,\n\t\t\t\t\ta, p, i, clearTransform, transform;\n\t\t\t\tif (this.e === \"all\") {\n\t\t\t\t\ts.cssText = \"\";\n\t\t\t\t\tclearTransform = true;\n\t\t\t\t} else {\n\t\t\t\t\ta = this.e.split(\" \").join(\"\").split(\",\");\n\t\t\t\t\ti = a.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tp = a[i];\n\t\t\t\t\t\tif (_specialProps[p]) {\n\t\t\t\t\t\t\tif (_specialProps[p].parse === transformParse) {\n\t\t\t\t\t\t\t\tclearTransform = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tp = (p === \"transformOrigin\") ? _transformOriginProp : _specialProps[p].p; //ensures that special properties use the proper browser-specific property name, like \"scaleX\" might be \"-webkit-transform\" or \"boxShadow\" might be \"-moz-box-shadow\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_removeProp(s, p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (clearTransform) {\n\t\t\t\t\t_removeProp(s, _transformProp);\n\t\t\t\t\ttransform = this.t._gsTransform;\n\t\t\t\t\tif (transform) {\n\t\t\t\t\t\tif (transform.svg) {\n\t\t\t\t\t\t\tthis.t.removeAttribute(\"data-svg-origin\");\n\t\t\t\t\t\t\tthis.t.removeAttribute(\"transform\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete this.t._gsTransform;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t};\n\t\t_registerComplexSpecialProp(\"clearProps\", {parser:function(t, e, p, cssp, pt) {\n\t\t\tpt = new CSSPropTween(t, p, 0, 0, pt, 2);\n\t\t\tpt.setRatio = _setClearPropsRatio;\n\t\t\tpt.e = e;\n\t\t\tpt.pr = -10;\n\t\t\tpt.data = cssp._tween;\n\t\t\t_hasPriority = true;\n\t\t\treturn pt;\n\t\t}});\n\n\t\tp = \"bezier,throwProps,physicsProps,physics2D\".split(\",\");\n\t\ti = p.length;\n\t\twhile (i--) {\n\t\t\t_registerPluginProp(p[i]);\n\t\t}\n\n\n\n\n\n\n\n\n\t\tp = CSSPlugin.prototype;\n\t\tp._firstPT = p._lastParsedTransform = p._transform = null;\n\n\t\t//gets called when the tween renders for the first time. This kicks everything off, recording start/end values, etc.\n\t\tp._onInitTween = function(target, vars, tween, index) {\n\t\t\tif (!target.nodeType) { //css is only for dom elements\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._target = _target = target;\n\t\t\tthis._tween = tween;\n\t\t\tthis._vars = vars;\n\t\t\t_index = index;\n\t\t\t_autoRound = vars.autoRound;\n\t\t\t_hasPriority = false;\n\t\t\t_suffixMap = vars.suffixMap || CSSPlugin.suffixMap;\n\t\t\t_cs = _getComputedStyle(target, \"\");\n\t\t\t_overwriteProps = this._overwriteProps;\n\t\t\tvar style = target.style,\n\t\t\t\tv, pt, pt2, first, last, next, zIndex, tpt, threeD;\n\t\t\tif (_reqSafariFix) if (style.zIndex === \"\") {\n\t\t\t\tv = _getStyle(target, \"zIndex\", _cs);\n\t\t\t\tif (v === \"auto\" || v === \"\") {\n\t\t\t\t\t//corrects a bug in [non-Android] Safari that prevents it from repainting elements in their new positions if they don't have a zIndex set. We also can't just apply this inside _parseTransform() because anything that's moved in any way (like using \"left\" or \"top\" instead of transforms like \"x\" and \"y\") can be affected, so it is best to ensure that anything that's tweening has a z-index. Setting \"WebkitPerspective\" to a non-zero value worked too except that on iOS Safari things would flicker randomly. Plus zIndex is less memory-intensive.\n\t\t\t\t\tthis._addLazySet(style, \"zIndex\", 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof(vars) === \"string\") {\n\t\t\t\tfirst = style.cssText;\n\t\t\t\tv = _getAllStyles(target, _cs);\n\t\t\t\tstyle.cssText = first + \";\" + vars;\n\t\t\t\tv = _cssDif(target, v, _getAllStyles(target)).difs;\n\t\t\t\tif (!_supportsOpacity && _opacityValExp.test(vars)) {\n\t\t\t\t\tv.opacity = parseFloat( RegExp.$1 );\n\t\t\t\t}\n\t\t\t\tvars = v;\n\t\t\t\tstyle.cssText = first;\n\t\t\t}\n\n\t\t\tif (vars.className) { //className tweens will combine any differences they find in the css with the vars that are passed in, so {className:\"myClass\", scale:0.5, left:20} would work.\n\t\t\t\tthis._firstPT = pt = _specialProps.className.parse(target, vars.className, \"className\", this, null, null, vars);\n\t\t\t} else {\n\t\t\t\tthis._firstPT = pt = this.parse(target, vars, null);\n\t\t\t}\n\n\t\t\tif (this._transformType) {\n\t\t\t\tthreeD = (this._transformType === 3);\n\t\t\t\tif (!_transformProp) {\n\t\t\t\t\tstyle.zoom = 1; //helps correct an IE issue.\n\t\t\t\t} else if (_isSafari) {\n\t\t\t\t\t_reqSafariFix = true;\n\t\t\t\t\t//if zIndex isn't set, iOS Safari doesn't repaint things correctly sometimes (seemingly at random).\n\t\t\t\t\tif (style.zIndex === \"\") {\n\t\t\t\t\t\tzIndex = _getStyle(target, \"zIndex\", _cs);\n\t\t\t\t\t\tif (zIndex === \"auto\" || zIndex === \"\") {\n\t\t\t\t\t\t\tthis._addLazySet(style, \"zIndex\", 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//Setting WebkitBackfaceVisibility corrects 3 bugs:\n\t\t\t\t\t// 1) [non-Android] Safari skips rendering changes to \"top\" and \"left\" that are made on the same frame/render as a transform update.\n\t\t\t\t\t// 2) iOS Safari sometimes neglects to repaint elements in their new positions. Setting \"WebkitPerspective\" to a non-zero value worked too except that on iOS Safari things would flicker randomly.\n\t\t\t\t\t// 3) Safari sometimes displayed odd artifacts when tweening the transform (or WebkitTransform) property, like ghosts of the edges of the element remained. Definitely a browser bug.\n\t\t\t\t\t//Note: we allow the user to override the auto-setting by defining WebkitBackfaceVisibility in the vars of the tween.\n\t\t\t\t\tif (_isSafariLT6) {\n\t\t\t\t\t\tthis._addLazySet(style, \"WebkitBackfaceVisibility\", this._vars.WebkitBackfaceVisibility || (threeD ? \"visible\" : \"hidden\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt2 = pt;\n\t\t\t\twhile (pt2 && pt2._next) {\n\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t}\n\t\t\t\ttpt = new CSSPropTween(target, \"transform\", 0, 0, null, 2);\n\t\t\t\tthis._linkCSSP(tpt, null, pt2);\n\t\t\t\ttpt.setRatio = _transformProp ? _setTransformRatio : _setIETransformRatio;\n\t\t\t\ttpt.data = this._transform || _getTransform(target, _cs, true);\n\t\t\t\ttpt.tween = tween;\n\t\t\t\ttpt.pr = -1; //ensures that the transforms get applied after the components are updated.\n\t\t\t\t_overwriteProps.pop(); //we don't want to force the overwrite of all \"transform\" tweens of the target - we only care about individual transform properties like scaleX, rotation, etc. The CSSPropTween constructor automatically adds the property to _overwriteProps which is why we need to pop() here.\n\t\t\t}\n\n\t\t\tif (_hasPriority) {\n\t\t\t\t//reorders the linked list in order of pr (priority)\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next;\n\t\t\t\t\tpt2 = first;\n\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t\tthis._firstPT = first;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\n\t\tp.parse = function(target, vars, pt, plugin) {\n\t\t\tvar style = target.style,\n\t\t\t\tp, sp, bn, en, bs, es, bsfx, esfx, isStr, rel;\n\t\t\tfor (p in vars) {\n\t\t\t\tes = vars[p]; //ending value string\n\t\t\t\tif (typeof(es) === \"function\") {\n\t\t\t\t\tes = es(_index, _target);\n\t\t\t\t}\n\t\t\t\tsp = _specialProps[p]; //SpecialProp lookup.\n\t\t\t\tif (sp) {\n\t\t\t\t\tpt = sp.parse(target, es, p, this, pt, plugin, vars);\n\n\t\t\t\t} else {\n\t\t\t\t\tbs = _getStyle(target, p, _cs) + \"\";\n\t\t\t\t\tisStr = (typeof(es) === \"string\");\n\t\t\t\t\tif (p === \"color\" || p === \"fill\" || p === \"stroke\" || p.indexOf(\"Color\") !== -1 || (isStr && _rgbhslExp.test(es))) { //Opera uses background: to define color sometimes in addition to backgroundColor:\n\t\t\t\t\t\tif (!isStr) {\n\t\t\t\t\t\t\tes = _parseColor(es);\n\t\t\t\t\t\t\tes = ((es.length > 3) ? \"rgba(\" : \"rgb(\") + es.join(\",\") + \")\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = _parseComplex(style, p, bs, es, true, \"transparent\", pt, 0, plugin);\n\n\t\t\t\t\t} else if (isStr && _complexExp.test(es)) {\n\t\t\t\t\t\tpt = _parseComplex(style, p, bs, es, true, null, pt, 0, plugin);\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbn = parseFloat(bs);\n\t\t\t\t\t\tbsfx = (bn || bn === 0) ? bs.substr((bn + \"\").length) : \"\"; //remember, bs could be non-numeric like \"normal\" for fontWeight, so we should default to a blank suffix in that case.\n\n\t\t\t\t\t\tif (bs === \"\" || bs === \"auto\") {\n\t\t\t\t\t\t\tif (p === \"width\" || p === \"height\") {\n\t\t\t\t\t\t\t\tbn = _getDimension(target, p, _cs);\n\t\t\t\t\t\t\t\tbsfx = \"px\";\n\t\t\t\t\t\t\t} else if (p === \"left\" || p === \"top\") {\n\t\t\t\t\t\t\t\tbn = _calculateOffset(target, p, _cs);\n\t\t\t\t\t\t\t\tbsfx = \"px\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbn = (p !== \"opacity\") ? 0 : 1;\n\t\t\t\t\t\t\t\tbsfx = \"\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trel = (isStr && es.charAt(1) === \"=\");\n\t\t\t\t\t\tif (rel) {\n\t\t\t\t\t\t\ten = parseInt(es.charAt(0) + \"1\", 10);\n\t\t\t\t\t\t\tes = es.substr(2);\n\t\t\t\t\t\t\ten *= parseFloat(es);\n\t\t\t\t\t\t\tesfx = es.replace(_suffixExp, \"\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ten = parseFloat(es);\n\t\t\t\t\t\t\tesfx = isStr ? es.replace(_suffixExp, \"\") : \"\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (esfx === \"\") {\n\t\t\t\t\t\t\tesfx = (p in _suffixMap) ? _suffixMap[p] : bsfx; //populate the end suffix, prioritizing the map, then if none is found, use the beginning suffix.\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tes = (en || en === 0) ? (rel ? en + bn : en) + esfx : vars[p]; //ensures that any += or -= prefixes are taken care of. Record the end value before normalizing the suffix because we always want to end the tween on exactly what they intended even if it doesn't match the beginning value's suffix.\n\n\t\t\t\t\t\t//if the beginning/ending suffixes don't match, normalize them...\n\t\t\t\t\t\tif (bsfx !== esfx) if (esfx !== \"\") if (en || en === 0) if (bn) { //note: if the beginning value (bn) is 0, we don't need to convert units!\n\t\t\t\t\t\t\tbn = _convertToPixels(target, p, bn, bsfx);\n\t\t\t\t\t\t\tif (esfx === \"%\") {\n\t\t\t\t\t\t\t\tbn /= _convertToPixels(target, p, 100, \"%\") / 100;\n\t\t\t\t\t\t\t\tif (vars.strictUnits !== true) { //some browsers report only \"px\" values instead of allowing \"%\" with getComputedStyle(), so we assume that if we're tweening to a %, we should start there too unless strictUnits:true is defined. This approach is particularly useful for responsive designs that use from() tweens.\n\t\t\t\t\t\t\t\t\tbs = bn + \"%\";\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else if (esfx === \"em\" || esfx === \"rem\" || esfx === \"vw\" || esfx === \"vh\") {\n\t\t\t\t\t\t\t\tbn /= _convertToPixels(target, p, 1, esfx);\n\n\t\t\t\t\t\t\t//otherwise convert to pixels.\n\t\t\t\t\t\t\t} else if (esfx !== \"px\") {\n\t\t\t\t\t\t\t\ten = _convertToPixels(target, p, en, esfx);\n\t\t\t\t\t\t\t\tesfx = \"px\"; //we don't use bsfx after this, so we don't need to set it to px too.\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (rel) if (en || en === 0) {\n\t\t\t\t\t\t\t\tes = (en + bn) + esfx; //the changes we made affect relative calculations, so adjust the end value here.\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (rel) {\n\t\t\t\t\t\t\ten += bn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ((bn || bn === 0) && (en || en === 0)) { //faster than isNaN(). Also, previously we required en !== bn but that doesn't really gain much performance and it prevents _parseToProxy() from working properly if beginning and ending values match but need to get tweened by an external plugin anyway. For example, a bezier tween where the target starts at left:0 and has these points: [{left:50},{left:0}] wouldn't work properly because when parsing the last point, it'd match the first (current) one and a non-tweening CSSPropTween would be recorded when we actually need a normal tween (type:0) so that things get updated during the tween properly.\n\t\t\t\t\t\t\tpt = new CSSPropTween(style, p, bn, en - bn, pt, 0, p, (_autoRound !== false && (esfx === \"px\" || p === \"zIndex\")), 0, bs, es);\n\t\t\t\t\t\t\tpt.xs0 = esfx;\n\t\t\t\t\t\t\t//DEBUG: _log(\"tween \"+p+\" from \"+pt.b+\" (\"+bn+esfx+\") to \"+pt.e+\" with suffix: \"+pt.xs0);\n\t\t\t\t\t\t} else if (style[p] === undefined || !es && (es + \"\" === \"NaN\" || es == null)) {\n\t\t\t\t\t\t\t_log(\"invalid \" + p + \" tween value: \" + vars[p]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt = new CSSPropTween(style, p, en || bn || 0, 0, pt, -1, p, false, 0, bs, es);\n\t\t\t\t\t\t\tpt.xs0 = (es === \"none\" && (p === \"display\" || p.indexOf(\"Style\") !== -1)) ? bs : es; //intermediate value should typically be set immediately (end value) except for \"display\" or things like borderTopStyle, borderBottomStyle, etc. which should use the beginning value during the tween.\n\t\t\t\t\t\t\t//DEBUG: _log(\"non-tweening value \"+p+\": \"+pt.xs0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (plugin) if (pt && !pt.plugin) {\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn pt;\n\t\t};\n\n\n\t\t//gets called every time the tween updates, passing the new ratio (typically a value between 0 and 1, but not always (for example, if an Elastic.easeOut is used, the value can jump above 1 mid-tween). It will always start and 0 and end at 1.\n\t\tp.setRatio = function(v) {\n\t\t\tvar pt = this._firstPT,\n\t\t\t\tmin = 0.000001,\n\t\t\t\tval, str, i;\n\t\t\t//at the end of the tween, we set the values to exactly what we received in order to make sure non-tweening values (like \"position\" or \"float\" or whatever) are set and so that if the beginning/ending suffixes (units) didn't match and we normalized to px, the value that the user passed in is used here. We check to see if the tween is at its beginning in case it's a from() tween in which case the ratio will actually go from 1 to 0 over the course of the tween (backwards).\n\t\t\tif (v === 1 && (this._tween._time === this._tween._duration || this._tween._time === 0)) {\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.type !== 2) {\n\t\t\t\t\t\tif (pt.r && pt.type !== -1) {\n\t\t\t\t\t\t\tval = Math.round(pt.s + pt.c);\n\t\t\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = val + pt.xs0;\n\t\t\t\t\t\t\t} else if (pt.type === 1) { //complex value (one that typically has multiple numbers inside a string, like \"rect(5px,10px,20px,25px)\"\n\t\t\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\t\t\tstr = pt.xs0 + val + pt.xs1;\n\t\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt.t[pt.p] = str;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.e;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\n\t\t\t} else if (v || !(this._tween._time === this._tween._duration || this._tween._time === 0) || this._tween._rawPrevTime === -0.000001) {\n\t\t\t\twhile (pt) {\n\t\t\t\t\tval = pt.c * v + pt.s;\n\t\t\t\t\tif (pt.r) {\n\t\t\t\t\t\tval = Math.round(val);\n\t\t\t\t\t} else if (val < min) if (val > -min) {\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\tpt.t[pt.p] = val + pt.xs0;\n\t\t\t\t\t} else if (pt.type === 1) { //complex value (one that typically has multiple numbers inside a string, like \"rect(5px,10px,20px,25px)\"\n\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\tif (i === 2) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2;\n\t\t\t\t\t\t} else if (i === 3) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3;\n\t\t\t\t\t\t} else if (i === 4) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3 + pt.xn3 + pt.xs4;\n\t\t\t\t\t\t} else if (i === 5) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3 + pt.xn3 + pt.xs4 + pt.xn4 + pt.xs5;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstr = pt.xs0 + val + pt.xs1;\n\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt.t[pt.p] = str;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (pt.type === -1) { //non-tweening value\n\t\t\t\t\t\tpt.t[pt.p] = pt.xs0;\n\n\t\t\t\t\t} else if (pt.setRatio) { //custom setRatio() for things like SpecialProps, external plugins, etc.\n\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\n\t\t\t//if the tween is reversed all the way back to the beginning, we need to restore the original values which may have different units (like % instead of px or em or whatever).\n\t\t\t} else {\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.type !== 2) {\n\t\t\t\t\t\tpt.t[pt.p] = pt.b;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * @private\n\t\t * Forces rendering of the target's transforms (rotation, scale, etc.) whenever the CSSPlugin's setRatio() is called.\n\t\t * Basically, this tells the CSSPlugin to create a CSSPropTween (type 2) after instantiation that runs last in the linked\n\t\t * list and calls the appropriate (3D or 2D) rendering function. We separate this into its own method so that we can call\n\t\t * it from other plugins like BezierPlugin if, for example, it needs to apply an autoRotation and this CSSPlugin\n\t\t * doesn't have any transform-related properties of its own. You can call this method as many times as you\n\t\t * want and it won't create duplicate CSSPropTweens.\n\t\t *\n\t\t * @param {boolean} threeD if true, it should apply 3D tweens (otherwise, just 2D ones are fine and typically faster)\n\t\t */\n\t\tp._enableTransforms = function(threeD) {\n\t\t\tthis._transform = this._transform || _getTransform(this._target, _cs, true); //ensures that the element has a _gsTransform property with the appropriate values.\n\t\t\tthis._transformType = (!(this._transform.svg && _useSVGTransformAttr) && (threeD || this._transformType === 3)) ? 3 : 2;\n\t\t};\n\n\t\tvar lazySet = function(v) {\n\t\t\tthis.t[this.p] = this.e;\n\t\t\tthis.data._linkCSSP(this, this._next, null, true); //we purposefully keep this._next even though it'd make sense to null it, but this is a performance optimization, as this happens during the while (pt) {} loop in setRatio() at the bottom of which it sets pt = pt._next, so if we null it, the linked list will be broken in that loop.\n\t\t};\n\t\t/** @private Gives us a way to set a value on the first render (and only the first render). **/\n\t\tp._addLazySet = function(t, p, v) {\n\t\t\tvar pt = this._firstPT = new CSSPropTween(t, p, 0, 0, this._firstPT, 2);\n\t\t\tpt.e = v;\n\t\t\tpt.setRatio = lazySet;\n\t\t\tpt.data = this;\n\t\t};\n\n\t\t/** @private **/\n\t\tp._linkCSSP = function(pt, next, prev, remove) {\n\t\t\tif (pt) {\n\t\t\t\tif (next) {\n\t\t\t\t\tnext._prev = pt;\n\t\t\t\t}\n\t\t\t\tif (pt._next) {\n\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t}\n\t\t\t\tif (pt._prev) {\n\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\tremove = true; //just to prevent resetting this._firstPT 5 lines down in case pt._next is null. (optimized for speed)\n\t\t\t\t}\n\t\t\t\tif (prev) {\n\t\t\t\t\tprev._next = pt;\n\t\t\t\t} else if (!remove && this._firstPT === null) {\n\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t}\n\t\t\t\tpt._next = next;\n\t\t\t\tpt._prev = prev;\n\t\t\t}\n\t\t\treturn pt;\n\t\t};\n\n\t\tp._mod = function(lookup) {\n\t\t\tvar pt = this._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (typeof(lookup[pt.p]) === \"function\" && lookup[pt.p] === Math.round) { //only gets called by RoundPropsPlugin (ModifyPlugin manages all the rendering internally for CSSPlugin properties that need modification). Remember, we handle rounding a bit differently in this plugin for performance reasons, leveraging \"r\" as an indicator that the value should be rounded internally..\n\t\t\t\t\tpt.r = 1;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t};\n\n\t\t//we need to make sure that if alpha or autoAlpha is killed, opacity is too. And autoAlpha affects the \"visibility\" property.\n\t\tp._kill = function(lookup) {\n\t\t\tvar copy = lookup,\n\t\t\t\tpt, p, xfirst;\n\t\t\tif (lookup.autoAlpha || lookup.alpha) {\n\t\t\t\tcopy = {};\n\t\t\t\tfor (p in lookup) { //copy the lookup so that we're not changing the original which may be passed elsewhere.\n\t\t\t\t\tcopy[p] = lookup[p];\n\t\t\t\t}\n\t\t\t\tcopy.opacity = 1;\n\t\t\t\tif (copy.autoAlpha) {\n\t\t\t\t\tcopy.visibility = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (lookup.className && (pt = this._classNamePT)) { //for className tweens, we need to kill any associated CSSPropTweens too; a linked list starts at the className's \"xfirst\".\n\t\t\t\txfirst = pt.xfirst;\n\t\t\t\tif (xfirst && xfirst._prev) {\n\t\t\t\t\tthis._linkCSSP(xfirst._prev, pt._next, xfirst._prev._prev); //break off the prev\n\t\t\t\t} else if (xfirst === this._firstPT) {\n\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t}\n\t\t\t\tif (pt._next) {\n\t\t\t\t\tthis._linkCSSP(pt._next, pt._next._next, xfirst._prev);\n\t\t\t\t}\n\t\t\t\tthis._classNamePT = null;\n\t\t\t}\n\t\t\tpt = this._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.plugin && pt.plugin !== p && pt.plugin._kill) { //for plugins that are registered with CSSPlugin, we should notify them of the kill.\n\t\t\t\t\tpt.plugin._kill(lookup);\n\t\t\t\t\tp = pt.plugin;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn TweenPlugin.prototype._kill.call(this, copy);\n\t\t};\n\n\n\n\t\t//used by cascadeTo() for gathering all the style properties of each child element into an array for comparison.\n\t\tvar _getChildStyles = function(e, props, targets) {\n\t\t\t\tvar children, i, child, type;\n\t\t\t\tif (e.slice) {\n\t\t\t\t\ti = e.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t_getChildStyles(e[i], props, targets);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tchildren = e.childNodes;\n\t\t\t\ti = children.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tchild = children[i];\n\t\t\t\t\ttype = child.type;\n\t\t\t\t\tif (child.style) {\n\t\t\t\t\t\tprops.push(_getAllStyles(child));\n\t\t\t\t\t\tif (targets) {\n\t\t\t\t\t\t\ttargets.push(child);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ((type === 1 || type === 9 || type === 11) && child.childNodes.length) {\n\t\t\t\t\t\t_getChildStyles(child, props, targets);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t/**\n\t\t * Typically only useful for className tweens that may affect child elements, this method creates a TweenLite\n\t\t * and then compares the style properties of all the target's child elements at the tween's start and end, and\n\t\t * if any are different, it also creates tweens for those and returns an array containing ALL of the resulting\n\t\t * tweens (so that you can easily add() them to a TimelineLite, for example). The reason this functionality is\n\t\t * wrapped into a separate static method of CSSPlugin instead of being integrated into all regular className tweens\n\t\t * is because it creates entirely new tweens that may have completely different targets than the original tween,\n\t\t * so if they were all lumped into the original tween instance, it would be inconsistent with the rest of the API\n\t\t * and it would create other problems. For example:\n\t\t *  - If I create a tween of elementA, that tween instance may suddenly change its target to include 50 other elements (unintuitive if I specifically defined the target I wanted)\n\t\t *  - We can't just create new independent tweens because otherwise, what happens if the original/parent tween is reversed or pause or dropped into a TimelineLite for tight control? You'd expect that tween's behavior to affect all the others.\n\t\t *  - Analyzing every style property of every child before and after the tween is an expensive operation when there are many children, so this behavior shouldn't be imposed on all className tweens by default, especially since it's probably rare that this extra functionality is needed.\n\t\t *\n\t\t * @param {Object} target object to be tweened\n\t\t * @param {number} Duration in seconds (or frames for frames-based tweens)\n\t\t * @param {Object} Object containing the end values, like {className:\"newClass\", ease:Linear.easeNone}\n\t\t * @return {Array} An array of TweenLite instances\n\t\t */\n\t\tCSSPlugin.cascadeTo = function(target, duration, vars) {\n\t\t\tvar tween = TweenLite.to(target, duration, vars),\n\t\t\t\tresults = [tween],\n\t\t\t\tb = [],\n\t\t\t\te = [],\n\t\t\t\ttargets = [],\n\t\t\t\t_reservedProps = TweenLite._internals.reservedProps,\n\t\t\t\ti, difs, p, from;\n\t\t\ttarget = tween._targets || tween.target;\n\t\t\t_getChildStyles(target, b, targets);\n\t\t\ttween.render(duration, true, true);\n\t\t\t_getChildStyles(target, e);\n\t\t\ttween.render(0, true, true);\n\t\t\ttween._enabled(true);\n\t\t\ti = targets.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tdifs = _cssDif(targets[i], b[i], e[i]);\n\t\t\t\tif (difs.firstMPT) {\n\t\t\t\t\tdifs = difs.difs;\n\t\t\t\t\tfor (p in vars) {\n\t\t\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\t\t\tdifs[p] = vars[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfrom = {};\n\t\t\t\t\tfor (p in difs) {\n\t\t\t\t\t\tfrom[p] = b[i][p];\n\t\t\t\t\t}\n\t\t\t\t\tresults.push(TweenLite.fromTo(targets[i], duration, from, difs));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t\tTweenPlugin.activate([CSSPlugin]);\n\t\treturn CSSPlugin;\n\n\t}, true);\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n/*\n * ----------------------------------------------------------------\n * RoundPropsPlugin\n * ----------------------------------------------------------------\n */\n\t(function() {\n\n\t\tvar RoundPropsPlugin = _gsScope._gsDefine.plugin({\n\t\t\t\tpropName: \"roundProps\",\n\t\t\t\tversion: \"1.6.0\",\n\t\t\t\tpriority: -1,\n\t\t\t\tAPI: 2,\n\n\t\t\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\tinit: function(target, value, tween) {\n\t\t\t\t\tthis._tween = tween;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t}),\n\t\t\t_roundLinkedList = function(node) {\n\t\t\t\twhile (node) {\n\t\t\t\t\tif (!node.f && !node.blob) {\n\t\t\t\t\t\tnode.m = Math.round;\n\t\t\t\t\t}\n\t\t\t\t\tnode = node._next;\n\t\t\t\t}\n\t\t\t},\n\t\t\tp = RoundPropsPlugin.prototype;\n\n\t\tp._onInitAllProps = function() {\n\t\t\tvar tween = this._tween,\n\t\t\t\trp = (tween.vars.roundProps.join) ? tween.vars.roundProps : tween.vars.roundProps.split(\",\"),\n\t\t\t\ti = rp.length,\n\t\t\t\tlookup = {},\n\t\t\t\trpt = tween._propLookup.roundProps,\n\t\t\t\tprop, pt, next;\n\t\t\twhile (--i > -1) {\n\t\t\t\tlookup[rp[i]] = Math.round;\n\t\t\t}\n\t\t\ti = rp.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tprop = rp[i];\n\t\t\t\tpt = tween._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next; //record here, because it may get removed\n\t\t\t\t\tif (pt.pg) {\n\t\t\t\t\t\tpt.t._mod(lookup);\n\t\t\t\t\t} else if (pt.n === prop) {\n\t\t\t\t\t\tif (pt.f === 2 && pt.t) { //a blob (text containing multiple numeric values)\n\t\t\t\t\t\t\t_roundLinkedList(pt.t._firstPT);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._add(pt.t, prop, pt.s, pt.c);\n\t\t\t\t\t\t\t//remove from linked list\n\t\t\t\t\t\t\tif (next) {\n\t\t\t\t\t\t\t\tnext._prev = pt._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\tpt._prev._next = next;\n\t\t\t\t\t\t\t} else if (tween._firstPT === pt) {\n\t\t\t\t\t\t\t\ttween._firstPT = next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\ttween._propLookup[prop] = rpt;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp._add = function(target, p, s, c) {\n\t\t\tthis._addTween(target, p, s, s + c, p, Math.round);\n\t\t\tthis._overwriteProps.push(p);\n\t\t};\n\n\t}());\n\n\n\n\n\n\n\n\n\n\n/*\n * ----------------------------------------------------------------\n * AttrPlugin\n * ----------------------------------------------------------------\n */\n\n\t(function() {\n\n\t\t_gsScope._gsDefine.plugin({\n\t\t\tpropName: \"attr\",\n\t\t\tAPI: 2,\n\t\t\tversion: \"0.6.0\",\n\n\t\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\tinit: function(target, value, tween, index) {\n\t\t\t\tvar p, end;\n\t\t\t\tif (typeof(target.setAttribute) !== \"function\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tfor (p in value) {\n\t\t\t\t\tend = value[p];\n\t\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\t\tend = end(index, target);\n\t\t\t\t\t}\n\t\t\t\t\tthis._addTween(target, \"setAttribute\", target.getAttribute(p) + \"\", end + \"\", p, false, p);\n\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t});\n\n\t}());\n\n\n\n\n\n\n\n\n\n\n/*\n * ----------------------------------------------------------------\n * DirectionalRotationPlugin\n * ----------------------------------------------------------------\n */\n\t_gsScope._gsDefine.plugin({\n\t\tpropName: \"directionalRotation\",\n\t\tversion: \"0.3.0\",\n\t\tAPI: 2,\n\n\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\tinit: function(target, value, tween, index) {\n\t\t\tif (typeof(value) !== \"object\") {\n\t\t\t\tvalue = {rotation:value};\n\t\t\t}\n\t\t\tthis.finals = {};\n\t\t\tvar cap = (value.useRadians === true) ? Math.PI * 2 : 360,\n\t\t\t\tmin = 0.000001,\n\t\t\t\tp, v, start, end, dif, split;\n\t\t\tfor (p in value) {\n\t\t\t\tif (p !== \"useRadians\") {\n\t\t\t\t\tend = value[p];\n\t\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\t\tend = end(index, target);\n\t\t\t\t\t}\n\t\t\t\t\tsplit = (end + \"\").split(\"_\");\n\t\t\t\t\tv = split[0];\n\t\t\t\t\tstart = parseFloat( (typeof(target[p]) !== \"function\") ? target[p] : target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ]() );\n\t\t\t\t\tend = this.finals[p] = (typeof(v) === \"string\" && v.charAt(1) === \"=\") ? start + parseInt(v.charAt(0) + \"1\", 10) * Number(v.substr(2)) : Number(v) || 0;\n\t\t\t\t\tdif = end - start;\n\t\t\t\t\tif (split.length) {\n\t\t\t\t\t\tv = split.join(\"_\");\n\t\t\t\t\t\tif (v.indexOf(\"short\") !== -1) {\n\t\t\t\t\t\t\tdif = dif % cap;\n\t\t\t\t\t\t\tif (dif !== dif % (cap / 2)) {\n\t\t\t\t\t\t\t\tdif = (dif < 0) ? dif + cap : dif - cap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v.indexOf(\"_cw\") !== -1 && dif < 0) {\n\t\t\t\t\t\t\tdif = ((dif + cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t} else if (v.indexOf(\"ccw\") !== -1 && dif > 0) {\n\t\t\t\t\t\t\tdif = ((dif - cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (dif > min || dif < -min) {\n\t\t\t\t\t\tthis._addTween(target, p, start, start + dif, p);\n\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t//called each time the values should be updated, and the ratio gets passed as the only parameter (typically it's a value between 0 and 1, but it can exceed those when using an ease like Elastic.easeOut or Back.easeOut, etc.)\n\t\tset: function(ratio) {\n\t\t\tvar pt;\n\t\t\tif (ratio !== 1) {\n\t\t\t\tthis._super.setRatio.call(this, ratio);\n\t\t\t} else {\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\tpt.t[pt.p](this.finals[pt.p]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p] = this.finals[pt.p];\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t})._autoCSS = true;\n\n\n\n\n\n\n\n\t\n\t\n\t\n\t\n/*\n * ----------------------------------------------------------------\n * EasePack\n * ----------------------------------------------------------------\n */\n\t_gsScope._gsDefine(\"easing.Back\", [\"easing.Ease\"], function(Ease) {\n\t\t\n\t\tvar w = (_gsScope.GreenSockGlobals || _gsScope),\n\t\t\tgs = w.com.greensock,\n\t\t\t_2PI = Math.PI * 2,\n\t\t\t_HALF_PI = Math.PI / 2,\n\t\t\t_class = gs._class,\n\t\t\t_create = function(n, f) {\n\t\t\t\tvar C = _class(\"easing.\" + n, function(){}, true),\n\t\t\t\t\tp = C.prototype = new Ease();\n\t\t\t\tp.constructor = C;\n\t\t\t\tp.getRatio = f;\n\t\t\t\treturn C;\n\t\t\t},\n\t\t\t_easeReg = Ease.register || function(){}, //put an empty function in place just as a safety measure in case someone loads an OLD version of TweenLite.js where Ease.register doesn't exist.\n\t\t\t_wrap = function(name, EaseOut, EaseIn, EaseInOut, aliases) {\n\t\t\t\tvar C = _class(\"easing.\"+name, {\n\t\t\t\t\teaseOut:new EaseOut(),\n\t\t\t\t\teaseIn:new EaseIn(),\n\t\t\t\t\teaseInOut:new EaseInOut()\n\t\t\t\t}, true);\n\t\t\t\t_easeReg(C, name);\n\t\t\t\treturn C;\n\t\t\t},\n\t\t\tEasePoint = function(time, value, next) {\n\t\t\t\tthis.t = time;\n\t\t\t\tthis.v = value;\n\t\t\t\tif (next) {\n\t\t\t\t\tthis.next = next;\n\t\t\t\t\tnext.prev = this;\n\t\t\t\t\tthis.c = next.v - value;\n\t\t\t\t\tthis.gap = next.t - time;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t//Back\n\t\t\t_createBack = function(n, f) {\n\t\t\t\tvar C = _class(\"easing.\" + n, function(overshoot) {\n\t\t\t\t\t\tthis._p1 = (overshoot || overshoot === 0) ? overshoot : 1.70158;\n\t\t\t\t\t\tthis._p2 = this._p1 * 1.525;\n\t\t\t\t\t}, true),\n\t\t\t\t\tp = C.prototype = new Ease();\n\t\t\t\tp.constructor = C;\n\t\t\t\tp.getRatio = f;\n\t\t\t\tp.config = function(overshoot) {\n\t\t\t\t\treturn new C(overshoot);\n\t\t\t\t};\n\t\t\t\treturn C;\n\t\t\t},\n\n\t\t\tBack = _wrap(\"Back\",\n\t\t\t\t_createBack(\"BackOut\", function(p) {\n\t\t\t\t\treturn ((p = p - 1) * p * ((this._p1 + 1) * p + this._p1) + 1);\n\t\t\t\t}),\n\t\t\t\t_createBack(\"BackIn\", function(p) {\n\t\t\t\t\treturn p * p * ((this._p1 + 1) * p - this._p1);\n\t\t\t\t}),\n\t\t\t\t_createBack(\"BackInOut\", function(p) {\n\t\t\t\t\treturn ((p *= 2) < 1) ? 0.5 * p * p * ((this._p2 + 1) * p - this._p2) : 0.5 * ((p -= 2) * p * ((this._p2 + 1) * p + this._p2) + 2);\n\t\t\t\t})\n\t\t\t),\n\n\n\t\t\t//SlowMo\n\t\t\tSlowMo = _class(\"easing.SlowMo\", function(linearRatio, power, yoyoMode) {\n\t\t\t\tpower = (power || power === 0) ? power : 0.7;\n\t\t\t\tif (linearRatio == null) {\n\t\t\t\t\tlinearRatio = 0.7;\n\t\t\t\t} else if (linearRatio > 1) {\n\t\t\t\t\tlinearRatio = 1;\n\t\t\t\t}\n\t\t\t\tthis._p = (linearRatio !== 1) ? power : 0;\n\t\t\t\tthis._p1 = (1 - linearRatio) / 2;\n\t\t\t\tthis._p2 = linearRatio;\n\t\t\t\tthis._p3 = this._p1 + this._p2;\n\t\t\t\tthis._calcEnd = (yoyoMode === true);\n\t\t\t}, true),\n\t\t\tp = SlowMo.prototype = new Ease(),\n\t\t\tSteppedEase, RoughEase, _createElastic;\n\n\t\tp.constructor = SlowMo;\n\t\tp.getRatio = function(p) {\n\t\t\tvar r = p + (0.5 - p) * this._p;\n\t\t\tif (p < this._p1) {\n\t\t\t\treturn this._calcEnd ? 1 - ((p = 1 - (p / this._p1)) * p) : r - ((p = 1 - (p / this._p1)) * p * p * p * r);\n\t\t\t} else if (p > this._p3) {\n\t\t\t\treturn this._calcEnd ? 1 - (p = (p - this._p3) / this._p1) * p : r + ((p - r) * (p = (p - this._p3) / this._p1) * p * p * p);\n\t\t\t}\n\t\t\treturn this._calcEnd ? 1 : r;\n\t\t};\n\t\tSlowMo.ease = new SlowMo(0.7, 0.7);\n\n\t\tp.config = SlowMo.config = function(linearRatio, power, yoyoMode) {\n\t\t\treturn new SlowMo(linearRatio, power, yoyoMode);\n\t\t};\n\n\n\t\t//SteppedEase\n\t\tSteppedEase = _class(\"easing.SteppedEase\", function(steps) {\n\t\t\t\tsteps = steps || 1;\n\t\t\t\tthis._p1 = 1 / steps;\n\t\t\t\tthis._p2 = steps + 1;\n\t\t\t}, true);\n\t\tp = SteppedEase.prototype = new Ease();\n\t\tp.constructor = SteppedEase;\n\t\tp.getRatio = function(p) {\n\t\t\tif (p < 0) {\n\t\t\t\tp = 0;\n\t\t\t} else if (p >= 1) {\n\t\t\t\tp = 0.999999999;\n\t\t\t}\n\t\t\treturn ((this._p2 * p) >> 0) * this._p1;\n\t\t};\n\t\tp.config = SteppedEase.config = function(steps) {\n\t\t\treturn new SteppedEase(steps);\n\t\t};\n\n\n\t\t//RoughEase\n\t\tRoughEase = _class(\"easing.RoughEase\", function(vars) {\n\t\t\tvars = vars || {};\n\t\t\tvar taper = vars.taper || \"none\",\n\t\t\t\ta = [],\n\t\t\t\tcnt = 0,\n\t\t\t\tpoints = (vars.points || 20) | 0,\n\t\t\t\ti = points,\n\t\t\t\trandomize = (vars.randomize !== false),\n\t\t\t\tclamp = (vars.clamp === true),\n\t\t\t\ttemplate = (vars.template instanceof Ease) ? vars.template : null,\n\t\t\t\tstrength = (typeof(vars.strength) === \"number\") ? vars.strength * 0.4 : 0.4,\n\t\t\t\tx, y, bump, invX, obj, pnt;\n\t\t\twhile (--i > -1) {\n\t\t\t\tx = randomize ? Math.random() : (1 / points) * i;\n\t\t\t\ty = template ? template.getRatio(x) : x;\n\t\t\t\tif (taper === \"none\") {\n\t\t\t\t\tbump = strength;\n\t\t\t\t} else if (taper === \"out\") {\n\t\t\t\t\tinvX = 1 - x;\n\t\t\t\t\tbump = invX * invX * strength;\n\t\t\t\t} else if (taper === \"in\") {\n\t\t\t\t\tbump = x * x * strength;\n\t\t\t\t} else if (x < 0.5) {  //\"both\" (start)\n\t\t\t\t\tinvX = x * 2;\n\t\t\t\t\tbump = invX * invX * 0.5 * strength;\n\t\t\t\t} else {\t\t\t\t//\"both\" (end)\n\t\t\t\t\tinvX = (1 - x) * 2;\n\t\t\t\t\tbump = invX * invX * 0.5 * strength;\n\t\t\t\t}\n\t\t\t\tif (randomize) {\n\t\t\t\t\ty += (Math.random() * bump) - (bump * 0.5);\n\t\t\t\t} else if (i % 2) {\n\t\t\t\t\ty += bump * 0.5;\n\t\t\t\t} else {\n\t\t\t\t\ty -= bump * 0.5;\n\t\t\t\t}\n\t\t\t\tif (clamp) {\n\t\t\t\t\tif (y > 1) {\n\t\t\t\t\t\ty = 1;\n\t\t\t\t\t} else if (y < 0) {\n\t\t\t\t\t\ty = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ta[cnt++] = {x:x, y:y};\n\t\t\t}\n\t\t\ta.sort(function(a, b) {\n\t\t\t\treturn a.x - b.x;\n\t\t\t});\n\n\t\t\tpnt = new EasePoint(1, 1, null);\n\t\t\ti = points;\n\t\t\twhile (--i > -1) {\n\t\t\t\tobj = a[i];\n\t\t\t\tpnt = new EasePoint(obj.x, obj.y, pnt);\n\t\t\t}\n\n\t\t\tthis._prev = new EasePoint(0, 0, (pnt.t !== 0) ? pnt : pnt.next);\n\t\t}, true);\n\t\tp = RoughEase.prototype = new Ease();\n\t\tp.constructor = RoughEase;\n\t\tp.getRatio = function(p) {\n\t\t\tvar pnt = this._prev;\n\t\t\tif (p > pnt.t) {\n\t\t\t\twhile (pnt.next && p >= pnt.t) {\n\t\t\t\t\tpnt = pnt.next;\n\t\t\t\t}\n\t\t\t\tpnt = pnt.prev;\n\t\t\t} else {\n\t\t\t\twhile (pnt.prev && p <= pnt.t) {\n\t\t\t\t\tpnt = pnt.prev;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._prev = pnt;\n\t\t\treturn (pnt.v + ((p - pnt.t) / pnt.gap) * pnt.c);\n\t\t};\n\t\tp.config = function(vars) {\n\t\t\treturn new RoughEase(vars);\n\t\t};\n\t\tRoughEase.ease = new RoughEase();\n\n\n\t\t//Bounce\n\t\t_wrap(\"Bounce\",\n\t\t\t_create(\"BounceOut\", function(p) {\n\t\t\t\tif (p < 1 / 2.75) {\n\t\t\t\t\treturn 7.5625 * p * p;\n\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\treturn 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\treturn 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n\t\t\t\t}\n\t\t\t\treturn 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n\t\t\t}),\n\t\t\t_create(\"BounceIn\", function(p) {\n\t\t\t\tif ((p = 1 - p) < 1 / 2.75) {\n\t\t\t\t\treturn 1 - (7.5625 * p * p);\n\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\treturn 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\n\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\treturn 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\n\t\t\t\t}\n\t\t\t\treturn 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\n\t\t\t}),\n\t\t\t_create(\"BounceInOut\", function(p) {\n\t\t\t\tvar invert = (p < 0.5);\n\t\t\t\tif (invert) {\n\t\t\t\t\tp = 1 - (p * 2);\n\t\t\t\t} else {\n\t\t\t\t\tp = (p * 2) - 1;\n\t\t\t\t}\n\t\t\t\tif (p < 1 / 2.75) {\n\t\t\t\t\tp = 7.5625 * p * p;\n\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\tp = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\tp = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n\t\t\t\t} else {\n\t\t\t\t\tp = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n\t\t\t\t}\n\t\t\t\treturn invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\n\t\t\t})\n\t\t);\n\n\n\t\t//CIRC\n\t\t_wrap(\"Circ\",\n\t\t\t_create(\"CircOut\", function(p) {\n\t\t\t\treturn Math.sqrt(1 - (p = p - 1) * p);\n\t\t\t}),\n\t\t\t_create(\"CircIn\", function(p) {\n\t\t\t\treturn -(Math.sqrt(1 - (p * p)) - 1);\n\t\t\t}),\n\t\t\t_create(\"CircInOut\", function(p) {\n\t\t\t\treturn ((p*=2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\n\t\t\t})\n\t\t);\n\n\n\t\t//Elastic\n\t\t_createElastic = function(n, f, def) {\n\t\t\tvar C = _class(\"easing.\" + n, function(amplitude, period) {\n\t\t\t\t\tthis._p1 = (amplitude >= 1) ? amplitude : 1; //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1.\n\t\t\t\t\tthis._p2 = (period || def) / (amplitude < 1 ? amplitude : 1);\n\t\t\t\t\tthis._p3 = this._p2 / _2PI * (Math.asin(1 / this._p1) || 0);\n\t\t\t\t\tthis._p2 = _2PI / this._p2; //precalculate to optimize\n\t\t\t\t}, true),\n\t\t\t\tp = C.prototype = new Ease();\n\t\t\tp.constructor = C;\n\t\t\tp.getRatio = f;\n\t\t\tp.config = function(amplitude, period) {\n\t\t\t\treturn new C(amplitude, period);\n\t\t\t};\n\t\t\treturn C;\n\t\t};\n\t\t_wrap(\"Elastic\",\n\t\t\t_createElastic(\"ElasticOut\", function(p) {\n\t\t\t\treturn this._p1 * Math.pow(2, -10 * p) * Math.sin( (p - this._p3) * this._p2 ) + 1;\n\t\t\t}, 0.3),\n\t\t\t_createElastic(\"ElasticIn\", function(p) {\n\t\t\t\treturn -(this._p1 * Math.pow(2, 10 * (p -= 1)) * Math.sin( (p - this._p3) * this._p2 ));\n\t\t\t}, 0.3),\n\t\t\t_createElastic(\"ElasticInOut\", function(p) {\n\t\t\t\treturn ((p *= 2) < 1) ? -0.5 * (this._p1 * Math.pow(2, 10 * (p -= 1)) * Math.sin( (p - this._p3) * this._p2)) : this._p1 * Math.pow(2, -10 *(p -= 1)) * Math.sin( (p - this._p3) * this._p2 ) * 0.5 + 1;\n\t\t\t}, 0.45)\n\t\t);\n\n\n\t\t//Expo\n\t\t_wrap(\"Expo\",\n\t\t\t_create(\"ExpoOut\", function(p) {\n\t\t\t\treturn 1 - Math.pow(2, -10 * p);\n\t\t\t}),\n\t\t\t_create(\"ExpoIn\", function(p) {\n\t\t\t\treturn Math.pow(2, 10 * (p - 1)) - 0.001;\n\t\t\t}),\n\t\t\t_create(\"ExpoInOut\", function(p) {\n\t\t\t\treturn ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\t\t\t})\n\t\t);\n\n\n\t\t//Sine\n\t\t_wrap(\"Sine\",\n\t\t\t_create(\"SineOut\", function(p) {\n\t\t\t\treturn Math.sin(p * _HALF_PI);\n\t\t\t}),\n\t\t\t_create(\"SineIn\", function(p) {\n\t\t\t\treturn -Math.cos(p * _HALF_PI) + 1;\n\t\t\t}),\n\t\t\t_create(\"SineInOut\", function(p) {\n\t\t\t\treturn -0.5 * (Math.cos(Math.PI * p) - 1);\n\t\t\t})\n\t\t);\n\n\t\t_class(\"easing.EaseLookup\", {\n\t\t\t\tfind:function(s) {\n\t\t\t\t\treturn Ease.map[s];\n\t\t\t\t}\n\t\t\t}, true);\n\n\t\t//register the non-standard eases\n\t\t_easeReg(w.SlowMo, \"SlowMo\", \"ease,\");\n\t\t_easeReg(RoughEase, \"RoughEase\", \"ease,\");\n\t\t_easeReg(SteppedEase, \"SteppedEase\", \"ease,\");\n\n\t\treturn Back;\n\t\t\n\t}, true);\n\n\n});\n\nif (_gsScope._gsDefine) { _gsScope._gsQueue.pop()(); } //necessary in case TweenLite was already loaded separately.\n\n\n\n\n\n\n\n\n\n\n\n/*\n * ----------------------------------------------------------------\n * Base classes like TweenLite, SimpleTimeline, Ease, Ticker, etc.\n * ----------------------------------------------------------------\n */\n(function(window, moduleName) {\n\n\t\t\"use strict\";\n\t\tvar _exports = {},\n\t\t\t_globals = window.GreenSockGlobals = window.GreenSockGlobals || window;\n\t\tif (_globals.TweenLite) {\n\t\t\treturn; //in case the core set of classes is already loaded, don't instantiate twice.\n\t\t}\n\t\tvar _namespace = function(ns) {\n\t\t\t\tvar a = ns.split(\".\"),\n\t\t\t\t\tp = _globals, i;\n\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\tp[a[i]] = p = p[a[i]] || {};\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t},\n\t\t\tgs = _namespace(\"com.greensock\"),\n\t\t\t_tinyNum = 0.0000000001,\n\t\t\t_slice = function(a) { //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++])) {}\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\t_emptyFunc = function() {},\n\t\t\t_isArray = (function() { //works around issues in iframe environments where the Array global isn't shared, thus if the object originates in a different window/iframe, \"(obj instanceof Array)\" will evaluate false. We added some speed optimizations to avoid Object.prototype.toString.call() unless it's absolutely necessary because it's VERY slow (like 20x slower)\n\t\t\t\tvar toString = Object.prototype.toString,\n\t\t\t\t\tarray = toString.call([]);\n\t\t\t\treturn function(obj) {\n\t\t\t\t\treturn obj != null && (obj instanceof Array || (typeof(obj) === \"object\" && !!obj.push && toString.call(obj) === array));\n\t\t\t\t};\n\t\t\t}()),\n\t\t\ta, i, p, _ticker, _tickerActive,\n\t\t\t_defLookup = {},\n\n\t\t\t/**\n\t\t\t * @constructor\n\t\t\t * Defines a GreenSock class, optionally with an array of dependencies that must be instantiated first and passed into the definition.\n\t\t\t * This allows users to load GreenSock JS files in any order even if they have interdependencies (like CSSPlugin extends TweenPlugin which is\n\t\t\t * inside TweenLite.js, but if CSSPlugin is loaded first, it should wait to run its code until TweenLite.js loads and instantiates TweenPlugin\n\t\t\t * and then pass TweenPlugin to CSSPlugin's definition). This is all done automatically and internally.\n\t\t\t *\n\t\t\t * Every definition will be added to a \"com.greensock\" global object (typically window, but if a window.GreenSockGlobals object is found,\n\t\t\t * it will go there as of v1.7). For example, TweenLite will be found at window.com.greensock.TweenLite and since it's a global class that should be available anywhere,\n\t\t\t * it is ALSO referenced at window.TweenLite. However some classes aren't considered global, like the base com.greensock.core.Animation class, so\n\t\t\t * those will only be at the package like window.com.greensock.core.Animation. Again, if you define a GreenSockGlobals object on the window, everything\n\t\t\t * gets tucked neatly inside there instead of on the window directly. This allows you to do advanced things like load multiple versions of GreenSock\n\t\t\t * files and put them into distinct objects (imagine a banner ad uses a newer version but the main site uses an older one). In that case, you could\n\t\t\t * sandbox the banner one like:\n\t\t\t *\n\t\t\t * <script>\n\t\t\t *     var gs = window.GreenSockGlobals = {}; //the newer version we're about to load could now be referenced in a \"gs\" object, like gs.TweenLite.to(...). Use whatever alias you want as long as it's unique, \"gs\" or \"banner\" or whatever.\n\t\t\t * </script>\n\t\t\t * <script src=\"js/greensock/v1.7/TweenMax.js\"></script>\n\t\t\t * <script>\n\t\t\t *     window.GreenSockGlobals = window._gsQueue = window._gsDefine = null; //reset it back to null (along with the special _gsQueue variable) so that the next load of TweenMax affects the window and we can reference things directly like TweenLite.to(...)\n\t\t\t * </script>\n\t\t\t * <script src=\"js/greensock/v1.6/TweenMax.js\"></script>\n\t\t\t * <script>\n\t\t\t *     gs.TweenLite.to(...); //would use v1.7\n\t\t\t *     TweenLite.to(...); //would use v1.6\n\t\t\t * </script>\n\t\t\t *\n\t\t\t * @param {!string} ns The namespace of the class definition, leaving off \"com.greensock.\" as that's assumed. For example, \"TweenLite\" or \"plugins.CSSPlugin\" or \"easing.Back\".\n\t\t\t * @param {!Array.<string>} dependencies An array of dependencies (described as their namespaces minus \"com.greensock.\" prefix). For example [\"TweenLite\",\"plugins.TweenPlugin\",\"core.Animation\"]\n\t\t\t * @param {!function():Object} func The function that should be called and passed the resolved dependencies which will return the actual class for this definition.\n\t\t\t * @param {boolean=} global If true, the class will be added to the global scope (typically window unless you define a window.GreenSockGlobals object)\n\t\t\t */\n\t\t\tDefinition = function(ns, dependencies, func, global) {\n\t\t\t\tthis.sc = (_defLookup[ns]) ? _defLookup[ns].sc : []; //subclasses\n\t\t\t\t_defLookup[ns] = this;\n\t\t\t\tthis.gsClass = null;\n\t\t\t\tthis.func = func;\n\t\t\t\tvar _classes = [];\n\t\t\t\tthis.check = function(init) {\n\t\t\t\t\tvar i = dependencies.length,\n\t\t\t\t\t\tmissing = i,\n\t\t\t\t\t\tcur, a, n, cl, hasModule;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif ((cur = _defLookup[dependencies[i]] || new Definition(dependencies[i], [])).gsClass) {\n\t\t\t\t\t\t\t_classes[i] = cur.gsClass;\n\t\t\t\t\t\t\tmissing--;\n\t\t\t\t\t\t} else if (init) {\n\t\t\t\t\t\t\tcur.sc.push(this);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (missing === 0 && func) {\n\t\t\t\t\t\ta = (\"com.greensock.\" + ns).split(\".\");\n\t\t\t\t\t\tn = a.pop();\n\t\t\t\t\t\tcl = _namespace(a.join(\".\"))[n] = this.gsClass = func.apply(func, _classes);\n\n\t\t\t\t\t\t//exports to multiple environments\n\t\t\t\t\t\tif (global) {\n\t\t\t\t\t\t\t_globals[n] = _exports[n] = cl; //provides a way to avoid global namespace pollution. By default, the main classes like TweenLite, Power1, Strong, etc. are added to window unless a GreenSockGlobals is defined. So if you want to have things added to a custom object instead, just do something like window.GreenSockGlobals = {} before loading any GreenSock files. You can even set up an alias like window.GreenSockGlobals = windows.gs = {} so that you can access everything like gs.TweenLite. Also remember that ALL classes are added to the window.com.greensock object (in their respective packages, like com.greensock.easing.Power1, com.greensock.TweenLite, etc.)\n\t\t\t\t\t\t\thasModule = (typeof(module) !== \"undefined\" && module.exports);\n\t\t\t\t\t\t\tif (!hasModule && typeof(define) === \"function\" && define.amd){ //AMD\n\t\t\t\t\t\t\t\tdefine((window.GreenSockAMDPath ? window.GreenSockAMDPath + \"/\" : \"\") + ns.split(\".\").pop(), [], function() { return cl; });\n\t\t\t\t\t\t\t} else if (hasModule){ //node\n\t\t\t\t\t\t\t\tif (ns === moduleName) {\n\t\t\t\t\t\t\t\t\tmodule.exports = _exports[moduleName] = cl;\n\t\t\t\t\t\t\t\t\tfor (i in _exports) {\n\t\t\t\t\t\t\t\t\t\tcl[i] = _exports[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (_exports[moduleName]) {\n\t\t\t\t\t\t\t\t\t_exports[moduleName][n] = cl;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (i = 0; i < this.sc.length; i++) {\n\t\t\t\t\t\t\tthis.sc[i].check();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.check(true);\n\t\t\t},\n\n\t\t\t//used to create Definition instances (which basically registers a class that has dependencies).\n\t\t\t_gsDefine = window._gsDefine = function(ns, dependencies, func, global) {\n\t\t\t\treturn new Definition(ns, dependencies, func, global);\n\t\t\t},\n\n\t\t\t//a quick way to create a class that doesn't have any dependencies. Returns the class, but first registers it in the GreenSock namespace so that other classes can grab it (other classes might be dependent on the class).\n\t\t\t_class = gs._class = function(ns, func, global) {\n\t\t\t\tfunc = func || function() {};\n\t\t\t\t_gsDefine(ns, [], function(){ return func; }, global);\n\t\t\t\treturn func;\n\t\t\t};\n\n\t\t_gsDefine.globals = _globals;\n\n\n\n/*\n * ----------------------------------------------------------------\n * Ease\n * ----------------------------------------------------------------\n */\n\t\tvar _baseParams = [0, 0, 1, 1],\n\t\t\t_blankArray = [],\n\t\t\tEase = _class(\"easing.Ease\", function(func, extraParams, type, power) {\n\t\t\t\tthis._func = func;\n\t\t\t\tthis._type = type || 0;\n\t\t\t\tthis._power = power || 0;\n\t\t\t\tthis._params = extraParams ? _baseParams.concat(extraParams) : _baseParams;\n\t\t\t}, true),\n\t\t\t_easeMap = Ease.map = {},\n\t\t\t_easeReg = Ease.register = function(ease, names, types, create) {\n\t\t\t\tvar na = names.split(\",\"),\n\t\t\t\t\ti = na.length,\n\t\t\t\t\tta = (types || \"easeIn,easeOut,easeInOut\").split(\",\"),\n\t\t\t\t\te, name, j, type;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tname = na[i];\n\t\t\t\t\te = create ? _class(\"easing.\"+name, null, true) : gs.easing[name] || {};\n\t\t\t\t\tj = ta.length;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\ttype = ta[j];\n\t\t\t\t\t\t_easeMap[name + \".\" + type] = _easeMap[type + name] = e[type] = ease.getRatio ? ease : ease[type] || new ease();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\tp = Ease.prototype;\n\t\tp._calcEnd = false;\n\t\tp.getRatio = function(p) {\n\t\t\tif (this._func) {\n\t\t\t\tthis._params[0] = p;\n\t\t\t\treturn this._func.apply(null, this._params);\n\t\t\t}\n\t\t\tvar t = this._type,\n\t\t\t\tpw = this._power,\n\t\t\t\tr = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n\t\t\tif (pw === 1) {\n\t\t\t\tr *= r;\n\t\t\t} else if (pw === 2) {\n\t\t\t\tr *= r * r;\n\t\t\t} else if (pw === 3) {\n\t\t\t\tr *= r * r * r;\n\t\t\t} else if (pw === 4) {\n\t\t\t\tr *= r * r * r * r;\n\t\t\t}\n\t\t\treturn (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t};\n\n\t\t//create all the standard eases like Linear, Quad, Cubic, Quart, Quint, Strong, Power0, Power1, Power2, Power3, and Power4 (each with easeIn, easeOut, and easeInOut)\n\t\ta = [\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"];\n\t\ti = a.length;\n\t\twhile (--i > -1) {\n\t\t\tp = a[i]+\",Power\"+i;\n\t\t\t_easeReg(new Ease(null,null,1,i), p, \"easeOut\", true);\n\t\t\t_easeReg(new Ease(null,null,2,i), p, \"easeIn\" + ((i === 0) ? \",easeNone\" : \"\"));\n\t\t\t_easeReg(new Ease(null,null,3,i), p, \"easeInOut\");\n\t\t}\n\t\t_easeMap.linear = gs.easing.Linear.easeIn;\n\t\t_easeMap.swing = gs.easing.Quad.easeInOut; //for jQuery folks\n\n\n/*\n * ----------------------------------------------------------------\n * EventDispatcher\n * ----------------------------------------------------------------\n */\n\t\tvar EventDispatcher = _class(\"events.EventDispatcher\", function(target) {\n\t\t\tthis._listeners = {};\n\t\t\tthis._eventTarget = target || this;\n\t\t});\n\t\tp = EventDispatcher.prototype;\n\n\t\tp.addEventListener = function(type, callback, scope, useParam, priority) {\n\t\t\tpriority = priority || 0;\n\t\t\tvar list = this._listeners[type],\n\t\t\t\tindex = 0,\n\t\t\t\tlistener, i;\n\t\t\tif (this === _ticker && !_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (list == null) {\n\t\t\t\tthis._listeners[type] = list = [];\n\t\t\t}\n\t\t\ti = list.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tlistener = list[i];\n\t\t\t\tif (listener.c === callback && listener.s === scope) {\n\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t} else if (index === 0 && listener.pr < priority) {\n\t\t\t\t\tindex = i + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlist.splice(index, 0, {c:callback, s:scope, up:useParam, pr:priority});\n\t\t};\n\n\t\tp.removeEventListener = function(type, callback) {\n\t\t\tvar list = this._listeners[type], i;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (list[i].c === callback) {\n\t\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp.dispatchEvent = function(type) {\n\t\t\tvar list = this._listeners[type],\n\t\t\t\ti, t, listener;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\tif (i > 1) {\n\t\t\t\t\tlist = list.slice(0); //in case addEventListener() is called from within a listener/callback (otherwise the index could change, resulting in a skip)\n\t\t\t\t}\n\t\t\t\tt = this._eventTarget;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tlistener = list[i];\n\t\t\t\t\tif (listener) {\n\t\t\t\t\t\tif (listener.up) {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t, {type:type, target:t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * Ticker\n * ----------------------------------------------------------------\n */\n \t\tvar _reqAnimFrame = window.requestAnimationFrame,\n\t\t\t_cancelAnimFrame = window.cancelAnimationFrame,\n\t\t\t_getTime = Date.now || function() {return new Date().getTime();},\n\t\t\t_lastUpdate = _getTime();\n\n\t\t//now try to determine the requestAnimationFrame and cancelAnimationFrame functions and if none are found, we'll use a setTimeout()/clearTimeout() polyfill.\n\t\ta = [\"ms\",\"moz\",\"webkit\",\"o\"];\n\t\ti = a.length;\n\t\twhile (--i > -1 && !_reqAnimFrame) {\n\t\t\t_reqAnimFrame = window[a[i] + \"RequestAnimationFrame\"];\n\t\t\t_cancelAnimFrame = window[a[i] + \"CancelAnimationFrame\"] || window[a[i] + \"CancelRequestAnimationFrame\"];\n\t\t}\n\n\t\t_class(\"Ticker\", function(fps, useRAF) {\n\t\t\tvar _self = this,\n\t\t\t\t_startTime = _getTime(),\n\t\t\t\t_useRAF = (useRAF !== false && _reqAnimFrame) ? \"auto\" : false,\n\t\t\t\t_lagThreshold = 500,\n\t\t\t\t_adjustedLag = 33,\n\t\t\t\t_tickWord = \"tick\", //helps reduce gc burden\n\t\t\t\t_fps, _req, _id, _gap, _nextTime,\n\t\t\t\t_tick = function(manual) {\n\t\t\t\t\tvar elapsed = _getTime() - _lastUpdate,\n\t\t\t\t\t\toverlap, dispatch;\n\t\t\t\t\tif (elapsed > _lagThreshold) {\n\t\t\t\t\t\t_startTime += elapsed - _adjustedLag;\n\t\t\t\t\t}\n\t\t\t\t\t_lastUpdate += elapsed;\n\t\t\t\t\t_self.time = (_lastUpdate - _startTime) / 1000;\n\t\t\t\t\toverlap = _self.time - _nextTime;\n\t\t\t\t\tif (!_fps || overlap > 0 || manual === true) {\n\t\t\t\t\t\t_self.frame++;\n\t\t\t\t\t\t_nextTime += overlap + (overlap >= _gap ? 0.004 : _gap - overlap);\n\t\t\t\t\t\tdispatch = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (manual !== true) { //make sure the request is made before we dispatch the \"tick\" event so that timing is maintained. Otherwise, if processing the \"tick\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\n\t\t\t\t\t\t_id = _req(_tick);\n\t\t\t\t\t}\n\t\t\t\t\tif (dispatch) {\n\t\t\t\t\t\t_self.dispatchEvent(_tickWord);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tEventDispatcher.call(_self);\n\t\t\t_self.time = _self.frame = 0;\n\t\t\t_self.tick = function() {\n\t\t\t\t_tick(true);\n\t\t\t};\n\n\t\t\t_self.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t\t_lagThreshold = threshold || (1 / _tinyNum); //zero should be interpreted as basically unlimited\n\t\t\t\t_adjustedLag = Math.min(adjustedLag, _lagThreshold, 0);\n\t\t\t};\n\n\t\t\t_self.sleep = function() {\n\t\t\t\tif (_id == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_useRAF || !_cancelAnimFrame) {\n\t\t\t\t\tclearTimeout(_id);\n\t\t\t\t} else {\n\t\t\t\t\t_cancelAnimFrame(_id);\n\t\t\t\t}\n\t\t\t\t_req = _emptyFunc;\n\t\t\t\t_id = null;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = false;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t_self.wake = function(seamless) {\n\t\t\t\tif (_id !== null) {\n\t\t\t\t\t_self.sleep();\n\t\t\t\t} else if (seamless) {\n\t\t\t\t\t_startTime += -_lastUpdate + (_lastUpdate = _getTime());\n\t\t\t\t} else if (_self.frame > 10) { //don't trigger lagSmoothing if we're just waking up, and make sure that at least 10 frames have elapsed because of the iOS bug that we work around below with the 1.5-second setTimout().\n\t\t\t\t\t_lastUpdate = _getTime() - _lagThreshold + 5;\n\t\t\t\t}\n\t\t\t\t_req = (_fps === 0) ? _emptyFunc : (!_useRAF || !_reqAnimFrame) ? function(f) { return setTimeout(f, ((_nextTime - _self.time) * 1000 + 1) | 0); } : _reqAnimFrame;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = true;\n\t\t\t\t}\n\t\t\t\t_tick(2);\n\t\t\t};\n\n\t\t\t_self.fps = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _fps;\n\t\t\t\t}\n\t\t\t\t_fps = value;\n\t\t\t\t_gap = 1 / (_fps || 60);\n\t\t\t\t_nextTime = this.time + _gap;\n\t\t\t\t_self.wake();\n\t\t\t};\n\n\t\t\t_self.useRAF = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _useRAF;\n\t\t\t\t}\n\t\t\t\t_self.sleep();\n\t\t\t\t_useRAF = value;\n\t\t\t\t_self.fps(_fps);\n\t\t\t};\n\t\t\t_self.fps(fps);\n\n\t\t\t//a bug in iOS 6 Safari occasionally prevents the requestAnimationFrame from working initially, so we use a 1.5-second timeout that automatically falls back to setTimeout() if it senses this condition.\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (_useRAF === \"auto\" && _self.frame < 5 && document.visibilityState !== \"hidden\") {\n\t\t\t\t\t_self.useRAF(false);\n\t\t\t\t}\n\t\t\t}, 1500);\n\t\t});\n\n\t\tp = gs.Ticker.prototype = new gs.events.EventDispatcher();\n\t\tp.constructor = gs.Ticker;\n\n\n/*\n * ----------------------------------------------------------------\n * Animation\n * ----------------------------------------------------------------\n */\n\t\tvar Animation = _class(\"core.Animation\", function(duration, vars) {\n\t\t\t\tthis.vars = vars = vars || {};\n\t\t\t\tthis._duration = this._totalDuration = duration || 0;\n\t\t\t\tthis._delay = Number(vars.delay) || 0;\n\t\t\t\tthis._timeScale = 1;\n\t\t\t\tthis._active = (vars.immediateRender === true);\n\t\t\t\tthis.data = vars.data;\n\t\t\t\tthis._reversed = (vars.reversed === true);\n\n\t\t\t\tif (!_rootTimeline) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_tickerActive) { //some browsers (like iOS 6 Safari) shut down JavaScript execution when the tab is disabled and they [occasionally] neglect to start up requestAnimationFrame again when returning - this code ensures that the engine starts up again properly.\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\n\t\t\t\tvar tl = this.vars.useFrames ? _rootFramesTimeline : _rootTimeline;\n\t\t\t\ttl.add(this, tl._time);\n\n\t\t\t\tif (this.vars.paused) {\n\t\t\t\t\tthis.paused(true);\n\t\t\t\t}\n\t\t\t});\n\n\t\t_ticker = Animation.ticker = new gs.Ticker();\n\t\tp = Animation.prototype;\n\t\tp._dirty = p._gc = p._initted = p._paused = false;\n\t\tp._totalTime = p._time = 0;\n\t\tp._rawPrevTime = -1;\n\t\tp._next = p._last = p._onUpdate = p._timeline = p.timeline = null;\n\t\tp._paused = false;\n\n\n\t\t//some browsers (like iOS) occasionally drop the requestAnimationFrame event when the user switches to a different tab and then comes back again, so we use a 2-second setTimeout() to sense if/when that condition occurs and then wake() the ticker.\n\t\tvar _checkTimeout = function() {\n\t\t\t\tif (_tickerActive && _getTime() - _lastUpdate > 2000) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tsetTimeout(_checkTimeout, 2000);\n\t\t\t};\n\t\t_checkTimeout();\n\n\n\t\tp.play = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(false).paused(false);\n\t\t};\n\n\t\tp.pause = function(atTime, suppressEvents) {\n\t\t\tif (atTime != null) {\n\t\t\t\tthis.seek(atTime, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(true);\n\t\t};\n\n\t\tp.resume = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(false);\n\t\t};\n\n\t\tp.seek = function(time, suppressEvents) {\n\t\t\treturn this.totalTime(Number(time), suppressEvents !== false);\n\t\t};\n\n\t\tp.restart = function(includeDelay, suppressEvents) {\n\t\t\treturn this.reversed(false).paused(false).totalTime(includeDelay ? -this._delay : 0, (suppressEvents !== false), true);\n\t\t};\n\n\t\tp.reverse = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek((from || this.totalDuration()), suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(true).paused(false);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t//stub - we override this method in subclasses.\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tthis._time = this._totalTime = 0;\n\t\t\tthis._initted = this._gc = false;\n\t\t\tthis._rawPrevTime = -1;\n\t\t\tif (this._gc || !this.timeline) {\n\t\t\t\tthis._enabled(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.isActive = function() {\n\t\t\tvar tl = this._timeline, //the 2 root timelines won't have a _timeline; they're always active.\n\t\t\t\tstartTime = this._startTime,\n\t\t\t\trawTime;\n\t\t\treturn (!tl || (!this._gc && !this._paused && tl.isActive() && (rawTime = tl.rawTime()) >= startTime && rawTime < startTime + this.totalDuration() / this._timeScale));\n\t\t};\n\n\t\tp._enabled = function (enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tthis._gc = !enabled;\n\t\t\tthis._active = this.isActive();\n\t\t\tif (ignoreTimeline !== true) {\n\t\t\t\tif (enabled && !this.timeline) {\n\t\t\t\t\tthis._timeline.add(this, this._startTime - this._delay);\n\t\t\t\t} else if (!enabled && this.timeline) {\n\t\t\t\t\tthis._timeline._remove(this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n\t\tp._kill = function(vars, target) {\n\t\t\treturn this._enabled(false, false);\n\t\t};\n\n\t\tp.kill = function(vars, target) {\n\t\t\tthis._kill(vars, target);\n\t\t\treturn this;\n\t\t};\n\n\t\tp._uncache = function(includeSelf) {\n\t\t\tvar tween = includeSelf ? this : this.timeline;\n\t\t\twhile (tween) {\n\t\t\t\ttween._dirty = true;\n\t\t\t\ttween = tween.timeline;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._swapSelfInParams = function(params) {\n\t\t\tvar i = params.length,\n\t\t\t\tcopy = params.concat();\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (params[i] === \"{self}\") {\n\t\t\t\t\tcopy[i] = this;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn copy;\n\t\t};\n\n\t\tp._callback = function(type) {\n\t\t\tvar v = this.vars,\n\t\t\t\tcallback = v[type],\n\t\t\t\tparams = v[type + \"Params\"],\n\t\t\t\tscope = v[type + \"Scope\"] || v.callbackScope || this,\n\t\t\t\tl = params ? params.length : 0;\n\t\t\tswitch (l) { //speed optimization; call() is faster than apply() so use it when there are only a few parameters (which is by far most common). Previously we simply did var v = this.vars; v[type].apply(v[type + \"Scope\"] || v.callbackScope || this, v[type + \"Params\"] || _blankArray);\n\t\t\t\tcase 0: callback.call(scope); break;\n\t\t\t\tcase 1: callback.call(scope, params[0]); break;\n\t\t\t\tcase 2: callback.call(scope, params[0], params[1]); break;\n\t\t\t\tdefault: callback.apply(scope, params);\n\t\t\t}\n\t\t};\n\n//----Animation getters/setters --------------------------------------------------------\n\n\t\tp.eventCallback = function(type, callback, params, scope) {\n\t\t\tif ((type || \"\").substr(0,2) === \"on\") {\n\t\t\t\tvar v = this.vars;\n\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\treturn v[type];\n\t\t\t\t}\n\t\t\t\tif (callback == null) {\n\t\t\t\t\tdelete v[type];\n\t\t\t\t} else {\n\t\t\t\t\tv[type] = callback;\n\t\t\t\t\tv[type + \"Params\"] = (_isArray(params) && params.join(\"\").indexOf(\"{self}\") !== -1) ? this._swapSelfInParams(params) : params;\n\t\t\t\t\tv[type + \"Scope\"] = scope;\n\t\t\t\t}\n\t\t\t\tif (type === \"onUpdate\") {\n\t\t\t\t\tthis._onUpdate = callback;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.delay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._delay;\n\t\t\t}\n\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\tthis.startTime( this._startTime + value - this._delay );\n\t\t\t}\n\t\t\tthis._delay = value;\n\t\t\treturn this;\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tthis._dirty = false;\n\t\t\t\treturn this._duration;\n\t\t\t}\n\t\t\tthis._duration = this._totalDuration = value;\n\t\t\tthis._uncache(true); //true in case it's a TweenMax or TimelineMax that has a repeat - we'll need to refresh the totalDuration.\n\t\t\tif (this._timeline.smoothChildTiming) if (this._time > 0) if (this._time < this._duration) if (value !== 0) {\n\t\t\t\tthis.totalTime(this._totalTime * (value / this._duration), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tthis._dirty = false;\n\t\t\treturn (!arguments.length) ? this._totalDuration : this.duration(value);\n\t\t};\n\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\treturn this.totalTime((value > this._duration) ? this._duration : value, suppressEvents);\n\t\t};\n\n\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._totalTime;\n\t\t\t}\n\t\t\tif (this._timeline) {\n\t\t\t\tif (time < 0 && !uncapped) {\n\t\t\t\t\ttime += this.totalDuration();\n\t\t\t\t}\n\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\tthis.totalDuration();\n\t\t\t\t\t}\n\t\t\t\t\tvar totalDuration = this._totalDuration,\n\t\t\t\t\t\ttl = this._timeline;\n\t\t\t\t\tif (time > totalDuration && !uncapped) {\n\t\t\t\t\t\ttime = totalDuration;\n\t\t\t\t\t}\n\t\t\t\t\tthis._startTime = (this._paused ? this._pauseTime : tl._time) - ((!this._reversed ? time : totalDuration - time) / this._timeScale);\n\t\t\t\t\tif (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\n\t\t\t\t\t\tthis._uncache(false);\n\t\t\t\t\t}\n\t\t\t\t\t//in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The startTime of that child would get pushed out, but one of the ancestors may have completed.\n\t\t\t\t\tif (tl._timeline) {\n\t\t\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\t\t\tif (tl._timeline._time !== (tl._startTime + tl._totalTime) / tl._timeScale) {\n\t\t\t\t\t\t\t\ttl.totalTime(tl._totalTime, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._gc) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t}\n\t\t\t\tif (this._totalTime !== time || this._duration === 0) {\n\t\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tthis.render(time, suppressEvents, false);\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.progress = p.totalProgress = function(value, suppressEvents) {\n\t\t\tvar duration = this.duration();\n\t\t\treturn (!arguments.length) ? (duration ? this._time / duration : this.ratio) : this.totalTime(duration * value, suppressEvents);\n\t\t};\n\n\t\tp.startTime = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._startTime;\n\t\t\t}\n\t\t\tif (value !== this._startTime) {\n\t\t\t\tthis._startTime = value;\n\t\t\t\tif (this.timeline) if (this.timeline._sortChildren) {\n\t\t\t\t\tthis.timeline.add(this, value - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.endTime = function(includeRepeats) {\n\t\t\treturn this._startTime + ((includeRepeats != false) ? this.totalDuration() : this.duration()) / this._timeScale;\n\t\t};\n\n\t\tp.timeScale = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._timeScale;\n\t\t\t}\n\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\tif (this._timeline && this._timeline.smoothChildTiming) {\n\t\t\t\tvar pauseTime = this._pauseTime,\n\t\t\t\t\tt = (pauseTime || pauseTime === 0) ? pauseTime : this._timeline.totalTime();\n\t\t\t\tthis._startTime = t - ((t - this._startTime) * this._timeScale / value);\n\t\t\t}\n\t\t\tthis._timeScale = value;\n\t\t\treturn this._uncache(false);\n\t\t};\n\n\t\tp.reversed = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._reversed;\n\t\t\t}\n\t\t\tif (value != this._reversed) {\n\t\t\t\tthis._reversed = value;\n\t\t\t\tthis.totalTime(((this._timeline && !this._timeline.smoothChildTiming) ? this.totalDuration() - this._totalTime : this._totalTime), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.paused = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._paused;\n\t\t\t}\n\t\t\tvar tl = this._timeline,\n\t\t\t\traw, elapsed;\n\t\t\tif (value != this._paused) if (tl) {\n\t\t\t\tif (!_tickerActive && !value) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\traw = tl.rawTime();\n\t\t\t\telapsed = raw - this._pauseTime;\n\t\t\t\tif (!value && tl.smoothChildTiming) {\n\t\t\t\t\tthis._startTime += elapsed;\n\t\t\t\t\tthis._uncache(false);\n\t\t\t\t}\n\t\t\t\tthis._pauseTime = value ? raw : null;\n\t\t\t\tthis._paused = value;\n\t\t\t\tthis._active = this.isActive();\n\t\t\t\tif (!value && elapsed !== 0 && this._initted && this.duration()) {\n\t\t\t\t\traw = tl.smoothChildTiming ? this._totalTime : (raw - this._startTime) / this._timeScale;\n\t\t\t\t\tthis.render(raw, (raw === this._totalTime), true); //in case the target's properties changed via some other tween or manual update by the user, we should force a render.\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._gc && !value) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * SimpleTimeline\n * ----------------------------------------------------------------\n */\n\t\tvar SimpleTimeline = _class(\"core.SimpleTimeline\", function(vars) {\n\t\t\tAnimation.call(this, 0, vars);\n\t\t\tthis.autoRemoveChildren = this.smoothChildTiming = true;\n\t\t});\n\n\t\tp = SimpleTimeline.prototype = new Animation();\n\t\tp.constructor = SimpleTimeline;\n\t\tp.kill()._gc = false;\n\t\tp._first = p._last = p._recent = null;\n\t\tp._sortChildren = false;\n\n\t\tp.add = p.insert = function(child, position, align, stagger) {\n\t\t\tvar prevTween, st;\n\t\t\tchild._startTime = Number(position || 0) + child._delay;\n\t\t\tif (child._paused) if (this !== child._timeline) { //we only adjust the _pauseTime if it wasn't in this timeline already. Remember, sometimes a tween will be inserted again into the same timeline when its startTime is changed so that the tweens in the TimelineLite/Max are re-ordered properly in the linked list (so everything renders in the proper order).\n\t\t\t\tchild._pauseTime = child._startTime + ((this.rawTime() - child._startTime) / child._timeScale);\n\t\t\t}\n\t\t\tif (child.timeline) {\n\t\t\t\tchild.timeline._remove(child, true); //removes from existing timeline so that it can be properly added to this one.\n\t\t\t}\n\t\t\tchild.timeline = child._timeline = this;\n\t\t\tif (child._gc) {\n\t\t\t\tchild._enabled(true, true);\n\t\t\t}\n\t\t\tprevTween = this._last;\n\t\t\tif (this._sortChildren) {\n\t\t\t\tst = child._startTime;\n\t\t\t\twhile (prevTween && prevTween._startTime > st) {\n\t\t\t\t\tprevTween = prevTween._prev;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (prevTween) {\n\t\t\t\tchild._next = prevTween._next;\n\t\t\t\tprevTween._next = child;\n\t\t\t} else {\n\t\t\t\tchild._next = this._first;\n\t\t\t\tthis._first = child;\n\t\t\t}\n\t\t\tif (child._next) {\n\t\t\t\tchild._next._prev = child;\n\t\t\t} else {\n\t\t\t\tthis._last = child;\n\t\t\t}\n\t\t\tchild._prev = prevTween;\n\t\t\tthis._recent = child;\n\t\t\tif (this._timeline) {\n\t\t\t\tthis._uncache(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._remove = function(tween, skipDisable) {\n\t\t\tif (tween.timeline === this) {\n\t\t\t\tif (!skipDisable) {\n\t\t\t\t\ttween._enabled(false, true);\n\t\t\t\t}\n\n\t\t\t\tif (tween._prev) {\n\t\t\t\t\ttween._prev._next = tween._next;\n\t\t\t\t} else if (this._first === tween) {\n\t\t\t\t\tthis._first = tween._next;\n\t\t\t\t}\n\t\t\t\tif (tween._next) {\n\t\t\t\t\ttween._next._prev = tween._prev;\n\t\t\t\t} else if (this._last === tween) {\n\t\t\t\t\tthis._last = tween._prev;\n\t\t\t\t}\n\t\t\t\ttween._next = tween._prev = tween.timeline = null;\n\t\t\t\tif (tween === this._recent) {\n\t\t\t\t\tthis._recent = this._last;\n\t\t\t\t}\n\n\t\t\t\tif (this._timeline) {\n\t\t\t\t\tthis._uncache(true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar tween = this._first,\n\t\t\t\tnext;\n\t\t\tthis._totalTime = this._time = this._rawPrevTime = time;\n\t\t\twhile (tween) {\n\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\tif (tween._active || (time >= tween._startTime && !tween._paused)) {\n\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttween = next;\n\t\t\t}\n\t\t};\n\n\t\tp.rawTime = function() {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\treturn this._totalTime;\n\t\t};\n\n/*\n * ----------------------------------------------------------------\n * TweenLite\n * ----------------------------------------------------------------\n */\n\t\tvar TweenLite = _class(\"TweenLite\", function(target, duration, vars) {\n\t\t\t\tAnimation.call(this, duration, vars);\n\t\t\t\tthis.render = TweenLite.prototype.render; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\n\t\t\t\tif (target == null) {\n\t\t\t\t\tthrow \"Cannot tween a null target.\";\n\t\t\t\t}\n\n\t\t\t\tthis.target = target = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\n\t\t\t\tvar isSelector = (target.jquery || (target.length && target !== window && target[0] && (target[0] === window || (target[0].nodeType && target[0].style && !target.nodeType)))),\n\t\t\t\t\toverwrite = this.vars.overwrite,\n\t\t\t\t\ti, targ, targets;\n\n\t\t\t\tthis._overwrite = overwrite = (overwrite == null) ? _overwriteLookup[TweenLite.defaultOverwrite] : (typeof(overwrite) === \"number\") ? overwrite >> 0 : _overwriteLookup[overwrite];\n\n\t\t\t\tif ((isSelector || target instanceof Array || (target.push && _isArray(target))) && typeof(target[0]) !== \"number\") {\n\t\t\t\t\tthis._targets = targets = _slice(target);  //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\tthis._propLookup = [];\n\t\t\t\t\tthis._siblings = [];\n\t\t\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\t\t\ttarg = targets[i];\n\t\t\t\t\t\tif (!targ) {\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\ttarg = targets[i--] = TweenLite.selector(targ); //in case it's an array of strings\n\t\t\t\t\t\t\tif (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\t\ttargets.splice(i+1, 1); //to avoid an endless loop (can't imagine why the selector would return a string, but just in case)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (targ.length && targ !== window && targ[0] && (targ[0] === window || (targ[0].nodeType && targ[0].style && !targ.nodeType))) { //in case the user is passing in an array of selector objects (like jQuery objects), we need to check one more level and pull things out if necessary. Also note that <select> elements pass all the criteria regarding length and the first child having style, so we must also check to ensure the target isn't an HTML node itself.\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tthis._targets = targets = targets.concat(_slice(targ));\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._siblings[i] = _register(targ, this, false);\n\t\t\t\t\t\tif (overwrite === 1) if (this._siblings[i].length > 1) {\n\t\t\t\t\t\t\t_applyOverwrite(targ, this, null, 1, this._siblings[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tthis._propLookup = {};\n\t\t\t\t\tthis._siblings = _register(target, this, false);\n\t\t\t\t\tif (overwrite === 1) if (this._siblings.length > 1) {\n\t\t\t\t\t\t_applyOverwrite(target, this, null, 1, this._siblings);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.vars.immediateRender || (duration === 0 && this._delay === 0 && this.vars.immediateRender !== false)) {\n\t\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\t\tthis.render(Math.min(0, -this._delay)); //in case delay is negative\n\t\t\t\t}\n\t\t\t}, true),\n\t\t\t_isSelector = function(v) {\n\t\t\t\treturn (v && v.length && v !== window && v[0] && (v[0] === window || (v[0].nodeType && v[0].style && !v.nodeType))); //we cannot check \"nodeType\" if the target is window from within an iframe, otherwise it will trigger a security error in some browsers like Firefox.\n\t\t\t},\n\t\t\t_autoCSS = function(vars, target) {\n\t\t\t\tvar css = {},\n\t\t\t\t\tp;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tif (!_reservedProps[p] && (!(p in target) || p === \"transform\" || p === \"x\" || p === \"y\" || p === \"width\" || p === \"height\" || p === \"className\" || p === \"border\") && (!_plugins[p] || (_plugins[p] && _plugins[p]._autoCSS))) { //note: <img> elements contain read-only \"x\" and \"y\" properties. We should also prioritize editing css width/height rather than the element's properties.\n\t\t\t\t\t\tcss[p] = vars[p];\n\t\t\t\t\t\tdelete vars[p];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvars.css = css;\n\t\t\t};\n\n\t\tp = TweenLite.prototype = new Animation();\n\t\tp.constructor = TweenLite;\n\t\tp.kill()._gc = false;\n\n//----TweenLite defaults, overwrite management, and root updates ----------------------------------------------------\n\n\t\tp.ratio = 0;\n\t\tp._firstPT = p._targets = p._overwrittenProps = p._startAt = null;\n\t\tp._notifyPluginsOfEnabled = p._lazy = false;\n\n\t\tTweenLite.version = \"1.19.0\";\n\t\tTweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1);\n\t\tTweenLite.defaultOverwrite = \"auto\";\n\t\tTweenLite.ticker = _ticker;\n\t\tTweenLite.autoSleep = 120;\n\t\tTweenLite.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t_ticker.lagSmoothing(threshold, adjustedLag);\n\t\t};\n\n\t\tTweenLite.selector = window.$ || window.jQuery || function(e) {\n\t\t\tvar selector = window.$ || window.jQuery;\n\t\t\tif (selector) {\n\t\t\t\tTweenLite.selector = selector;\n\t\t\t\treturn selector(e);\n\t\t\t}\n\t\t\treturn (typeof(document) === \"undefined\") ? e : (document.querySelectorAll ? document.querySelectorAll(e) : document.getElementById((e.charAt(0) === \"#\") ? e.substr(1) : e));\n\t\t};\n\n\t\tvar _lazyTweens = [],\n\t\t\t_lazyLookup = {},\n\t\t\t_numbersExp = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/ig,\n\t\t\t//_nonNumbersExp = /(?:([\\-+](?!(\\d|=)))|[^\\d\\-+=e]|(e(?![\\-+][\\d])))+/ig,\n\t\t\t_setRatio = function(v) {\n\t\t\t\tvar pt = this._firstPT,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tval;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tval = !pt.blob ? pt.c * v + pt.s : v ? this.join(\"\") : this.start;\n\t\t\t\t\tif (pt.m) {\n\t\t\t\t\t\tval = pt.m(val, this._target || pt.t);\n\t\t\t\t\t} else if (val < min) if (val > -min) { //prevents issues with converting very small numbers to strings in the browser\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!pt.f) {\n\t\t\t\t\t\tpt.t[pt.p] = val;\n\t\t\t\t\t} else if (pt.fp) {\n\t\t\t\t\t\tpt.t[pt.p](pt.fp, val);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p](val);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t},\n\t\t\t//compares two strings (start/end), finds the numbers that are different and spits back an array representing the whole value but with the changing values isolated as elements. For example, \"rgb(0,0,0)\" and \"rgb(100,50,0)\" would become [\"rgb(\", 0, \",\", 50, \",0)\"]. Notice it merges the parts that are identical (performance optimization). The array also has a linked list of PropTweens attached starting with _firstPT that contain the tweening data (t, p, s, c, f, etc.). It also stores the starting value as a \"start\" property so that we can revert to it if/when necessary, like when a tween rewinds fully. If the quantity of numbers differs between the start and end, it will always prioritize the end value(s). The pt parameter is optional - it's for a PropTween that will be appended to the end of the linked list and is typically for actually setting the value after all of the elements have been updated (with array.join(\"\")).\n\t\t\t_blobDif = function(start, end, filter, pt) {\n\t\t\t\tvar a = [start, end],\n\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\ts = \"\",\n\t\t\t\t\tcolor = 0,\n\t\t\t\t\tstartNums, endNums, num, i, l, nonNumbers, currentNum;\n\t\t\t\ta.start = start;\n\t\t\t\tif (filter) {\n\t\t\t\t\tfilter(a); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\n\t\t\t\t\tstart = a[0];\n\t\t\t\t\tend = a[1];\n\t\t\t\t}\n\t\t\t\ta.length = 0;\n\t\t\t\tstartNums = start.match(_numbersExp) || [];\n\t\t\t\tendNums = end.match(_numbersExp) || [];\n\t\t\t\tif (pt) {\n\t\t\t\t\tpt._next = null;\n\t\t\t\t\tpt.blob = 1;\n\t\t\t\t\ta._firstPT = a._applyPT = pt; //apply last in the linked list (which means inserting it first)\n\t\t\t\t}\n\t\t\t\tl = endNums.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tcurrentNum = endNums[i];\n\t\t\t\t\tnonNumbers = end.substr(charIndex, end.indexOf(currentNum, charIndex)-charIndex);\n\t\t\t\t\ts += (nonNumbers || !i) ? nonNumbers : \",\"; //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n\t\t\t\t\tcharIndex += nonNumbers.length;\n\t\t\t\t\tif (color) { //sense rgba() values and round them.\n\t\t\t\t\t\tcolor = (color + 1) % 5;\n\t\t\t\t\t} else if (nonNumbers.substr(-5) === \"rgba(\") {\n\t\t\t\t\t\tcolor = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (currentNum === startNums[i] || startNums.length <= i) {\n\t\t\t\t\t\ts += currentNum;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (s) {\n\t\t\t\t\t\t\ta.push(s);\n\t\t\t\t\t\t\ts = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnum = parseFloat(startNums[i]);\n\t\t\t\t\t\ta.push(num);\n\t\t\t\t\t\ta._firstPT = {_next: a._firstPT, t:a, p: a.length-1, s:num, c:((currentNum.charAt(1) === \"=\") ? parseInt(currentNum.charAt(0) + \"1\", 10) * parseFloat(currentNum.substr(2)) : (parseFloat(currentNum) - num)) || 0, f:0, m:(color && color < 4) ? Math.round : 0};\n\t\t\t\t\t\t//note: we don't set _prev because we'll never need to remove individual PropTweens from this list.\n\t\t\t\t\t}\n\t\t\t\t\tcharIndex += currentNum.length;\n\t\t\t\t}\n\t\t\t\ts += end.substr(charIndex);\n\t\t\t\tif (s) {\n\t\t\t\t\ta.push(s);\n\t\t\t\t}\n\t\t\t\ta.setRatio = _setRatio;\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\t//note: \"funcParam\" is only necessary for function-based getters/setters that require an extra parameter like getAttribute(\"width\") and setAttribute(\"width\", value). In this example, funcParam would be \"width\". Used by AttrPlugin for example.\n\t\t\t_addPropTween = function(target, prop, start, end, overwriteProp, mod, funcParam, stringFilter, index) {\n\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\tend = end(index || 0, target);\n\t\t\t\t}\n\t\t\t\tvar s = (start === \"get\") ? target[prop] : start,\n\t\t\t\t\ttype = typeof(target[prop]),\n\t\t\t\t\tisRelative = (typeof(end) === \"string\" && end.charAt(1) === \"=\"),\n\t\t\t\t\tpt = {t:target, p:prop, s:s, f:(type === \"function\"), pg:0, n:overwriteProp || prop, m:(!mod ? 0 : (typeof(mod) === \"function\") ? mod : Math.round), pr:0, c:isRelative ? parseInt(end.charAt(0) + \"1\", 10) * parseFloat(end.substr(2)) : (parseFloat(end) - s) || 0},\n\t\t\t\t\tblob, getterName;\n\t\t\t\tif (type !== \"number\") {\n\t\t\t\t\tif (type === \"function\" && start === \"get\") {\n\t\t\t\t\t\tgetterName = ((prop.indexOf(\"set\") || typeof(target[\"get\" + prop.substr(3)]) !== \"function\") ? prop : \"get\" + prop.substr(3));\n\t\t\t\t\t\tpt.s = s = funcParam ? target[getterName](funcParam) : target[getterName]();\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof(s) === \"string\" && (funcParam || isNaN(s))) {\n\t\t\t\t\t\t//a blob (string that has multiple numbers in it)\n\t\t\t\t\t\tpt.fp = funcParam;\n\t\t\t\t\t\tblob = _blobDif(s, end, stringFilter || TweenLite.defaultStringFilter, pt);\n\t\t\t\t\t\tpt = {t:blob, p:\"setRatio\", s:0, c:1, f:2, pg:0, n:overwriteProp || prop, pr:0, m:0}; //\"2\" indicates it's a Blob property tween. Needed for RoundPropsPlugin for example.\n\t\t\t\t\t} else if (!isRelative) {\n\t\t\t\t\t\tpt.s = parseFloat(s);\n\t\t\t\t\t\tpt.c = (parseFloat(end) - pt.s) || 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pt.c) { //only add it to the linked list if there's a change.\n\t\t\t\t\tif ((pt._next = this._firstPT)) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_internals = TweenLite._internals = {isArray:_isArray, isSelector:_isSelector, lazyTweens:_lazyTweens, blobDif:_blobDif}, //gives us a way to expose certain private values to other GreenSock classes without contaminating tha main TweenLite object.\n\t\t\t_plugins = TweenLite._plugins = {},\n\t\t\t_tweenLookup = _internals.tweenLookup = {},\n\t\t\t_tweenLookupNum = 0,\n\t\t\t_reservedProps = _internals.reservedProps = {ease:1, delay:1, overwrite:1, onComplete:1, onCompleteParams:1, onCompleteScope:1, useFrames:1, runBackwards:1, startAt:1, onUpdate:1, onUpdateParams:1, onUpdateScope:1, onStart:1, onStartParams:1, onStartScope:1, onReverseComplete:1, onReverseCompleteParams:1, onReverseCompleteScope:1, onRepeat:1, onRepeatParams:1, onRepeatScope:1, easeParams:1, yoyo:1, immediateRender:1, repeat:1, repeatDelay:1, data:1, paused:1, reversed:1, autoCSS:1, lazy:1, onOverwrite:1, callbackScope:1, stringFilter:1, id:1},\n\t\t\t_overwriteLookup = {none:0, all:1, auto:2, concurrent:3, allOnStart:4, preexisting:5, \"true\":1, \"false\":0},\n\t\t\t_rootFramesTimeline = Animation._rootFramesTimeline = new SimpleTimeline(),\n\t\t\t_rootTimeline = Animation._rootTimeline = new SimpleTimeline(),\n\t\t\t_nextGCFrame = 30,\n\t\t\t_lazyRender = _internals.lazyRender = function() {\n\t\t\t\tvar i = _lazyTweens.length,\n\t\t\t\t\ttween;\n\t\t\t\t_lazyLookup = {};\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ttween = _lazyTweens[i];\n\t\t\t\t\tif (tween && tween._lazy !== false) {\n\t\t\t\t\t\ttween.render(tween._lazy[0], tween._lazy[1], true);\n\t\t\t\t\t\ttween._lazy = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_lazyTweens.length = 0;\n\t\t\t};\n\n\t\t_rootTimeline._startTime = _ticker.time;\n\t\t_rootFramesTimeline._startTime = _ticker.frame;\n\t\t_rootTimeline._active = _rootFramesTimeline._active = true;\n\t\tsetTimeout(_lazyRender, 1); //on some mobile devices, there isn't a \"tick\" before code runs which means any lazy renders wouldn't run before the next official \"tick\".\n\n\t\tAnimation._updateRoot = TweenLite.render = function() {\n\t\t\t\tvar i, a, p;\n\t\t\t\tif (_lazyTweens.length) { //if code is run outside of the requestAnimationFrame loop, there may be tweens queued AFTER the engine refreshed, so we need to ensure any pending renders occur before we refresh again.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\t_rootTimeline.render((_ticker.time - _rootTimeline._startTime) * _rootTimeline._timeScale, false, false);\n\t\t\t\t_rootFramesTimeline.render((_ticker.frame - _rootFramesTimeline._startTime) * _rootFramesTimeline._timeScale, false, false);\n\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tif (_ticker.frame >= _nextGCFrame) { //dump garbage every 120 frames or whatever the user sets TweenLite.autoSleep to\n\t\t\t\t\t_nextGCFrame = _ticker.frame + (parseInt(TweenLite.autoSleep, 10) || 120);\n\t\t\t\t\tfor (p in _tweenLookup) {\n\t\t\t\t\t\ta = _tweenLookup[p].tweens;\n\t\t\t\t\t\ti = a.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i]._gc) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (a.length === 0) {\n\t\t\t\t\t\t\tdelete _tweenLookup[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//if there are no more tweens in the root timelines, or if they're all paused, make the _timer sleep to reduce load on the CPU slightly\n\t\t\t\t\tp = _rootTimeline._first;\n\t\t\t\t\tif (!p || p._paused) if (TweenLite.autoSleep && !_rootFramesTimeline._first && _ticker._listeners.tick.length === 1) {\n\t\t\t\t\t\twhile (p && p._paused) {\n\t\t\t\t\t\t\tp = p._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!p) {\n\t\t\t\t\t\t\t_ticker.sleep();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t_ticker.addEventListener(\"tick\", Animation._updateRoot);\n\n\t\tvar _register = function(target, tween, scrub) {\n\t\t\t\tvar id = target._gsTweenID, a, i;\n\t\t\t\tif (!_tweenLookup[id || (target._gsTweenID = id = \"t\" + (_tweenLookupNum++))]) {\n\t\t\t\t\t_tweenLookup[id] = {target:target, tweens:[]};\n\t\t\t\t}\n\t\t\t\tif (tween) {\n\t\t\t\t\ta = _tweenLookup[id].tweens;\n\t\t\t\t\ta[(i = a.length)] = tween;\n\t\t\t\t\tif (scrub) {\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i] === tween) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn _tweenLookup[id].tweens;\n\t\t\t},\n\t\t\t_onOverwrite = function(overwrittenTween, overwritingTween, target, killedProps) {\n\t\t\t\tvar func = overwrittenTween.vars.onOverwrite, r1, r2;\n\t\t\t\tif (func) {\n\t\t\t\t\tr1 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t}\n\t\t\t\tfunc = TweenLite.onOverwrite;\n\t\t\t\tif (func) {\n\t\t\t\t\tr2 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t}\n\t\t\t\treturn (r1 !== false && r2 !== false);\n\t\t\t},\n\t\t\t_applyOverwrite = function(target, tween, props, mode, siblings) {\n\t\t\t\tvar i, changed, curTween, l;\n\t\t\t\tif (mode === 1 || mode >= 4) {\n\t\t\t\t\tl = siblings.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tif ((curTween = siblings[i]) !== tween) {\n\t\t\t\t\t\t\tif (!curTween._gc) {\n\t\t\t\t\t\t\t\tif (curTween._kill(null, target, tween)) {\n\t\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (mode === 5) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn changed;\n\t\t\t\t}\n\t\t\t\t//NOTE: Add 0.0000000001 to overcome floating point errors that can cause the startTime to be VERY slightly off (when a tween's time() is set for example)\n\t\t\t\tvar startTime = tween._startTime + _tinyNum,\n\t\t\t\t\toverlaps = [],\n\t\t\t\t\toCount = 0,\n\t\t\t\t\tzeroDur = (tween._duration === 0),\n\t\t\t\t\tglobalStart;\n\t\t\t\ti = siblings.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif ((curTween = siblings[i]) === tween || curTween._gc || curTween._paused) {\n\t\t\t\t\t\t//ignore\n\t\t\t\t\t} else if (curTween._timeline !== tween._timeline) {\n\t\t\t\t\t\tglobalStart = globalStart || _checkOverlap(tween, 0, zeroDur);\n\t\t\t\t\t\tif (_checkOverlap(curTween, globalStart, zeroDur) === 0) {\n\t\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (curTween._startTime <= startTime) if (curTween._startTime + curTween.totalDuration() / curTween._timeScale > startTime) if (!((zeroDur || !curTween._initted) && startTime - curTween._startTime <= 0.0000000002)) {\n\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ti = oCount;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tcurTween = overlaps[i];\n\t\t\t\t\tif (mode === 2) if (curTween._kill(props, target, tween)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (mode !== 2 || (!curTween._firstPT && curTween._initted)) {\n\t\t\t\t\t\tif (mode !== 2 && !_onOverwrite(curTween, tween)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (curTween._enabled(false, false)) { //if all property tweens have been overwritten, kill the tween.\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn changed;\n\t\t\t},\n\t\t\t_checkOverlap = function(tween, reference, zeroDur) {\n\t\t\t\tvar tl = tween._timeline,\n\t\t\t\t\tts = tl._timeScale,\n\t\t\t\t\tt = tween._startTime;\n\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\tt += tl._startTime;\n\t\t\t\t\tts *= tl._timeScale;\n\t\t\t\t\tif (tl._paused) {\n\t\t\t\t\t\treturn -100;\n\t\t\t\t\t}\n\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t}\n\t\t\t\tt /= ts;\n\t\t\t\treturn (t > reference) ? t - reference : ((zeroDur && t === reference) || (!tween._initted && t - reference < 2 * _tinyNum)) ? _tinyNum : ((t += tween.totalDuration() / tween._timeScale / ts) > reference + _tinyNum) ? 0 : t - reference - _tinyNum;\n\t\t\t};\n\n\n//---- TweenLite instance methods -----------------------------------------------------------------------------\n\n\t\tp._init = function() {\n\t\t\tvar v = this.vars,\n\t\t\t\top = this._overwrittenProps,\n\t\t\t\tdur = this._duration,\n\t\t\t\timmediate = !!v.immediateRender,\n\t\t\t\tease = v.ease,\n\t\t\t\ti, initPlugins, pt, p, startVars, l;\n\t\t\tif (v.startAt) {\n\t\t\t\tif (this._startAt) {\n\t\t\t\t\tthis._startAt.render(-1, true); //if we've run a startAt previously (when the tween instantiated), we should revert it so that the values re-instantiate correctly particularly for relative tweens. Without this, a TweenLite.fromTo(obj, 1, {x:\"+=100\"}, {x:\"-=100\"}), for example, would actually jump to +=200 because the startAt would run twice, doubling the relative change.\n\t\t\t\t\tthis._startAt.kill();\n\t\t\t\t}\n\t\t\t\tstartVars = {};\n\t\t\t\tfor (p in v.startAt) { //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, 1, from, to).fromTo(e, 1, to, from);\n\t\t\t\t\tstartVars[p] = v.startAt[p];\n\t\t\t\t}\n\t\t\t\tstartVars.overwrite = false;\n\t\t\t\tstartVars.immediateRender = true;\n\t\t\t\tstartVars.lazy = (immediate && v.lazy !== false);\n\t\t\t\tstartVars.startAt = startVars.delay = null; //no nesting of startAt objects allowed (otherwise it could cause an infinite loop).\n\t\t\t\tthis._startAt = TweenLite.to(this.target, 0, startVars);\n\t\t\t\tif (immediate) {\n\t\t\t\t\tif (this._time > 0) {\n\t\t\t\t\t\tthis._startAt = null; //tweens that render immediately (like most from() and fromTo() tweens) shouldn't revert when their parent timeline's playhead goes backward past the startTime because the initial render could have happened anytime and it shouldn't be directly correlated to this tween's startTime. Imagine setting up a complex animation where the beginning states of various objects are rendered immediately but the tween doesn't happen for quite some time - if we revert to the starting values as soon as the playhead goes backward past the tween's startTime, it will throw things off visually. Reversion should only happen in TimelineLite/Max instances where immediateRender was false (which is the default in the convenience methods like from()).\n\t\t\t\t\t} else if (dur !== 0) {\n\t\t\t\t\t\treturn; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a TimelineLite or TimelineMax, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (v.runBackwards && dur !== 0) {\n\t\t\t\t//from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\n\t\t\t\tif (this._startAt) {\n\t\t\t\t\tthis._startAt.render(-1, true);\n\t\t\t\t\tthis._startAt.kill();\n\t\t\t\t\tthis._startAt = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (this._time !== 0) { //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\n\t\t\t\t\t\timmediate = false;\n\t\t\t\t\t}\n\t\t\t\t\tpt = {};\n\t\t\t\t\tfor (p in v) { //copy props into a new object and skip any reserved props, otherwise onComplete or onUpdate or onStart could fire. We should, however, permit autoCSS to go through.\n\t\t\t\t\t\tif (!_reservedProps[p] || p === \"autoCSS\") {\n\t\t\t\t\t\t\tpt[p] = v[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt.overwrite = 0;\n\t\t\t\t\tpt.data = \"isFromStart\"; //we tag the tween with as \"isFromStart\" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \"from()\" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\n\t\t\t\t\tpt.lazy = (immediate && v.lazy !== false);\n\t\t\t\t\tpt.immediateRender = immediate; //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\n\t\t\t\t\tthis._startAt = TweenLite.to(this.target, 0, pt);\n\t\t\t\t\tif (!immediate) {\n\t\t\t\t\t\tthis._startAt._init(); //ensures that the initial values are recorded\n\t\t\t\t\t\tthis._startAt._enabled(false); //no need to have the tween render on the next cycle. Disable it because we'll always manually control the renders of the _startAt tween.\n\t\t\t\t\t\tif (this.vars.immediateRender) {\n\t\t\t\t\t\t\tthis._startAt = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this._time === 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._ease = ease = (!ease) ? TweenLite.defaultEase : (ease instanceof Ease) ? ease : (typeof(ease) === \"function\") ? new Ease(ease, v.easeParams) : _easeMap[ease] || TweenLite.defaultEase;\n\t\t\tif (v.easeParams instanceof Array && ease.config) {\n\t\t\t\tthis._ease = ease.config.apply(ease, v.easeParams);\n\t\t\t}\n\t\t\tthis._easeType = this._ease._type;\n\t\t\tthis._easePower = this._ease._power;\n\t\t\tthis._firstPT = null;\n\n\t\t\tif (this._targets) {\n\t\t\t\tl = this._targets.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tif ( this._initProps( this._targets[i], (this._propLookup[i] = {}), this._siblings[i], (op ? op[i] : null), i) ) {\n\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinitPlugins = this._initProps(this.target, this._propLookup, this._siblings, op, 0);\n\t\t\t}\n\n\t\t\tif (initPlugins) {\n\t\t\t\tTweenLite._onPluginEvent(\"_onInitAllProps\", this); //reorders the array in order of priority. Uses a static TweenPlugin method in order to minimize file size in TweenLite\n\t\t\t}\n\t\t\tif (op) if (!this._firstPT) if (typeof(this.target) !== \"function\") { //if all tweening properties have been overwritten, kill the tween. If the target is a function, it's probably a delayedCall so let it live.\n\t\t\t\tthis._enabled(false, false);\n\t\t\t}\n\t\t\tif (v.runBackwards) {\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tpt.s += pt.c;\n\t\t\t\t\tpt.c = -pt.c;\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._onUpdate = v.onUpdate;\n\t\t\tthis._initted = true;\n\t\t};\n\n\t\tp._initProps = function(target, propLookup, siblings, overwrittenProps, index) {\n\t\t\tvar p, i, initPlugins, plugin, pt, v;\n\t\t\tif (target == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (_lazyLookup[target._gsTweenID]) {\n\t\t\t\t_lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\n\t\t\t}\n\n\t\t\tif (!this.vars.css) if (target.style) if (target !== window && target.nodeType) if (_plugins.css) if (this.vars.autoCSS !== false) { //it's so common to use TweenLite/Max to animate the css of DOM elements, we assume that if the target is a DOM element, that's what is intended (a convenience so that users don't have to wrap things in css:{}, although we still recommend it for a slight performance boost and better specificity). Note: we cannot check \"nodeType\" on the window inside an iframe.\n\t\t\t\t_autoCSS(this.vars, target);\n\t\t\t}\n\t\t\tfor (p in this.vars) {\n\t\t\t\tv = this.vars[p];\n\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\tif (v) if ((v instanceof Array) || (v.push && _isArray(v))) if (v.join(\"\").indexOf(\"{self}\") !== -1) {\n\t\t\t\t\t\tthis.vars[p] = v = this._swapSelfInParams(v, this);\n\t\t\t\t\t}\n\n\t\t\t\t} else if (_plugins[p] && (plugin = new _plugins[p]())._onInitTween(target, this.vars[p], this, index)) {\n\n\t\t\t\t\t//t - target \t\t[object]\n\t\t\t\t\t//p - property \t\t[string]\n\t\t\t\t\t//s - start\t\t\t[number]\n\t\t\t\t\t//c - change\t\t[number]\n\t\t\t\t\t//f - isFunction\t[boolean]\n\t\t\t\t\t//n - name\t\t\t[string]\n\t\t\t\t\t//pg - isPlugin \t[boolean]\n\t\t\t\t\t//pr - priority\t\t[number]\n\t\t\t\t\t//m - mod           [function | 0]\n\t\t\t\t\tthis._firstPT = pt = {_next:this._firstPT, t:plugin, p:\"setRatio\", s:0, c:1, f:1, n:p, pg:1, pr:plugin._priority, m:0};\n\t\t\t\t\ti = plugin._overwriteProps.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tpropLookup[plugin._overwriteProps[i]] = this._firstPT;\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin._priority || plugin._onInitAllProps) {\n\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin._onDisable || plugin._onEnable) {\n\t\t\t\t\t\tthis._notifyPluginsOfEnabled = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tpropLookup[p] = _addPropTween.call(this, target, p, \"get\", v, p, 0, null, this.vars.stringFilter, index);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (overwrittenProps) if (this._kill(overwrittenProps, target)) { //another tween may have tried to overwrite properties of this tween before init() was called (like if two tweens start at the same time, the one created second will run first)\n\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t}\n\t\t\tif (this._overwrite > 1) if (this._firstPT) if (siblings.length > 1) if (_applyOverwrite(target, this, propLookup, this._overwrite, siblings)) {\n\t\t\t\tthis._kill(propLookup, target);\n\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t}\n\t\t\tif (this._firstPT) if ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration)) { //zero duration tweens don't lazy render by default; everything else does.\n\t\t\t\t_lazyLookup[target._gsTweenID] = true;\n\t\t\t}\n\t\t\treturn initPlugins;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar prevTime = this._time,\n\t\t\t\tduration = this._duration,\n\t\t\t\tprevRawPrevTime = this._rawPrevTime,\n\t\t\t\tisComplete, callback, pt, rawPrevTime;\n\t\t\tif (time >= duration - 0.0000001) { //to work around occasional floating point math artifacts.\n\t\t\t\tthis._totalTime = this._time = duration;\n\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1;\n\t\t\t\tif (!this._reversed ) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tforce = (force || this._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t}\n\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\tif (this._startTime === this._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -0.0000001) || (prevRawPrevTime === _tinyNum && this.data !== \"isPause\")) if (prevRawPrevTime !== time) { //note: when this.data is \"isPause\", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t}\n\n\t\t\t} else if (time < 0.0000001) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tthis._totalTime = this._time = 0;\n\t\t\t\tthis.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0;\n\t\t\t\tif (prevTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = this._reversed;\n\t\t\t\t}\n\t\t\t\tif (time < 0) {\n\t\t\t\t\tthis._active = false;\n\t\t\t\t\tif (duration === 0) if (this._initted || !this.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (prevRawPrevTime >= 0 && !(prevRawPrevTime === _tinyNum && this.data === \"isPause\")) {\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!this._initted) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\n\t\t\t\t\tforce = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._totalTime = this._time = time;\n\n\t\t\t\tif (this._easeType) {\n\t\t\t\t\tvar r = time / duration, type = this._easeType, pow = this._easePower;\n\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t}\n\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\tr *= r;\n\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (type === 1) {\n\t\t\t\t\t\tthis.ratio = 1 - r;\n\t\t\t\t\t} else if (type === 2) {\n\t\t\t\t\t\tthis.ratio = r;\n\t\t\t\t\t} else if (time / duration < 0.5) {\n\t\t\t\t\t\tthis.ratio = r / 2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.ratio = 1 - (r / 2);\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tthis.ratio = this._ease.getRatio(time / duration);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this._time === prevTime && !force) {\n\t\t\t\treturn;\n\t\t\t} else if (!this._initted) {\n\t\t\t\tthis._init();\n\t\t\t\tif (!this._initted || this._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!force && this._firstPT && ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration))) {\n\t\t\t\t\tthis._time = this._totalTime = prevTime;\n\t\t\t\t\tthis._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\t_lazyTweens.push(this);\n\t\t\t\t\tthis._lazy = [time, suppressEvents];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\tif (this._time && !isComplete) {\n\t\t\t\t\tthis.ratio = this._ease.getRatio(this._time / duration);\n\t\t\t\t} else if (isComplete && this._ease._calcEnd) {\n\t\t\t\t\tthis.ratio = this._ease.getRatio((this._time === 0) ? 0 : 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._lazy !== false) { //in case a lazy render is pending, we should flush it because the new render is occurring now (imagine a lazy tween instantiating and then immediately the user calls tween.seek(tween.duration()), skipping to the end - the end render would be forced, and then if we didn't flush the lazy render, it'd fire AFTER the seek(), rendering it at the wrong time.\n\t\t\t\tthis._lazy = false;\n\t\t\t}\n\t\t\tif (!this._active) if (!this._paused && this._time !== prevTime && time >= 0) {\n\t\t\t\tthis._active = true;  //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t}\n\t\t\tif (prevTime === 0) {\n\t\t\t\tif (this._startAt) {\n\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\tcallback = \"_dummyGS\"; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.vars.onStart) if (this._time !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\tthis._callback(\"onStart\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tpt = this._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.f) {\n\t\t\t\t\tpt.t[pt.p](pt.c * this.ratio + pt.s);\n\t\t\t\t} else {\n\t\t\t\t\tpt.t[pt.p] = pt.c * this.ratio + pt.s;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\n\t\t\tif (this._onUpdate) {\n\t\t\t\tif (time < 0) if (this._startAt && time !== -0.0001) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tthis._startAt.render(time, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents) if (this._time !== prevTime || isComplete || force) {\n\t\t\t\t\tthis._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (callback) if (!this._gc || force) { //check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (time < 0 && this._startAt && !this._onUpdate && time !== -0.0001) { //-0.0001 is a special value that we use when looping back to the beginning of a repeated TimelineMax, in which case we shouldn't render the _startAt values.\n\t\t\t\t\tthis._startAt.render(time, suppressEvents, force);\n\t\t\t\t}\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (this._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tthis._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && this.vars[callback]) {\n\t\t\t\t\tthis._callback(callback);\n\t\t\t\t}\n\t\t\t\tif (duration === 0 && this._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \"time\" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\tthis._rawPrevTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._kill = function(vars, target, overwritingTween) {\n\t\t\tif (vars === \"all\") {\n\t\t\t\tvars = null;\n\t\t\t}\n\t\t\tif (vars == null) if (target == null || target === this.target) {\n\t\t\t\tthis._lazy = false;\n\t\t\t\treturn this._enabled(false, false);\n\t\t\t}\n\t\t\ttarget = (typeof(target) !== \"string\") ? (target || this._targets || this.target) : TweenLite.selector(target) || target;\n\t\t\tvar simultaneousOverwrite = (overwritingTween && this._time && overwritingTween._startTime === this._startTime && this._timeline === overwritingTween._timeline),\n\t\t\t\ti, overwrittenProps, p, pt, propLookup, changed, killProps, record, killed;\n\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\ti = target.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (this._kill(vars, target[i], overwritingTween)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._targets) {\n\t\t\t\t\ti = this._targets.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (target === this._targets[i]) {\n\t\t\t\t\t\t\tpropLookup = this._propLookup[i] || {};\n\t\t\t\t\t\t\tthis._overwrittenProps = this._overwrittenProps || [];\n\t\t\t\t\t\t\toverwrittenProps = this._overwrittenProps[i] = vars ? this._overwrittenProps[i] || {} : \"all\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (target !== this.target) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\tpropLookup = this._propLookup;\n\t\t\t\t\toverwrittenProps = this._overwrittenProps = vars ? this._overwrittenProps || {} : \"all\";\n\t\t\t\t}\n\n\t\t\t\tif (propLookup) {\n\t\t\t\t\tkillProps = vars || propLookup;\n\t\t\t\t\trecord = (vars !== overwrittenProps && overwrittenProps !== \"all\" && vars !== propLookup && (typeof(vars) !== \"object\" || !vars._tempKill)); //_tempKill is a super-secret way to delete a particular tweening property but NOT have it remembered as an official overwritten property (like in BezierPlugin)\n\t\t\t\t\tif (overwritingTween && (TweenLite.onOverwrite || this.vars.onOverwrite)) {\n\t\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\t\tif (propLookup[p]) {\n\t\t\t\t\t\t\t\tif (!killed) {\n\t\t\t\t\t\t\t\t\tkilled = [];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tkilled.push(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((killed || !vars) && !_onOverwrite(this, overwritingTween, target, killed)) { //if the onOverwrite returned false, that means the user wants to override the overwriting (cancel it).\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\tif ((pt = propLookup[p])) {\n\t\t\t\t\t\t\tif (simultaneousOverwrite) { //if another tween overwrites this one and they both start at exactly the same time, yet this tween has already rendered once (for example, at 0.001) because it's first in the queue, we should revert the values to where they were at 0 so that the starting values aren't contaminated on the overwriting tween.\n\t\t\t\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p](pt.s);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.s;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pt.pg && pt.t._kill(killProps)) {\n\t\t\t\t\t\t\t\tchanged = true; //some plugins need to be notified so they can perform cleanup tasks first\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!pt.pg || pt.t._overwriteProps.length === 0) {\n\t\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\t\t\t} else if (pt === this._firstPT) {\n\t\t\t\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete propLookup[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (record) {\n\t\t\t\t\t\t\toverwrittenProps[p] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._firstPT && this._initted) { //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tif (this._notifyPluginsOfEnabled) {\n\t\t\t\tTweenLite._onPluginEvent(\"_onDisable\", this);\n\t\t\t}\n\t\t\tthis._firstPT = this._overwrittenProps = this._startAt = this._onUpdate = null;\n\t\t\tthis._notifyPluginsOfEnabled = this._active = this._lazy = false;\n\t\t\tthis._propLookup = (this._targets) ? {} : [];\n\t\t\tAnimation.prototype.invalidate.call(this);\n\t\t\tif (this.vars.immediateRender) {\n\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\tthis.render(Math.min(0, -this._delay)); //in case delay is negative.\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (enabled && this._gc) {\n\t\t\t\tvar targets = this._targets,\n\t\t\t\t\ti;\n\t\t\t\tif (targets) {\n\t\t\t\t\ti = targets.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tthis._siblings[i] = _register(targets[i], this, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._siblings = _register(this.target, this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\tAnimation.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t\tif (this._notifyPluginsOfEnabled) if (this._firstPT) {\n\t\t\t\treturn TweenLite._onPluginEvent((enabled ? \"_onEnable\" : \"_onDisable\"), this);\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n//----TweenLite static methods -----------------------------------------------------\n\n\t\tTweenLite.to = function(target, duration, vars) {\n\t\t\treturn new TweenLite(target, duration, vars);\n\t\t};\n\n\t\tTweenLite.from = function(target, duration, vars) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn new TweenLite(target, duration, vars);\n\t\t};\n\n\t\tTweenLite.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn new TweenLite(target, duration, toVars);\n\t\t};\n\n\t\tTweenLite.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\treturn new TweenLite(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, lazy:false, useFrames:useFrames, overwrite:0});\n\t\t};\n\n\t\tTweenLite.set = function(target, vars) {\n\t\t\treturn new TweenLite(target, 0, vars);\n\t\t};\n\n\t\tTweenLite.getTweensOf = function(target, onlyActive) {\n\t\t\tif (target == null) { return []; }\n\t\t\ttarget = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\t\t\tvar i, a, j, t;\n\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\ti = target.length;\n\t\t\t\ta = [];\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ta = a.concat(TweenLite.getTweensOf(target[i], onlyActive));\n\t\t\t\t}\n\t\t\t\ti = a.length;\n\t\t\t\t//now get rid of any duplicates (tweens of arrays of objects could cause duplicates)\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tt = a[i];\n\t\t\t\t\tj = i;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\tif (t === a[j]) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ta = _register(target).concat();\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (a[i]._gc || (onlyActive && !a[i].isActive())) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\t\tTweenLite.killTweensOf = TweenLite.killDelayedCallsTo = function(target, onlyActive, vars) {\n\t\t\tif (typeof(onlyActive) === \"object\") {\n\t\t\t\tvars = onlyActive; //for backwards compatibility (before \"onlyActive\" parameter was inserted)\n\t\t\t\tonlyActive = false;\n\t\t\t}\n\t\t\tvar a = TweenLite.getTweensOf(target, onlyActive),\n\t\t\t\ti = a.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\ta[i]._kill(vars, target);\n\t\t\t}\n\t\t};\n\n\n\n/*\n * ----------------------------------------------------------------\n * TweenPlugin   (could easily be split out as a separate file/class, but included for ease of use (so that people don't need to include another script call before loading plugins which is easy to forget)\n * ----------------------------------------------------------------\n */\n\t\tvar TweenPlugin = _class(\"plugins.TweenPlugin\", function(props, priority) {\n\t\t\t\t\tthis._overwriteProps = (props || \"\").split(\",\");\n\t\t\t\t\tthis._propName = this._overwriteProps[0];\n\t\t\t\t\tthis._priority = priority || 0;\n\t\t\t\t\tthis._super = TweenPlugin.prototype;\n\t\t\t\t}, true);\n\n\t\tp = TweenPlugin.prototype;\n\t\tTweenPlugin.version = \"1.19.0\";\n\t\tTweenPlugin.API = 2;\n\t\tp._firstPT = null;\n\t\tp._addTween = _addPropTween;\n\t\tp.setRatio = _setRatio;\n\n\t\tp._kill = function(lookup) {\n\t\t\tvar a = this._overwriteProps,\n\t\t\t\tpt = this._firstPT,\n\t\t\t\ti;\n\t\t\tif (lookup[this._propName] != null) {\n\t\t\t\tthis._overwriteProps = [];\n\t\t\t} else {\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (lookup[a[i]] != null) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tif (lookup[pt.n] != null) {\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\tpt._prev = null;\n\t\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp._mod = p._roundProps = function(lookup) {\n\t\t\tvar pt = this._firstPT,\n\t\t\t\tval;\n\t\t\twhile (pt) {\n\t\t\t\tval = lookup[this._propName] || (pt.n != null && lookup[ pt.n.split(this._propName + \"_\").join(\"\") ]);\n\t\t\t\tif (val && typeof(val) === \"function\") { //some properties that are very plugin-specific add a prefix named after the _propName plus an underscore, so we need to ignore that extra stuff here.\n\t\t\t\t\tif (pt.f === 2) {\n\t\t\t\t\t\tpt.t._applyPT.m = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.m = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t};\n\n\t\tTweenLite._onPluginEvent = function(type, tween) {\n\t\t\tvar pt = tween._firstPT,\n\t\t\t\tchanged, pt2, first, last, next;\n\t\t\tif (type === \"_onInitAllProps\") {\n\t\t\t\t//sorts the PropTween linked list in order of priority because some plugins need to render earlier/later than others, like MotionBlurPlugin applies its effects after all x/y/alpha tweens have rendered on each frame.\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next;\n\t\t\t\t\tpt2 = first;\n\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t\tpt = tween._firstPT = first;\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.pg) if (typeof(pt.t[type]) === \"function\") if (pt.t[type]()) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tTweenPlugin.activate = function(plugins) {\n\t\t\tvar i = plugins.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (plugins[i].API === TweenPlugin.API) {\n\t\t\t\t\t_plugins[(new plugins[i]())._propName] = plugins[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\t//provides a more concise way to define plugins that have no dependencies besides TweenPlugin and TweenLite, wrapping common boilerplate stuff into one function (added in 1.9.0). You don't NEED to use this to define a plugin - the old way still works and can be useful in certain (rare) situations.\n\t\t_gsDefine.plugin = function(config) {\n\t\t\tif (!config || !config.propName || !config.init || !config.API) { throw \"illegal plugin definition.\"; }\n\t\t\tvar propName = config.propName,\n\t\t\t\tpriority = config.priority || 0,\n\t\t\t\toverwriteProps = config.overwriteProps,\n\t\t\t\tmap = {init:\"_onInitTween\", set:\"setRatio\", kill:\"_kill\", round:\"_mod\", mod:\"_mod\", initAll:\"_onInitAllProps\"},\n\t\t\t\tPlugin = _class(\"plugins.\" + propName.charAt(0).toUpperCase() + propName.substr(1) + \"Plugin\",\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tTweenPlugin.call(this, propName, priority);\n\t\t\t\t\t\tthis._overwriteProps = overwriteProps || [];\n\t\t\t\t\t}, (config.global === true)),\n\t\t\t\tp = Plugin.prototype = new TweenPlugin(propName),\n\t\t\t\tprop;\n\t\t\tp.constructor = Plugin;\n\t\t\tPlugin.API = config.API;\n\t\t\tfor (prop in map) {\n\t\t\t\tif (typeof(config[prop]) === \"function\") {\n\t\t\t\t\tp[map[prop]] = config[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\tPlugin.version = config.version;\n\t\t\tTweenPlugin.activate([Plugin]);\n\t\t\treturn Plugin;\n\t\t};\n\n\n\t\t//now run through all the dependencies discovered and if any are missing, log that to the console as a warning. This is why it's best to have TweenLite load last - it can check all the dependencies for you.\n\t\ta = window._gsQueue;\n\t\tif (a) {\n\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\ta[i]();\n\t\t\t}\n\t\t\tfor (p in _defLookup) {\n\t\t\t\tif (!_defLookup[p].func) {\n\t\t\t\t\twindow.console.log(\"GSAP encountered missing dependency: \" + p);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t_tickerActive = false; //ensures that the first official animation forces a ticker.tick() to update the time when it is instantiated\n\n})((typeof(module) !== \"undefined\" && module.exports && typeof(global) !== \"undefined\") ? global : this || window, \"TweenMax\");\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gsap/src/uncompressed/TweenMax.js\n ** module id = 16\n ** module chunks = 0\n **/","module.exports = __webpack_amd_options__;\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/amd-options.js\n ** module id = 17\n ** module chunks = 0\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\nimport { ComponentTypes } from \"../ComponentTypes\";\n\n/**\n * The StyleManager class is used for storing styles for canvas elements and html elements.\n * @class StyleManager\n */\nexport class StyleManager {\n    static Styles: { [id: string]: any } = {};\n    static HtmlStyles: { [id: string]: any } = {};\n\n    static cleanup() {\n        // NOTE(psulek) perf-tunning\n        // - cleanup of 'StyleManager.HtmlStyles' is safe because it is used only in preloader active phase and not in runtime!\n        // - do not cleanup 'StyleManager.Styles' because this is used in runtime\n        StyleManager.HtmlStyles = null;\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param data any\n     * @return void\n     */\n    private static log(data: any): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"StyleManager\", data);\n        }\n    }\n\n    /**\n     * Parse style elements and store them by type to static variables.\n     * @method parseElements\n     * @param startNode Element\n     * @return void\n     */\n    static parseElements(startNode: Element): void {\n        if (!startNode) {\n            return;\n        }\n\n        const nodes: Array<Element> = StyleManager.getNodesList(startNode.firstElementChild)\n            .reverse()\n            .filter((node: Element) => node.hasAttribute(\"Class\") && node.getAttribute(\"Class\") !== \"\");\n\n        nodes\n            .filter((node: Element) =>\n                EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes.Style),\n            )\n            .forEach((node: Element) => {\n                const style: any = EngineComponentFactory.get(node.getAttribute(\"Class\"));\n                style.create(node);\n                StyleManager.Styles[node.nodeName] = style;\n            });\n\n        nodes\n            .filter((node: Element) =>\n                EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes.HtmlStyle),\n            )\n            .forEach((node: Element) => {\n                const style: any = EngineComponentFactory.get(node.getAttribute(\"Class\"));\n                style.create(node);\n                StyleManager.HtmlStyles[node.nodeName] = style;\n            });\n    }\n\n    /**\n     * Recursively extracts sibling nodes.\n     * @method getNodesList\n     * @param node Element\n     * @param nodeList Array<Element>\n     * @return Array<Element>\n     */\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\n        if (!node) {\n            return nodeList;\n        }\n\n        if (node.nextElementSibling) {\n            nodeList = StyleManager.getNodesList(node.nextElementSibling, nodeList);\n        }\n\n        return nodeList.concat(node);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/StyleManager.ts\n **/","import { StringUtils } from \"neo-common\";\n\n/**\n * @class Attributes\n */\nexport class Attributes {\n    /**\n     * @method assignIntAttribute\n     * @param {Element} node\n     * @param {string} attribute - XML node attribute, constant from ImageElementAttributes class\n     * @param {number} defaultValue - value that is set if falsy value is read from node\n     * @param radix\n     * @return {number} parsed attribute value\n     */\n    static assignIntAttribute(node: Element, attribute: string, defaultValue: number, radix?: number): number {\n        if (!node.hasAttribute(attribute)) {\n            return defaultValue;\n        }\n\n        return parseInt(node.getAttribute(attribute), radix);\n    }\n\n    /**\n     * @method assignFloatAttribute\n     * @param {Element} node\n     * @param {string} attribute - XML node attribute, constant from ImageElementAttributes class\n     * @param {number} defaultValue - value that is set if falsy value is read from node\n     * @return {number} parsed attribute value\n     */\n    static assignFloatAttribute(node: Element, attribute: string, defaultValue: number): number {\n        if (!node.hasAttribute(attribute)) {\n            return defaultValue;\n        }\n\n        return parseFloat(node.getAttribute(attribute));\n    }\n\n    /**\n     * @method assignBooleanAttribute\n     * @param {Element} node\n     * @param {string} attribute - XML node attribute, constant from ImageElementAttributes class\n     * @param {number} defaultValue - value that is set if falsy value is read from node\n     * @return {boolean} parsed attribute value\n     */\n    static assignBooleanAttribute(node: Element, attribute: string, defaultValue: boolean): boolean {\n        if (!node.hasAttribute(attribute)) {\n            return defaultValue;\n        }\n\n        return StringUtils.parseBoolean(node.getAttribute(attribute));\n    }\n\n    /**\n     * @method assignBooleanAttribute\n     * @param {Element} node\n     * @param {string} attribute - XML node attribute, constant from ImageElementAttributes class\n     * @param {number} defaultValue - value that is set if falsy value is read from node\n     * @return {boolean} parsed attribute value\n     */\n    static assignStringAttribute(node: Element, attribute: string, defaultValue: any): any {\n        if (!node.hasAttribute(attribute)) {\n            return defaultValue;\n        }\n\n        return node.getAttribute(attribute);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Attributes.ts\n **/","import { Scaling } from \"./Scaling\";\n\n/**\n * @class CustomUtils\n * @author Marek Turkovic\n * 25.10.2019\n * todo Implement not only on baseResponse, but freespinsRespons etc..\n */\nexport class CustomUtils {\n    public static getBlendMode(blendMode: number): number {\n        if (Scaling.IsIOs) {\n            if (blendMode == 1) {\n                blendMode = 3;\n            }\n        }\n\n        return blendMode;\n    }\n\n    public static updateSpineData(spineData: JSON): JSON {\n        if (Scaling.IsIOs) {\n            if (spineData != null) {\n                let spineTextData = JSON.stringify(spineData);\n                spineTextData = spineTextData.split('\"blend\":\"additive\"').join('\"blend\":\"screen\"');\n                spineData = JSON.parse(spineTextData);\n            }\n        }\n\n        return spineData;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/CustomUtils.ts\n **/","import { IAnimationFrame } from \"./Types\";\n\nexport class AnimationFramePool {\n    private static framesPool: Array<IAnimationFrame> = [];\n\n    static registerFrame(frame: IAnimationFrame): boolean {\n        var pool = AnimationFramePool.framesPool;\n        for (var i = 0; i < pool.length; i++) {\n            if (pool[i].frame_uid === frame.frame_uid) {\n                //frame.log(`already registered on Stage controller frame pool!`, true);\n                return false;\n            }\n        }\n\n        pool.push(frame);\n        return true;\n    }\n\n    static unregisterFrame(frame: IAnimationFrame): boolean {\n        var pool = AnimationFramePool.framesPool;\n        var idx = -1;\n        for (var i = 0; i < pool.length; i++) {\n            if (pool[i].frame_uid === frame.frame_uid) {\n                idx = i;\n                break;\n            }\n        }\n\n        var result = idx > -1;\n        if (result) {\n            // fail safe check\n            if (pool[idx].frame_uid === frame.frame_uid) {\n                pool.splice(idx, 1);\n            } else {\n                result = false;\n            }\n        }\n\n        return result;\n    }\n\n    static draw(): void {\n        // loop and paint all animation frames from pool\n        var pool = AnimationFramePool.framesPool;\n        for (var i = 0; i < pool.length; i++) {\n            var frame = pool[i];\n            frame.frame_draw();\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/AnimationFrame/Pool.ts\n **/","import { FrameTimer } from \"./FrameTimer\";\n\nexport class FrameTimerPool {\n    public static pool: Object = {};\n    public static paused: boolean = false;\n\n    public static add(key: string, item: any): void {\n        FrameTimerPool.pool[key] = item;\n    }\n\n    public static remove(key: string): void {\n        delete FrameTimerPool.pool[key];\n    }\n\n    public static pause(force: boolean = false): void {\n        if (FrameTimerPool.paused && !force) {\n            return;\n        }\n        for (let key in FrameTimerPool.pool) {\n            if (FrameTimerPool.pool[key] instanceof FrameTimer) {\n                FrameTimerPool.pool[key].pause();\n            }\n        }\n        FrameTimerPool.paused = true;\n    }\n\n    public static unpause(force: boolean = false): void {\n        if (!FrameTimerPool.paused && !force) {\n            return;\n        }\n        for (let key in FrameTimerPool.pool) {\n            if (FrameTimerPool.pool[key] instanceof FrameTimer) {\n                FrameTimerPool.pool[key].unpause();\n            }\n        }\n        FrameTimerPool.paused = false;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/FrameTimerPool.ts\n **/","import { JackpotCounter } from \"../Jackpot/JackpotCounter\";\nimport { JackpotHistoryDialog } from \"../Jackpot/JackpotHistoryDialog\";\nimport { Scaling } from \"../../../Utils/Scaling\";\nimport { CreateFrameTimer, FrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\nimport { JackpotGame } from \"../Jackpot/JackpotGame\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { Communication } from \"neo-games/Engine/index\";\nimport { GameManager } from \"../../../Managers/GameManager\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { GameData } from \"../Datas/GameData\";\nimport { DataManager } from \"../../../Managers/DataManager\";\n\ntype IProgressiveBonusLevel = Communication.Game.IProgressiveBonusLevel;\ntype ProgressiveBonusGetInfoResponse = Communication.Game.ProgressiveBonusGetInfoResponse;\n\nexport class Jackpot {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    public static readonly JackpotTheme: string = \"SPJackpot\";\n\n    public static Height: number = 0;\n\n    private static BonusId: number = -1;\n    private static CountersCount: number = 4;\n\n    private static WidgetRoot: HTMLElement;\n    private static GameRoot: HTMLElement;\n    private static Counters: Array<JackpotCounter> = [];\n    private static HistoryDialogs: Array<JackpotHistoryDialog> = [];\n    private static Game: JackpotGame;\n\n    private static RefreshInterval: number = 15; //in seconds\n    private static RefreshTimerId: number;\n\n    private static TouchEvent: any;\n    private static Offline: boolean = false;\n\n    private static Timer: FrameTimerEventEmitter;\n\n    //******************************************************************************************************************\n    //  INITIALIZE & SHOW\n    //******************************************************************************************************************\n\n    public static initialize(): void {\n        if (AppContext && AppContext.gameConfiguration.ProgressiveBonusId > -1) {\n            document.body.classList.add(\"jpt-on\");\n            Jackpot.WidgetRoot = document.getElementById(\"jackpotWidget\");\n            Jackpot.GameRoot = document.getElementById(\"jackpotGame\");\n            Jackpot.BonusId = AppContext.gameConfiguration.ProgressiveBonusId;\n\n            Jackpot.createCounters();\n            Jackpot.createHistoryDialogs();\n            // Jackpot.createBonusGame();\n\n            Jackpot.bindElements();\n\n            Jackpot.getBonusInfo(Jackpot.initJackpotDataReceived);\n\n            if (GameManager.gameClient) {\n                GameManager.gameClient.setBonusId(Jackpot.BonusId);\n            }\n        } else {\n            Jackpot.clearJackpot();\n        }\n    }\n\n    public static reinitialize(): void {\n        if (Jackpot.Offline) {\n            Jackpot.Offline = false;\n            Jackpot.refreshBonusInfo();\n            Jackpot.refreshCounters();\n        }\n    }\n\n    public static show(): void {\n        if (Jackpot.WidgetRoot) {\n            if (Jackpot.Counters.length > 0) {\n                for (let i = 0; i < Jackpot.CountersCount; i++) {\n                    Jackpot.Counters[i].createCurrency(DataManager.getDataById(GameData.DataCurrency));\n                    Jackpot.HistoryDialogs[i].updateDataWithCurrency();\n                }\n\n                Jackpot.Height = Jackpot.Counters[0].getHeight();\n                Scaling.PortraitMobileRatio = 0.76; //ToDo hot fix 222732\n                Scaling.resizeRoot();\n            }\n        }\n    }\n\n    private static clearJackpot(): void {\n        let jackpotWidget = document.getElementById(\"jackpotWidget\");\n        let jackpotGame = document.getElementById(\"jackpotGame\");\n        if (jackpotWidget && jackpotWidget.parentNode && jackpotGame && jackpotGame.parentNode) {\n            jackpotWidget.parentNode.removeChild(jackpotWidget);\n            jackpotGame.parentNode.removeChild(jackpotGame);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CREATE\n    //******************************************************************************************************************\n\n    private static createCounters(): void {\n        if (Jackpot.WidgetRoot) {\n            Jackpot.getCustomContent(\"jackpotLogo.jpg\", Jackpot.createLogo, Jackpot.createLogo);\n\n            Jackpot.createElement(\"div\", \"jackpotCountersBg\", Jackpot.WidgetRoot);\n            let holder = Jackpot.createElement(\"div\", \"jackpotCounters\", Jackpot.WidgetRoot);\n            holder.id = \"jackpotCounters\";\n\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                let counter = new JackpotCounter(i + 1, holder, Jackpot.refreshCounters);\n\n                Jackpot.Counters.push(counter);\n            }\n        }\n    }\n\n    private static createLogo(contentUrl: string = \"\"): void {\n        let logo = Jackpot.createElement(\"div\", \"jackpotLogo\", Jackpot.WidgetRoot);\n        logo = Jackpot.createElement(\"div\", \"\", logo);\n        logo.id = \"jackpotLogo\";\n\n        if (contentUrl != \"\") {\n            logo.style.background = `url(${contentUrl})`;\n        }\n    }\n\n    private static createHistoryDialogs(): void {\n        if (Jackpot.WidgetRoot) {\n            let holder = Jackpot.createElement(\"div\", \"jackpotHistory\", Jackpot.WidgetRoot);\n\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                let dialog = new JackpotHistoryDialog(i + 1, holder);\n\n                Jackpot.HistoryDialogs.push(dialog);\n            }\n        }\n    }\n\n    private static createBonusGame(): void {\n        if (Jackpot.GameRoot) {\n            let holder = Jackpot.createElement(\"div\", \"jackpotGameHolder\", Jackpot.GameRoot);\n            Jackpot.Game = new JackpotGame(holder);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  REFRESH\n    //******************************************************************************************************************\n\n    public static refreshCounters(): void {\n        for (let i = 0; i < Jackpot.CountersCount; i++) {\n            Jackpot.Counters[i].refreshWithReset();\n        }\n    }\n\n    public static showError(useResetAnim: boolean = false): void {\n        clearTimeout(this.RefreshTimerId);\n\n        if (Jackpot.WidgetRoot) {\n            if (Jackpot.Counters && Jackpot.HistoryDialogs) {\n                Jackpot.Offline = true;\n\n                for (let i = 0; i < Jackpot.CountersCount; i++) {\n                    Jackpot.Counters[i].error(useResetAnim);\n                    Jackpot.HistoryDialogs[i].error(useResetAnim);\n                }\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  REFRESH\n    //******************************************************************************************************************\n\n    public static refreshBonusInfo(): void {\n        clearTimeout(this.RefreshTimerId);\n\n        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive);\n    }\n\n    public static refreshBonusInfoInMiniGame(overrideLevelData: IProgressiveBonusLevel): void {\n        clearTimeout(this.RefreshTimerId);\n\n        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive, { overrideLeveldata: overrideLevelData, priority: true });\n    }\n\n    public static refreshBonusInfoWithWinValue(overrideLevelData: IProgressiveBonusLevel): void {\n        clearTimeout(this.RefreshTimerId);\n\n        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive, {\n            overrideLeveldata: overrideLevelData,\n            priority: true,\n            fromMiniGame: overrideLevelData.code,\n        });\n    }\n\n    public static refreshBonusInfoBeforeSpin(spinCallback: () => void): void {\n        clearTimeout(this.RefreshTimerId);\n\n        Jackpot.getBonusInfoBeforeSpin(spinCallback, { priority: true });\n    }\n\n    //******************************************************************************************************************\n    //  REQUESTS\n    //******************************************************************************************************************\n\n    private static getBonusInfo(\n        callback: (response: ProgressiveBonusGetInfoResponse, customData?: any) => void,\n        customData?: any,\n    ): void {\n        if (GameManager.gameClient) {\n            GameManager.gameClient\n                .sendProgressiveBonusGetInfoRequest(Jackpot.BonusId)\n                .then((response: ProgressiveBonusGetInfoResponse) => {\n                    callback(response, customData);\n                    return null;\n                })\n                .catch((error) => {\n                    Jackpot.showError(true);\n                });\n        }\n    }\n\n    private static getBonusInfoBeforeSpin(callback: () => void, customData?: any): void {\n        if (GameManager.gameClient) {\n            GameManager.gameClient\n                .sendProgressiveBonusGetInfoRequest(Jackpot.BonusId)\n                .then((response: ProgressiveBonusGetInfoResponse) => {\n                    Jackpot.jackpotDataReceive(response, customData);\n                    callback();\n                    return null;\n                })\n                .catch((error) => {\n                    Jackpot.showError(true);\n                });\n        }\n    }\n\n    //******************************************************************************************************************\n    //  HANDLE RESPONSE\n    //******************************************************************************************************************\n\n    private static initJackpotDataReceived(response: ProgressiveBonusGetInfoResponse, customData?: any): void {\n        if (response != null) {\n            Jackpot.RefreshInterval = response.refreshInterval;\n\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                Jackpot.Counters[i].initialize(response.levels[i], response.timestamp);\n                Jackpot.HistoryDialogs[i].initialize(response.levels[i]);\n            }\n        } else {\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                Jackpot.Counters[i].error();\n                Jackpot.HistoryDialogs[i].error();\n            }\n        }\n\n        Jackpot.RefreshTimerId = setTimeout(Jackpot.refreshBonusInfo, Jackpot.RefreshInterval * 1000);\n    }\n\n    private static jackpotDataReceive(response: ProgressiveBonusGetInfoResponse, customData?: any): void {\n        if (response != null) {\n            Jackpot.RefreshInterval = response.refreshInterval;\n\n            let winOverride = customData != null && customData[\"overrideLeveldata\"] != null;\n            let priority = customData != null && customData[\"priority\"] != null;\n            let fromMiniGame =\n                customData != null && customData[\"fromMiniGame\"] != null ? customData[\"fromMiniGame\"] : \"\";\n\n            if (winOverride) {\n                response = Jackpot.updateReponseData(response, customData[\"overrideLeveldata\"]);\n            }\n\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                Jackpot.Counters[i].assign(\n                    response.levels[i],\n                    response.timestamp,\n                    priority,\n                    response.levels[i][\"overridedLastWinAmount\"],\n                    fromMiniGame == response.levels[i].code,\n                );\n                Jackpot.HistoryDialogs[i].assign(response.levels[i]);\n            }\n        } else {\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                Jackpot.Counters[i].error();\n                Jackpot.HistoryDialogs[i].error();\n            }\n        }\n\n        Jackpot.RefreshTimerId = setTimeout(Jackpot.refreshBonusInfo, Jackpot.RefreshInterval * 1000);\n    }\n\n    private static updateReponseData(\n        response: ProgressiveBonusGetInfoResponse,\n        overrideLevelData: IProgressiveBonusLevel,\n    ): ProgressiveBonusGetInfoResponse {\n        if (overrideLevelData != null) {\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                if (response.levels[i].code == overrideLevelData.code) {\n                    //to always show minigame win value in counter\n                    if (overrideLevelData.lastWinAmount != null) {\n                        response.levels[i][\"overridedLastWinAmount\"] = overrideLevelData.lastWinAmount;\n                    } else {\n                        response.levels[i] = overrideLevelData;\n                    }\n                }\n            }\n        }\n\n        return response;\n    }\n\n    //******************************************************************************************************************\n    //  BIND EVENTS\n    //******************************************************************************************************************\n\n    private static bindElements(): void {\n        for (let i = 0; i < Jackpot.Counters.length; i++) {\n            if (window[\"CHANNEL\"] === \"mobile\") {\n                Jackpot.Counters[i]\n                    .getRoot()\n                    .addEventListener(\"click\", (event: Event) => Jackpot.toggleHistoryDialog(event, i));\n\n                //prevent close when clicked into dialog\n                for (let i = 0; i < Jackpot.HistoryDialogs.length; i++) {\n                    Jackpot.HistoryDialogs[i]\n                        .getRoot()\n                        .addEventListener(\"click\", (event: Event) => Jackpot.preventDefault(event));\n                    Jackpot.HistoryDialogs[i]\n                        .getRoot()\n                        .addEventListener(\"touchstart\", (event: Event) => Jackpot.preventDefault(event));\n                }\n            } else {\n                Jackpot.Counters[i].getRoot().addEventListener(\"click\", Jackpot.showHistoryDialog.bind(this, i));\n                Jackpot.Counters[i].getRoot().addEventListener(\"mouseover\", Jackpot.showHistoryDialog.bind(this, i));\n                Jackpot.Counters[i].getRoot().addEventListener(\"mouseout\", Jackpot.hideHistoryDialog.bind(this, i));\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  HANDLE HISTORY DIALOGS\n    //******************************************************************************************************************\n\n    public static closeAllHistoryDialogs(): void {\n        if (Jackpot.WidgetRoot) {\n            Jackpot.WidgetRoot.removeEventListener(\"click\", Jackpot.closeAllHistoryDialogs);\n            for (let i = 0; i < Jackpot.HistoryDialogs.length; i++) {\n                Jackpot.HistoryDialogs[i].closeDialog();\n            }\n        }\n    }\n\n    private static showHistoryDialog(index: number): void {\n        this.closeAllHistoryDialogs();\n\n        if (Jackpot.HistoryDialogs[index]) {\n            if (window[\"CHANNEL\"] === \"mobile\") {\n                HtmlController.dispatchAction(\"\");\n                Jackpot.WidgetRoot.addEventListener(\"click\", Jackpot.closeAllHistoryDialogs);\n            }\n\n            Jackpot.TouchEvent = Jackpot.hideHistoryDialog.bind(this, index);\n            document.addEventListener(\"touchstart\", Jackpot.TouchEvent);\n\n            Jackpot.HistoryDialogs[index].openDialog();\n        }\n    }\n\n    private static toggleHistoryDialog(event: Event, index: number): void {\n        event.preventDefault();\n        event.stopPropagation();\n\n        if (Jackpot.HistoryDialogs[index] && !Jackpot.HistoryDialogs[index].isOpen()) {\n            this.showHistoryDialog(index);\n        } else {\n            this.closeAllHistoryDialogs();\n        }\n    }\n\n    private static hideHistoryDialog(index: number): void {\n        if (Jackpot.HistoryDialogs[index]) {\n            Jackpot.HistoryDialogs[index].closeDialog();\n            document.removeEventListener(\"touchstart\", Jackpot.TouchEvent);\n        }\n    }\n\n    private static preventDefault(event: Event): void {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    //******************************************************************************************************************\n    //  MINI GAME\n    //******************************************************************************************************************\n\n    /**\n     * Send minigame init request\n     * @param autostart - start minigame after init request past\n     * @param callback - if init request is ok and autoplay mode is true, run callback (disable base ui)\n     */\n    public static initMiniGame(autostart: boolean, callback: () => void): void {\n        if (!Jackpot.Game) {\n            Jackpot.createBonusGame();\n        }\n\n        Jackpot.Game.init(autostart, callback);\n    }\n\n    public static startMiniGame(): void {\n        if (!Jackpot.Game.hasStartedGame()) {\n            Jackpot.Game.start();\n        }\n    }\n\n    public static hasActiveGame(): boolean {\n        if (!Jackpot.Game) {\n            return false;\n        }\n\n        return Jackpot.Game.hasStartedGame();\n    }\n\n    public static hasInitializedGame(): boolean {\n        return Jackpot.Game && Jackpot.Game.hasInitializedGame();\n    }\n\n    /**\n     * Return if the mini game is prepared and ready to play.\n     */\n    public static hasMiniGame(): boolean {\n        //check already running game\n        if (Jackpot.Game && Jackpot.Game.hasStartedGame()) {\n            return true;\n        }\n\n        //check counters\n        if (Jackpot.countersInError()) {\n            return false;\n        }\n\n        if (Jackpot.Game && Jackpot.Game.hasInitializedGame()) {\n            return true;\n        }\n\n        return GameManager.gameResponse[\"progressiveBonus\"] && GameManager.gameResponse[\"progressiveBonus\"].ticket;\n    }\n\n    public static disableMiniGameAutostart(): void {\n        if (Jackpot.Game) {\n            Jackpot.Game.disableAutostart();\n        }\n    }\n\n    public static waitForMiniGameInitialization(): boolean {\n        return (\n            AppContext &&\n            (AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"WithinGameRound\" ||\n                AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"AfterGameRound\")\n        );\n    }\n\n    //******************************************************************************************************************\n    //  HELPER\n    //******************************************************************************************************************\n\n    private static createElement(tag: string, className: string, rootElem?: HTMLElement): HTMLElement {\n        let elem = document.createElement(tag);\n        elem.setAttribute(\"class\", className);\n\n        if (rootElem) {\n            rootElem.appendChild(elem);\n        }\n\n        return elem;\n    }\n\n    private static countersInError(): boolean {\n        if (Jackpot.Counters && Jackpot.Counters.length > 0) {\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\n                if (Jackpot.Counters[i].hasError()) {\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    }\n\n    private static getCustomContent(name: string, success: Function, error: Function): void {\n        if (AppContext.gameConfiguration == null) {\n            if (error) error();\n            return;\n        }\n\n        if (AppContext.gameConfiguration.StaticContentUrl == \"\") {\n            if (error) error();\n            return;\n        }\n\n        let theme = AppContext.gameConfiguration.ProgressiveBonusTheme;\n        if (theme == \"\") {\n            if (AppContext.gameConfiguration.UseJackpotLocalization) {\n                theme = Jackpot.JackpotTheme;\n            } else {\n                if (error) error();\n                return;\n            }\n        }\n\n        const staticContentUrl = AppContext.gameConfiguration.StaticContentUrl;\n        const spbFolder = \"SynotProgressiveBonus\";\n        const url = `${staticContentUrl}${spbFolder}/${theme}/${window[\"QUALITY\"]}/${name}`;\n        let img = document.createElement(\"img\");\n        img.setAttribute(\"src\", url);\n\n        img.addEventListener(\"load\", (ev) => {\n            if (success) success(url);\n        });\n        img.addEventListener(\"error\", (ev) => {\n            if (error) error();\n        });\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Bonuses/Jackpot.ts\n **/","import { StringUtils, Utils } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { GsapEffects } from \"../../../Components/Effects/GsapEffects\";\nimport { TweenLite } from \"gsap\";\nimport { Languages } from \"../../../Utils/Languages\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { Tweens } from \"../../../Components/Effects/Tweens\";\n\ntype IProgressiveBonusLevel = Communication.Game.IProgressiveBonusLevel;\n\nexport class JackpotCounter {\n    //******************************************************************************************************************\n    //  SEETTINGS\n    //******************************************************************************************************************\n\n    private static LeadingZeroLetter: string = \" \";\n\n    private static WinAnimDuration: number = 240; //in frames\n\n    private static WinFromMinigameAnimDuration: number = 540; //in frames\n\n    private static Length: number = 10;\n\n    private static DecimalPlaces: number = 2;\n\n    private static DigitAnimDuration: number = 0.1; //in seconds\n\n    //could be in conflict with priority assign (if reset animations haven't been finished)\n    private static MinResetAnimCount: number = 15;\n\n    private static UseThousandsSeparator: boolean = true;\n\n    private static MaxNextTimeDiff: number = 2 * 60; //in seconds\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected root: HTMLElement;\n\n    protected currentData: IProgressiveBonusLevel;\n\n    protected currentCounterValue: number;\n\n    protected previousCounterValue: number;\n\n    protected nextDate: number;\n\n    protected nextValue: number;\n\n    protected previousValue: number;\n\n    protected lastWinValue: number;\n\n    protected lastWinCount: number;\n\n    protected overridedLastWinValue: number;\n\n    protected serverTimeOffset: number;\n\n    protected resetAnimCount: number;\n\n    protected isCounting: boolean;\n\n    protected inError: boolean;\n\n    protected winFromMinigame: boolean;\n\n    protected winAnimationDelay: FrameTimerEventEmitter;\n\n    protected mainTween: TweenLite;\n\n    protected digitTween: TweenLite;\n\n    protected decimalDot: HTMLElement;\n\n    protected idleValue: number;\n\n    protected lastUpdateTime: number;\n\n    protected resetCallback: Function;\n\n    protected digits: {\n        from: HTMLElement;\n        to: HTMLElement;\n    }[];\n\n    protected settings: {\n        width: number;\n        height: number;\n    };\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor(index: number, holder: HTMLElement, resetCallback: Function) {\n        if (AppContext.gameConfiguration != null) {\n            JackpotCounter.DecimalPlaces = AppContext.gameConfiguration.ShowDecimalPlaces;\n        }\n\n        this.root = this.createBaseLayout(index);\n        holder.appendChild(this.root);\n        this.createDigits();\n        this.createDecimalPoint();\n\n        this.currentCounterValue = 0;\n        this.previousCounterValue = 0;\n        this.lastWinValue = -1;\n        this.lastWinCount = -1;\n        this.overridedLastWinValue = -1;\n\n        this.winAnimationDelay = CreateFrameTimer(\"winAnimationDelayTimer\");\n        this.winAnimationDelay.on(FrameTimerEvents.Complete, this.winAnimationFinished.bind(this));\n\n        this.mainTween = null;\n        this.digitTween = null;\n        this.winFromMinigame = false;\n\n        this.lastUpdateTime = Date.now();\n        this.resetCallback = resetCallback;\n\n        this.reset();\n    }\n\n    //******************************************************************************************************************\n    //  CREATE\n    //******************************************************************************************************************\n\n    protected createBaseLayout(index: number): HTMLElement {\n        let root = this.createElement(\"div\", \"jackpotCounter l-\" + index);\n\n        //create childs\n        this.createElement(\"div\", \"jackpotFrame\", root);\n        let level = this.createElement(\"div\", \"jackpotLevel\", root);\n        this.createElement(\"div\", \"jackpotIconError\", level);\n\n        this.createElement(\"div\", \"jackpotDigitsHolder\", root);\n        this.createElement(\"div\", \"jackpotGradient\", root);\n        let currency = this.createElement(\"div\", \"jackpotCurrency\", root);\n\n        //create currency letters\n        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\n        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\n        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\n\n        return root;\n    }\n\n    public createCurrency(currency: string): void {\n        if (!StringUtils.isNullOrEmpty(currency)) {\n            let jackpotCurrencyLetters = this.root.getElementsByClassName(\"jackpotCurrencyLetter\");\n\n            for (let i = 0; i < jackpotCurrencyLetters.length; i++) {\n                if (currency.length > i) {\n                    jackpotCurrencyLetters[i].textContent = currency.charAt(i);\n                }\n            }\n\n            jackpotCurrencyLetters[0].parentElement.classList.add(\"ln-\" + currency.length);\n        }\n    }\n\n    protected createDigits(): void {\n        let digitsHolder = <HTMLElement>this.root.getElementsByClassName(\"jackpotDigitsHolder\")[0];\n        const digitsArray: Array<HTMLElement> = [];\n        this.digits = [];\n\n        let digit: HTMLElement;\n        for (let i = 0; i < JackpotCounter.Length; i++) {\n            let className =\n                i == JackpotCounter.Length - JackpotCounter.DecimalPlaces ? \"digits decimalOffset\" : \"digits\";\n            digit = this.createElement(\"div\", className, digitsHolder);\n            let from = this.createElement(\"div\", \"digit\", digit);\n            let to = this.createElement(\"div\", \"digit\", digit);\n\n            digitsArray.push(digit);\n            this.digits.push({ from: from, to: to });\n        }\n\n        if (JackpotCounter.UseThousandsSeparator) {\n            digitsHolder.classList.add(\"thousandsFormat\");\n\n            for (let i = 0; i < digitsArray.length; i++) {\n                const index = digitsArray.length - 1 - i;\n                const hasThousandsOffset =\n                    index > 0 && i > JackpotCounter.DecimalPlaces && (i + 1 - JackpotCounter.DecimalPlaces) % 3 == 0;\n\n                if (hasThousandsOffset && digitsArray[index] != null) {\n                    digitsArray[index].classList.add(\"thousandsOffset\");\n                }\n            }\n        }\n\n        //save digit height/width\n        this.settings = {\n            width: parseInt(window.getComputedStyle(digit).width),\n            height: parseInt(window.getComputedStyle(digit).height),\n        };\n    }\n\n    protected createDecimalPoint() {\n        let digitsHolder = <HTMLElement>this.root.getElementsByClassName(\"jackpotDigitsHolder\")[0];\n\n        if (JackpotCounter.DecimalPlaces > 0) {\n            this.decimalDot = this.createElement(\"div\", \"digit nDot\", digitsHolder);\n            this.decimalDot.style.right = JackpotCounter.DecimalPlaces * this.settings.width + \"px\";\n        }\n    }\n\n    //******************************************************************************************************************\n    //  INIT\n    //******************************************************************************************************************\n\n    public initialize(data: IProgressiveBonusLevel, serverTimestamp: string): void {\n        this.assign(data, serverTimestamp);\n    }\n\n    //******************************************************************************************************************\n    //  ASSIGN\n    //******************************************************************************************************************\n\n    public assign(\n        data: IProgressiveBonusLevel,\n        serverTimestamp: string,\n        priority: boolean = false,\n        overridedLastWinValue: number = -1,\n        winFromMinigame: boolean = false,\n    ): void {\n        this.currentData = data;\n\n        this.nextValue = this.normalizeValue(data.nextValue);\n        this.nextDate = Date.now() + (new Date(data.nextTimestamp).getTime() - new Date(serverTimestamp).getTime());\n        this.previousValue = this.normalizeValue(data.previousValue);\n        this.winFromMinigame = winFromMinigame;\n\n        const oldValuesReset = Date.now() - this.lastUpdateTime > JackpotCounter.MaxNextTimeDiff * 1000;\n\n        if (overridedLastWinValue > -1) {\n            this.overridedLastWinValue = this.normalizeValue(overridedLastWinValue);\n        }\n\n        //if current animated values are too old, force reset animation on all counters\n        if (oldValuesReset && this.resetCallback != null) {\n            this.resetCallback();\n            return;\n        }\n\n        //reset counter if it's in error\n        if (this.inError) {\n            this.removeError();\n            this.reset();\n            return;\n        }\n\n        if (!this.isCounting || priority) {\n            this.refresh();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  ERROR\n    //******************************************************************************************************************\n\n    public error(useResetAnim: boolean = false): void {\n        if (!this.inError) {\n            this.inError = true;\n            this.isCounting = false;\n\n            if (useResetAnim) {\n                this.resetMainTween();\n                this.resetDigitTween(true);\n                this.errorResetAnim();\n                return;\n            }\n\n            if (this.decimalDot) {\n                this.decimalDot.style.display = \"none\";\n            }\n\n            this.root.classList.add(\"jackpotError\");\n            const oldValue = this.formatValue(\n                this.previousCounterValue > 0 ? this.previousCounterValue.toString() : \"\",\n                true,\n            );\n            const newValue = this.formatValue(\"OFFLINE\", true);\n\n            this.resetDigitTween(true);\n            this.animateDigits(\n                oldValue,\n                newValue,\n                false,\n                false,\n                JackpotCounter.DigitAnimDuration * 2,\n                0,\n                \"linear\",\n                false,\n                null,\n            );\n        }\n    }\n\n    private errorResetAnim(): void {\n        this.root.classList.add(\"jackpotExpired\");\n    }\n\n    private checkError(): boolean {\n        if (this.inError) {\n            this.resetMainTween();\n            this.resetDigitTween();\n            this.isCounting = false;\n\n            return true;\n        }\n\n        return false;\n    }\n\n    private removeError(): void {\n        if (this.inError) {\n            this.inError = false;\n\n            this.root.classList.remove(\"jackpotError\");\n            if (this.decimalDot) {\n                this.decimalDot.style.display = \"block\";\n            }\n        }\n    }\n\n    public hasError(): boolean {\n        return this.inError;\n    }\n\n    public refreshWithReset(): void {\n        this.hasWin(); //update last wins to not showing old wins\n        this.root.classList.remove(\"jackpotWin\");\n        this.winAnimationDelay.stop();\n        this.resetMainTween();\n        this.resetDigitTween();\n        this.resetDigitsTween();\n        this.isCounting = false;\n        this.removeError();\n        this.reset(JackpotCounter.MinResetAnimCount - 3);\n    }\n\n    private resetDigitsTween(): void {\n        for (let i = 0; i < this.digits.length; i++) {\n            TweenLite.killTweensOf(this.digits[i].to);\n            TweenLite.killTweensOf(this.digits[i].from);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  COUNTING\n    //******************************************************************************************************************\n\n    protected animateDigits(\n        oldValue: string,\n        newValue: string,\n        useBitmap: boolean,\n        checkFirstDiff: boolean,\n        duration: number,\n        delay: number,\n        ease: string,\n        shuffle: boolean,\n        callback: () => void,\n    ): void {\n        let firstDigitIndex = 0;\n        if (checkFirstDiff) {\n            for (let i = 0; i < JackpotCounter.Length; i++) {\n                const oldDigit = oldValue.charAt(i);\n                const newDigit = newValue.charAt(i);\n\n                if (oldDigit !== newDigit) {\n                    firstDigitIndex = i;\n                    break;\n                }\n            }\n        }\n\n        for (let i = firstDigitIndex; i < JackpotCounter.Length; i++) {\n            const oldDigit = oldValue.charAt(i);\n            const newDigit = newValue.charAt(i);\n\n            this.animateDigit(\n                i,\n                oldDigit,\n                newDigit,\n                duration,\n                delay,\n                ease,\n                useBitmap,\n                shuffle ? (i % 2 === 0 ? 1 : -1) : 1,\n                i === JackpotCounter.Length - 1 ? callback : null,\n            );\n        }\n    }\n\n    protected animateDigit(\n        index: number,\n        fromValue: string,\n        toValue: string,\n        duration: number,\n        delay: number,\n        ease: string,\n        useBitmap: boolean,\n        direction: number,\n        callback: () => void,\n    ): void {\n        const from = this.digits[index].from;\n        this.setTransformY(from, 0, delay);\n        this.setDigitValue(from, fromValue, useBitmap, true);\n        TweenLite.fromTo(\n            from,\n            duration,\n            { y: 0 },\n            { y: this.settings.height * direction * -1, ease: ease, delay: delay },\n        );\n\n        const to = this.digits[index].to;\n        this.setTransformY(to, this.settings.height * direction, delay);\n        this.setDigitValue(to, toValue, useBitmap);\n        TweenLite.killTweensOf(to); //prevent tween from bad finishing, progress stop at 0.8 and don't emit onComplete\n        let tween = TweenLite.fromTo(\n            to,\n            duration,\n            { y: this.settings.height * direction },\n            { y: 0, ease: ease, delay: delay },\n        );\n\n        if (!Utils.isNullOrUndefined(callback)) {\n            this.digitTween = tween;\n            this.digitTween.eventCallback(\"onComplete\", callback, [], this);\n        }\n    }\n\n    protected setDigitValue(elem: HTMLElement, value: string, useBitmap: boolean, fromValue: boolean = false): void {\n        if (fromValue) {\n            if (useBitmap && elem.classList.contains(\"letter\")) {\n                useBitmap = false;\n            } else if (!useBitmap && !elem.classList.contains(\"letter\")) {\n                useBitmap = true;\n            }\n        }\n\n        if (value == null || value === JackpotCounter.LeadingZeroLetter) {\n            elem.className = \"digit leadingZero\";\n        } else {\n            if (!useBitmap) {\n                elem.textContent = value;\n                elem.className = \"digit letter\";\n            } else {\n                elem.textContent = \"\";\n                elem.className = \"digit n\" + value;\n            }\n        }\n    }\n\n    protected setTransformY(elem: HTMLElement, y: number, delay: number): void {\n        if (delay > 0) {\n            elem.style.transform = \"transform3d(0, \" + y + \"px, 0)\";\n        }\n    }\n\n    //******************************************************************************************************************\n    //  REFRESH & RESET\n    //******************************************************************************************************************\n\n    private refresh() {\n        if (this.checkError()) {\n            return;\n        }\n\n        //if there where win\n        if (this.hasWin()) {\n            this.isCounting = true;\n            this.initWinAnimation();\n            return;\n        }\n\n        //if there is no new nextValue\n        if (this.currentCounterValue == this.nextValue) {\n            this.resetDigitTween();\n            this.resetDigitsToBasePosition();\n            this.lastUpdateTime = Date.now();\n\n            //run empty tween do handle idle state\n            const availableTime = (this.nextDate - Date.now()) * 0.001;\n            if (availableTime > 0) {\n                this.resetMainTween();\n                this.mainTween = TweenLite.fromTo(\n                    this,\n                    availableTime,\n                    { idleValue: 0 },\n                    { idleValue: 100, ease: \"linear\" },\n                );\n                this.mainTween.eventCallback(\"onComplete\", this.refresh, [], this);\n            } else {\n                this.isCounting = false;\n            }\n\n            return;\n        }\n\n        //if new value is lower then current value\n        if (this.currentCounterValue > this.nextValue) {\n            this.isCounting = false;\n            return;\n        }\n\n        const availableTime = (this.nextDate - Date.now()) * 0.001;\n        this.resetMainTween();\n        this.mainTween = TweenLite.fromTo(\n            this,\n            availableTime,\n            { currentCounterValue: this.currentCounterValue },\n            { currentCounterValue: this.nextValue, ease: \"linear\", roundProps: \"currentCounterValue\" },\n        );\n        this.mainTween.eventCallback(\"onComplete\", this.refresh, [], this);\n        this.mainTween.eventCallback(\"onUpdate\", this.onRefreshTweenUpdate, [], this);\n\n        this.isCounting = true;\n    }\n\n    private onRefreshTweenUpdate(): void {\n        if (this.digitTween == null) {\n            this.refreshCounter();\n        }\n    }\n\n    private refreshCounter(): void {\n        if (this.inError) {\n            this.resetDigitTween();\n            return;\n        }\n\n        if (this.previousCounterValue == this.currentCounterValue) {\n            this.resetDigitTween();\n            return;\n        }\n\n        const oldValue = this.formatValue(this.previousCounterValue.toString(), true);\n        const newValue = this.formatValue(this.currentCounterValue.toString(), true);\n\n        this.lastUpdateTime = Date.now();\n\n        this.animateDigits(\n            oldValue,\n            newValue,\n            true,\n            true,\n            JackpotCounter.DigitAnimDuration * 2,\n            0,\n            \"linear\",\n            false,\n            this.refreshCounter,\n        );\n        this.previousCounterValue = this.currentCounterValue;\n    }\n\n    private reset(resetAnimCount: number = 0): void {\n        this.resetAnimCount = resetAnimCount;\n        this.isCounting = true;\n\n        this.resetCounter();\n    }\n\n    private resetCounter(): void {\n        if (this.checkError()) {\n            return;\n        }\n\n        if (this.resetAnimCount >= JackpotCounter.MinResetAnimCount - 1 && this.currentData != null) {\n            //if we have win right after reset\n            if (this.hasWin()) {\n                this.resetDigitTween(); //we need to reset digit tween to allow win anim start during reset anim\n                this.isCounting = true;\n                this.initWinAnimation();\n                return;\n            }\n            const oldValue = this.formatValue(this.currentCounterValue.toString(), false);\n            const newValue = this.formatValue(this.previousValue.toString(), true);\n\n            this.currentCounterValue = this.previousValue;\n            this.previousCounterValue = this.previousValue;\n\n            this.animateDigits(\n                oldValue,\n                newValue,\n                true,\n                false,\n                JackpotCounter.DigitAnimDuration * 10,\n                0,\n                \"Back.easeOut\",\n                true,\n                this.resetFinished,\n            );\n        } else {\n            this.resetAnimCount++;\n            const random = Math.random();\n            const length = Math.pow(10, JackpotCounter.Length);\n            const value = Math.round(random * length);\n\n            const oldValue = this.formatValue(\n                this.currentCounterValue > 0 ? this.currentCounterValue.toString() : \"\",\n                false,\n            );\n            const newValue = this.formatValue(value.toString(), false);\n\n            this.animateDigits(\n                oldValue,\n                newValue,\n                true,\n                false,\n                JackpotCounter.DigitAnimDuration,\n                0,\n                \"linear\",\n                true,\n                this.resetCounter,\n            );\n            this.currentCounterValue = value;\n        }\n    }\n\n    private resetFinished(): void {\n        this.lastUpdateTime = Date.now();\n        this.resetDigitTween();\n        this.isCounting = false;\n        this.refresh();\n    }\n\n    //******************************************************************************************************************\n    //  WIN\n    //******************************************************************************************************************\n\n    private hasWin(): boolean {\n        let result = false;\n        if (this.currentData != null && this.currentData.lastWinAmount != null) {\n            const currentLastWin =\n                this.overridedLastWinValue > -1\n                    ? this.overridedLastWinValue\n                    : this.normalizeValue(this.currentData.lastWinAmount);\n            const currentWinCount = this.currentData.winCount; //could be undefined during minigame spin\n\n            if (this.lastWinValue > -1) {\n                result = this.lastWinValue != currentLastWin;\n\n                //second check if new win amount is same like last one\n                //check only if it is not win from minigame (it has its own override)\n                if (!result && this.lastWinCount > -1 && currentWinCount > -1 && !this.winFromMinigame) {\n                    result = this.lastWinCount != currentWinCount;\n                }\n            }\n\n            this.lastWinCount = currentWinCount;\n            this.lastWinValue = currentLastWin;\n            this.overridedLastWinValue = -1;\n        }\n\n        return result || this.winFromMinigame;\n    }\n\n    private initWinAnimation(): void {\n        this.resetMainTween();\n\n        if (this.digitTween != null) {\n            this.digitTween.eventCallback(\"onComplete\", this.startWinAnimation, [], this);\n        } else {\n            this.startWinAnimation();\n        }\n    }\n\n    private startWinAnimation(): void {\n        if (this.currentCounterValue != this.lastWinValue) {\n            const oldValue = this.formatValue(this.currentCounterValue.toString(), true);\n            const newValue = this.formatValue(this.lastWinValue.toString(), true);\n\n            this.animateDigits(\n                oldValue,\n                newValue,\n                true,\n                true,\n                JackpotCounter.DigitAnimDuration * 2,\n                0,\n                \"linear\",\n                false,\n                this.showWinAnimation,\n            );\n            this.previousCounterValue = this.currentCounterValue;\n        } else {\n            this.showWinAnimation();\n        }\n\n        this.winAnimationDelay.start(\n            this.winFromMinigame ? JackpotCounter.WinFromMinigameAnimDuration : JackpotCounter.WinAnimDuration,\n        );\n    }\n\n    private showWinAnimation(): void {\n        this.forceWinValue();\n        this.root.classList.add(\"jackpotWin\");\n\n        if (this.winFromMinigame) {\n            this.root.classList.add(\"fromMinigame\");\n        }\n    }\n\n    private winAnimationFinished(): void {\n        this.winFromMinigame = false;\n        this.root.classList.remove(\"jackpotWin\", \"fromMinigame\");\n        this.reset();\n    }\n\n    //******************************************************************************************************************\n    //  HELPER\n    //******************************************************************************************************************\n\n    public getRoot(): HTMLElement {\n        return this.root;\n    }\n\n    public getHeight(): number {\n        if (this.root.parentElement != null) {\n            this.root.parentElement.classList.add(\"baseCounterHeight\");\n            this.root.parentElement.offsetWidth;\n\n            let height = parseInt(window.getComputedStyle(this.root.parentElement).height);\n            this.root.parentElement.classList.remove(\"baseCounterHeight\");\n\n            return height;\n        }\n\n        return 0;\n    }\n\n    private createElement(tag: string, className: string, rootElem?: HTMLElement): HTMLElement {\n        let elem = document.createElement(tag);\n        elem.setAttribute(\"class\", className);\n\n        if (rootElem) {\n            rootElem.appendChild(elem);\n        }\n\n        return elem;\n    }\n\n    protected normalizeValue(value: number): number {\n        let formattedValue = Languages.formatText(Languages.FormatMoney, value.toString());\n        formattedValue = formattedValue.replace(\".\", \"\");\n\n        value = parseInt(formattedValue);\n\n        if (value >= Math.pow(10, JackpotCounter.Length)) {\n            let normalizedValue = \"\";\n\n            for (let i = 0; i < JackpotCounter.Length; i++) {\n                normalizedValue = `9${normalizedValue}`;\n            }\n\n            return parseInt(normalizedValue);\n        }\n\n        return value;\n    }\n\n    protected formatValue(formattedValue: string, leading: boolean): string {\n        if (formattedValue.length > JackpotCounter.Length) {\n            formattedValue = formattedValue.substr(formattedValue.length - JackpotCounter.Length);\n        } else {\n            while (formattedValue.length < JackpotCounter.DecimalPlaces + 1) {\n                formattedValue = `0${formattedValue}`;\n            }\n\n            while (formattedValue.length < JackpotCounter.Length) {\n                formattedValue = `${leading ? JackpotCounter.LeadingZeroLetter : \"0\"}${formattedValue}`;\n            }\n        }\n\n        return formattedValue;\n    }\n\n    protected resetMainTween(): void {\n        if (this.mainTween != null) {\n            this.mainTween.kill();\n            this.mainTween.eventCallback(\"onComplete\", null);\n            this.mainTween.eventCallback(\"onUpdate\", null);\n            this.mainTween = null;\n        }\n    }\n\n    protected resetDigitTween(onlyCallback: boolean = false): void {\n        if (this.digitTween != null) {\n            this.digitTween.eventCallback(\"onComplete\", null);\n\n            if (!onlyCallback) {\n                this.digitTween.kill();\n            }\n\n            this.digitTween = null;\n        }\n    }\n\n    protected resetDigitsToBasePosition(): void {\n        const currentValue = this.formatValue(this.currentCounterValue.toString(), true);\n\n        for (let i = 0; i < this.digits.length; i++) {\n            this.setDigitValue(this.digits[i].to, currentValue.charAt(i), true);\n\n            this.digits[i].from.setAttribute(\n                \"style\",\n                \"transform: matrix(1, 0, 0, 1, 0, \" + this.settings.height * -1 + \");\",\n            );\n            this.digits[i].to.setAttribute(\"style\", \"transform: matrix(1, 0, 0, 1, 0, 0);\");\n        }\n    }\n\n    protected forceWinValue(): void {\n        const currentValue = this.formatValue(this.lastWinValue.toString(), true);\n\n        for (let i = 0; i < this.digits.length; i++) {\n            this.setDigitValue(this.digits[i].to, currentValue.charAt(i), true);\n\n            this.digits[i].from.setAttribute(\n                \"style\",\n                \"transform: matrix(1, 0, 0, 1, 0, \" + this.settings.height * -1 + \");\",\n            );\n            this.digits[i].to.setAttribute(\"style\", \"transform: matrix(1, 0, 0, 1, 0, 0);\");\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Jackpot/JackpotCounter.ts\n **/","import { NumberUtils, Logger } from \"neo-common\";\nimport { Strings } from \"../../Common/Strings\";\nimport { AppContext } from \"../../Common/AppContext\";\n\n/**\n * Working with languages and texts. Get langugages based on rid, format and filter texts.\n * @class Languages\n */\nexport class Languages {\n    // formats static variables\n    static FormatMoney: string = \"MONEY\";\n\n    // filters static variables\n    static FilterNoZero: string = \"NO_ZERO\";\n\n    /**\n     * Return text based on rid.\n     * @method getRid\n     * @param rid string\n     * @param ...value Array<string>\n     * @return string\n     */\n    static getRid(rid: string, ...value: Array<string>): string {\n        if (value != null && value.length > 0) {\n            return Strings.getWithValues(rid, ...value);\n        } else {\n            return Strings.get(rid);\n        }\n    }\n\n    /**\n     * Format text based in ridType.\n     * @method formatText\n     * @param ridType string\n     * @param text string\n     * @return string\n     */\n    static formatText(ridType: string, text: string): string {\n        switch (ridType) {\n            case this.FormatMoney:\n                return NumberUtils.valueToNumber(text, AppContext.gameConfiguration.ShowDecimalPlaces);\n            default:\n                if (DEBUG) {\n                    this.log(\"WARNING unknow RidType: \" + ridType);\n                }\n        }\n        return text;\n    }\n\n    /**\n     * Filter text based on RidFilter.\n     * @method filtertext\n     * @param ridFilter string\n     * @param text string\n     * @return string\n     */\n    static filterText(ridFilter: string, text: string): string {\n        switch (ridFilter) {\n            case this.FilterNoZero:\n                if (parseFloat(text) <= 0) {\n                    return \"\";\n                } else {\n                    return text;\n                }\n            default:\n                if (DEBUG) {\n                    this.log(\"WARNING unknow RidFilter: \" + ridFilter);\n                }\n        }\n        return text;\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string which will be traced to browser console.\n     * @return void\n     */\n    static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"Languages\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Languages.ts\n **/","import { DateUtils, StringUtils, CommonTypes } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { JackpotData } from \"../Datas/JackpotData\";\nimport { Languages } from \"../../../Utils/Languages\";\nimport { Jackpot } from \"../Bonuses/Jackpot\";\nimport { GameData } from \"../Datas/GameData\";\nimport { DataManager } from \"../../../Managers/DataManager\";\n\ntype IProgressiveBonusLevel = Communication.Game.IProgressiveBonusLevel;\n\nexport class JackpotHistoryDialog {\n    //******************************************************************************************************************\n    //  SEETTINGS\n    //******************************************************************************************************************\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected root: HTMLElement;\n\n    protected currency: string;\n\n    protected historyDataElements: { [dataId: string]: HTMLElement };\n\n    protected initialized: boolean;\n\n    protected lastData: IProgressiveBonusLevel;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor(index: number, holder: HTMLElement) {\n        this.root = this.createBaseLayout(index);\n        this.currency = \"\";\n        this.historyDataElements = {};\n\n        holder.appendChild(this.root);\n    }\n\n    //******************************************************************************************************************\n    //  INIT\n    //******************************************************************************************************************\n\n    public initialize(initData: IProgressiveBonusLevel): void {\n        this.createDataSections();\n        this.initialized = true;\n\n        if (initData) {\n            this.assign(initData);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  LAYOUT\n    //******************************************************************************************************************\n\n    protected createBaseLayout(index: number): HTMLElement {\n        return this.createElement(\"div\", \"jackpotHistoryDialog _disabled l-\" + index);\n    }\n\n    protected createDataSections(): void {\n        if (this.root) {\n            let section: HTMLElement;\n            let dataHolder: HTMLElement;\n\n            //close btn only in mobile\n            // if (window[\"CHANNEL\"] === 'mobile') {\n            let closeBtn = this.createElement(\"div\", \"jackpotCloseBtn\", this.root);\n            closeBtn.addEventListener(\"touchstart\", (e: Event) => {\n                e.preventDefault();\n                e.stopPropagation();\n                Jackpot.closeAllHistoryDialogs();\n            });\n            closeBtn.addEventListener(\"click\", () => {\n                Jackpot.closeAllHistoryDialogs();\n            });\n            // }\n\n            //DataCode\n            section = this.createElement(\"div\", \"jackpotHistorySection\", this.root);\n            this.createElement(\"div\", \"jackpotLevel\", section);\n            this.createDataElement(\"div\", \"jackpotTitle\", JackpotData.DataCode, section);\n\n            //DataHighestWinAmount\n            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\n            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\n            this.createTextElement(\n                \"div\",\n                \"jackpotHistoryDataLabel\",\n                Languages.getRid(\"PB_HISTORYDIALOG_HIGHEST_WIN\"),\n                dataHolder,\n            );\n            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData.DataHighestWinDate, dataHolder);\n            this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData.DataHighestWinAmount, section);\n\n            this.assingData(JackpotData.DataHighestWinDate, \"-\");\n            this.assingData(JackpotData.DataHighestWinAmount, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\n\n            //DataWinCount\n            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\n            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\n            this.createTextElement(\n                \"div\",\n                \"jackpotHistoryDataLabel\",\n                Languages.getRid(\"PB_HISTORYDIALOG_NUM_WINS\"),\n                dataHolder,\n            );\n            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData.DataWinCount, dataHolder);\n\n            this.assingData(JackpotData.DataWinCount, \"-\");\n\n            //DataLastWinAmount\n            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\n            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\n            this.createTextElement(\n                \"div\",\n                \"jackpotHistoryDataLabel\",\n                Languages.getRid(\"PB_HISTORYDIALOG_LAST_WIN\"),\n                dataHolder,\n            );\n            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData.DataLastWinDate, dataHolder);\n            this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData.DataLastWinAmount, section);\n\n            this.assingData(JackpotData.DataLastWinDate, \"-\");\n            this.assingData(JackpotData.DataLastWinAmount, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\n\n            this.showWins(false);\n        }\n    }\n\n    public updateDataWithCurrency(): void {\n        if (this.lastData != null) {\n            this.assign(this.lastData);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  ERRORS\n    //******************************************************************************************************************\n\n    public error(useResetAnim: boolean = false): void {\n        if (useResetAnim) {\n            this.root.classList.add(\"jackpotExpired\");\n        } else {\n            if (this.initialized) {\n                this.showWins(false);\n\n                this.assingData(JackpotData.DataLastWinAmount, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\n                this.assingData(JackpotData.DataLastWinDate, \"-\");\n                this.assingData(JackpotData.DataHighestWinAmount, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\n                this.assingData(JackpotData.DataHighestWinDate, \"-\");\n                this.assingData(JackpotData.DataWinCount, \"-\");\n            } else {\n                this.initialize(null);\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  ASSIGN\n    //******************************************************************************************************************\n\n    public assign(data: IProgressiveBonusLevel): void {\n        this.lastData = data;\n\n        if (this.initialized) {\n            this.assingData(JackpotData.DataCode, data.code);\n            this.assingData(\n                JackpotData.DataLastWinAmount,\n                data.lastWinAmount ? Languages.formatText(Languages.FormatMoney, data.lastWinAmount.toString()) : null,\n                \"money\",\n            );\n            this.assingData(JackpotData.DataLastWinDate, data.lastWinDate, \"date\");\n            this.assingData(\n                JackpotData.DataHighestWinAmount,\n                data.highestWinAmount\n                    ? Languages.formatText(Languages.FormatMoney, data.highestWinAmount.toString())\n                    : null,\n                \"money\",\n            );\n            this.assingData(JackpotData.DataHighestWinDate, data.highestWinDate, \"date\");\n            this.assingData(JackpotData.DataWinCount, data.winCount ? data.winCount.toString() : null);\n\n            this.showWins();\n        } else {\n            this.initialize(data);\n        }\n    }\n\n    private assingData(dataId: string, value: string, format: string = \"\"): void {\n        if (this.historyDataElements && this.historyDataElements[dataId] && !StringUtils.isNullOrEmpty(value)) {\n            if (format != \"\") {\n                switch (format) {\n                    case \"money\":\n                        value = value + \" \" + DataManager.getDataById(GameData.DataCurrency);\n                        break;\n                    case \"date\":\n                        let date = new Date(value);\n                        value =\n                            this.zerosPad(date.getDate(), 2) +\n                            \". \" +\n                            this.zerosPad(date.getMonth() + 1, 2) +\n                            \". \" +\n                            date.getFullYear();\n                }\n            }\n\n            this.historyDataElements[dataId].textContent = value;\n        }\n    }\n\n    private zerosPad(num: number, size: number): string {\n        let s = num + \"\";\n        while (s.length < size) s = \"0\" + s;\n        return s;\n    }\n\n    //******************************************************************************************************************\n    //  HANDLER\n    //******************************************************************************************************************\n\n    public openDialog(): void {\n        this.root.classList.remove(\"_disabled\");\n    }\n\n    public closeDialog(): void {\n        this.root.classList.add(\"_disabled\");\n    }\n\n    public isOpen(): boolean {\n        return !this.root.classList.contains(\"_disabled\");\n    }\n\n    //******************************************************************************************************************\n    //  HELPER\n    //******************************************************************************************************************\n\n    public getRoot(): HTMLElement {\n        return this.root;\n    }\n\n    private showWins(enabled: boolean = true): void {\n        const winSections = this.root.getElementsByClassName(\"jackpotHistoryData\");\n\n        for (let i = 0; i < winSections.length; i++) {\n            const elem = <HTMLElement>winSections[i];\n            elem.style.display = enabled ? \"\" : \"none\";\n        }\n\n        const titleSections = this.root.getElementsByClassName(\"jackpotTitle\");\n\n        for (let i = 0; i < titleSections.length; i++) {\n            const elem = <HTMLElement>titleSections[i];\n            elem.style.display = enabled ? (elem.textContent == \"\" ? \"none\" : \"\") : \"none\";\n        }\n\n        //NoWins\n        const noWinSections = this.root.getElementsByClassName(\"jackpotHistoryNoWins\");\n        if (enabled) {\n            for (let i = 0; i < noWinSections.length; i++) {\n                noWinSections[i].parentNode.removeChild(noWinSections[i]);\n            }\n        } else {\n            if (noWinSections.length == 0) {\n                const section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryNoWins\", this.root);\n                this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData.DataNoWins, section);\n                this.assingData(JackpotData.DataNoWins, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\n            }\n        }\n    }\n\n    private createElement(tag: string, className: string, rootElem?: HTMLElement): HTMLElement {\n        let elem = document.createElement(tag);\n        elem.setAttribute(\"class\", className);\n\n        if (rootElem) {\n            rootElem.appendChild(elem);\n        }\n\n        return elem;\n    }\n\n    private createTextElement(tag: string, className: string, text: string, rootElem?: HTMLElement): HTMLElement {\n        let elem = this.createElement(tag, className, rootElem);\n        elem.textContent = text;\n\n        return elem;\n    }\n\n    private createDataElement(tag: string, className: string, dataId: string, rootElem?: HTMLElement): HTMLElement {\n        let elem = this.createElement(tag, className, rootElem);\n\n        if (this.historyDataElements) {\n            this.historyDataElements[dataId] = elem;\n        }\n\n        return elem;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Jackpot/JackpotHistoryDialog.ts\n **/","export class JackpotData {\n    static DataCode: string = \"code\";\n    static DataHighestWinDate: string = \"highestWinDate\";\n    static DataHighestWinAmount: string = \"highestWinAmount\";\n    static DataWinCount: string = \"winCount\";\n    static DataLastWinDate: string = \"lastWinDate\";\n    static DataLastWinAmount: string = \"lastWinAmount\";\n    static DataNoWins: string = \"noWins\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Datas/JackpotData.ts\n **/","export class GameData {\n    static DataTicker: string = \"TICKER\";\n    static DataRoundId: string = \"ROUND_ID\";\n    static DataBuildVersion: string = \"BUILD_VERSION\";\n    static DataBalanceReal: string = \"BALANCE_REAL\";\n    static DataBalanceBonus: string = \"BALANCE_BONUS\";\n    static DataBalanceTotal: string = \"BALANCE_TOTAL\";\n    static DataBalanceRealDenom: string = \"BALANCE_REAL_DENOM\";\n    static DataBalanceBonusDenom: string = \"BALANCE_BONUS_DENOM\";\n    static DataBalanceTotalDenom: string = \"BALANCE_TOTAL_DENOM\";\n    static DataCurrency: string = \"CURRENCY\";\n    static DataDenomination: string = \"DENOMINATION\";\n    static DataCurrentWin: string = \"CURRENT_WIN\";\n    static DataTotalWin: string = \"TOTAL_WIN\";\n    static DataTotalWinDenom: string = \"TOTAL_WIN_DENOM\";\n    static DataCoinSize: string = \"COIN_SIZE\";\n    static DataCointCount: string = \"COIN_COUNT\";\n    static DataPaylineCount: string = \"PAYLINE_COUNT\";\n    static DataBet: string = \"BET\";\n    static DataBetPosition: string = \"BET_POSITION\";\n    static DataGambleCurrentWin: string = \"GAMBLE_WIN\";\n    static DataGambleColorWin: string = \"GAMBLE_COLOR_WIN\";\n    static DataGambleCurrentWinDenom: string = \"GAMBLE_WIN_DENOM\";\n    static DataGambleColorWinDenom: string = \"GAMBLE_COLOR_WIN_DENOM\";\n    static DataAutoplayCount: string = \"AUTOPLAY_COUNT\";\n    static DataFreeSpinTotalWin: string = \"FREESPIN_TOTAL_WIN\";\n    static DataFreeSpinTotalWinDenom: string = \"FREESPIN_TOTAL_WIN_DENOM\";\n    static DataFreeSpinsCount: string = \"FREESPINS_COUNT\"; // Sum of won freespins = won in basegame + won in freespins stage\n    static DataFreeSpinsCountMultiplier: string = \"FREESPINS_COUNT_MULTIPLIER\";\n    static DataFreeSpinsRemainingCount: string = \"FREESPINS_REMAINING_COUNT\";\n    static DataFreeSpinsWonCount: string = \"FREESPINS_WON_COUNT\";\n    static DataFreeSpinsMultiplier: string = \"FREESPINS_MULTIPLIER\";\n    static DataGambleAttempts: string = \"GAMBLE_ATTEMPTS\";\n    static DataHelpGameLimit: string = \"HELP_GAME_LIMIT\";\n    static DataHelpGambleLimit: string = \"HELP_GAMBLE_LIMIT\";\n    static DataHelpGambleCountLimit: string = \"HELP_GAMBLE_COUNT_LIMIT\";\n    static DataHelpRTP: string = \"HELP_RTP\";\n    static DataHelpMaxPayoutProbability: string = \"HELP_MAX_PAYOUT_PROBABILITY\";\n    static DataHelpMaxPayoutFrequency: string = \"HELP_MAX_PAYOUT_FREQUENCY\";\n    static DataHelpMinBet: string = \"HELP_MIN_BET\";\n    static DataHelpMaxBet: string = \"HELP_MAX_BET\";\n    static DataHelpVersion: string = \"HELP_VERSION\";\n    static DataExpirationResolveHours: string = \"EXPIRATION_RESOLVE_HOURS\";\n    static DataFrbRemainginCount: string = \"FRB_REMAINING_COUNT\";\n    static DataFrbAssignedCount: string = \"FRB_ASSIGNED_COUNT\";\n    static DataFrbRulesLink: string = \"FRB_RULES_LINK\";\n    static DataFrbValidTo: string = \"FRB_VALID_TO\";\n    static DataFrbExpiryTime: string = \"FRB_EXPIRY_TIME\";\n    static DataFrbWin: string = \"FRB_WIN\";\n    static DataGameTitle: string = \"GAME_TITLE\";\n    static DataHelpJackpotVisibleLimit: string = \"HELP_JACKPOT_VISIBLE_LIMIT\";\n    static DataHelpJackpotQualifyingBetsMin: string = \"HELP_JACKPOT_QUALIFYING_BETS_MIN\";\n    static DataHelpJackpotQualifyingBetsMax: string = \"HELP_JACKPOT_QUALIFYING_BETS_MAX\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Datas/GameData.ts\n **/","import { ArrayUtils, Logger, Utils, NumberUtils, StringUtils } from \"neo-common\";\nimport { ClientHost, Communication, GameEngine, Plugins, Platforms } from \"neo-games\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { GameManager } from \"./GameManager\";\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\nimport { BetManager } from \"./BetManager\";\nimport { BalanceManager } from \"./BalanceManager\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\nimport { ModuleManager } from \"./ModuleManager\";\nimport { GameConfiguration } from \"../../Common/GameConfiguration\";\nimport { Languages } from \"../Utils/Languages\";\nimport { SimilarGames } from \"../Channels/Common/SimilarGames/SimilarGames\";\nimport { GameApp } from \"../GameApp\";\nimport { Scaling } from \"../Utils/Scaling\";\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\nimport { UserAction } from \"../HTMLComponents/UserAction\";\nimport { QuickspinDialog } from \"../Channels/Common/Dialogs/QuickspinDialog\";\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\n\ntype InitResponse = Communication.Game.InitResponse;\nvar GameEvents = ClientHost.GameEvents;\n\ntype ServerTimeResponse = Communication.Game.ServerTimeResponse;\n\nexport class DataManager {\n    private static _gameData: { [data: string]: string } = {};\n\n    public static DisplayCurrencies: { [data: string]: string } = null;\n\n    private static serverTimeOffset: number = -1;\n\n    private static time: string = \"\";\n\n    private static utcTime: string = \"\";\n\n    private static serverTimeResponseTimestamp: number = 0;\n\n    private static TrustedUserActions: Array<string> = [];\n\n    static GameRoundClosed: boolean = false;\n    static Collectable: boolean = true;\n    static GameLimit: boolean = false;\n\n    static AutoplayCount: string = \"∞\";\n    static AutoplayLossLimit: string = \"∞\";\n    static AutoplayWinLimit: string = \"∞\";\n    private static _autoplay: boolean = false;\n    static AutoplayEnabled: boolean = true;\n    static AutoplayAfterGamble: boolean = false;\n\n    static QuickspinEnabled: boolean = false;\n    private static _quickstopTimes: Array<number> = [];\n\n    static VibrationEnabled: boolean = false;\n\n    static HelpDataGameLimit: number = 0;\n    static HelpDataGambleLimit: number = 0;\n\n    static BackSoundsPlayingFromGame: boolean = true;\n\n    static SimilarGames: SimilarGames;\n    static AutoplayStarted: boolean = false;\n\n    static set Autoplay(value: boolean) {\n        if (DataManager._autoplay != value) {\n            if (value) {\n                DataManager.AutoplayStarted = true;\n                Platforms.Platforms.autoplayStarted();\n            } else {\n                Platforms.Platforms.autoplayFinished({\n                    autoplayCount: this.AutoplayCount,\n                    autoplayLossLimit: this.AutoplayLossLimit,\n                    autoplayWinLimit: this.AutoplayWinLimit,\n                });\n            }\n\n            DataManager._autoplay = value;\n        } else {\n            DataManager.AutoplayStarted = false;\n        }\n    }\n\n    static get Autoplay() {\n        return DataManager._autoplay;\n    }\n\n    static controlAutoplay(): void {\n        if (GameApp.gameClient != null) {\n            GameApp.gameClient.setAutoplay(DataManager.Autoplay);\n        }\n    }\n\n    static autoplayEnabled(): boolean {\n        if (AppContext.gameConfiguration.AutoplayModeEnabled && DataManager.AutoplayEnabled) {\n            return true;\n        }\n        return false;\n    }\n\n    static quickspinEnabled(): boolean {\n        return DataManager.gameEnableQuickSpin() && DataManager.QuickspinEnabled;\n    }\n\n    static gameEnableQuickSpin(): boolean {\n        return (\n            AppContext.gameConfiguration.GameEnableReelsStop &&\n            AppContext.gameConfiguration.MinGameRoundDuration == 0 &&\n            AppContext.gameConfiguration.GameRoundMinSpan == 0 &&\n            AppContext.gameConfiguration.GameEnableQuickSpin\n        );\n    }\n\n    static quickspinSet(toValue?: boolean): boolean {\n        if (DataManager.gameEnableQuickSpin()) {\n            if (typeof toValue === \"boolean\") {\n                DataManager.QuickspinEnabled = toValue;\n                HtmlController.updateDataElement(UserAction.ActionQuickspinToggle, toValue ? \"true\" : \"false\");\n            } else {\n                DataManager.QuickspinEnabled = !DataManager.QuickspinEnabled;\n                HtmlController.updateDataElement(\n                    UserAction.ActionQuickspinToggle,\n                    DataManager.QuickspinEnabled ? \"true\" : \"false\",\n                );\n            }\n            if (DEBUG) {\n                this.log(\"Quickspin \" + (DataManager.QuickspinEnabled ? \"on\" : \"off\"));\n            }\n        }\n        Platforms.Platforms.quickSpinEnabled(DataManager.QuickspinEnabled);\n        return DataManager.QuickspinEnabled;\n    }\n\n    static quickspinStopped() {\n        if (DataManager._quickstopTimes != null) {\n            DataManager._quickstopTimes.push(Date.now() * 0.001);\n\n            //we have enough quickstop clicks, check interval\n            if (DataManager._quickstopTimes.length == AppContext.gameConfiguration.QuickSpinDialogCount) {\n                let timeDiff =\n                    DataManager._quickstopTimes[DataManager._quickstopTimes.length - 1] -\n                    DataManager._quickstopTimes[0];\n\n                if (timeDiff < AppContext.gameConfiguration.QuickSpinDecayDelay) {\n                    if (DataManager.gameEnableQuickSpin() && !DataManager.QuickspinEnabled) {\n                        QuickspinDialog.openDialog();\n                        DataManager._quickstopTimes = null;\n                    }\n                } else {\n                    DataManager._quickstopTimes.shift();\n                }\n            }\n        }\n    }\n\n    static vibrationSet(toValue?: boolean): boolean {\n        if (AppContext.gameConfiguration.GameEnableVibration) {\n            if (typeof toValue === \"boolean\") {\n                DataManager.VibrationEnabled = toValue;\n                HtmlController.updateDataElement(UserAction.ActionVibrationToggle, toValue ? \"true\" : \"false\");\n            } else {\n                DataManager.VibrationEnabled = !DataManager.VibrationEnabled;\n                HtmlController.updateDataElement(\n                    UserAction.ActionVibrationToggle,\n                    DataManager.VibrationEnabled ? \"true\" : \"false\",\n                );\n            }\n            if (DEBUG) {\n                this.log(\"Vibration \" + (DataManager.VibrationEnabled ? \"on\" : \"off\"));\n            }\n        }\n\n        return DataManager.VibrationEnabled;\n    }\n\n    static updateResponseData(init?: boolean): void {\n        DataManager.GameRoundClosed = false;\n\n        if (!Utils.isNullOrUndefined(GameManager.gameResponse)) {\n            let status: any = GameManager.gameResponse.status;\n\n            if (status != null && status === \"closed\") {\n                DataManager.GameRoundClosed = true;\n            }\n\n            if (GameManager.gameResponse.limits != null) {\n                DataManager.GameLimit = true;\n            } else {\n                DataManager.GameLimit = false;\n            }\n\n            if (init || !(FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\n                // Don't set balance in last cumulative FRB (except init state)\n                BalanceManager.setBalance();\n            }\n\n            if (init) {\n                var initResponse = GameManager.gameResponse as InitResponse;\n                if (initResponse.initData != null && initResponse.initData.currency != null) {\n                    DataManager.updateGameDataFromModule(GameData.DataCurrency, initResponse.initData.currency);\n                }\n\n                BetManager.initializeBet();\n                DataManager.configureHelpData();\n\n                if (\n                    GameManager.gameResponse.balance != null &&\n                    GameManager.gameResponse.balance.bonus != null &&\n                    GameManager.gameResponse.balance.bonus >= BetManager.Bet\n                ) {\n                    ModuleManager.changeBetColor(true);\n                }\n                DataManager.updateDataElements();\n            }\n\n            if (GameManager.gameResponse.roundId != null) {\n                const elements = document.getElementsByClassName(\"roundId\");\n\n                for (let i = 0; i < elements.length; i++) {\n                    const element = <HTMLElement>elements[i];\n\n                    if (element != null) {\n                        if (!AppContext.gameConfiguration.GameRoundIdVisible) {\n                            element.style.opacity = \"0\";\n                        } else if (GameManager.gameResponse.roundId === -1) {\n                            element.style.opacity = \"1\";\n                        }\n                    }\n                }\n\n                DataManager.updateGameDataFromModule(\n                    GameData.DataRoundId,\n                    GameManager.gameResponse.roundId === -1 ? \"DEMO\" : GameManager.gameResponse.roundId.toString(),\n                );\n            }\n\n            DataManager.updateTotalWin();\n        }\n\n        if (!Jackpot.hasMiniGame()) {\n            BalanceManager.poolingBalance();\n        }\n\n        if (\n            GameManager.gameResponse[\"progressiveBonus\"] &&\n            GameManager.gameResponse[\"progressiveBonus\"].offline === true\n        ) {\n            Jackpot.showError();\n        } else {\n            Jackpot.reinitialize();\n        }\n    }\n\n    /**\n     *\n     */\n    static updateTotalWin(): void {\n        if (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\n            // FRB cumulative win pay method\n            if (\n                GameManager.gameResponse[\"freeRounds\"] != null &&\n                GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null\n            ) {\n                if (DataManager.GameRoundClosed) {\n                    // Standard case\n                    const totalWin = GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\n                    DataManager.updateGameDataFromModule(GameData.DataTotalWin, totalWin.toString());\n\n                    if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                        DataManager.updateGameDataFromModule(\n                            GameData.DataTotalWinDenom,\n                            parseInt(NumberUtils.devide(totalWin, BetManager.CoinSize).toString()).toString(),\n                        );\n                    }\n                } else {\n                    if (GameManager.gameResponse.totalWin != null) {\n                        const totalWin = NumberUtils.add(\n                            GameManager.gameResponse[\"freeRounds\"][\"totalWin\"],\n                            GameManager.gameResponse.totalWin,\n                        );\n                        DataManager.updateGameDataFromModule(GameData.DataTotalWin, totalWin.toString());\n\n                        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                            DataManager.updateGameDataFromModule(\n                                GameData.DataTotalWinDenom,\n                                parseInt(NumberUtils.devide(totalWin, BetManager.CoinSize).toString()).toString(),\n                            );\n                        }\n                    }\n                }\n            }\n        } else if (GameManager.gameResponse.totalWin != null) {\n            // Standard case\n            DataManager.updateGameDataFromModule(GameData.DataTotalWin, GameManager.gameResponse.totalWin.toString());\n            if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataTotalWinDenom,\n                    parseInt(\n                        NumberUtils.devide(GameManager.gameResponse.totalWin, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n            }\n        }\n    }\n\n    static updateTotalGain(calculate: boolean = false, customWin: number = 0): void {\n        if (\n            GameManager.gameResponse.totalGain != null &&\n            AppContext.gameConfiguration.StatusBar.indexOf(Plugins.StatusBar.Types.TOTAL_GAIN) > -1\n        ) {\n            let totalGain = GameManager.gameResponse.totalGain;\n            if (calculate) {\n                const bet = FreeRoundBonus.inFrb ? 0 : BetManager.Bet;\n                totalGain = parseFloat(NumberUtils.subtract(totalGain, bet));\n\n                if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\n                    totalGain = parseFloat(NumberUtils.add(totalGain, GameManager.gameResponse.totalWin));\n                }\n            }\n\n            if (customWin > 0) {\n                totalGain = parseFloat(NumberUtils.add(totalGain, customWin));\n            }\n\n            GameManager.gameResponse.totalGain = totalGain;\n            const statusBar = Plugins.StatusBar.getInstance();\n            const resize = !statusBar.hasActiveWidget();\n            statusBar.add(\n                Plugins.StatusBar.Types.TOTAL_GAIN,\n                \"totalGain\",\n                Languages.getRid(\n                    \"SB_INFO_TOTAL_GAIN\",\n                    Languages.formatText(Languages.FormatMoney, totalGain.toString()),\n                ) +\n                    \" \" +\n                    DataManager.getDataById(GameData.DataCurrency),\n            );\n\n            if (resize) {\n                Scaling.resizeRoot();\n            }\n        }\n    }\n\n    static updateGameDataFromModule(dataId: string, value: string): void {\n        if (dataId === GameData.DataCurrency) {\n            if (Utils.isNullOrUndefined(DataManager.DisplayCurrencies)) {\n                DataManager.DisplayCurrencies = {};\n\n                AppContext.gameConfiguration.DisplayCurrencies.forEach((rawPair) => {\n                    const parsedPair = ArrayUtils.stringArray(rawPair);\n\n                    DataManager.DisplayCurrencies[parsedPair[0]] = parsedPair[1];\n                });\n            }\n\n            if (DataManager.DisplayCurrencies.hasOwnProperty(value)) {\n                DataManager._gameData[dataId] = DataManager.DisplayCurrencies[value];\n                return;\n            }\n        }\n\n        DataManager._gameData[dataId] = value;\n    }\n\n    static getDataById(dataId: string): string {\n        if (DataManager._gameData[dataId] != null) {\n            return DataManager._gameData[dataId];\n        }\n        return null;\n    }\n\n    static updateDataElement(dataId: string, customValue?: string): void {\n        if (customValue != null) {\n            HtmlController.updateDataElement(dataId, customValue);\n        } else {\n            if (DataManager._gameData[dataId] != null) {\n                HtmlController.updateDataElement(dataId, DataManager._gameData[dataId]);\n            }\n        }\n    }\n\n    static updateDataElements(): void {\n        HtmlController.updateDataElements(DataManager._gameData);\n        DataManager.updateTotalGain();\n    }\n\n    static getServerTime(): void {\n        if (GameManager.gameClient) {\n            GameManager.gameClient.sendServerTimerRequest().then((response: ServerTimeResponse) => {\n                DataManager.serverTimeReceived(response);\n\n                if (\n                    AppContext.gameConfiguration.UseServerTime &&\n                    StringUtils.isNullOrEmpty(AppContext.gameConfiguration.ApplicationGatewayUrl)\n                ) {\n                    setTimeout(() => {\n                        DataManager.getServerTime();\n                    }, 30000);\n                }\n            });\n        }\n    }\n\n    static serverTimeReceived(response: ServerTimeResponse): void {\n        if (response == null) {\n            return;\n        }\n\n        if (response.utcTime == null && response.time == null) {\n            return;\n        }\n\n        DataManager.utcTime = response.utcTime;\n        DataManager.time = response.time;\n        DataManager.serverTimeResponseTimestamp = Date.now();\n\n        if (DataManager.utcTime != null) {\n            if (DataManager.utcTime.indexOf(\"Z\") == -1) {\n                DataManager.utcTime = DataManager.utcTime + \"Z\";\n            }\n\n            Platforms.Platforms.clockSync(Date.now() - Date.parse(DataManager.utcTime));\n        }\n\n        if (DataManager.serverTimeOffset === -1) {\n            let currentTime = new Date().getTime();\n            let serverTime = Date.parse(DataManager.utcTime ? DataManager.utcTime.replace(\"Z\", \"\") : DataManager.time);\n\n            DataManager.serverTimeOffset = serverTime - currentTime;\n        }\n    }\n\n    static getFormattedTime(time: Date): string {\n        if (time == null) {\n            return null;\n        }\n\n        //{\"time\":\"2023-09-21T12:00:02.3442838\",\"utcTime\":\"2023-09-21T10:00:02.3442838\"}\n        const year = time.getFullYear();\n        const month = DataManager.zerosPad(time.getMonth() + 1, 2);\n        const day = DataManager.zerosPad(time.getDate(), 2);\n        const hours = DataManager.zerosPad(time.getHours(), 2);\n        const minutes = DataManager.zerosPad(time.getMinutes(), 2);\n        const seconds = DataManager.zerosPad(time.getSeconds(), 2);\n        const milliseconds = time.getMilliseconds();\n\n        return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}`;\n    }\n\n    static zerosPad(num: number, size: number): string {\n        let s = num + \"\";\n        while (s.length < size) s = \"0\" + s;\n        return s;\n    }\n\n    static getTimeData(): { utcTime: string; machineLocalTimeZone: number } {\n        const currentTime = new Date();\n        const utcTime = DataManager.getUTCTime();\n        const machineLocalTimeZone = currentTime.getTimezoneOffset() * -1; //in minutes\n\n        return {\n            utcTime: utcTime,\n            machineLocalTimeZone: machineLocalTimeZone,\n        };\n    }\n\n    static getUTCTime(): string {\n        if (!StringUtils.isNullOrEmpty(DataManager.utcTime)) {\n            const currentTime = new Date();\n            const utcResponseTimestamp = Date.parse(DataManager.utcTime);\n            const lastResponseDiff = currentTime.getTime() - DataManager.serverTimeResponseTimestamp;\n\n            return new Date(utcResponseTimestamp + lastResponseDiff).toISOString();\n        }\n\n        return new Date().toISOString();\n    }\n\n    static getGameTime(utcTime: string): string {\n        if (utcTime.indexOf(\"Z\") == -1) {\n            utcTime = utcTime + \"Z\";\n        }\n\n        const utcTimestamp = Date.parse(utcTime.replace(\"Z\", \"\"));\n\n        if (AppContext.gameConfiguration.UseServerTime) {\n            const offset = DataManager.utcTime ? DataManager.serverTimeOffset : 0;\n            return DataManager.getFormattedTime(new Date(utcTimestamp - offset));\n        }\n\n        return DataManager.getFormattedTime(new Date(utcTime));\n    }\n\n    static getNonUTCGameTime(): string {\n        if (!AppContext.gameConfiguration.UseServerTime) {\n            return DataManager.getFormattedTime(new Date());\n        }\n\n        if (!StringUtils.isNullOrEmpty(DataManager.time)) {\n            const currentTime = new Date();\n            const utcResponseTimestamp = Date.parse(DataManager.time);\n            const lastResponseDiff = currentTime.getTime() - DataManager.serverTimeResponseTimestamp;\n            return DataManager.getFormattedTime(\n                new Date(utcResponseTimestamp + lastResponseDiff - DataManager.serverTimeOffset),\n            );\n        }\n\n        return DataManager.getFormattedTime(new Date());\n    }\n\n    static showTime(): void {\n        if (!AppContext.gameConfiguration.UIShowTime) {\n            return;\n        }\n\n        let today = new Date(DataManager.getNonUTCGameTime());\n\n        if (DataManager.utcTime != null) {\n            const timeData = DataManager.getTimeData();\n            today = new Date(DataManager.getGameTime(timeData.utcTime));\n        }\n\n        let h = today.getHours();\n        let hFixed: string = h + \"\";\n        if (h < 10) {\n            hFixed = \"0\" + h;\n        }\n\n        let m = today.getMinutes();\n        let mFixed: string = m + \"\";\n        if (m < 10) {\n            mFixed = \"0\" + m;\n        }\n        DataManager.updateDataElement(\"TIME\", hFixed + \":\" + mFixed);\n        setTimeout(() => {\n            DataManager.showTime();\n        }, 1000);\n    }\n\n    static showSessionTime(time: number): void {\n        if (AppContext.gameConfiguration.GUIShowSessionTime) {\n            if (time < 0) {\n                time = 0;\n            }\n\n            let sec_num: number = time;\n            let hours: number = Math.floor(sec_num / 3600);\n            let minutes: number = Math.floor((sec_num - hours * 3600) / 60);\n            let seconds: number = sec_num - hours * 3600 - minutes * 60;\n\n            let hoursS: string = hours.toString();\n            let minutesS: string = minutes.toString();\n            let secondsS: string = seconds.toString();\n\n            if (hours < 10) {\n                hoursS = \"0\" + hours;\n            }\n            if (minutes < 10) {\n                minutesS = \"0\" + minutes;\n            }\n            if (seconds < 10) {\n                secondsS = \"0\" + seconds;\n            }\n\n            let pre: string = AppContext.gameConfiguration.UIShowTime ? \"&nbsp;|&nbsp;\" : \"\";\n\n            DataManager.updateDataElement(\"SESSION_TIME\", pre + hoursS + \":\" + minutesS + \":\" + secondsS);\n            time++;\n            setTimeout(() => {\n                DataManager.showSessionTime(time);\n            }, 1000);\n        }\n    }\n\n    static configureGameData(): void {\n        if (AppContext.gameConfiguration.StatusBar.indexOf(Plugins.StatusBar.Types.StatusBarMessage) > -1) {\n            if (\n                AppContext.gameConfiguration.StatusBarData != null &&\n                AppContext.gameConfiguration.StatusBarData[Plugins.StatusBar.Types.StatusBarMessage] != null\n            ) {\n                const statusBar = Plugins.StatusBar.getInstance();\n                statusBar.add(\n                    Plugins.StatusBar.Types.StatusBarMessage,\n                    \"statusBarMessage\",\n                    AppContext.gameConfiguration.StatusBarData[Plugins.StatusBar.Types.StatusBarMessage],\n                );\n                Scaling.resizeRoot();\n            }\n        }\n\n        if (!DataManager.gameEnableQuickSpin()) {\n            DataManager.hideDataElements(\"quickSpinSettings\");\n        }\n\n        if (!AppContext.gameConfiguration.GameEnableVibration) {\n            DataManager.hideDataElements(\"vibrationSettings\");\n        }\n\n        if (!DataManager.hasSettingsMenu()) {\n            DataManager.hideDataElements(\"helpGameSettings\");\n        }\n\n        const gameTitle = document.getElementById(\"gameTitle\");\n        if (gameTitle != null) {\n            DataManager.updateDataElement(GameData.DataGameTitle, gameTitle.innerHTML);\n\n            const gameHeadline = document.getElementById(\"gameHeadline\");\n            if (gameHeadline != null) {\n                gameHeadline.style.display = \"none\";\n            }\n        }\n\n        if (!AppContext.gameConfiguration.GameEnableReelsStop) {\n            DataManager.hideDataElements(\"GameEnableReelsStop\");\n        } else {\n            DataManager.hideDataElements(\"GameDisableReelsStop\");\n        }\n    }\n\n    private static hasSettingsMenu(): boolean {\n        if (DataManager.gameEnableQuickSpin()) {\n            return true;\n        }\n\n        return false;\n    }\n\n    static configureHelpData(): void {\n        DataManager.showDataElements(\"gambleAttempts\");\n        DataManager.showDataElements(\"helpGameLimit\");\n        DataManager.showDataElements(\"helpGambleLimit\");\n        DataManager.showDataElements(\"helpGambleCountLimit\");\n        DataManager.showDataElements(\"helpJoker\");\n        DataManager.showDataElements(\"helpRTP\");\n        DataManager.showDataElements(\"totalRTP\");\n        DataManager.hideDataElements(\"helpVersion\");\n        DataManager.showDataElements(\"helpJackpotVisibleLimit\");\n        DataManager.showDataElements(\"helpJackpotContributionAll\");\n        DataManager.showDataElements(\"helpJackpotQualifyingBetsAll\");\n        DataManager.showDataElements(\"helpJackpotQualifyingBetsMin\");\n        DataManager.showDataElements(\"helpJackpotQualifyingBetsMax\");\n        DataManager.hideDataElements(\"helpShowCumulativeWinLimit\");\n        DataManager.hideDataElements(\"helpMPP\");\n        DataManager.hideDataElements(\"helpMPF\");\n\n        if (AppContext != null) {\n            if (GameManager.gameResponse != null) {\n                if (GameManager.gameResponse[\"helpData\"] == null) {\n                    DataManager.hideDataElements(\"gambleAttempts\");\n                    DataManager.hideDataElements(\"helpGameLimit\");\n                    DataManager.hideDataElements(\"helpGambleLimit\");\n                    DataManager.hideDataElements(\"helpGambleCountLimit\");\n                    DataManager.hideDataElements(\"helpJoker\");\n                    DataManager.hideDataElements(\"helpRTP\");\n                    DataManager.hideDataElements(\"totalRTP\");\n                    DataManager.hideDataElements(\"helpMPP\");\n                    DataManager.hideDataElements(\"helpMPF\");\n                } else {\n                    if (GameManager.gambleResponse == null) {\n                        DataManager.hideDataElements(\"hlpGambleSection\");\n                        DataManager.showDataElements(\"hlpNoGambleSection\", \"\");\n                    } else {\n                        DataManager.hideDataElements(\"hlpNoGambleSection\");\n                        DataManager.showDataElements(\"hlpGambleSection\", \"\");\n                    }\n\n                    if (GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] == null) {\n                        DataManager.hideDataElements(\"gambleAttempts\");\n                    } else {\n                        if (\n                            GameManager.gambleResponse != null &&\n                            GameManager.gambleResponse[\"totalCount\"] != null &&\n                            GameManager.gambleResponse[\"currentCount\"] != null\n                        ) {\n                            DataManager.updateDataElement(\n                                GameData.DataGambleAttempts,\n                                (\n                                    GameManager.gambleResponse[\"totalCount\"] -\n                                    GameManager.gambleResponse[\"currentCount\"]\n                                ).toString(),\n                            );\n                        }\n                    }\n\n                    if (GameManager.gameResponse[\"helpData\"][\"gameLimit\"] != null) {\n                        DataManager.HelpDataGameLimit = GameManager.gameResponse[\"helpData\"][\"gameLimit\"];\n                        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                            DataManager.updateGameDataFromModule(\n                                GameData.DataHelpGameLimit,\n                                parseInt(\n                                    NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager.CoinSize).toString(),\n                                ).toString(),\n                            );\n                            DataManager.updateDataElement(\n                                GameData.DataHelpGameLimit,\n                                parseInt(\n                                    NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager.CoinSize).toString(),\n                                ).toString(),\n                            );\n                        } else {\n                            DataManager.updateGameDataFromModule(\n                                GameData.DataHelpGameLimit,\n                                Languages.formatText(\n                                    Languages.FormatMoney,\n                                    GameManager.gameResponse[\"helpData\"][\"gameLimit\"],\n                                ) +\n                                    \" \" +\n                                    DataManager.getDataById(GameData.DataCurrency),\n                            );\n                            DataManager.updateDataElement(\n                                GameData.DataHelpGameLimit,\n                                Languages.formatText(\n                                    Languages.FormatMoney,\n                                    GameManager.gameResponse[\"helpData\"][\"gameLimit\"],\n                                ) +\n                                    \" \" +\n                                    DataManager.getDataById(GameData.DataCurrency),\n                            );\n                        }\n                    }\n\n                    if (\n                        GameManager.gameResponse[\"helpData\"][\"gameLimit\"] == null ||\n                        !AppContext.gameConfiguration.HelpShowGameLimit\n                    ) {\n                        DataManager.hideDataElements(\"helpGameLimit\");\n                    }\n\n                    if (GameManager.gameResponse[\"helpData\"][\"gambleLimit\"] != null) {\n                        DataManager.HelpDataGambleLimit = GameManager.gameResponse[\"helpData\"][\"gambleLimit\"];\n                        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                            DataManager.updateGameDataFromModule(\n                                GameData.DataHelpGambleLimit,\n                                parseInt(\n                                    NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString(),\n                                ).toString(),\n                            );\n                            DataManager.updateDataElement(\n                                GameData.DataHelpGambleLimit,\n                                parseInt(\n                                    NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString(),\n                                ).toString(),\n                            );\n                        } else {\n                            DataManager.updateGameDataFromModule(\n                                GameData.DataHelpGambleLimit,\n                                Languages.formatText(\n                                    Languages.FormatMoney,\n                                    GameManager.gameResponse[\"helpData\"][\"gambleLimit\"],\n                                ) +\n                                    \" \" +\n                                    DataManager.getDataById(GameData.DataCurrency),\n                            );\n                            DataManager.updateDataElement(\n                                GameData.DataHelpGambleLimit,\n                                Languages.formatText(\n                                    Languages.FormatMoney,\n                                    GameManager.gameResponse[\"helpData\"][\"gambleLimit\"],\n                                ) +\n                                    \" \" +\n                                    DataManager.getDataById(GameData.DataCurrency),\n                            );\n                        }\n                    } else {\n                        DataManager.hideDataElements(\"helpGambleLimit\");\n                    }\n\n                    if (GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] == null) {\n                        DataManager.hideDataElements(\"helpGambleCountLimit\");\n                    } else {\n                        DataManager.updateDataElement(\n                            GameData.DataHelpGambleCountLimit,\n                            GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] + \" \",\n                        );\n                    }\n\n                    if (\n                        GameManager.gameResponse[\"helpData\"][\"gambleWithJoker\"] == null ||\n                        !GameManager.gameResponse[\"helpData\"][\"gambleWithJoker\"]\n                    ) {\n                        DataManager.hideDataElements(\"helpJoker\");\n                    }\n\n                    let rtp = GameManager.gameResponse[\"helpData\"][\"rtp\"];\n                    let totalRtp = GameManager.gameResponse[\"helpData\"][\"totalRtp\"];\n                    let progressiveBonusRtp = GameManager.gameResponse[\"helpData\"][\"progressiveBonusRtp\"];\n                    let ridTotalRTP = AppContext.gameConfiguration.UseJackpotLocalization\n                        ? \"HLP_AD_INFO_TOTAL_RTP_J\"\n                        : \"HLP_AD_INFO_TOTAL_RTP\";\n                    let statusBarRtp: string;\n\n                    if (\n                        totalRtp != null &&\n                        progressiveBonusRtp != null &&\n                        rtp != null &&\n                        AppContext.gameConfiguration.HelpShowRTP\n                    ) {\n                        // BaseGameAndProgressiveBonus\n                        DataManager.hideDataElements(\"helpRTP\");\n                        DataManager.setDataElements(\n                            \"totalRTP\",\n                            Languages.getRid(\n                                ridTotalRTP,\n                                totalRtp.toString(),\n                                rtp.toString(),\n                                progressiveBonusRtp.toString(),\n                            ),\n                        );\n                        statusBarRtp = totalRtp.toString();\n                    } else if (rtp != null && AppContext.gameConfiguration.HelpShowRTP) {\n                        // BaseGame\n                        DataManager.hideDataElements(\"totalRTP\");\n                        DataManager.updateDataElement(GameData.DataHelpRTP, rtp.toString());\n                        statusBarRtp = rtp.toString();\n                    } else {\n                        // Disabled\n                        DataManager.hideDataElements(\"helpRTP\");\n                        DataManager.hideDataElements(\"totalRTP\");\n                    }\n\n                    if (\n                        statusBarRtp != null &&\n                        AppContext.gameConfiguration.StatusBar.indexOf(Plugins.StatusBar.Types.RTP) > -1\n                    ) {\n                        const statusBar = Plugins.StatusBar.getInstance();\n                        statusBar.add(\n                            Plugins.StatusBar.Types.RTP,\n                            \"rtp\",\n                            Languages.getRid(\"SB_INFO_RTP\", statusBarRtp.toString()),\n                        );\n                        Scaling.resizeRoot();\n                    }\n\n                    if (\n                        GameManager.gameResponse[\"helpData\"][\"version\"] == null ||\n                        !AppContext.gameConfiguration.HelpShowGameModuleVersion\n                    ) {\n                        DataManager.hideDataElements(\"helpVersion\");\n                    } else {\n                        DataManager.updateDataElement(\n                            GameData.DataHelpVersion,\n                            GameManager.gameResponse[\"helpData\"][\"version\"].toString(),\n                        );\n                        DataManager.showDataElements(\"helpVersion\");\n                    }\n\n                    if (GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"] != null) {\n                        if (\n                            AppContext.gameConfiguration.StatusBar.indexOf(\n                                Plugins.StatusBar.Types.MaxPayoutProbability,\n                            ) > -1\n                        ) {\n                            const statusBar = Plugins.StatusBar.getInstance();\n                            statusBar.add(\n                                Plugins.StatusBar.Types.MaxPayoutProbability,\n                                \"maxPayoutProbability\",\n                                Languages.getRid(\n                                    \"SB_INFO_MAX_PAYOUT_PROBABILITY\",\n                                    GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"],\n                                ),\n                            );\n                            Scaling.resizeRoot();\n                        }\n\n                        if (\n                            AppContext.gameConfiguration.HelpShowMaxPayoutProbabilityFrequency &&\n                            GameManager.gameResponse[\"helpData\"][\"maxTotalPayoutProbability\"] != null\n                        ) {\n                            DataManager.setDataElements(\n                                \"helpMPF\",\n                                Languages.getRid(\n                                    \"HLP_AD_INFO_MAX_PAYOUT_FREQUENCY\",\n                                    GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"].toString(),\n                                    GameManager.gameResponse[\"helpData\"][\"maxTotalPayoutProbability\"].toString(),\n                                ),\n                            );\n                            DataManager.showDataElements(\"helpMPF\");\n                        } else if (AppContext.gameConfiguration.HelpShowMaxPayoutProbability) {\n                            DataManager.updateDataElement(\n                                GameData.DataHelpMaxPayoutProbability,\n                                GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"].toString(),\n                            );\n                            DataManager.showDataElements(\"helpMPP\");\n                        }\n                    }\n\n                    if (\n                        AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"WithinGameRound\" &&\n                        AppContext.gameConfiguration.ProgressiveBonusHelpShowCumulativeWinLimit &&\n                        GameManager.gameResponse[\"helpData\"][\"gameLimit\"] != null\n                    ) {\n                        DataManager.showDataElements(\"helpShowCumulativeWinLimit\");\n                    }\n                }\n            }\n\n            if (BetManager.TotalBets.length > 0) {\n                DataManager.updateDataElement(\n                    GameData.DataHelpMinBet,\n                    Languages.formatText(Languages.FormatMoney, Math.min(...BetManager.TotalBets).toString()) +\n                        \" \" +\n                        DataManager.getDataById(GameData.DataCurrency),\n                );\n                DataManager.updateDataElement(\n                    GameData.DataHelpMaxBet,\n                    Languages.formatText(Languages.FormatMoney, Math.max(...BetManager.TotalBets).toString()) +\n                        \" \" +\n                        DataManager.getDataById(GameData.DataCurrency),\n                );\n            } else {\n                DataManager.hideDataElements(\"helpMinBet\");\n                DataManager.hideDataElements(\"helpMaxBet\");\n            }\n\n            if (AppContext.gameConfiguration.ProgressiveBonusContributeOnlyQualified) {\n                DataManager.hideDataElements(\"helpJackpotContributionAll\");\n                DataManager.showDataElements(\"helpJackpotContributionQualifying\");\n            } else {\n                DataManager.showDataElements(\"helpJackpotContributionAll\");\n                DataManager.hideDataElements(\"helpJackpotContributionQualifying\");\n            }\n\n            if (\n                AppContext.gameConfiguration.ProgressiveBonusVisibleMax > 0 &&\n                AppContext.gameConfiguration.ProgressiveBonusHelpShowMaxVisibleLimit\n            ) {\n                DataManager.updateDataElement(\n                    GameData.DataHelpJackpotVisibleLimit,\n                    Languages.formatText(\n                        Languages.FormatMoney,\n                        AppContext.gameConfiguration.ProgressiveBonusVisibleMax.toString(),\n                    ) +\n                        \" \" +\n                        DataManager.getDataById(GameData.DataCurrency),\n                );\n            } else {\n                DataManager.hideDataElements(\"helpJackpotVisibleLimit\");\n            }\n\n            if (AppContext.gameConfiguration.ProgressiveBonusMinQualifyingBet > 0) {\n                DataManager.hideDataElements(\"helpJackpotQualifyingBetsAll\");\n                DataManager.updateDataElement(\n                    GameData.DataHelpJackpotQualifyingBetsMin,\n                    Languages.formatText(\n                        Languages.FormatMoney,\n                        AppContext.gameConfiguration.ProgressiveBonusMinQualifyingBet.toString(),\n                    ) +\n                        \" \" +\n                        DataManager.getDataById(GameData.DataCurrency),\n                );\n            } else {\n                DataManager.hideDataElements(\"helpJackpotQualifyingBetsMin\");\n            }\n\n            if (AppContext.gameConfiguration.ProgressiveBonusMaxQualifyingBet > 0) {\n                DataManager.hideDataElements(\"helpJackpotQualifyingBetsAll\");\n                DataManager.updateDataElement(\n                    GameData.DataHelpJackpotQualifyingBetsMax,\n                    Languages.formatText(\n                        Languages.FormatMoney,\n                        AppContext.gameConfiguration.ProgressiveBonusMaxQualifyingBet.toString(),\n                    ) +\n                        \" \" +\n                        DataManager.getDataById(GameData.DataCurrency),\n                );\n            } else {\n                DataManager.hideDataElements(\"helpJackpotQualifyingBetsMax\");\n            }\n\n            if (AppContext.gameConfiguration.AutoplayMode === \"simple\") {\n                DataManager.hideDataElements(\"helpAutoplayBasic\");\n                DataManager.hideDataElements(\"helpAutoplayAdvanced\");\n            } else if (AppContext.gameConfiguration.AutoplayMode === \"advanced\") {\n                DataManager.hideDataElements(\"helpAutoplayBasic\");\n                DataManager.hideDataElements(\"helpAutoplaySimple\");\n            } else {\n                DataManager.hideDataElements(\"helpAutoplaySimple\");\n                DataManager.hideDataElements(\"helpAutoplayAdvanced\");\n            }\n\n            if (!AppContext.gameConfiguration.AutoplayModeEnabled) {\n                DataManager.hideDataElements(\"helpAutoplayEnabled\");\n            } else {\n                DataManager.hideDataElements(\"helpAutoplayDisabled\");\n            }\n\n            if (!AppContext.gameConfiguration.ShowHomeButton) {\n                DataManager.hideDataElements(\"gameHomeBtn\");\n            }\n\n            if (!AppContext.gameConfiguration.ShowGameRoundsHistory) {\n                DataManager.hideDataElements(\"historyBtn\");\n                DataManager.hideDataElements(\"helpHistoryBtn\");\n            }\n\n            if (AppContext.gameConfiguration.ExpirationResolveHours > 0) {\n                DataManager.updateDataElement(\n                    GameData.DataExpirationResolveHours,\n                    AppContext.gameConfiguration.ExpirationResolveHours.toString(),\n                );\n            } else {\n                DataManager.hideDataElements(\"expirationResolveHours\");\n            }\n        }\n    }\n\n    static setDataElements(cls: string, text: string): void {\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\n        for (var i: number = 0; i < elements.length; i++) {\n            var element: HTMLElement = <HTMLElement>elements[i];\n            if (element != null) {\n                element.innerHTML = text;\n            }\n        }\n    }\n\n    static hideDataElements(cls: string): void {\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\n        for (var i: number = 0; i < elements.length; i++) {\n            var element: HTMLElement = <HTMLElement>elements[i];\n            if (element != null) {\n                element.style.display = \"none\";\n            }\n        }\n    }\n\n    static showDataElements(cls: string, display: string = \"block\"): void {\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\n        for (var i: number = 0; i < elements.length; i++) {\n            var element: HTMLElement = <HTMLElement>elements[i];\n            if (element != null) {\n                element.style.display = display;\n            }\n        }\n    }\n\n    static cleanUpElements(): void {\n        var elements: HTMLCollectionOf<Element>;\n        if (AppContext != null && AppContext.gameConfiguration != null && AppContext.gameConfiguration.UseCoins) {\n            elements = document.getElementsByClassName(\"useCoinsFalse\");\n        } else {\n            elements = document.getElementsByClassName(\"useCoinsTrue\");\n        }\n\n        if (elements != null && elements.length > 0) {\n            while (elements.length > 0) {\n                elements[0].parentNode.removeChild(elements[0]);\n            }\n        }\n\n        if (AppContext.gameConfiguration.UseJackpotLocalization) {\n            elements = document.getElementsByClassName(\"helpJackpotB\");\n        } else {\n            elements = document.getElementsByClassName(\"helpJackpotJ\");\n        }\n\n        if (elements != null && elements.length > 0) {\n            while (elements.length > 0) {\n                elements[0].parentNode.removeChild(elements[0]);\n            }\n        }\n\n        elements = document.getElementsByClassName(\"settingTabItem\");\n        let hideSettingsButton = true;\n        for (let i = 0; i < elements.length; i++) {\n            if ((<HTMLElement>elements[i]).style.display != \"none\") {\n                hideSettingsButton = false;\n            }\n        }\n\n        if (hideSettingsButton) {\n            elements = document.getElementsByClassName(\"settingsBtn\");\n            if (elements != null && elements.length > 0) {\n                while (elements.length > 0) {\n                    elements[0].parentNode.removeChild(elements[0]);\n                }\n            }\n        }\n    }\n\n    static addTrustedUserAction(actionId: string): void {\n        if (DataManager.TrustedUserActions.indexOf(actionId) == -1) {\n            const groupActionId = DataManager.getGroupActionId(actionId);\n\n            DataManager.TrustedUserActions.push(groupActionId);\n        }\n    }\n\n    static getTrustedUserAction(groupActionId: string): boolean {\n        const index = DataManager.TrustedUserActions.indexOf(groupActionId);\n        if (index == -1) {\n            return false;\n        } else {\n            DataManager.TrustedUserActions.splice(index, 1);\n            return true;\n        }\n    }\n\n    private static getGroupActionId(actionId: string): string {\n        let result = actionId;\n        switch (actionId) {\n            case \"BET_PLUS\":\n            case \"BET_MINUS\":\n            case \"BET_CYCLE\":\n            case \"MAX_BET\":\n            case \"COIN_SIZE_PLUS\":\n            case \"COIN_SIZE_PLUS_CYCLE\":\n            case \"COIN_SIZE_MINUS\":\n            case \"PAYLINE_COUNT_PLUS\":\n            case \"PAYLINE_COUNT_PLUS_CYCLE\":\n            case \"PAYLINE_COUNT_MINUS\":\n                result = \"BET_CHANGE\";\n                break;\n            case \"SPIN\":\n                result = \"SPIN\";\n                break;\n            case \"SPIN_OR_STOP\":\n                if (HtmlController.ActionElements[\"SPIN_STOP\"] != null) {\n                    const btn = HtmlController.ActionElements[\"SPIN_STOP\"][0];\n                    if (btn != null && btn.instance.classList.contains(\"_disabled\")) {\n                        result = \"SPIN\";\n                    }\n                }\n        }\n\n        return result;\n    }\n\n    static stopAutoplayIfLossLimit(): void {\n        if (DataManager.AutoplayLossLimit === \"∞\") {\n            return;\n        }\n\n        let lossLimit: number = parseFloat(DataManager.AutoplayLossLimit);\n        if (GameManager.baseResponse != null && GameManager.baseResponse.totalWin > 0) {\n            lossLimit += GameManager.baseResponse.totalWin;\n        }\n\n        if (lossLimit - BetManager.Bet < 0) {\n            DataManager.Autoplay = false;\n        }\n    }\n\n    static updateLossLimit(win: number = 0): void {\n        if (DataManager.AutoplayLossLimit === \"∞\") {\n            return;\n        }\n\n        let lossLimit: number = parseFloat(DataManager.AutoplayLossLimit);\n\n        if (win > 0) {\n            lossLimit += win;\n        } else {\n            if (BetManager.Bet != null) {\n                lossLimit = NumberUtils.toNumber(NumberUtils.subtract(lossLimit, BetManager.Bet));\n            }\n        }\n\n        DataManager.AutoplayLossLimit = lossLimit + \"\";\n    }\n\n    static stopAutoplayIfWinLimit(): boolean {\n        if (!DataManager.Autoplay) {\n            return false;\n        }\n\n        if (DataManager.AutoplayWinLimit == \"∞\") {\n            return false;\n        } else {\n            if (\n                GameManager.gameResponse != null &&\n                GameManager.gameResponse.totalWin > 0 &&\n                GameManager.gameResponse.totalWin >= parseFloat(DataManager.AutoplayWinLimit)\n            ) {\n                DataManager.Autoplay = false;\n                return true;\n            }\n        }\n    }\n\n    static gameState(state: string): void {\n        if (AppContext.clientHost) {\n            const messageId = GameManager.gameResponse.messageId;\n            const unpaidWin = GameManager.gameResponse.totalWin;\n            const gameRoundId = GameManager.gameResponse.roundId;\n            let gameEvent: any;\n            switch (state) {\n                case \"PrimaryGameEscrow\":\n                    gameEvent = GameEvents.PrimaryGameEscrow(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"PrimaryGameStarted\":\n                    gameEvent = GameEvents.PrimaryGameStarted(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"PrimaryGameEnded\":\n                    gameEvent = GameEvents.PrimaryGameEnded(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"SecondaryGameEntered\":\n                    gameEvent = GameEvents.SecondaryGameEntered(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"SecondaryGameEscrow\":\n                    gameEvent = GameEvents.SecondaryGameEscrow(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"SecondaryGameStarted\":\n                    gameEvent = GameEvents.SecondaryGameStarted(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"GameCollectEscrow\":\n                    gameEvent = GameEvents.GameCollectEscrow(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"SecondaryGameCollectEscrow\":\n                    gameEvent = GameEvents.SecondaryGameCollectEscrow(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"SecondaryGameEnded\":\n                    gameEvent = GameEvents.SecondaryGameEnded(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"GameEnded\":\n                    gameEvent = GameEvents.GameEnded(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"SecondaryGameHalved\":\n                    gameEvent = GameEvents.SecondaryGameHalved(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"AutoPlayStarted\":\n                    gameEvent = GameEvents.AutoPlayStarted(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"AutoPlayEnded\":\n                    gameEvent = GameEvents.AutoPlayEnded(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"GamePlayDisabled\":\n                    gameEvent = GameEvents.GamePlayDisabled(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"GamePlayEnabled\":\n                    gameEvent = GameEvents.GamePlayEnabled(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"GameLoaded\":\n                    gameEvent = GameEvents.GameLoaded(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"BonusGameEnded\":\n                    gameEvent = GameEvents.BonusGameEnded(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"BonusGameEscrow\":\n                    gameEvent = GameEvents.BonusGameEscrow(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"BonusGameStarted\":\n                    gameEvent = GameEvents.BonusGameStarted(messageId, unpaidWin, gameRoundId);\n                    break;\n                case \"BonusGameTriggered\":\n                    gameEvent = GameEvents.BonusGameTriggered(messageId, unpaidWin, gameRoundId);\n                    break;\n            }\n\n            if (gameEvent != null) {\n                AppContext.clientHost.notifyEventFromGame(gameEvent);\n            }\n        }\n    }\n\n    private static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"DataManager\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/DataManager.ts\n **/","import { ArgValidator, Logger, Utils, ApiClientCommunication } from \"neo-common\";\nimport { ClientHost, Communication, GameEngine, Platforms } from \"neo-games\";\nimport { Controller } from \"../GameComponents/Controller\";\nimport { UserControls } from \"../Channels/Common/UserControls/UserControls\";\nimport { GameClient } from \"neo-games/Engine/Communication/Game/GameClient\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\nimport { BetManager } from \"./BetManager\";\nimport { BalanceManager } from \"./BalanceManager\";\nimport { ModuleManager } from \"./ModuleManager\";\nimport { DataManager } from \"./DataManager\";\nimport { Languages } from \"../Utils/Languages\";\nimport { DialogOpenData } from \"../Channels/Common/Dialogs/Dialog\";\nimport { GameApp } from \"../GameApp\";\nimport { ResponsibleDialog1 } from \"../Channels/Common/Dialogs/ResponsibleDialog1\";\nimport { GameModuleFreespinResponse } from \"neo-games/Engine/Communication/Game/Responses/GameModuleFreespinResponse\";\nimport { Game } from \"neo-games/Engine/Communication/index\";\nimport { MessageManager } from \"./MessageManager\";\nimport { SimilarGames } from \"../Channels/Common/SimilarGames/SimilarGames\";\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\nimport { LimitDialog } from \"../Channels/Common/Dialogs/LimitDialog\";\n\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\nimport { Scaling } from \"../Utils/Scaling\";\nimport { NotificationManager } from \"./NotificationManager\";\nimport { Paytable } from \"../Channels/Common/Paytable/Paytable\";\n\nimport { SessionTimer } from \"../Channels/Common/Platforms/Playtech/SessionTimer\";\nimport { StageController } from \"../Components/StageController\";\nimport { RetentionPanel } from \"../Utils/RetentionPanel\";\n\ntype InitResponse = Communication.Game.InitResponse;\ntype GameResponse = Communication.Game.GameResponse;\ntype GameModuleBaseResponse = Communication.Game.GameModuleBaseResponse;\ntype GameModuleGambleResponse = Communication.Game.GameModuleGambleResponse;\ntype GameModuleFreespinsResponse = Communication.Game.GameModuleFreespinResponse;\ntype GameModulePickResponse = Communication.Game.GameModulePickResponse;\ntype FreeRoundsOffersRequest = Communication.Game.FreeRoundsOffersRequest;\nvar GameModules = Communication.Game.GameModules;\n\nexport class GameManager {\n    private static _app: GameEngine.IApp;\n    private static _gameClient: GameClient;\n    private static _collectModule: string = GameModules.Base;\n\n    static gameResponse: GameResponse;\n    static baseResponse: GameModuleBaseResponse;\n    static gambleResponse: GameModuleGambleResponse;\n    static freespinsResponse: GameModuleFreespinsResponse;\n    static pickResponse: GameModulePickResponse;\n\n    static requestSend: boolean = false;\n\n    static exitOnCollect: boolean = false;\n\n    static disableOnCollect: boolean = false;\n    static disableGamePlay: boolean = false;\n\n    static dontEnableGamePlay: boolean = false;\n\n    public static get gameClient(): Communication.Game.GameClient {\n        return GameManager._gameClient;\n    }\n\n    static startGame(gameClient: Communication.Game.GameClient, app: GameEngine.IApp): void {\n        if (DEBUG) {\n            GameManager.log(\"startGame\");\n        }\n\n        ArgValidator.ensureIsNotNullOrUndefined(gameClient, \"gameClient\");\n        GameManager._gameClient = gameClient;\n        GameManager._gameClient.onErrorResponse = GameManager.errorReceived;\n        DataManager.BackSoundsPlayingFromGame =\n            AppContext.current.isBackgroundMusicEnabled && AppContext.current.getBackgroundMusic();\n        NotificationManager.initialize();\n\n        GameManager._app = app;\n\n        if (ModuleManager.connectModules()) {\n            if (FreeRoundBonus.wasInitialized) {\n                GameManager.init();\n            } else {\n                setTimeout(() => {\n                    GameManager.init();\n                }, 3000);\n            }\n        } else {\n            if (DEBUG) {\n                GameManager.log(\"ERROR cant connect channel and game modules\");\n            }\n        }\n    }\n\n    static showGame(): void {\n        if (DEBUG) {\n            GameManager.log(\"showGame\");\n        }\n\n        var loading: HTMLElement = document.getElementById(\"loading\");\n        var canvas: HTMLElement = document.getElementById(\"canvas\");\n\n        if (loading != null && canvas != null) {\n            Scaling.onLoadComplete();\n            Jackpot.show();\n            RetentionPanel.show();\n            Paytable.openAtStart();\n\n            //showGame is called after prepare new game and showFreeRounds, so if we have game then close frb\n            if (DataManager.GameRoundClosed && Jackpot.hasMiniGame() && !FreeRoundBonus.inFrb) {\n                FreeRoundBonus.disableUi();\n            }\n\n            DataManager.cleanUpElements();\n            loading.style.display = \"none\";\n            canvas.style.display = \"block\";\n            DataManager.updateDataElements();\n        } else {\n            if (DEBUG) {\n                GameManager.log(\"ERROR loading or canvas doesnt exist\");\n            }\n        }\n    }\n\n    static setupGame(response: InitResponse): void {\n        if (DEBUG) {\n            GameManager.log(\"setupGame\");\n        }\n\n        GameManager.parseResponses(response);\n        DataManager.updateResponseData(true);\n        ModuleManager.initModules();\n        DataManager.SimilarGames = new SimilarGames();\n        DataManager.SimilarGames.initialize();\n        FreeRoundBonus.showFreeRounds();\n    }\n\n    static init(): void {\n        if (DEBUG) {\n            GameManager.log(\"init\");\n        }\n\n        if (GameManager.requestSend) {\n            return;\n        } else {\n            GameManager.requestSend = true;\n        }\n\n        DataManager.getServerTime();\n        DataManager.controlAutoplay();\n        FreeRoundBonus.initializeFreeRounds();\n        Jackpot.initialize();\n        GameManager._gameClient.init().then((response: InitResponse) => {\n            GameManager.initReceived(response);\n        });\n    }\n\n    static softInit(): void {\n        if (DEBUG) {\n            GameManager.log(\"soft init\");\n        }\n        if (GameManager.requestSend) {\n            return;\n        } else {\n            GameManager.requestSend = true;\n        }\n        DataManager.controlAutoplay();\n        GameManager._gameClient.init().then((response: InitResponse) => {\n            GameManager.softInitReceived(response);\n        });\n    }\n\n    static collect(module: string): void {\n        if (DEBUG) {\n            GameManager.log(\"collect module: \" + module);\n        }\n\n        if (GameManager.requestSend) {\n            return;\n        } else {\n            GameManager.requestSend = true;\n        }\n\n        if (!AppContext.gameDefinition.Gamble) {\n            DataManager.Collectable = true;\n        }\n\n        GameManager.canExit();\n\n        this._collectModule = module;\n\n        DataManager.controlAutoplay();\n        if (!DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\n            GameManager.gameClient.collect().then(GameManager.collectReceived);\n        }\n    }\n\n    static initReceived(response: InitResponse): void {\n        if (DEBUG) {\n            GameManager.log(\"initReceived\");\n        }\n\n        if (Utils.isNullOrUndefined(response)) {\n            if (DEBUG) {\n                GameManager.log(\"initReceived NULL response (error in send?)\");\n            }\n            return;\n        }\n\n        DataManager.showTime();\n        if (!Utils.isNullOrUndefined(AppContext.gameConfiguration.GUIShowSessionTimeStartValue)) {\n            DataManager.showSessionTime(AppContext.gameConfiguration.GUIShowSessionTimeStartValue);\n        } else {\n            DataManager.showSessionTime(0);\n        }\n\n        MessageManager.postpone(GameManager.continueInitReceived, response);\n    }\n\n    static continueInitReceived(response: InitResponse): void {\n        GameManager.setupGame(response);\n        GameManager.showGame();\n\n        Platforms.Platforms.gameDataLoaded({\n            PlayerTokenId: AppContext.gameConfiguration.PlayerTokenId,\n            HomeUrl: AppContext.gameConfiguration.ExitUrl,\n            ClientToken: AppContext.gameConfiguration.ClientToken,\n            GameName: GameApp.key,\n            SessionData: {\n                SessionBalance: AppContext.gameConfiguration.SessionBalance,\n                TotalWin: AppContext.gameConfiguration.TotalWin,\n                TotalBet: AppContext.gameConfiguration.TotalBet,\n            },\n            CurrencyCode: response.initData.currency != null ? response.initData.currency : \"\",\n            Balance: GameManager.gameResponse.balance.real,\n            Bet: BetManager.Bet,\n        });\n\n        Platforms.Platforms.rendererType(StageController.Renderer instanceof PIXI.CanvasRenderer ? \"canvas\" : \"webGL\");\n        DataManager.gameState(\"GameLoaded\");\n\n        GameManager.requestSend = false;\n\n        // Collect total win in last cumulative FRB round when GR isn't yet closed\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\n            if (!DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\n                // Collect only when freespins is not enabled/active\n                if (\n                    !ModuleManager.freespinsEnabled() &&\n                    !ModuleManager.freespinsActive() &&\n                    !ModuleManager.pickEnabled() &&\n                    !ModuleManager.pickActive()\n                ) {\n                    ModuleManager.collect(GameModules.Base);\n                }\n            }\n        }\n    }\n\n    static softInitReceived(response: InitResponse): void {\n        DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n        DataManager.updateGameDataFromModule(GameData.DataTotalWin, \"0\");\n        LimitDialog.closeDialog();\n\n        GameManager.parseResponses(response);\n        DataManager.updateResponseData(true);\n        GameManager.requestSend = false;\n        ModuleManager.restoreGameRound(GameModules.Base);\n        FreeRoundBonus.openOther();\n    }\n\n    static collectReceived(response: GameResponse): void {\n        if (DEBUG) {\n            GameManager.log(\"collectReceived\");\n        }\n\n        MessageManager.postpone(GameManager.continueCollectReceived, response);\n    }\n\n    static continueCollectReceived(response: GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n            ModuleManager.collectInModule(GameManager._collectModule);\n            GameManager.canExit();\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    static errorReceived(apiError: ApiClientCommunication.Types.ApiClientError): void {\n        let requestName: string = (apiError.requestInfo.request as any).constructor.name;\n        if (requestName === \"FreeRoundsOffersRequest\") {\n            FreeRoundBonus.wasInitialized = true;\n            return;\n        }\n\n        if (DEBUG) {\n            GameManager.log(\"errorReceived\");\n        }\n\n        // mute sounds and remove focus handling\n        window.onblur = null;\n        window.onfocus = null;\n        PIXI.sound.muteAll();\n\n        let localizedText = \"\";\n        let isError = true;\n        let code = apiError.httpStatusCode.toString();\n        let customData: DialogOpenData = {\n            special: false,\n            gameRoundId: Utils.valueOrDefault(DataManager.getDataById(\"ROUND_ID\"), \"0\"),\n            errorId: Utils.isNullOrUndefined(apiError.error) ? \"\" : apiError.error.errorId,\n            actions: Utils.isNullOrUndefined(apiError.error) ? [] : apiError.error[\"actions\"], //ToDo Dostat to do ApiClientCommunication.Types.ApiClientError\n        };\n\n        let ignoreShowDialog = false;\n        let hasMessages = false;\n        let callbackFnc: ((arg: any) => void) | null = null;\n        let isFatalError = true;\n\n        if (apiError.error) {\n            let resource = \"ERROR_\" + apiError.httpStatusCode + \"_\" + apiError.error.code;\n            code = [apiError.httpStatusCode.toString(), apiError.error.code].join(\"-\");\n            localizedText = Languages.getRid(resource);\n\n            hasMessages = apiError.error.messages != null;\n\n            if (localizedText == null) {\n                resource = \"ERROR_\" + apiError.httpStatusCode;\n                code = apiError.httpStatusCode.toString();\n                localizedText = Languages.getRid(resource);\n            }\n\n            // errors displayed as info messages with \"Reload\" button\n            if (\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1009) ||\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1011) ||\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1012) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2005) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2013) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2014) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2016) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2017) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2018)\n            ) {\n                customData.special = true;\n                customData.errorId = \"\";\n                isError = false;\n            }\n\n            // errors displayed as info messages with \"Close\" button\n            if (\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2001) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2002) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2012)\n            ) {\n                (<any>customData).ultraSpecial = true;\n            }\n\n            // errors with server message shown instead of resource message\n            if (\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2015) ||\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2016)\n            ) {\n                code = \"\";\n                localizedText = apiError.error.message;\n            }\n\n            // extend FRB error message with \"collect partial\" msg\n            if (apiError.httpStatusCode === 500 && apiError.error.code === 2017) {\n                //expired FRB offer\n                if (FreeRoundBonus.collectPartial) {\n                    localizedText += Languages.getRid(\"FRB_COLLECT_PARTIAL_ALLOWED\");\n                } else {\n                    localizedText += Languages.getRid(\"FRB_COLLECT_PARTIAL_NOT_ALLOWED\");\n                }\n            }\n\n            // extend FRB error message with \"collect partial not allowed\" msg\n            if (apiError.httpStatusCode === 500 && apiError.error.code === 2018) {\n                //canceled FRB offer\n                localizedText += Languages.getRid(\"FRB_COLLECT_PARTIAL_NOT_ALLOWED\");\n            }\n\n            if (apiError.httpStatusCode === 500 && apiError.error.code === 2019) {\n                //playtech ignored error but messages are allowed\n                if (!hasMessages) {\n                    ignoreShowDialog = true;\n                }\n                callbackFnc = MessageManager.callbackFnc;\n                isFatalError = false;\n            }\n\n            if (\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1011) ||\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1012)\n            ) {\n                let spbSufix = AppContext.gameConfiguration.UseJackpotLocalization ? \"_J\" : \"\";\n                localizedText = Languages.getRid(resource + spbSufix);\n            }\n\n            if (apiError.httpStatusCode === 500 && apiError.error.code === 2020) {\n                //playtech session timer\n                SessionTimer.postpone(SessionTimer.callbackFnc, SessionTimer.prepareData(apiError.error));\n                return;\n            }\n        } else {\n            // errors displayed as info messages with \"Close\" button\n            if (apiError.httpStatusCode === 401) {\n                (<any>customData).ultraSpecial = true;\n            }\n\n            let resource = \"ERROR_\" + apiError.httpStatusCode.toString();\n            localizedText = Languages.getRid(resource);\n        }\n\n        if (DEBUG) {\n            Logger.debugGroup(\n                \"GameManager\",\n                `[errorReceived] calling ` +\n                    `AppContext.current.showDialog('${localizedText}', ${isError}, '${code}', \n                    ${customData.errorId}, ${customData.gameRoundId}, ${JSON.stringify(customData)})`,\n            );\n        }\n\n        if (isError) {\n            let error_code_for_platforms = apiError.httpStatusCode.toString();\n            if (apiError.error) {\n                error_code_for_platforms = [apiError.httpStatusCode.toString(), apiError.error.code].join(\"-\");\n            }\n            Platforms.Platforms.error(error_code_for_platforms, localizedText);\n            if (isFatalError) {\n                Jackpot.showError();\n                NotificationManager.disconnect();\n            }\n        }\n\n        //if platform shows dialog itself, skip showing error dialog in our game window\n        if (Platforms.Platforms.handleShowErrorDialog || ignoreShowDialog) {\n            return;\n        }\n\n        if (hasMessages) {\n            MessageManager.postpone(callbackFnc, apiError.error);\n        } else {\n            AppContext.current.showDialog(\n                localizedText,\n                isError,\n                code,\n                customData.errorId,\n                customData.gameRoundId,\n                customData,\n            );\n        }\n    }\n\n    static parseResponses(response: GameResponse): void {\n        if (DEBUG) {\n            GameManager.log(\"parseResponses\");\n        }\n\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.gameResponse = response;\n            if (response.module<GameModuleBaseResponse>(GameModules.Base) != null) {\n                GameManager.baseResponse = response.module<GameModuleBaseResponse>(GameModules.Base);\n            } else {\n                GameManager.baseResponse = null;\n            }\n\n            if (response.module<GameModuleGambleResponse>(GameModules.Gamble) != null) {\n                GameManager.gambleResponse = response.module<GameModuleGambleResponse>(GameModules.Gamble);\n            } else {\n                GameManager.gambleResponse = null;\n            }\n\n            if (response.module<GameModuleFreespinResponse>(GameModules.Freespins) != null) {\n                GameManager.freespinsResponse = response.module<GameModuleFreespinResponse>(GameModules.Freespins);\n            } else {\n                GameManager.freespinsResponse = null;\n            }\n\n            if (response.module<GameModulePickResponse>(GameModules.Pick) != null) {\n                GameManager.pickResponse = response.module<GameModulePickResponse>(GameModules.Pick);\n            } else {\n                GameManager.pickResponse = null;\n            }\n        }\n    }\n\n    static collectable(): boolean {\n        if (ModuleManager.gambleActive()) {\n            return false;\n        }\n\n        if (FreeRoundBonus.endMsgDisplayed) {\n            return false;\n        }\n\n        if (DataManager.GameRoundClosed && Jackpot.hasMiniGame()) {\n            return false;\n        }\n\n        if (DataManager.GameRoundClosed && DataManager.Collectable) {\n            return true;\n        }\n\n        return false;\n    }\n\n    static canExit(exit: boolean = false): boolean {\n        let canExit = GameManager.collectable();\n\n        if (DEBUG) {\n            console.log(`GameManager.canExit(exit: ${exit}) -> afterCollect: ${canExit}`);\n        }\n\n        if (\n            canExit &&\n            !exit &&\n            ResponsibleDialog1.showResponsibleDialog1OnCollect &&\n            ResponsibleDialog1.responsibleDialog1Data != null &&\n            !FreeRoundBonus.isLastFrb\n        ) {\n            DataManager.Autoplay = false;\n            DataManager.AutoplayAfterGamble = false;\n            ResponsibleDialog1.openDialog(ResponsibleDialog1.responsibleDialog1Data);\n            ResponsibleDialog1.showResponsibleDialog1OnCollect = false;\n            ResponsibleDialog1.responsibleDialog1Data = null;\n            ModuleManager.disableBase();\n            ModuleManager.disableGamble();\n            ModuleManager.resetWinAnimator(GameModules.Base);\n        }\n\n        if (GameManager.exitOnCollect && canExit) {\n            if (DEBUG) {\n                console.log(\n                    `GameManager.canExit(exit: ${exit}) -> manuall call of GameApp.exit() ` +\n                        `because of GameManager.exitOnCollect = ${GameManager.exitOnCollect}`,\n                );\n            }\n            GameApp.exit();\n            return false;\n        }\n        if (canExit && exit) {\n            return canExit;\n        } else {\n            if (!GameManager.exitOnCollect && exit) {\n                if (DEBUG) {\n                    console.log(\n                        `GameManager.canExit(exit: ${exit}) -> ` +\n                            `changing GameManager.exitOnCollect(${GameManager.exitOnCollect}) to value '${exit}'`,\n                    );\n                }\n\n                GameManager.exitOnCollect = true; //exit;\n            }\n        }\n\n        if (DEBUG) {\n            console.log(`GameManager.canExit(exit: ${exit}) -> returns: ${canExit}`);\n        }\n\n        return canExit;\n    }\n\n    static showResponsibleDialog1(data: ClientHost.Types.ClientHostResponsibleDialogData): void {\n        if (GameManager.canExit()) {\n            DataManager.Autoplay = false;\n            DataManager.AutoplayAfterGamble = false;\n            ResponsibleDialog1.openDialog(data);\n            ResponsibleDialog1.showResponsibleDialog1OnCollect = true;\n            ResponsibleDialog1.responsibleDialog1Data = null;\n            ModuleManager.disableBase();\n            ModuleManager.disableGamble();\n            ModuleManager.resetWinAnimator(GameModules.Base);\n        } else {\n            ResponsibleDialog1.showResponsibleDialog1OnCollect = true;\n            ResponsibleDialog1.responsibleDialog1Data = data;\n        }\n    }\n\n    static disablePlay(): void {\n        GameManager.disableOnCollect = true;\n        if (GameManager.collectable()) {\n            GameManager.disableGamePlay = true;\n            ModuleManager.disableBase();\n            DataManager.gameState(\"GamePlayDisabled\");\n        }\n    }\n\n    static enablePlay(): void {\n        GameManager.disableOnCollect = false;\n        GameManager.disableGamePlay = false;\n        if (!GameManager.dontEnableGamePlay) {\n            ModuleManager.restoreGameRound(GameModules.Base);\n        }\n        DataManager.gameState(\"GamePlayEnabled\");\n    }\n\n    static openConfirmationDialog(module: string, text: string): void {\n        const dialogData = {\n            text: text,\n            actions: [\n                {\n                    type: \"restore\",\n                    text: Languages.getRid(\"CONTINUE\"),\n                    customData: module,\n                },\n            ],\n            special: true,\n        };\n        ModuleManager.disableChannelModule(module);\n        AppContext.current.showDialog(text, false, null, null, null, dialogData);\n    }\n\n    static closeResponsibleDialog1(): void {\n        GameManager.requestSend = false;\n        ResponsibleDialog1.showResponsibleDialog1OnCollect = false;\n        ModuleManager.restoreGameRound(GameModules.Base);\n    }\n\n    private static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"GameManager\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/GameManager.ts\n **/","import { Logger, NumberUtils } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { GameManager } from \"./GameManager\";\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\nimport { DataManager } from \"./DataManager\";\nimport { ModuleManager } from \"./ModuleManager\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { HtmlDenomContainerElement } from \"../HTMLComponents/Custom/HtmlDenomContainerElement\";\nimport { BalanceManager } from \"./BalanceManager\";\nimport { HtmlBetSelectorContainerElement } from \"../HTMLComponents/Custom/HtmlBetSelectorContainerElement\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\nimport { HtmlBetSelectorContainerElement2 } from \"../HTMLComponents/Custom/HtmlBetSelectorContainerElement2\";\nimport { Languages } from \"../Utils/Languages\";\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\nimport { BetHigherThanMinDialog } from \"../Channels/Common/Dialogs/BetHigherThanMinDialog\";\n\nvar SpinBet = Communication.Game.SpinBet;\nvar BetType = Communication.Game.BetType;\n\nexport class BetManager {\n    static CoinSize: number;\n    static CoinCount: number;\n    static Bet: number;\n\n    static Coins: { [coinSize: number]: Array<number> };\n    static TotalBets: Array<number>;\n\n    static DenomContainer: HtmlDenomContainerElement;\n    static CoinCountContainer: HtmlBetSelectorContainerElement;\n    static BetContainer: HtmlBetSelectorContainerElement2;\n\n    static minBet: boolean = false;\n    static maxBet: boolean = false;\n\n    static initializeBet(): void {\n        if (GameManager.baseResponse.initData != null) {\n            if (\n                GameManager.baseResponse.initData.betSettings != null &&\n                GameManager.baseResponse.initData.betSettings.totalBets != null\n            ) {\n                BetManager.TotalBets = GameManager.baseResponse.initData.betSettings.totalBets;\n            }\n\n            if (\n                GameManager.baseResponse.initData.betSettings != null &&\n                GameManager.baseResponse.initData.betSettings.coins != null\n            ) {\n                BetManager.Coins = GameManager.baseResponse.initData.betSettings.coins;\n            }\n\n            if (\n                GameManager.baseResponse.initData.lastBet != null &&\n                GameManager.baseResponse.initData.lastBet.betType === BetType.Total\n            ) {\n                if (\n                    GameManager.baseResponse.initData.lastBet.totalBet != null &&\n                    !AppContext.gameConfiguration.UseCoins\n                ) {\n                    if (\n                        BetManager.Bet != null &&\n                        BetManager.Bet !== GameManager.baseResponse.initData.lastBet.totalBet\n                    ) {\n                        ModuleManager.initNewBet();\n                    } else {\n                        ModuleManager.initNewBet(false);\n                    }\n                    BetManager.Bet = BetHigherThanMinDialog.getGameStartedWithoutFeature()\n                        ? BetManager.TotalBets[0]\n                        : GameManager.baseResponse.initData.lastBet.totalBet;\n                    BetManager.updateBetPosition();\n                    DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n                } else {\n                    if (!DataManager.GameRoundClosed) {\n                        if (GameManager.baseResponse.initData.lastBet.coinSize != null) {\n                            BetManager.CoinSize = GameManager.baseResponse.initData.lastBet.coinSize;\n                            DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\n                        }\n                        if (GameManager.baseResponse.initData.lastBet.coinCount != null) {\n                            BetManager.CoinCount = parseInt(\n                                GameManager.baseResponse.initData.lastBet.coinCount.toString(),\n                            );\n                            DataManager.updateGameDataFromModule(\n                                GameData.DataCointCount,\n                                BetManager.CoinCount.toString(),\n                            );\n                        }\n                        if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\n                            BetManager.Bet = parseFloat(\n                                NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount),\n                            );\n                            DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n                        }\n                        BalanceManager.recalculateDenomBalance();\n                    } else if (AppContext.current.getDenomination() != null && BetManager.Coins != null) {\n                        if (BetManager.Coins[AppContext.current.getDenomination()] != null) {\n                            BetManager.changeDenom(AppContext.current.getDenomination(), true);\n                        } else {\n                            BetManager.changeDefaultDenom();\n                        }\n                    } else {\n                        BetManager.changeDefaultDenom();\n                    }\n                    if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\n                        BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\n                        DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n                    }\n                }\n            }\n\n            if (BetManager.DenomContainer != null) {\n                BetManager.DenomContainer.addValues();\n            }\n\n            if (BetManager.CoinCountContainer != null) {\n                BetManager.CoinCountContainer.addValues();\n            }\n\n            if (BetManager.BetContainer != null) {\n                BetManager.BetContainer.addValues();\n            }\n        }\n    }\n\n    static changeBet(decrease: boolean = false, max: boolean = false, cycle: boolean = false): void {\n        BetHigherThanMinDialog.closeDialog(true);\n        if (DataManager.GameRoundClosed) {\n            FreeRoundBonus.enableUi();\n        }\n\n        BetManager.unHideValues();\n\n        if (AppContext.gameConfiguration.UseCoins) {\n            if (cycle) {\n                BetManager.cycleCoinCount();\n                return;\n            } else if (max) {\n                BetManager.maxCoinCount();\n                return;\n            }\n        }\n\n        var bonus: number = parseFloat(DataManager.getDataById(GameData.DataBalanceBonus));\n        var real: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\n\n        if (BetManager.Bet != null && BetManager.TotalBets != null && BetManager.TotalBets.length > 0) {\n            var index: number;\n            for (var i: number = 0; i < BetManager.TotalBets.length; i++) {\n                if (BetManager.Bet === BetManager.TotalBets[i]) {\n                    index = i;\n                }\n            }\n            if (index != null) {\n                if (decrease) {\n                    if (index === 0) {\n                        if (cycle) {\n                            index = BetManager.TotalBets.length - 1;\n                        }\n                    } else {\n                        index--;\n                    }\n                } else {\n                    if (max) {\n                        var findMax: boolean = false;\n\n                        if (!findMax) {\n                            for (var jj: number = BetManager.TotalBets.length - 1; jj >= 0; jj--) {\n                                if (BetManager.TotalBets[jj] <= bonus && findMax === false) {\n                                    findMax = true;\n                                    index = jj;\n                                }\n                                if (BetManager.TotalBets[jj] <= real && findMax === false) {\n                                    findMax = true;\n                                    index = jj;\n                                }\n                            }\n                        }\n                    } else {\n                        if (index === BetManager.TotalBets.length - 1) {\n                            if (cycle) {\n                                index = 0;\n                            }\n                        } else {\n                            index++;\n                        }\n                    }\n                }\n\n                BetManager.Bet = BetManager.TotalBets[index];\n\n                if (bonus != null) {\n                    if (bonus >= BetManager.Bet) {\n                        ModuleManager.changeBetColor(true);\n                    } else {\n                        ModuleManager.changeBetColor();\n                    }\n                }\n\n                DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n                DataManager.updateDataElement(GameData.DataBet);\n                Platforms.Platforms.bet({\n                    totalBet: BetManager.Bet,\n                    maxBetAction: max,\n                    userAction: DataManager.getTrustedUserAction(\"BET_CHANGE\"),\n                });\n                BetManager.updateBetPosition();\n            }\n        }\n        BalanceManager.poolingBalance();\n    }\n\n    static sortNumber(a: any, b: any) {\n        return a - b;\n    }\n\n    static changeDefaultDenom(): void {\n        BetManager.unHideValues();\n\n        if (BetManager.Coins != null) {\n            let lowestDenom: number;\n            for (let key in BetManager.Coins) {\n                if (lowestDenom == null) {\n                    lowestDenom = parseFloat(key);\n                } else {\n                    if (parseFloat(key) < lowestDenom) {\n                        lowestDenom = parseFloat(key);\n                    }\n                }\n            }\n\n            BetManager.CoinSize = lowestDenom;\n            AppContext.current.setDenomination(BetManager.CoinSize);\n\n            BetManager.Coins[lowestDenom].sort(BetManager.sortNumber);\n\n            // let found: boolean = false;\n            // for(let i: number = 0; i < BetManager.Coins[value].length; i++) {\n            //     if(BetManager.Coins[value][i] === BetManager.CoinCount) {\n            //         found = true;\n            //     }\n            // }\n            //\n            // if(!found) {\n            //     BetManager.CoinCount = BetManager.Coins[value][0];\n            // }\n\n            BetManager.CoinCount = BetManager.Coins[lowestDenom][0];\n\n            DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\n            DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\n            BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\n            DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n\n            DataManager.updateDataElement(GameData.DataCoinSize);\n            DataManager.updateDataElement(GameData.DataCointCount);\n            DataManager.updateDataElement(GameData.DataBet);\n            Platforms.Platforms.bet({ totalBet: BetManager.Bet });\n\n            if (BetManager.CoinCountContainer != null) {\n                BetManager.CoinCountContainer.addValues();\n            }\n            BalanceManager.recalculateDenomBalance();\n        }\n    }\n\n    static changeDenom(value: number, init: boolean = false): void {\n        BetManager.unHideValues();\n\n        if (BetManager.Coins != null && BetManager.Coins[value] != null) {\n            BetManager.CoinSize = value;\n            AppContext.current.setDenomination(BetManager.CoinSize);\n\n            BetManager.Coins[value].sort(BetManager.sortNumber);\n\n            if (!init && BetManager.CoinCount != null && !AppContext.gameConfiguration.ResetCoinCountOnDenomChange) {\n                let found: boolean = false;\n                let coinCount: number = BetManager.CoinCount;\n                for (let i: number = 0; i < BetManager.Coins[value].length; i++) {\n                    if (BetManager.Coins[value][i] <= BetManager.CoinCount) {\n                        found = true;\n                        coinCount = BetManager.Coins[value][i];\n                    }\n                }\n\n                if (!found) {\n                    BetManager.CoinCount = BetManager.Coins[value][0];\n                } else {\n                    BetManager.CoinCount = coinCount;\n                }\n            } else {\n                BetManager.CoinCount = BetManager.Coins[value][0];\n            }\n\n            DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\n            DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\n            BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\n            DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n\n            DataManager.updateDataElement(GameData.DataCoinSize);\n            DataManager.updateDataElement(GameData.DataCointCount);\n            DataManager.updateDataElement(GameData.DataBet);\n            Platforms.Platforms.bet({ totalBet: BetManager.Bet });\n\n            if (BetManager.CoinCountContainer != null) {\n                BetManager.CoinCountContainer.addValues();\n            }\n            BalanceManager.recalculateDenomBalance();\n        }\n\n        if (DataManager.HelpDataGameLimit != 0) {\n            if (\n                AppContext != null &&\n                AppContext.gameConfiguration != null &&\n                AppContext.gameConfiguration.UseCoins &&\n                BetManager.CoinSize != null\n            ) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataHelpGameLimit,\n                    parseInt(\n                        NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n                DataManager.updateDataElement(\n                    GameData.DataHelpGameLimit,\n                    parseInt(\n                        NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n            }\n        }\n\n        if (DataManager.HelpDataGambleLimit != 0) {\n            if (\n                AppContext != null &&\n                AppContext.gameConfiguration != null &&\n                AppContext.gameConfiguration.UseCoins &&\n                BetManager.CoinSize != null\n            ) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataHelpGambleLimit,\n                    parseInt(\n                        NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n                DataManager.updateDataElement(\n                    GameData.DataHelpGambleLimit,\n                    parseInt(\n                        NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n            }\n        }\n    }\n\n    static changeBetByValue(value: number): void {\n        BetManager.unHideValues();\n        var bonus: number = parseFloat(DataManager.getDataById(GameData.DataBalanceBonus));\n        BetManager.Bet = value;\n\n        if (bonus != null) {\n            if (bonus >= BetManager.Bet) {\n                ModuleManager.changeBetColor(true);\n            } else {\n                ModuleManager.changeBetColor();\n            }\n        }\n\n        DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n        DataManager.updateDataElement(GameData.DataBet);\n        Platforms.Platforms.bet({ totalBet: BetManager.Bet });\n        BetManager.updateBetPosition();\n    }\n\n    static changeCoinCount(value: number): void {\n        BetManager.unHideValues();\n\n        if (BetManager.Coins != null) {\n            if (BetManager.CoinSize != null) {\n                BetManager.CoinCount = value;\n                DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\n                DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\n                BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\n                DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n\n                DataManager.updateDataElement(GameData.DataCoinSize);\n                DataManager.updateDataElement(GameData.DataCointCount);\n                DataManager.updateDataElement(GameData.DataBet);\n                Platforms.Platforms.bet({ totalBet: BetManager.Bet });\n            }\n        }\n    }\n\n    static cycleCoinCount(): void {\n        BetManager.unHideValues();\n\n        if (BetManager.Coins != null) {\n            if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\n                let index: number = 0;\n                let coinSizes: Array<number> = [];\n                for (let i: number = 0; i < BetManager.Coins[BetManager.CoinSize].length; i++) {\n                    coinSizes.push(BetManager.Coins[BetManager.CoinSize][i]);\n                }\n                coinSizes.sort(BetManager.sortNumber);\n                for (let i: number = 0; i < coinSizes.length; i++) {\n                    if (BetManager.CoinCount === coinSizes[i]) {\n                        index = i;\n                    }\n                }\n\n                if (coinSizes[index + 1] != null) {\n                    BetManager.CoinCount = coinSizes[index + 1];\n                } else {\n                    BetManager.CoinCount = coinSizes[0];\n                }\n\n                DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\n                DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\n                BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\n                DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n\n                DataManager.updateDataElement(GameData.DataCoinSize);\n                DataManager.updateDataElement(GameData.DataCointCount);\n                DataManager.updateDataElement(GameData.DataBet);\n                Platforms.Platforms.bet({ totalBet: BetManager.Bet });\n            }\n        }\n    }\n\n    static maxCoinCount(): void {\n        BetManager.unHideValues();\n\n        if (BetManager.Coins != null) {\n            if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\n                let credit: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\n                let coinCount: number = BetManager.CoinCount;\n\n                BetManager.Coins[BetManager.CoinSize].sort(BetManager.sortNumber);\n\n                for (let i: number = 0; i < BetManager.Coins[BetManager.CoinSize].length; i++) {\n                    let bet: number = parseFloat(\n                        NumberUtils.multiply(BetManager.CoinSize, BetManager.Coins[BetManager.CoinSize][i]),\n                    );\n                    if (credit >= bet) {\n                        coinCount = BetManager.Coins[BetManager.CoinSize][i];\n                    }\n                }\n\n                BetManager.CoinCount = coinCount;\n\n                DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\n                DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\n                BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\n                DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\n\n                DataManager.updateDataElement(GameData.DataCoinSize);\n                DataManager.updateDataElement(GameData.DataCointCount);\n                DataManager.updateDataElement(GameData.DataBet);\n                Platforms.Platforms.bet({ totalBet: BetManager.Bet });\n            }\n        }\n    }\n\n    static updateBetPosition(): void {\n        if (BetManager.TotalBets != null) {\n            for (let i: number = 0; i < BetManager.TotalBets.length; i++) {\n                if (BetManager.Bet === BetManager.TotalBets[i]) {\n                    if (i <= 0) {\n                        BetManager.minBet = true;\n                        BetManager.maxBet = false;\n                    } else if (i >= BetManager.TotalBets.length - 1) {\n                        BetManager.minBet = false;\n                        BetManager.maxBet = true;\n                    } else {\n                        BetManager.minBet = false;\n                        BetManager.maxBet = false;\n                    }\n\n                    DataManager.updateGameDataFromModule(\n                        GameData.DataBetPosition,\n                        i + 1 + \"/\" + BetManager.TotalBets.length,\n                    );\n                    DataManager.updateDataElement(GameData.DataBetPosition);\n                }\n            }\n        }\n    }\n\n    static unHideValues(credit: boolean = false): void {\n        for (let i = 0; i < HtmlController.HideButtons.length; i++) {\n            HtmlController.HideButtons[i].unHide(credit);\n        }\n    }\n\n    static createBetForSpin(): Communication.Game.SpinBet {\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null && BetManager.CoinCount != null) {\n            return new SpinBet(BetType.Total, BetManager.CoinSize, BetManager.CoinCount, null, null);\n        } else {\n            return new SpinBet(BetType.Total, null, null, null, BetManager.Bet);\n        }\n    }\n\n    private static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"BetManager\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/BetManager.ts\n **/","import { ArgValidator, Logger, Utils, ApiClientCommunication } from \"neo-common\";\nimport { ClientHost, Communication, GameEngine } from \"neo-games\";\nimport { GameManager } from \"./GameManager\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { Controller } from \"../GameComponents/Controller\";\nimport { UserControls } from \"../Channels/Common/UserControls/UserControls\";\nimport { DataManager } from \"./DataManager\";\n\nvar GameModules = Communication.Game.GameModules;\nvar GameStatuses = Communication.Game.GameModuleStatus;\n\nexport class ModuleManager {\n    private static _gameModules: Object = {};\n    private static _channelModules: Object = {};\n\n    static registerGameModule(key: string, module: Controller): void {\n        if (DEBUG) {\n            ModuleManager.log(\"registerGameModule \" + key);\n        }\n\n        if (ModuleManager._gameModules[key] == null) {\n            ModuleManager._gameModules[key] = module;\n        } else {\n            if (DEBUG) {\n                ModuleManager.log(\"ERROR try to register game module with same key: \" + key);\n            }\n        }\n    }\n\n    static registerChannelModule(key: string, module: UserControls): void {\n        if (DEBUG) {\n            ModuleManager.log(\"registerChannelModule \" + key);\n        }\n\n        if (ModuleManager._channelModules[key] == null) {\n            ModuleManager._channelModules[key] = module;\n        } else {\n            if (DEBUG) {\n                ModuleManager.log(\"ERROR try to register channel module with same key: \" + key);\n            }\n        }\n    }\n\n    static connectModules(): boolean {\n        if (DEBUG) {\n            ModuleManager.log(\"connectModules\");\n        }\n\n        let allChannelsHaveController: boolean = true;\n\n        for (let key in ModuleManager._channelModules) {\n            if (ModuleManager._gameModules[key] != null) {\n                ModuleManager._channelModules[key].addController(ModuleManager._gameModules[key]);\n                if (DEBUG) {\n                    ModuleManager.log(\"connect module key: \" + key);\n                }\n            } else {\n                if (DEBUG) {\n                    ModuleManager.log(\"cant connect module key: \" + key);\n                }\n                allChannelsHaveController = false;\n            }\n        }\n\n        return allChannelsHaveController;\n    }\n\n    static initModules(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"initModules\");\n        }\n\n        for (let key in ModuleManager._channelModules) {\n            ModuleManager._channelModules[key].initReceived();\n        }\n\n        if (ModuleManager.gambleActive() && ModuleManager._channelModules[GameModules.Gamble] != null) {\n            ModuleManager._channelModules[GameModules.Gamble].initIntro();\n        } else if (ModuleManager.freespinsActive() && ModuleManager._channelModules[GameModules.Freespins] != null) {\n            ModuleManager._channelModules[GameModules.Freespins].initIntro();\n        } else if (ModuleManager.pickActive() && ModuleManager._channelModules[GameModules.Pick] != null) {\n            ModuleManager._channelModules[GameModules.Pick].initIntro();\n        } else if (ModuleManager.freespinsEnabled() && ModuleManager._channelModules[GameModules.Pick] != null) {\n            ModuleManager._channelModules[GameModules.Pick].initIntro();\n        } else {\n            if (ModuleManager._channelModules[GameModules.Base] != null) {\n                ModuleManager._channelModules[GameModules.Base].initIntro();\n            }\n        }\n    }\n\n    static gambleEnabled(): boolean {\n        if (!AppContext.gameDefinition.Gamble) {\n            return false;\n        }\n\n        if (DataManager.Autoplay && !AppContext.gameConfiguration.AutoplayGambleEnabled) {\n            return false;\n        }\n\n        if (GameManager.gambleResponse != null && GameManager.gambleResponse.status === GameStatuses.Enabled) {\n            return true;\n        }\n        return false;\n    }\n\n    static gambleActive(): boolean {\n        if (!AppContext.gameDefinition.Gamble) {\n            return false;\n        }\n\n        if (GameManager.gambleResponse != null && GameManager.gambleResponse.status === GameStatuses.Active) {\n            return true;\n        }\n        return false;\n    }\n\n    static pickEnabled(): boolean {\n        if (GameManager.pickResponse != null && GameManager.pickResponse.status === GameStatuses.Enabled) {\n            DataManager.AutoplayCount = \"∞\";\n            DataManager.AutoplayLossLimit = \"∞\";\n            DataManager.AutoplayWinLimit = \"∞\";\n            return true;\n        }\n        return false;\n    }\n\n    static pickActive(): boolean {\n        if (GameManager.pickResponse != null && GameManager.pickResponse.status === GameStatuses.Active) {\n            DataManager.AutoplayCount = \"∞\";\n            DataManager.AutoplayLossLimit = \"∞\";\n            DataManager.AutoplayWinLimit = \"∞\";\n            return true;\n        }\n        return false;\n    }\n\n    static freespinsEnabled(): boolean {\n        if (GameManager.freespinsResponse != null && GameManager.freespinsResponse.status === GameStatuses.Enabled) {\n            DataManager.AutoplayCount = \"∞\";\n            DataManager.AutoplayLossLimit = \"∞\";\n            DataManager.AutoplayWinLimit = \"∞\";\n            return true;\n        }\n        return false;\n    }\n\n    static freespinsActive(): boolean {\n        if (GameManager.freespinsResponse != null && GameManager.freespinsResponse.status === GameStatuses.Active) {\n            DataManager.AutoplayCount = \"∞\";\n            DataManager.AutoplayLossLimit = \"∞\";\n            DataManager.AutoplayWinLimit = \"∞\";\n            return true;\n        }\n        return false;\n    }\n\n    static enableGamble(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"enableGamble\");\n        }\n\n        if (ModuleManager.gambleEnabled() && ModuleManager._channelModules[GameModules.Gamble] != null) {\n            ModuleManager._channelModules[GameModules.Gamble].enable();\n        }\n    }\n\n    static startGamble(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"startGamble\");\n        }\n\n        if (ModuleManager.gambleActive()) {\n            ModuleManager.outroModule(GameModules.Base);\n        }\n    }\n\n    static startPick(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"startPick\");\n        }\n\n        if (ModuleManager.pickActive()) {\n            ModuleManager.outroModule(GameModules.Base);\n        }\n\n        if (ModuleManager._channelModules[GameModules.Pick] != null) {\n            ModuleManager._channelModules[GameModules.Pick].start();\n        }\n    }\n\n    static endPick(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"endPick\");\n        }\n\n        if (!ModuleManager.pickActive()) {\n            ModuleManager.introModule(GameModules.Freespins);\n        }\n\n        if (ModuleManager._channelModules[GameModules.Pick] != null) {\n            ModuleManager._channelModules[GameModules.Pick].end();\n        }\n    }\n\n    static enableFreespins(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"enableFreespins\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\n            ModuleManager._channelModules[GameModules.Freespins].enable();\n        }\n    }\n\n    static enablePick(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"enablePick\");\n        }\n\n        ModuleManager._channelModules[GameModules.Base].disable();\n\n        if (ModuleManager._channelModules[GameModules.Pick] != null) {\n            ModuleManager._channelModules[GameModules.Pick].enable();\n        }\n    }\n\n    static startFreespins(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"startFreespins\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\n            ModuleManager._channelModules[GameModules.Freespins].start(); // *FreespinUserControls.start\n            //ModuleManager._channelModules[GameModules.Freespins].enable();\n            //ModuleManager._channelModules[GameModules.Freespins].intro();\n        }\n    }\n\n    static endFreespins(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"endFreespins\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\n            ModuleManager._channelModules[GameModules.Freespins].end();\n        }\n    }\n\n    static disableGamble(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"disableGamble\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Gamble] != null) {\n            ModuleManager._channelModules[GameModules.Gamble].disable();\n        }\n    }\n\n    static disablePick(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"disablePick\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Pick] != null) {\n            ModuleManager._channelModules[GameModules.Pick].disable();\n        }\n    }\n\n    static disableBase(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"disableBase\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            ModuleManager._channelModules[GameModules.Base].disable();\n        }\n    }\n\n    /**\n     * Disable channel module\n     * @param key\n     */\n    static disableChannelModule(key: string): void {\n        if (DEBUG) {\n            ModuleManager.log(\"disable\" + key);\n        }\n\n        if (ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].disable();\n        }\n    }\n\n    static changeBetColor(green: boolean = false): void {\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            ModuleManager._channelModules[GameModules.Base].changeBetColor(green);\n        }\n    }\n\n    static initNewBet(animate: boolean = true): void {\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            ModuleManager._channelModules[GameModules.Base].initNewBet(animate);\n        }\n    }\n\n    static introModule(key: string, long: boolean = false): void {\n        if (DEBUG) {\n            ModuleManager.log(\"introModule key: \" + key);\n        }\n\n        if (ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].intro(long);\n        }\n    }\n\n    static outroModule(key: string): void {\n        if (DEBUG) {\n            ModuleManager.log(\"outroModule key: \" + key);\n        }\n\n        if (ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].outro();\n        }\n    }\n\n    static collect(key: string): void {\n        if (key != null && ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].collect();\n        }\n    }\n\n    static collectInModule(key: string): void {\n        if (key != null && ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].collectReceived();\n        }\n    }\n\n    static restoreGameRound(key: string, collect: boolean = false): void {\n        if (key != null && ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].restoreGameRound(collect);\n        }\n    }\n\n    static dispatchAction(action: string): void {\n        if (DEBUG) {\n            ModuleManager.log(\"dispatchAction action: \" + action);\n        }\n\n        for (let key in ModuleManager._channelModules) {\n            ModuleManager._channelModules[key].dispatchAction(action);\n        }\n    }\n\n    static setActiveSceneInBasegame(id: number): void {\n        if (DEBUG) {\n            ModuleManager.log(\"setActiveScene to \" + id);\n        }\n\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            ModuleManager._channelModules[GameModules.Base].setActiveSceneInBasegame(id);\n        }\n    }\n\n    static setActiveSceneBackground(key: string, sceneIndex: number): void {\n        if (DEBUG) {\n            ModuleManager.log(\"setActiveSceneBackground key: \" + key);\n        }\n\n        if (ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].setSceneAnimations(sceneIndex);\n        }\n    }\n\n    /**\n     * Update paytable data elements.\n     */\n    static updatePaytable(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"updatePaytable\");\n        }\n\n        // if(ModuleManager.freespinsActive() && ModuleManager._channelModules[GameModules.Freespins] != null) {\n        //     ModuleManager._channelModules[GameModules.Freespins].updatePaytable();\n        // } else if(ModuleManager._channelModules[GameModules.Base] != null) {\n        //     ModuleManager._channelModules[GameModules.Base].updatePaytable()\n        // }\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            ModuleManager._channelModules[GameModules.Base].updatePaytable();\n        }\n    }\n\n    static cycleHelp(): void {\n        if (ModuleManager.freespinsActive() && ModuleManager._channelModules[GameModules.Freespins] != null) {\n            ModuleManager._channelModules[GameModules.Freespins].cycleHelp();\n        } else {\n            if (ModuleManager._channelModules[GameModules.Base] != null) {\n                ModuleManager._channelModules[GameModules.Base].cycleHelp();\n            }\n        }\n    }\n\n    /**\n     * Set autoplay in Base module to true/false.\n     * @param {boolean} tf\n     */\n    static setAutoplayAfterFeature(tf: boolean): void {\n        if (DEBUG) {\n            ModuleManager.log(\"setAutoplayAfterFeature to \" + tf);\n        }\n\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            ModuleManager._channelModules[GameModules.Base].setAutoplayAfterFeature(tf);\n        }\n    }\n\n    static primaryGameEnded(): boolean {\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            return ModuleManager._channelModules[GameModules.Base].primaryGameEnded();\n        }\n    }\n\n    static toggleModuleSounds(key: string, enable: boolean): void {\n        if (ModuleManager._gameModules[key] != null) {\n            ModuleManager._gameModules[key].toggleSounds(enable);\n        }\n    }\n\n    static resetSceneAsOnCollect(key: string): void {\n        if (ModuleManager._gameModules[key] != null) {\n            ModuleManager._gameModules[key].collect();\n        }\n    }\n\n    static resetWinAnimator(key: string): void {\n        if (DEBUG) {\n            ModuleManager.log(\"resetWinAnimator:\" + key);\n        }\n\n        if (ModuleManager._channelModules[key] != null) {\n            ModuleManager._channelModules[key].resetWinAnimator();\n        }\n    }\n\n    static getActiveGameModules(): Array<string> {\n        let activeModulesArray: Array<string> = [];\n        if (GameManager.gameResponse != null && GameManager.gameResponse.modules != null) {\n            for (var key in GameManager.gameResponse.modules) {\n                if (GameManager.gameResponse.modules[key].status !== GameStatuses.Disabled) {\n                    activeModulesArray.push(key);\n                }\n            }\n        }\n        return activeModulesArray;\n    }\n\n    private static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"ModuleManager\", s);\n        }\n    }\n\n    static pickStartButton(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"pickStartButton\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Pick] != null) {\n            ModuleManager._channelModules[GameModules.Pick].pickStartButton();\n        }\n    }\n\n    static freeSpinsStartButton(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"freeSpinsStartButton\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\n            ModuleManager._channelModules[GameModules.Freespins].freeSpinsStartButton();\n        }\n    }\n\n    static freeSpinsConfiguratorContinue(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"freeSpinsConfiguratorContinue\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            ModuleManager._channelModules[GameModules.Base].freeSpinsConfiguratorContinue();\n        }\n    }\n\n    static enableConfiguratorButtons(delay?: number): void {\n        if (DEBUG) {\n            ModuleManager.log(\"enableConfigurationButtons\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            ModuleManager._channelModules[GameModules.Base]._enableConfiguratorButtons.start(delay ? delay : 0);\n        }\n    }\n\n    static disableConfiguratorButtons(delay?: number): void {\n        if (DEBUG) {\n            ModuleManager.log(\"disableConfigurationButtons\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\n            ModuleManager._channelModules[GameModules.Base]._disableConfiguratorButtons.start(delay ? delay : 0);\n        }\n    }\n\n    static overlayFsBoard(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"overlayFsBoard\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\n            ModuleManager._channelModules[GameModules.Freespins].overlayFsBoard();\n        }\n    }\n\n    static removeOverlayFsBoard(): void {\n        if (DEBUG) {\n            ModuleManager.log(\"removeOverlayFsBoard\");\n        }\n\n        if (ModuleManager._channelModules[GameModules.Freespins] != null) {\n            ModuleManager._channelModules[GameModules.Freespins].removeOverlayFsBoard();\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/ModuleManager.ts\n **/","import { Logger, NumberUtils } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { GameManager } from \"./GameManager\";\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\nimport { DataManager } from \"./DataManager\";\nimport { BetManager } from \"./BetManager\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { Languages } from \"../Utils/Languages\";\nimport { ModuleManager } from \"./ModuleManager\";\nimport { CashierDialog } from \"../Channels/Common/Dialogs/CashierDialog\";\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\n\ntype BalanceResponse = Communication.Game.BalanceResponse;\nvar GameModules = Communication.Game.GameModules;\ntype IBalance = Communication.Game.IBalance;\n\nexport class BalanceManager {\n    private static _poolBalance: boolean = false;\n\n    static setBalance(): void {\n        if (GameManager.gameResponse.balance != null) {\n            if (GameManager.gameResponse.balance.real != null) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataBalanceReal,\n                    GameManager.gameResponse.balance.real.toString(),\n                );\n                if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                    DataManager.updateGameDataFromModule(\n                        GameData.DataBalanceRealDenom,\n                        parseInt(\n                            NumberUtils.devide(GameManager.gameResponse.balance.real, BetManager.CoinSize),\n                        ).toString(),\n                    );\n                }\n            }\n\n            if (GameManager.gameResponse.balance.bonus != null) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataBalanceBonus,\n                    GameManager.gameResponse.balance.bonus.toString(),\n                );\n            }\n\n            if (GameManager.gameResponse.balance.real != null && GameManager.gameResponse.balance.bonus != null) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataBalanceTotal,\n                    NumberUtils.add(GameManager.gameResponse.balance.real, GameManager.gameResponse.balance.bonus),\n                );\n            }\n        }\n    }\n\n    static fixBalance(): void {\n        let bonus: number = parseFloat(DataManager.getDataById(GameData.DataBalanceBonus));\n        let real: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\n        let realDenom: number = parseFloat(DataManager.getDataById(GameData.DataBalanceRealDenom));\n        let win: number = parseFloat(DataManager.getDataById(GameData.DataTotalWin));\n        let winDenom: number;\n        let total: number = parseFloat(NumberUtils.add(bonus, real));\n        let bet: number = BetManager.Bet;\n        let betDenom: number = BetManager.CoinCount;\n        let denom: number = BetManager.CoinSize;\n\n        if (FreeRoundBonus.inFrb) {\n            if (AppContext.gameDefinition.Gamble && FreeRoundBonus.winPayMethod !== \"cumulative\") {\n                if (GameManager.gameResponse != null && GameManager.gameResponse.balance != null) {\n                    let totalRealBalance: number = DataManager.GameRoundClosed ? real : parseFloat(NumberUtils.add(real, win));\n                    let totalBalance: number = DataManager.GameRoundClosed ? total : parseFloat(NumberUtils.add(total, win));\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceBonus, bonus.toString());\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceReal, totalRealBalance.toString());\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, totalBalance.toString());\n                    DataManager.updateDataElement(GameData.DataBalanceBonus, bonus.toString());\n                    DataManager.updateDataElement(GameData.DataBalanceReal, real.toString());\n                    DataManager.updateDataElement(GameData.DataBalanceTotal, totalBalance.toString());\n                }\n            } else if (!AppContext.gameDefinition.Gamble && !DataManager.Collectable) {\n                if (GameManager.gameResponse != null && GameManager.gameResponse.balance != null) {\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceBonus, bonus.toString());\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceReal, real.toString());\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, total.toString());\n                    DataManager.updateDataElement(GameData.DataBalanceBonus, bonus.toString());\n                    DataManager.updateDataElement(GameData.DataBalanceReal, real.toString());\n                    DataManager.updateDataElement(GameData.DataBalanceTotal, total.toString());\n                }\n            }\n            return;\n        }\n\n        if (denom != null && win != null) {\n            winDenom = parseFloat(NumberUtils.devide(win, denom));\n        }\n\n        if (DataManager.GameRoundClosed) {\n            if (bonus != null && bonus > 0 && bonus >= bet) {\n                ModuleManager.changeBetColor(true);\n                DataManager.updateDataElement(GameData.DataBalanceBonus, NumberUtils.subtract(bonus, bet));\n            } else {\n                ModuleManager.changeBetColor();\n                DataManager.updateDataElement(GameData.DataBalanceReal, NumberUtils.subtract(real, bet));\n                if (denom != null && betDenom != null) {\n                    DataManager.updateDataElement(\n                        GameData.DataBalanceRealDenom,\n                        NumberUtils.subtract(realDenom, betDenom),\n                    );\n                }\n            }\n            DataManager.updateDataElement(GameData.DataBalanceTotal, NumberUtils.subtract(total, bet));\n            DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, NumberUtils.subtract(total, bet));\n        } else {\n            if (win > 0) {\n                if (bonus != null && bonus > 0 && bonus >= bet) {\n                    ModuleManager.changeBetColor(true);\n                    DataManager.updateDataElement(GameData.DataBalanceBonus, NumberUtils.subtract(bonus, bet));\n                    DataManager.updateDataElement(GameData.DataBalanceReal, NumberUtils.add(real, win));\n                    if (denom != null && winDenom != null) {\n                        DataManager.updateDataElement(\n                            GameData.DataBalanceRealDenom,\n                            NumberUtils.add(realDenom, winDenom),\n                        );\n                    }\n                } else {\n                    ModuleManager.changeBetColor();\n                    DataManager.updateDataElement(\n                        GameData.DataBalanceReal,\n                        NumberUtils.add(NumberUtils.subtract(real, bet), win),\n                    );\n                    if (denom != null && winDenom != null && betDenom != null) {\n                        DataManager.updateDataElement(\n                            GameData.DataBalanceRealDenom,\n                            NumberUtils.add(NumberUtils.subtract(realDenom, betDenom), winDenom),\n                        );\n                    }\n                }\n                DataManager.updateDataElement(\n                    GameData.DataBalanceTotal,\n                    NumberUtils.add(NumberUtils.subtract(total, bet), win),\n                );\n                DataManager.updateGameDataFromModule(\n                    GameData.DataBalanceTotal,\n                    NumberUtils.add(NumberUtils.subtract(total, bet), win),\n                );\n            } else {\n                if (bonus != null && bonus > 0 && bonus >= bet) {\n                    ModuleManager.changeBetColor(true);\n                    DataManager.updateDataElement(GameData.DataBalanceBonus, NumberUtils.subtract(bonus, bet));\n                } else {\n                    ModuleManager.changeBetColor();\n                    DataManager.updateDataElement(GameData.DataBalanceReal, NumberUtils.subtract(real, bet));\n                    if (denom != null && betDenom != null) {\n                        DataManager.updateDataElement(\n                            GameData.DataBalanceRealDenom,\n                            NumberUtils.subtract(realDenom, betDenom),\n                        );\n                    }\n                }\n                DataManager.updateDataElement(GameData.DataBalanceTotal, NumberUtils.subtract(total, bet));\n                DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, NumberUtils.subtract(total, bet));\n            }\n        }\n    }\n\n    static hasCredit(maxBet: boolean = false, onSpin: boolean = false): boolean {\n        let bonus: number = parseFloat(DataManager.getDataById(GameData.DataBalanceBonus));\n        let real: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\n        let win: number = parseFloat(DataManager.getDataById(GameData.DataTotalWin));\n        let bet: number = BetManager.Bet;\n        let canPlay: boolean = true;\n\n        if (DataManager.GameRoundClosed) {\n            win = 0;\n        }\n\n        if (bonus != null && bonus > 0) {\n            if (bonus >= bet) {\n                ModuleManager.changeBetColor(true);\n                return true;\n            } else {\n                ModuleManager.changeBetColor();\n            }\n        }\n\n        if (FreeRoundBonus.inFrb) {\n            if (AppContext.current) {\n                AppContext.current.closeDialog();\n            }\n\n            if (CashierDialog.opened) {\n                CashierDialog.onClose();\n            }\n\n            if (onSpin) {\n                FreeRoundBonus.disableUi();\n            }\n\n            canPlay = true;\n        } else if (real <= 0 || real < bet) {\n            var credit: number = parseFloat(NumberUtils.add(real, win));\n            if (credit > 0 && credit >= bet) {\n                if (AppContext.current) {\n                    AppContext.current.closeDialog();\n                }\n\n                if (CashierDialog.opened) {\n                    CashierDialog.onClose();\n                }\n\n                if (onSpin) {\n                    FreeRoundBonus.disableUi();\n                }\n\n                canPlay = true;\n            } else {\n                if (AppContext.current && onSpin) {\n                    ModuleManager.collect(GameModules.Base);\n\n                    if (AppContext.gameConfiguration.ShowCashierMessage) {\n                        CashierDialog.openDialog();\n                    } else {\n                        AppContext.current.showDialog(Languages.getRid(\"NOT_ENOUGH_CREDIT\"), false);\n                    }\n\n                    Platforms.Platforms.clientError(\"NOT_ENOUGH_CREDIT\", Languages.getRid(\"NOT_ENOUGH_CREDIT\"));\n\n                    GameManager.requestSend = false;\n                }\n                canPlay = false;\n            }\n        } else {\n            if (AppContext.current) {\n                AppContext.current.closeDialog();\n            }\n\n            if (CashierDialog.opened) {\n                CashierDialog.onClose();\n            }\n\n            if (onSpin) {\n                FreeRoundBonus.disableUi();\n            }\n\n            canPlay = true;\n        }\n        return canPlay;\n    }\n\n    static poolingBalance(): void {\n        if (\n            AppContext != null &&\n            AppContext.gameConfiguration != null &&\n            AppContext.gameConfiguration.PollCredit > 0 &&\n            DataManager.GameRoundClosed\n        ) {\n            let balance: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\n            if (balance != null && BetManager.Bet != null && balance >= BetManager.Bet) {\n                return;\n            } else {\n                if (!BalanceManager._poolBalance) {\n                    setTimeout(() => {\n                        BalanceManager.refreshBalance();\n                    }, AppContext.gameConfiguration.PollCredit);\n                    BalanceManager._poolBalance = true;\n                }\n            }\n        }\n    }\n\n    static refreshBalance(forced: boolean = false): void {\n        if (GameManager.gameClient) {\n            GameManager.gameClient.balance().then((response: BalanceResponse) => {\n                BalanceManager.balanceReceived(response, forced);\n            });\n        }\n    }\n\n    static balanceReceived(response: IBalance, forced: boolean = false): void {\n        BalanceManager._poolBalance = false;\n        let bonus: string = response.bonus.toString();\n        let real: string = response.real.toString();\n        let total: string = NumberUtils.add(response.bonus, response.real);\n\n        DataManager.updateGameDataFromModule(GameData.DataBalanceBonus, bonus);\n        DataManager.updateGameDataFromModule(GameData.DataBalanceReal, real);\n        DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, total);\n\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataBalanceRealDenom,\n                parseInt(NumberUtils.devide(response.real, BetManager.CoinSize)).toString(),\n            );\n        }\n\n        DataManager.updateDataElement(GameData.DataBalanceBonus, bonus);\n        DataManager.updateDataElement(GameData.DataBalanceReal, real);\n        DataManager.updateDataElement(GameData.DataBalanceTotal, total);\n\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize) {\n            DataManager.updateDataElement(\n                GameData.DataBalanceRealDenom,\n                parseInt(NumberUtils.devide(response.real, BetManager.CoinSize)).toString(),\n            );\n        }\n        BalanceManager.poolingBalance();\n\n        Platforms.Platforms.balanceUpdated({ amount: parseFloat(total), forced: forced });\n    }\n\n    static recalculateDenomBalance(): void {\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataBalanceRealDenom,\n                parseInt(\n                    NumberUtils.devide(\n                        parseFloat(DataManager.getDataById(GameData.DataBalanceReal)),\n                        BetManager.CoinSize,\n                    ),\n                ).toString(),\n            );\n            DataManager.updateDataElement(\n                GameData.DataBalanceRealDenom,\n                parseInt(\n                    NumberUtils.devide(\n                        parseFloat(DataManager.getDataById(GameData.DataBalanceReal)),\n                        BetManager.CoinSize,\n                    ),\n                ).toString(),\n            );\n        }\n    }\n\n    private static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"BalanceManager\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/BalanceManager.ts\n **/","import { Logger, StringUtils } from \"neo-common\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { Platforms } from \"neo-games\";\nimport { Dialog } from \"./Dialog\";\nimport { BalanceManager } from \"../../../Managers/BalanceManager\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\n\n/**\n * Create dialog filled from code.\n * @class Dialog\n */\nexport class CashierDialog {\n    static opened: boolean = false;\n\n    private static _element: HTMLElement;\n    private static _cashierButton: HTMLElement;\n    private static _refreshButton: HTMLElement;\n    private static _closeButton: HTMLElement;\n    private static _closeButtonIcon: HTMLElement;\n\n    static openDialog(): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"CashierDialog\", `openDialog()`);\n        }\n\n        Platforms.Platforms.dialogOpened(\"cashier\", true);\n\n        CashierDialog.opened = true;\n\n        CashierDialog._element = document.getElementById(\"cashierDialog\");\n        if (CashierDialog._element != null) {\n            CashierDialog._cashierButton = document.getElementById(\"cashierButton\");\n            if (CashierDialog._cashierButton != null) {\n                CashierDialog._cashierButton.onclick = CashierDialog.onCashier;\n            }\n\n            CashierDialog._refreshButton = document.getElementById(\"refreshButton\");\n            if (CashierDialog._refreshButton != null) {\n                if (AppContext.gameConfiguration.CashierMessageShowRefreshBalanceButton) {\n                    CashierDialog._refreshButton.onclick = CashierDialog.onRefreshBalance;\n                } else {\n                    CashierDialog._refreshButton.style.display = \"none\";\n                }\n            }\n\n            CashierDialog._closeButton = document.getElementById(\"cashierCloseButton\");\n            if (CashierDialog._closeButton != null) {\n                CashierDialog._closeButton.onclick = CashierDialog.onClose;\n            }\n\n            CashierDialog._closeButtonIcon = document.getElementById(\"cashierCloseButtonIcon\");\n            if (CashierDialog._closeButtonIcon != null) {\n                CashierDialog._closeButtonIcon.onclick = CashierDialog.onClose;\n            }\n\n            if (CashierDialog._element.classList.contains(Dialog.DisabledClass)) {\n                CashierDialog._element.classList.remove(Dialog.DisabledClass);\n            }\n        }\n    }\n\n    static onCashier(): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"CashierDialog\", `onCashier()`);\n        }\n\n        PlayList.play(\"SND_Click\");\n\n        if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.CashierUrl)) {\n            Platforms.Platforms.gotoCasier({\n                reason: \"InsufficientFunds\",\n                target: AppContext.gameConfiguration.CashierUrl,\n            }); //todo Second available reason: 'InsufficientFunds'\n            if (Platforms.Platforms.handleOpenCashierPage) {\n                return;\n            }\n            window.open(AppContext.gameConfiguration.CashierUrl, \"_self\");\n        } else {\n            Platforms.Platforms.gotoCasier();\n        }\n    }\n\n    static onRefreshBalance(): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"CashierDialog\", `onRefreshBalance()`);\n        }\n\n        PlayList.play(\"SND_Click\");\n\n        BalanceManager.refreshBalance();\n    }\n\n    static onClose(): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"CashierDialog\", `onClose()`);\n        }\n\n        PlayList.play(\"SND_Click\");\n        CashierDialog.opened = false;\n\n        Platforms.Platforms.dialogOpened(\"cashier\", false);\n\n        if (!CashierDialog._element.classList.contains(Dialog.DisabledClass)) {\n            CashierDialog._element.classList.add(Dialog.DisabledClass);\n        }\n\n        if (FreeRoundBonus.id != null || FreeRoundBonus.otherOfferes.length > 0) {\n            FreeRoundBonus.enableUi();\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/CashierDialog.ts\n **/","import { Utils, Logger, StringUtils } from \"neo-common\";\nimport { ClientHost, GameEngine, Platforms } from \"neo-games\";\nimport { Languages } from \"../../../Utils/Languages\";\nimport { FrameTimerEventEmitter, FrameTimerEvents, CreateFrameTimer } from \"../../../Utils/FrameTimer\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\nimport { GameApp } from \"../../../GameApp\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { BaseModel } from \"../../../GameComponents/Base/BaseModel\";\nimport { GameConfiguration } from \"../../../../Common/GameConfiguration\";\nimport { BetHigherThanMinDialog } from \"./BetHigherThanMinDialog\";\n\nexport type DialogOpenData = {\n    special: boolean;\n    gameRoundId: string;\n    errorId: string;\n    actions: Array<Object>;\n};\n\n/**\n * Create dialog filled from code.\n * @class Dialog\n */\nexport class Dialog {\n    static DisabledClass: string = \"_disabled\";\n    static InfoClass: string = \"info\";\n    static ErrorClass: string = \"error\";\n\n    private _app: GameEngine.IApp;\n\n    private _element: HTMLElement;\n    private _elementHeading: HTMLElement;\n    private _elementCode: HTMLElement;\n    private _elementText: HTMLElement;\n    private _elementButton: HTMLElement;\n    private _elementButtonReload: HTMLElement;\n    private _elementCustomButtons: HTMLElement;\n    private _elementInfo: HTMLElement;\n    private _elementError: HTMLElement;\n\n    private _timer: FrameTimerEventEmitter;\n\n    private _customData: any;\n\n    constructor(app: GameEngine.IApp) {\n        this._app = app;\n        this._element = document.getElementById(\"dialog\");\n        this._elementHeading = document.getElementById(\"dialogHeading\");\n        this._elementCode = document.getElementById(\"errorCode\");\n        this._elementText = document.getElementById(\"dialogText\");\n        this._elementButton = document.getElementById(\"dialogButton\");\n        this._elementButtonReload = document.getElementById(\"dialogReloadButton\");\n        this._elementCustomButtons = document.getElementById(\"dialogCustomButtons\");\n        this._elementInfo = document.getElementById(\"dialogInfo\");\n        this._elementError = document.getElementById(\"dialogError\");\n\n        if (this._element != null && !this._element.classList.contains(Dialog.DisabledClass)) {\n            this._element.classList.add(Dialog.DisabledClass);\n        }\n\n        if (this._elementInfo != null) {\n            this._elementInfo.style.display = \"none\";\n        }\n\n        if (this._elementError != null) {\n            this._elementError.style.display = \"none\";\n        }\n\n        this._timer = CreateFrameTimer(\"dialogTimer\");\n        this._timer.on(FrameTimerEvents.Complete, this.closeDialog.bind(this));\n\n        this.onClickError = this.onClickError.bind(this);\n        this.onClickRefresh = this.onClickRefresh.bind(this);\n\n        this._customData = null;\n    }\n\n    openDialog(\n        text: string,\n        code: string = \"\",\n        errorId: string = \"\",\n        error: boolean = false,\n        special: boolean = false,\n        gameRoundId: string = \"0\",\n        customData: any = null,\n    ): void {\n        this._customData = customData;\n\n        if (DEBUG) {\n            Logger.debugGroup(\n                \"Dialog\",\n                `openDialog('${text}', code: '${code}', errorId: '${errorId}', error: ${error}, special: ${special}, ` +\n                    `gameRoundId: ${gameRoundId}, customData: ${customData ? JSON.stringify(customData) : \"\"})`,\n            );\n        }\n\n        Platforms.Platforms.dialogOpened(\"default\", true);\n\n        if (this._element != null) {\n            const ultraSpecial =\n                !Utils.isNullOrUndefined(this._customData) &&\n                !Utils.isNullOrUndefined(this._customData.data) &&\n                !Utils.isNullOrUndefined(this._customData.data.ultraSpecial) &&\n                this._customData.data.ultraSpecial === true;\n\n            if (this._elementText != null) {\n                this._elementText.innerHTML = text;\n            }\n\n            if (this._elementCode != null) {\n                if (code !== \"\" && this._elementCode != null && !special) {\n                    if (errorId === \"\") {\n                        errorId = \"0\";\n                    }\n\n                    let errorString: string = gameRoundId + \"-\" + errorId;\n                    code = \"CODE_\" + code.replace(\"-\", \"_\");\n                    let errorValue: string = Languages.getRid(code, errorString);\n                    this._elementCode.textContent = errorValue.replace(/ /g, \"\");\n                    this._elementCode.style.display = \"block\";\n                } else {\n                    this._elementCode.style.display = \"none\";\n                }\n            }\n\n            if (error && !ultraSpecial) {\n                if (this._element.classList.contains(Dialog.InfoClass)) {\n                    this._element.classList.remove(Dialog.InfoClass);\n                }\n\n                if (!this._element.classList.contains(Dialog.ErrorClass)) {\n                    this._element.classList.add(Dialog.ErrorClass);\n                }\n\n                if (this._elementInfo != null) {\n                    this._elementInfo.style.display = \"none\";\n                }\n                if (this._elementError != null) {\n                    this._elementError.style.display = \"block\";\n                }\n\n                if (this._elementHeading != null) {\n                    this._elementHeading.textContent = Languages.getRid(\"DLG_ERROR\");\n                }\n\n                if (this._elementButtonReload != null) {\n                    this._elementButtonReload.style.display = \"none\";\n                }\n\n                if (this._elementButton != null) {\n                    this._elementButton.style.display = \"block\";\n                    this._elementButton.onclick = this.onClickError;\n                }\n            } else {\n                if (!this._element.classList.contains(Dialog.InfoClass)) {\n                    this._element.classList.add(Dialog.InfoClass);\n                }\n\n                if (this._element.classList.contains(Dialog.ErrorClass)) {\n                    this._element.classList.remove(Dialog.ErrorClass);\n                }\n\n                if (this._elementInfo != null) {\n                    this._elementInfo.style.display = \"block\";\n                }\n                if (this._elementError != null) {\n                    this._elementError.style.display = \"none\";\n                }\n\n                if (this._elementHeading != null) {\n                    this._elementHeading.textContent = Languages.getRid(\"DLG_INFO\");\n                }\n\n                if (this._elementButton != null) {\n                    this._elementButton.style.display = \"none\";\n                }\n\n                if (this._elementButtonReload) {\n                    this._elementButtonReload.style.display = \"none\";\n                }\n\n                if (ultraSpecial) {\n                    if (this._elementCode != null) {\n                        this._elementCode.style.display = \"none\";\n                    }\n\n                    if (this._elementButton != null) {\n                        this._elementButton.style.display = \"block\";\n                        this._elementButton.onclick = this.onClickError;\n                    }\n                } else if (special) {\n                    if (this._elementCode != null) {\n                        this._elementCode.style.display = \"none\";\n                    }\n\n                    if (this._elementButtonReload != null) {\n                        this._elementButtonReload.style.display = \"block\";\n                        this._elementButtonReload.onclick = this.onClickRefresh;\n                    }\n                } else {\n                    //in case, not enough credit dialog is already opened, send close dialog event\n                    if (this._timer.isPlaying()) {\n                        Platforms.Platforms.dialogOpened(\"default\", false);\n                    }\n\n                    this._timer.stop();\n                    this._timer.start(180);\n                }\n            }\n\n            if (\n                !Utils.isNullOrUndefined(this._customData.data) &&\n                !Utils.isNullOrUndefined(this._customData.data.actions)\n            ) {\n                this.handleCustomActions(this._customData.data.actions);\n            }\n\n            if (this._element.classList.contains(Dialog.DisabledClass)) {\n                this._element.classList.remove(Dialog.DisabledClass);\n            }\n        } else {\n            if (DEBUG) {\n                Logger.errorGroup(\"Dialog\", \"ERROR no dialog\");\n            }\n        }\n    }\n\n    closeDialog(): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"Dialog\", `closeDialog()`);\n        }\n\n        this._timer.stop();\n\n        Platforms.Platforms.dialogOpened(\"default\", false);\n\n        if (!this._element.classList.contains(Dialog.DisabledClass)) {\n            this._element.classList.add(Dialog.DisabledClass);\n        }\n\n        if (FreeRoundBonus.id != null || FreeRoundBonus.otherOfferes.length > 0) {\n            FreeRoundBonus.enableUi();\n        }\n\n        BetHigherThanMinDialog.setOpenedStatus();\n    }\n\n    private onClickError(): void {\n        let clientHost = AppContext.clientHost as ClientHost.IClientHost;\n        if (clientHost) {\n            var request: ClientHost.Types.ClientHostEndGameRequest = null;\n            if (!Utils.isNullOrUndefined(this._customData)) {\n                let dialogRequest = this._customData as ClientHost.Types.ClientHostDialogRequest;\n\n                request = dialogRequest.error as any;\n                request.reason = dialogRequest.error.errorMessageTitle;\n            }\n\n            if (DEBUG) {\n                Logger.debugGroup(\n                    \"Dialog\",\n                    `onClickError -> calling client host '${AppContext.gameDefinition.ClientHostType}.endGame()', request: `,\n                    request,\n                );\n            }\n\n            Platforms.Platforms.exitHandler = \"dialog\";\n            Platforms.Platforms.gameClosing();\n            clientHost.endGame(this._app, request);\n        }\n    }\n\n    private onClickRefresh(): void {\n        Platforms.Platforms.gameReloading();\n        if (Platforms.Platforms.handleGameReload) {\n            return;\n        }\n\n        window.location.reload(true);\n    }\n\n    private handleCustomActions(actions: Array<Object>): void {\n        if (actions.length > 0) {\n            this.hideAllButtons();\n\n            //handle font size of custom text\n            let buttons: Array<HTMLElement> = [];\n            let imageWidthCorrection = 0.82; //transparent pixels correction\n            let baseWidth = 0;\n            let baseFontSize = 0;\n            let maxWidth = 0;\n\n            for (let i = 0; i < actions.length; i++) {\n                let currentAction = actions[i];\n\n                if (currentAction && currentAction[\"type\"]) {\n                    let button: HTMLElement = document.createElement(\"div\");\n                    button.classList.add(\"dialogBtn\", \"customDialogBtn\");\n\n                    //append child to get computed style\n                    this._elementCustomButtons.appendChild(button);\n\n                    baseWidth =\n                        parseInt(window.getComputedStyle(button).getPropertyValue(\"width\")) * imageWidthCorrection;\n                    baseFontSize = parseInt(window.getComputedStyle(button).getPropertyValue(\"font-size\"));\n                    let currentWidth = 0;\n\n                    if (currentAction[\"text\"]) {\n                        currentWidth = this.getButtonTextWidth(currentAction[\"text\"], baseFontSize);\n                        button.textContent = currentAction[\"text\"];\n                    }\n\n                    if (currentWidth > maxWidth) {\n                        maxWidth = currentWidth;\n                    }\n\n                    switch (currentAction[\"type\"]) {\n                        case \"continue\":\n                            button.onclick = this.onClickContinue.bind(this);\n                            break;\n                        case \"exit\":\n                            button.onclick = this.onClickClose;\n                            break;\n                        case \"history\":\n                            button.onclick = this.onClickHistory;\n                            break;\n                        case \"reload\":\n                            button.onclick = this.onClickReload;\n                            break;\n                        case \"restore\":\n                            button.onclick = this.onClickRestore.bind(this, currentAction[\"customData\"]);\n                            break;\n                    }\n\n                    buttons.push(button);\n                }\n            }\n\n            if (maxWidth > baseWidth) {\n                let newFontSize = Math.round(baseFontSize * (baseWidth / maxWidth));\n\n                for (let i = 0; i < buttons.length; i++) {\n                    buttons[i].style.fontSize = newFontSize + \"px\";\n                }\n            }\n        }\n    }\n\n    private getButtonTextWidth(text: string, fontSize: number): number {\n        let elem = document.createElement(\"span\");\n\n        elem.textContent = text;\n        elem.style.fontSize = fontSize + \"px\";\n        document.body.appendChild(elem);\n        let width = elem.offsetWidth;\n\n        document.body.removeChild(elem);\n        return width;\n    }\n\n    private hideAllButtons(): void {\n        if (this._elementButton != null) {\n            this._elementButton.style.display = \"none\";\n        }\n\n        if (this._elementButtonReload != null) {\n            this._elementButtonReload.style.display = \"none\";\n        }\n\n        while (this._elementCustomButtons.firstChild) {\n            this._elementCustomButtons.removeChild(this._elementCustomButtons.firstChild);\n        }\n    }\n\n    private onClickClose(): void {\n        Platforms.Platforms.exitHandler = \"dialog\";\n        GameApp.exit();\n    }\n\n    private onClickContinue(): void {\n        this.closeDialog();\n        BaseModel.spinContinue();\n    }\n\n    private onClickHistory(): void {\n        if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.HistoryUrl)) {\n            GameApp.openGameRoundHistoryFromUrl();\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\n            GameApp.openGameRoundHistoryFromUrl();\n        } else {\n            GameApp.openGameRoundHistory();\n        }\n    }\n\n    private onClickReload(): void {\n        Platforms.Platforms.gameReloading();\n        if (Platforms.Platforms.handleGameReload) {\n            return;\n        }\n\n        window.location.reload(true);\n    }\n\n    private onClickRestore(module: string): void {\n        this.closeDialog();\n        ModuleManager.restoreGameRound(module);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/Dialog.ts\n **/","import { GameApp } from \"../../../GameApp\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { FreeRoundBonusDialog } from \"../Dialogs/FreeRoundBonusDialog\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { GameManager } from \"../../../Managers/GameManager\";\nimport { FreeRoundBonusIcon } from \"../Dialogs/FreeRoundBonusIcon\";\nimport { GameData } from \"../Datas/GameData\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { Languages } from \"../../../Utils/Languages\";\nimport { Logger, Utils } from \"neo-common\";\nimport { ResponsibleDialog1 } from \"../Dialogs/ResponsibleDialog1\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { RetentionPanel } from \"../../../Utils/RetentionPanel\";\nimport { BetHigherThanMinDialog } from \"../Dialogs/BetHigherThanMinDialog\";\n\ntype FreeRoundsOffersResponse = Communication.Game.FreeRoundsOffersResponse;\ntype FreeRoundsActivateOfferResponse = Communication.Game.FreeRoundsActivateOfferResponse;\ntype FreeRoundsDeclineOfferResponse = Communication.Game.FreeRoundsDeclineOfferResponse;\n\nvar GameModules = Communication.Game.GameModules;\nvar GameStatuses = Communication.Game.GameModuleStatus;\n\nexport class FreeRoundBonus {\n    public static inFrb: boolean = false;\n    public static isLastFrb: boolean = false;\n\n    public static id: number;\n    public static termsUrl: string;\n    public static roundsAssigned: number;\n    public static roundsStarted: number;\n    public static roundsPlayed: number;\n    public static remainingFrbCount: number;\n    public static playing: boolean = false;\n    public static status: string;\n    public static winType: string;\n    public static validTo: string;\n    public static winPayMethod: string;\n    public static collectPartial: boolean;\n    public static hasFeature: boolean;\n    public static totalWin: number;\n    public static otherOfferes: Array<Object> = [];\n    public static featureName: string;\n\n    public static wasInitialized: boolean = false;\n\n    public static state: string = \"\";\n    public static endMsgDisplayed: boolean = false;\n\n    private static softInit: boolean = false;\n    private static enabledUi: boolean = false;\n    private static blockFrbExpiration: boolean = false;\n\n    public static initialize(gameClient: Communication.Game.GameClient): void {\n        if (!FreeRoundBonus.wasInitialized && gameClient != null) {\n            gameClient\n                .sendFreeRoundsOffersRequest(GameApp.key)\n                .then((response: FreeRoundsOffersResponse) => {\n                    FreeRoundBonus.getCurrentOfferReceived(response);\n                })\n                .catch((err) => {\n                    FreeRoundBonus.wasInitialized = true;\n                });\n        }\n    }\n\n    public static activateOffer(): void {\n        if (FreeRoundBonus.status === \"active\") {\n            FreeRoundBonus.inFrb = true;\n            Platforms.Platforms.featureStarted({ type: \"FRB\" });\n            FreeRoundBonusIcon.showIcon(\"active\");\n            ModuleManager.disableBase();\n            if (GameApp.gameClient != null && FreeRoundBonus.id != null) {\n                GameApp.gameClient.setOfferId(FreeRoundBonus.id);\n            }\n            GameManager.softInit();\n        } else {\n            ModuleManager.disableBase();\n            if (GameApp.gameClient != null && FreeRoundBonus.id != null) {\n                GameApp.gameClient.setOfferId(FreeRoundBonus.id);\n                GameApp.gameClient\n                    .sendFreeRoundsActivateOfferRequest(GameApp.key, FreeRoundBonus.id)\n                    .then((response: FreeRoundsActivateOfferResponse) => {\n                        FreeRoundBonus.activateOfferReceived(response);\n                    });\n            }\n        }\n    }\n\n    public static declineOffer(): void {\n        if (GameApp.gameClient != null && FreeRoundBonus.id != null) {\n            FreeRoundBonusDialog.hideDialog();\n            FreeRoundBonusIcon.hideAllIcons();\n            GameApp.gameClient\n                .sendFreeRoundsDeclineOfferRequest(GameApp.key, FreeRoundBonus.id)\n                .then((response: FreeRoundsDeclineOfferResponse) => {\n                    FreeRoundBonus.declineOfferReceived(response);\n                    FreeRoundBonus.refreshCurrentOffers();\n                });\n        }\n    }\n\n    public static initializeFreeRounds(): void {\n        FreeRoundBonusDialog.initialize();\n        FreeRoundBonusIcon.initialize();\n        if (GameApp.gameClient != null && FreeRoundBonus.id != null && FreeRoundBonus.status === \"active\") {\n            GameApp.gameClient.setOfferId(FreeRoundBonus.id);\n            FreeRoundBonusDialog.showDialog(\"active\");\n            ModuleManager.disableBase();\n            FreeRoundBonusIcon.showIcon(\"active\");\n            FreeRoundBonus.inFrb = true;\n            Platforms.Platforms.featureInit({ type: \"FRB\" });\n        }\n    }\n\n    public static showFreeRounds(): void {\n        if (FreeRoundBonus.id != null) {\n            FreeRoundBonus.countDown();\n\n            if (FreeRoundBonus.status !== \"active\") {\n                if (DataManager.GameRoundClosed) {\n                    FreeRoundBonusDialog.showDialog(\"new\");\n                    ModuleManager.disableBase();\n                    FreeRoundBonusIcon.showIcon(\"new\");\n                    FreeRoundBonus.enableUi();\n                } else {\n                    if (!FreeRoundBonus.playing) {\n                        FreeRoundBonusIcon.showIcon(\"new\");\n                        FreeRoundBonus.disableUi();\n                    }\n                }\n            } else {\n                if (!DataManager.GameRoundClosed) {\n                    FreeRoundBonus.frbSpin();\n                    FreeRoundBonusDialog.hideDialog();\n                    FreeRoundBonus.disableUi();\n                } else {\n                    ModuleManager.disableBase();\n                }\n            }\n        } else {\n            FreeRoundBonus.openOther();\n        }\n    }\n\n    public static reopenFreeRounds(): void {\n        if (DataManager.GameRoundClosed && FreeRoundBonus.isLastFrb) {\n            FreeRoundBonusIcon.showIcon(\"active\");\n            FreeRoundBonus.disableUi();\n            GameApp.gameClient.setOfferId(null);\n            FreeRoundBonusDialog.showDialog(\"end\");\n            FreeRoundBonus.endMsgDisplayed = true;\n            ModuleManager.disableBase();\n            return;\n        }\n\n        if (FreeRoundBonus.status === \"new\" && FreeRoundBonus.state === \"new\") {\n            BetHigherThanMinDialog.hideDialog();\n            BetHigherThanMinDialog.closeDialog();\n            FreeRoundBonusDialog.showDialog(\"new\");\n            ModuleManager.disableBase();\n            FreeRoundBonusIcon.showIcon(\"new\");\n            FreeRoundBonus.enableUi();\n        }\n\n        if (FreeRoundBonus.state === \"active\") {\n            FreeRoundBonusDialog.showDialog(\"active\");\n            ModuleManager.disableBase();\n            FreeRoundBonusIcon.showIcon(\"active\");\n            FreeRoundBonus.enableUi();\n        }\n\n        if (FreeRoundBonus.state === \"end\") {\n            FreeRoundBonusIcon.showIcon(\"active\");\n            FreeRoundBonus.disableUi();\n            GameApp.gameClient.setOfferId(null);\n            FreeRoundBonusDialog.showDialog(\"end\");\n            FreeRoundBonus.endMsgDisplayed = true;\n            ModuleManager.disableBase();\n        }\n\n        if (FreeRoundBonus.state === \"other\") {\n            if (FreeRoundBonus.validTo != null) {\n                let countDownDate: number = new Date(FreeRoundBonus.validTo + \"+00:00\").getTime();\n                let now: number = new Date().getTime();\n                let distance: number = countDownDate - now;\n\n                if (distance > 0) {\n                    FreeRoundBonusDialog.showDialog(\"other\");\n                    ModuleManager.disableBase();\n                    FreeRoundBonusIcon.showIcon(\"new\");\n                    FreeRoundBonus.enableUi();\n                }\n            } else if (FreeRoundBonusDialog.revalidateOtherGames()) {\n                FreeRoundBonusDialog.showDialog(\"other\");\n                ModuleManager.disableBase();\n                FreeRoundBonusIcon.showIcon(\"new\");\n                FreeRoundBonus.enableUi();\n            }\n        }\n\n        if (FreeRoundBonus.state === \"\") {\n            FreeRoundBonus.enableUi();\n        }\n    }\n\n    public static openOther(): void {\n        if (FreeRoundBonus.id == null && FreeRoundBonusDialog.revalidateOtherGames()) {\n            FreeRoundBonus.countDownOther();\n            if (DataManager.GameRoundClosed) {\n                FreeRoundBonusIcon.showIcon(\"new\");\n                FreeRoundBonus.enableUi();\n            } else {\n                FreeRoundBonusIcon.showIcon(\"new\");\n                FreeRoundBonus.disableUi();\n            }\n        }\n    }\n\n    public static endFreeRounds(): void {\n        if (FreeRoundBonus.id != null) {\n            DataManager.Collectable = true;\n            FreeRoundBonus.disableUi();\n            if (GameManager.gameResponse[\"freeRounds\"] != null) {\n                if (GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\n                    FreeRoundBonus.totalWin = GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\n                }\n                if (GameManager.gameResponse[\"freeRounds\"][\"status\"] != null) {\n                    if (GameManager.gameResponse[\"freeRounds\"][\"status\"] === \"pending\") {\n                        FreeRoundBonus.status = GameManager.gameResponse[\"freeRounds\"][\"status\"];\n                    }\n                }\n            }\n            GameApp.gameClient.setOfferId(null);\n            FreeRoundBonusDialog.showDialog(\"end\");\n            FreeRoundBonus.endMsgDisplayed = true;\n        }\n    }\n\n    public static finishFreeRounds(): void {\n        FreeRoundBonusIcon.hideAllIcons();\n        FreeRoundBonus.id = null;\n        FreeRoundBonus.inFrb = false;\n        Platforms.Platforms.featureFinished({ type: \"FRB\" });\n        FreeRoundBonus.isLastFrb = false;\n        FreeRoundBonus.endMsgDisplayed = false;\n        FreeRoundBonus.wasInitialized = false;\n        FreeRoundBonus.softInit = false;\n        FreeRoundBonus.remainingFrbCount = null;\n        FreeRoundBonus.roundsAssigned = 0;\n        FreeRoundBonus.roundsPlayed = 0;\n        FreeRoundBonus.roundsStarted = 0;\n        FreeRoundBonus.hasFeature = false;\n        FreeRoundBonus.featureName = null;\n        FreeRoundBonus.status = null;\n\n        if (FreeRoundBonus.winPayMethod === \"cumulative\") {\n            if (FreeRoundBonus.totalWin != null && FreeRoundBonus.totalWin > 0) {\n                PlayList.play(\"SND_BaseCollect\");\n                ModuleManager.disableBase();\n                ModuleManager.resetSceneAsOnCollect(GameModules.Base);\n            }\n        }\n\n        FreeRoundBonus.refreshCurrentOffers();\n    }\n\n    public static refreshCurrentOffers(): void {\n        if (GameApp.gameClient != null) {\n            GameApp.gameClient\n                .sendFreeRoundsOffersRequest(GameApp.key)\n                .then((response: FreeRoundsOffersResponse) => {\n                    FreeRoundBonus.getCurrentOfferReceived(response);\n\n                    if (FreeRoundBonus.id != null) {\n                        FreeRoundBonus.softInit = true;\n                        if (FreeRoundBonus.status === \"active\") {\n                            FreeRoundBonus.initializeFreeRounds();\n                        } else {\n                            FreeRoundBonus.showFreeRounds();\n                        }\n                    } else {\n                        GameManager.softInit();\n                        FreeRoundBonus.disableUi();\n                        if (DataManager.GameRoundClosed) {\n                            GameManager.canExit();\n                        }\n                    }\n                    return null;\n                })\n                .catch((err) => {\n                    FreeRoundBonus.wasInitialized = true;\n\n                    GameManager.softInit();\n                    FreeRoundBonus.disableUi();\n                    if (DataManager.GameRoundClosed) {\n                        GameManager.canExit();\n                    }\n                });\n        }\n    }\n\n    public static expiredFreeRounds(): void {\n        FreeRoundBonusIcon.hideAllIcons();\n        FreeRoundBonus.id = null;\n        FreeRoundBonus.inFrb = false;\n        Platforms.Platforms.featureFinished({ type: \"FRB\" });\n        FreeRoundBonus.isLastFrb = false;\n        FreeRoundBonus.endMsgDisplayed = false;\n        FreeRoundBonus.softInit = false;\n        FreeRoundBonus.remainingFrbCount = null;\n        FreeRoundBonus.roundsAssigned = 0;\n        FreeRoundBonus.roundsPlayed = 0;\n        FreeRoundBonus.roundsStarted = 0;\n        FreeRoundBonus.hasFeature = false;\n        FreeRoundBonus.featureName = null;\n        FreeRoundBonusDialog.showDialog(\"expired\");\n    }\n\n    private static getCurrentOfferReceived(response: FreeRoundsOffersResponse): void {\n        FreeRoundBonus.totalWin = 0;\n        FreeRoundBonus.termsUrl = null;\n\n        if (response != null) {\n            FreeRoundBonus.wasInitialized = true;\n            if (response.currentOffer != null) {\n                if (response.currentOffer.id != null) FreeRoundBonus.id = response.currentOffer.id;\n                if (response.currentOffer.termsUrl != null) FreeRoundBonus.termsUrl = response.currentOffer.termsUrl;\n                if (response.currentOffer.roundsAssigned != null)\n                    FreeRoundBonus.roundsAssigned = response.currentOffer.roundsAssigned;\n                if (response.currentOffer.roundsStarted != null)\n                    FreeRoundBonus.roundsStarted = response.currentOffer.roundsStarted;\n                if (response.currentOffer.roundsPlayed != null)\n                    FreeRoundBonus.roundsPlayed = response.currentOffer.roundsPlayed;\n                if (response.currentOffer.remainingCount != null)\n                    FreeRoundBonus.remainingFrbCount = response.currentOffer.remainingCount;\n                if (response.currentOffer.playing != null) FreeRoundBonus.playing = response.currentOffer.playing;\n                if (response.currentOffer.status != null) FreeRoundBonus.status = response.currentOffer.status;\n                if (response.currentOffer.winType != null) FreeRoundBonus.winType = response.currentOffer.winType;\n                if (response.currentOffer.validTo != null) FreeRoundBonus.validTo = response.currentOffer.validTo;\n                if (response.currentOffer.winPayMethod != null)\n                    FreeRoundBonus.winPayMethod = response.currentOffer.winPayMethod;\n                if (response.currentOffer.collectPartial != null)\n                    FreeRoundBonus.collectPartial = response.currentOffer.collectPartial;\n                if (response.currentOffer.hasBuyFeature != null)\n                    FreeRoundBonus.hasFeature = response.currentOffer.hasBuyFeature;\n                if (response.currentOffer.buyFeatureName != null)\n                    FreeRoundBonus.featureName = response.currentOffer.buyFeatureName;\n\n                if (FreeRoundBonus.remainingFrbCount == null) {\n                    if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\n                        FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\n                    }\n                }\n\n                if (FreeRoundBonus.remainingFrbCount != null && FreeRoundBonus.remainingFrbCount === 0) {\n                    FreeRoundBonus.isLastFrb = true;\n                }\n            }\n            FreeRoundBonus.otherOfferes = [];\n            if (response.otherOffers != null) {\n                FreeRoundBonus.otherOfferes = response.otherOffers;\n            }\n        }\n    }\n\n    private static activateOfferReceived(response: FreeRoundsActivateOfferResponse): void {\n        FreeRoundBonus.inFrb = true;\n        Platforms.Platforms.featureStarted({ type: \"FRB\" });\n        FreeRoundBonus.status = \"active\";\n        GameManager.softInit();\n        FreeRoundBonusIcon.showIcon(\"active\");\n    }\n\n    private static declineOfferReceived(response: FreeRoundsDeclineOfferResponse): void {\n        FreeRoundBonus.id = null;\n        FreeRoundBonus.softInit = false;\n        FreeRoundBonus.remainingFrbCount = null;\n        FreeRoundBonus.roundsAssigned = 0;\n        FreeRoundBonus.roundsPlayed = 0;\n        FreeRoundBonus.roundsStarted = 0;\n        FreeRoundBonus.hasFeature = false;\n        FreeRoundBonus.featureName = null;\n    }\n\n    public static valid(): string {\n        let str: string = \"\";\n        if (FreeRoundBonus.validTo != null) {\n            str = FreeRoundBonus.validTo;\n        }\n        return str;\n    }\n\n    public static assignedCount(): string {\n        let str: string = \"0\";\n        if (FreeRoundBonus.roundsAssigned != null) {\n            str = FreeRoundBonus.roundsAssigned.toString();\n        }\n        return str;\n    }\n\n    public static remainingCount(): string {\n        let str: string = \"0\";\n\n        if (FreeRoundBonus.remainingFrbCount == null) {\n            if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\n                FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\n            }\n        }\n\n        if (FreeRoundBonus.remainingFrbCount != null) {\n            //if dynamic frb was updated in last frb, dont update frb remaining count in icon\n            if (FreeRoundBonus.id === -1 && FreeRoundBonus.isLastFrb) {\n                str = \"0\";\n            } else {\n                str = FreeRoundBonus.remainingFrbCount.toString();\n            }\n        }\n\n        return str;\n    }\n\n    public static rulesLink(): string {\n        let str: string = \"\";\n        if (FreeRoundBonus.termsUrl != null) {\n            str = '<a href=\"' + FreeRoundBonus.termsUrl + '\" target=\"_blank\">' + FreeRoundBonus.termsUrl + \"</a>\";\n        }\n        return str;\n    }\n\n    public static win(): string {\n        let str: string = \"\";\n        if (FreeRoundBonus.totalWin != null && FreeRoundBonus.totalWin > 0) {\n            str =\n                Languages.formatText(Languages.FormatMoney, FreeRoundBonus.totalWin.toString()) +\n                \" \" +\n                DataManager.getDataById(GameData.DataCurrency);\n        }\n        return str;\n    }\n\n    public static frbSpin(): void {\n        if (FreeRoundBonus.id == null && !FreeRoundBonus.inFrb) {\n            return;\n        }\n        FreeRoundBonus.blockFrbExpiration = true;\n        if (FreeRoundBonus.inFrb) {\n            DataManager.AutoplayLossLimit = \"∞\";\n        }\n        if (GameManager.gameResponse[\"freeRounds\"] != null) {\n            if (GameManager.gameResponse[\"freeRounds\"][\"roundsStarted\"] != null) {\n                FreeRoundBonus.roundsStarted = GameManager.gameResponse[\"freeRounds\"][\"roundsStarted\"];\n            }\n            if (GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\n                FreeRoundBonus.totalWin = GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\n            }\n\n            if (GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\n                FreeRoundBonus.remainingFrbCount = GameManager.gameResponse[\"freeRounds\"][\"remainingCount\"];\n            } else {\n                if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\n                    FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\n                }\n            }\n        }\n        DataManager.updateGameDataFromModule(GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\n        DataManager.updateDataElement(GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\n        if (FreeRoundBonus.remainingFrbCount != null && FreeRoundBonus.remainingFrbCount === 0) {\n            FreeRoundBonus.isLastFrb = true;\n            DataManager.Autoplay = false;\n            DataManager.AutoplayCount = \"∞\";\n            DataManager.AutoplayLossLimit = \"∞\";\n            DataManager.AutoplayWinLimit = \"∞\";\n        }\n    }\n\n    private static countDown(): void {\n        if (FreeRoundBonus.validTo != null) {\n            let countDownDate: number = new Date(FreeRoundBonus.validTo + \"+00:00\").getTime();\n            let now: number = new Date().getTime();\n            let distance: number = countDownDate - now;\n            let days: number = Math.floor(distance / (1000 * 60 * 60 * 24));\n            let hours: number = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n            let minutes: number = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n            let seconds: number = Math.floor((distance % (1000 * 60)) / 1000);\n\n            if (!FreeRoundBonus.blockFrbExpiration && distance < 0) {\n                FreeRoundBonus.id = null;\n                FreeRoundBonus.softInit = false;\n                FreeRoundBonus.remainingFrbCount = null;\n                FreeRoundBonus.roundsAssigned = 0;\n                FreeRoundBonus.roundsPlayed = 0;\n                FreeRoundBonus.roundsStarted = 0;\n                FreeRoundBonus.hasFeature = false;\n\n                if (FreeRoundBonus.state !== \"end\" && FreeRoundBonus.state !== \"other\") {\n                    if (!FreeRoundBonusDialog.revalidateOtherGames()) {\n                        FreeRoundBonusDialog.hideDialog();\n                        FreeRoundBonusIcon.hideAllIcons();\n                        FreeRoundBonus.state = \"expired\";\n                        FreeRoundBonus.enableGame();\n                    } else {\n                        FreeRoundBonusDialog.hideDialog();\n                        FreeRoundBonus.enableGame();\n                    }\n                }\n            } else {\n                if (days > 0) {\n                    DataManager.updateGameDataFromModule(GameData.DataFrbExpiryTime, days + \"d\");\n                    DataManager.updateDataElement(GameData.DataFrbExpiryTime, days + \"d\");\n                } else if (hours > 0) {\n                    DataManager.updateGameDataFromModule(GameData.DataFrbExpiryTime, hours + \":\" + minutes + \"h\");\n                    DataManager.updateDataElement(GameData.DataFrbExpiryTime, hours + \":\" + minutes + \"h\");\n                } else if (minutes > 0) {\n                    DataManager.updateGameDataFromModule(GameData.DataFrbExpiryTime, minutes + \":\" + seconds + \"s\");\n                    DataManager.updateDataElement(GameData.DataFrbExpiryTime, minutes + \":\" + seconds + \"s\");\n                }\n\n                setTimeout(() => {\n                    FreeRoundBonus.countDown();\n                }, 1000);\n            }\n        }\n    }\n\n    private static countDownOther(): void {\n        if (!FreeRoundBonusDialog.revalidateOtherGames()) {\n            FreeRoundBonusDialog.hideDialog();\n            FreeRoundBonusIcon.hideAllIcons();\n            FreeRoundBonus.enableGame();\n        } else {\n            setTimeout(() => {\n                FreeRoundBonus.countDownOther();\n            }, 2000);\n        }\n    }\n\n    public static hasNewActiveOffer(): boolean {\n        //frb id -1 is dynamic frb\n        if (FreeRoundBonus.id == null && FreeRoundBonus.remainingFrbCount > 0) {\n            return true;\n        }\n\n        return false;\n    }\n\n    public static updateRemainingCount(count: number): void {\n        //if not initialized yet\n        if (FreeRoundBonus.id == null || (FreeRoundBonus.id > -1 && FreeRoundBonus.status != \"active\")) {\n            //check if we can show dialog\n            if (count > 0) {\n                if (FreeRoundBonus.canInitDynamicFRB()) {\n                    FreeRoundBonus.softInitialize();\n                } else {\n                    //stop autoplay if in base module, to let game check for new frb\n                    if (GameManager.baseResponse != null && GameManager.baseResponse.status === GameStatuses.Enabled) {\n                        DataManager.Autoplay = false;\n                    }\n                    FreeRoundBonus.remainingFrbCount = count;\n                }\n            }\n        } else if (FreeRoundBonus.id === -1) {\n            if (count > 0) {\n                if (FreeRoundBonus.remainingFrbCount > 0) {\n                    FreeRoundBonus.isLastFrb = false;\n                    FreeRoundBonus.remainingFrbCount = count;\n                    DataManager.updateGameDataFromModule(GameData.DataFrbRemainginCount, count.toString());\n                    DataManager.updateDataElement(GameData.DataFrbRemainginCount, count.toString());\n                } else {\n                    //updated frb in last frb spin will be show as new frb after end dialog\n                    FreeRoundBonus.remainingFrbCount = count;\n                }\n            } else if (count === 0) {\n                //currently in frb\n                if (FreeRoundBonus.remainingFrbCount > 0) {\n                    FreeRoundBonus.remainingFrbCount = count;\n                    DataManager.updateGameDataFromModule(GameData.DataFrbRemainginCount, count.toString());\n                    DataManager.updateDataElement(GameData.DataFrbRemainginCount, count.toString());\n\n                    FreeRoundBonus.isLastFrb = true;\n                    if (DataManager.GameRoundClosed && !DataManager.Autoplay && FreeRoundBonus.enabledUi) {\n                        FreeRoundBonus.endFreeRounds();\n                    } else {\n                        DataManager.Autoplay = false;\n                    }\n                }\n            }\n        }\n    }\n\n    private static canInitDynamicFRB(): boolean {\n        return (\n            !FreeRoundBonusIcon.isDisabled() &&\n            DataManager.GameRoundClosed &&\n            !DataManager.Autoplay &&\n            !ResponsibleDialog1.opened\n        );\n    }\n\n    public static softInitialize(): void {\n        DataManager.Autoplay = false;\n        ModuleManager.disableBase();\n        if (!FreeRoundBonus.softInit) {\n            FreeRoundBonus.softInit = true;\n            GameManager.gameClient\n                .sendFreeRoundsOffersRequest(GameApp.key)\n                .then((response: FreeRoundsOffersResponse) => {\n                    FreeRoundBonus.getCurrentOfferReceived(response);\n                    FreeRoundBonus.initializeFreeRounds();\n                })\n                .catch((err) => {\n                    FreeRoundBonus.softInit = false;\n                    FreeRoundBonus.wasInitialized = true;\n                    ModuleManager.restoreGameRound(GameModules.Base);\n                });\n        }\n    }\n\n    public static disableUi(): void {\n        FreeRoundBonus.enabledUi = false;\n        FreeRoundBonusDialog.hideDialog();\n        FreeRoundBonusIcon.disableActiveIcon();\n    }\n\n    public static enableUi(): void {\n        if (!ResponsibleDialog1.opened) {\n            FreeRoundBonus.enabledUi = true;\n\n            if (FreeRoundBonus.hasNewActiveOffer()) {\n                FreeRoundBonus.softInitialize();\n                return;\n            }\n\n            //stop enabling icon in cumulative frb (should act like in FS so icon is not clickable)\n            if (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod == \"cumulative\") {\n                return;\n            }\n\n            FreeRoundBonusIcon.enableActiveIcon();\n        }\n    }\n\n    public static enableGame(): void {\n        if (FreeRoundBonus.softInit) {\n            GameManager.softInit();\n            FreeRoundBonus.softInit = false;\n        } else if (\n            ModuleManager.getActiveGameModules().length == 0 ||\n            ModuleManager.getActiveGameModules().indexOf(GameModules.Base) != -1\n        ) {\n            ModuleManager.restoreGameRound(GameModules.Base);\n        }\n        RetentionPanel.revalidate();\n    }\n\n    public static enableFrbExpiration(): void {\n        FreeRoundBonus.blockFrbExpiration = false;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Bonuses/FreeRoundBonus.ts\n **/","import { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { GameData } from \"../Datas/GameData\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { GameApp } from \"../../../GameApp\";\nimport { UriHelper } from \"neo-common\";\nimport { Platforms } from \"neo-games\";\nimport { RetentionPanel } from \"../../../Utils/RetentionPanel\";\nimport { BetHigherThanMinDialog } from \"./BetHigherThanMinDialog\";\n\nexport class FreeRoundBonusDialog {\n    private static Dialog: HTMLElement;\n    private static DialogContentOther: HTMLElement;\n    private static DialogContentOther2: HTMLElement;\n    private static DialogContentOtherList: HTMLElement;\n    private static DialogContentOtherList2: HTMLElement;\n    private static DialogContentNew: HTMLElement;\n    private static DialogContentActive: HTMLElement;\n    private static DialogContentEnd: HTMLElement;\n    private static DialogContentExpired: HTMLElement;\n    private static ConfirmationDialog: HTMLElement;\n    private static DialogButtonPlay: HTMLElement;\n    private static DialogButtonPostPone: HTMLElement;\n    private static DialogButtonDeny: HTMLElement;\n    private static DialogButtonOk: HTMLElement;\n    private static DialogButtonYes: HTMLElement;\n    private static DialogButtonNo: HTMLElement;\n\n    private static otherOffersKeys: Array<string> = [];\n\n    private static isConfirmationDialogOpened: boolean = false;\n\n    public static initialize(): void {\n        FreeRoundBonusDialog.Dialog = document.getElementById(\"frbDialog\");\n        FreeRoundBonusDialog.DialogContentOther = document.getElementById(\"frbDialogContentOther\");\n        FreeRoundBonusDialog.DialogContentOther2 = document.getElementById(\"frbDialogContentOther2\");\n        FreeRoundBonusDialog.DialogContentOtherList = document.getElementById(\"frbDialogContentOtherList\");\n        FreeRoundBonusDialog.DialogContentOtherList2 = document.getElementById(\"frbDialogContentOtherList2\");\n        FreeRoundBonusDialog.DialogContentNew = document.getElementById(\"frbDialogContentNew\");\n        FreeRoundBonusDialog.DialogContentActive = document.getElementById(\"frbDialogContentActive\");\n        FreeRoundBonusDialog.DialogContentEnd = document.getElementById(\"frbDialogContentEnd\");\n        FreeRoundBonusDialog.DialogContentExpired = document.getElementById(\"frbDialogContentExpired\");\n        FreeRoundBonusDialog.ConfirmationDialog = document.getElementById(\"frbConfirmationDialog\");\n        FreeRoundBonusDialog.DialogButtonPlay = document.getElementById(\"dialogBtnPlay\");\n        FreeRoundBonusDialog.DialogButtonPostPone = document.getElementById(\"dialogBtnPostPone\");\n        FreeRoundBonusDialog.DialogButtonDeny = document.getElementById(\"dialogBtnDeny\");\n        FreeRoundBonusDialog.DialogButtonOk = document.getElementById(\"dialogBtnOk\");\n        FreeRoundBonusDialog.DialogButtonYes = document.getElementById(\"dialogBtnYes\");\n        FreeRoundBonusDialog.DialogButtonNo = document.getElementById(\"dialogBtnNo\");\n        FreeRoundBonusDialog.bindEvents();\n\n        FreeRoundBonusDialog.setupFRBDialogByConfiguration();\n    }\n\n    // new, other, active, end\n    public static showDialog(type: string): void {\n        DataManager.updateGameDataFromModule(GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\n        DataManager.updateGameDataFromModule(GameData.DataFrbAssignedCount, FreeRoundBonus.assignedCount());\n        DataManager.updateGameDataFromModule(GameData.DataFrbValidTo, FreeRoundBonus.valid());\n        DataManager.updateGameDataFromModule(GameData.DataFrbWin, FreeRoundBonus.win());\n        DataManager.updateDataElement(GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\n        DataManager.updateDataElement(GameData.DataFrbAssignedCount, FreeRoundBonus.assignedCount());\n        DataManager.updateDataElement(GameData.DataFrbValidTo, FreeRoundBonus.valid());\n        DataManager.updateDataElement(GameData.DataFrbWin, FreeRoundBonus.win());\n        FreeRoundBonusDialog.termsUrl();\n        DataManager.showDataElements(\"frbRules\", \"\");\n        if (FreeRoundBonus.rulesLink() === \"\") {\n            DataManager.hideDataElements(\"frbRules\");\n        }\n        if (FreeRoundBonus.win() === \"\") {\n            DataManager.hideDataElements(\"frbWin\");\n        } else {\n            DataManager.showDataElements(\"frbWin\");\n        }\n        FreeRoundBonusDialog.hideAllButtons();\n        FreeRoundBonusDialog.hideAllContents();\n        DataManager.hideDataElements(\"frbCumulative\");\n        DataManager.hideDataElements(\"frbPlatformTransactionFail\");\n        Platforms.Platforms.closeMenu();\n        Platforms.Platforms.dialogOpened(\"frb\", true);\n        switch (type) {\n            case \"new\":\n                FreeRoundBonus.state = \"new\";\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentNew);\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonPlay);\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonPostPone);\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonDeny);\n\n                if (FreeRoundBonus.winPayMethod === \"cumulative\") {\n                    DataManager.showDataElements(\"frbCumulative\");\n                }\n\n                if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\n                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.ConfirmationDialog);\n                }\n\n                break;\n            case \"other\":\n                FreeRoundBonus.state = \"other\";\n                FreeRoundBonusDialog.refillOtherGames();\n                if (\n                    AppContext != null &&\n                    AppContext.gameConfiguration != null &&\n                    AppContext.gameConfiguration.ShowSimilarGames\n                ) {\n                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentOther);\n                } else {\n                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentOther2);\n                }\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\n                FreeRoundBonus.openOther();\n                break;\n            case \"active\":\n                FreeRoundBonus.state = \"active\";\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentActive);\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\n                if (FreeRoundBonus.winPayMethod === \"cumulative\") {\n                    DataManager.showDataElements(\"frbCumulative\");\n                }\n                break;\n            case \"end\":\n                FreeRoundBonus.state = \"end\";\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentEnd);\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\n                if (FreeRoundBonus.status === \"pending\" && FreeRoundBonus.totalWin > 0) {\n                    DataManager.showDataElements(\"frbPlatformTransactionFail\");\n                }\n                break;\n            case \"expired\":\n                FreeRoundBonus.state = \"expired\";\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentExpired);\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\n                break;\n        }\n        DataManager.hideDataElements(\"frbRegular\");\n        DataManager.hideDataElements(\"frbFeature\");\n\n        if (FreeRoundBonus.state === \"new\" || FreeRoundBonus.state === \"active\") {\n            if (FreeRoundBonus.hasFeature !== null && FreeRoundBonus.hasFeature) {\n                FreeRoundBonusDialog.Dialog.classList.add(\"ffrDialog\");\n\n                if (FreeRoundBonus.remainingCount() === \"1\") {\n                    DataManager.showDataElements(\"frbFeatureSingle\");\n                } else {\n                    DataManager.showDataElements(\"frbFeatureMultiple\");\n                }\n            } else {\n                FreeRoundBonusDialog.Dialog.classList.remove(\"ffrDialog\");\n\n                if (FreeRoundBonus.remainingCount() === \"1\") {\n                    DataManager.showDataElements(\"frbRegularSingle\");\n                } else {\n                    DataManager.showDataElements(\"frbRegularMultiple\");\n                }\n            }\n        }\n\n        FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.Dialog);\n    }\n\n    private static setConfirmationDialog(value: boolean): void {\n        FreeRoundBonusDialog.isConfirmationDialogOpened = value;\n    }\n\n    private static setPointerEventsButtons(value: \"\" | \"none\" = \"\"): void {\n        FreeRoundBonusDialog.DialogButtonPlay.style.pointerEvents = value;\n        FreeRoundBonusDialog.DialogButtonPostPone.style.pointerEvents = value;\n        FreeRoundBonusDialog.DialogButtonDeny.style.pointerEvents = value;\n    }\n\n    public static hideDialog(): void {\n        Platforms.Platforms.dialogOpened(\"frb\", false);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.Dialog);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\n    }\n\n    private static bindEvents(): void {\n        if (FreeRoundBonusDialog.DialogButtonPlay != null) {\n            FreeRoundBonusDialog.DialogButtonPlay.onclick = FreeRoundBonusDialog.onPlay;\n        }\n\n        if (FreeRoundBonusDialog.DialogButtonPostPone != null) {\n            FreeRoundBonusDialog.DialogButtonPostPone.onclick = FreeRoundBonusDialog.onPostPone;\n        }\n\n        if (FreeRoundBonusDialog.DialogButtonDeny != null) {\n            FreeRoundBonusDialog.DialogButtonDeny.onclick = FreeRoundBonusDialog.onDeny;\n        }\n\n        if (FreeRoundBonusDialog.DialogButtonOk != null) {\n            FreeRoundBonusDialog.DialogButtonOk.onclick = FreeRoundBonusDialog.onOk;\n        }\n\n        if (FreeRoundBonusDialog.DialogButtonYes != null) {\n            FreeRoundBonusDialog.DialogButtonYes.onclick = FreeRoundBonusDialog.onYes;\n        }\n\n        if (FreeRoundBonusDialog.DialogButtonNo != null) {\n            FreeRoundBonusDialog.DialogButtonNo.onclick = FreeRoundBonusDialog.onNo;\n        }\n    }\n\n    private static hideAllButtons(): void {\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonPlay);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonPostPone);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonDeny);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonOk);\n    }\n\n    private static hideAllContents(): void {\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentActive);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentNew);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentOther);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentOther2);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentEnd);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentExpired);\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\n    }\n\n    private static showElement(element: HTMLElement): void {\n        if (element != null) {\n            if (element.classList.contains(\"_disabled\")) {\n                element.classList.remove(\"_disabled\");\n            }\n            if (element.classList.contains(\"_hidden\")) {\n                element.classList.remove(\"_hidden\");\n            }\n        }\n    }\n\n    private static hideElement(element: HTMLElement): void {\n        if (element != null) {\n            if (element.classList.contains(\"_disabled\")) {\n                element.classList.remove(\"_disabled\");\n            }\n            if (!element.classList.contains(\"_hidden\")) {\n                element.classList.add(\"_hidden\");\n            }\n        }\n    }\n\n    private static disableElement(element: HTMLElement): void {\n        if (element != null) {\n            if (!element.classList.contains(\"_disabled\")) {\n                element.classList.add(\"_disabled\");\n            }\n            if (element.classList.contains(\"_hidden\")) {\n                element.classList.remove(\"_hidden\");\n            }\n        }\n    }\n\n    private static onPlay(): void {\n        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\n            return;\n        }\n\n        FreeRoundBonus.state = \"\";\n        PlayList.play(\"SND_Click\");\n        FreeRoundBonusDialog.hideDialog();\n        FreeRoundBonus.activateOffer();\n\n        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\n        RetentionPanel.revalidate();\n    }\n\n    private static onPostPone(): void {\n        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\n            return;\n        }\n\n        FreeRoundBonus.state = \"\";\n        PlayList.play(\"SND_Click\");\n        FreeRoundBonusDialog.hideDialog();\n        FreeRoundBonus.enableGame();\n\n        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\n        RetentionPanel.revalidate();\n\n        BetHigherThanMinDialog.restoreDialog();\n    }\n\n    private static onDeny(): void {\n        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\n            return;\n        }\n\n        PlayList.play(\"SND_Click\");\n        FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.ConfirmationDialog);\n\n        FreeRoundBonusDialog.setConfirmationDialog(true);\n        FreeRoundBonusDialog.setPointerEventsButtons(\"none\");\n        RetentionPanel.revalidate();\n\n        BetHigherThanMinDialog.restoreDialog();\n    }\n\n    private static onYes(): void {\n        FreeRoundBonus.state = \"\";\n        PlayList.play(\"SND_Click\");\n        FreeRoundBonusDialog.hideDialog();\n        FreeRoundBonus.declineOffer();\n\n        FreeRoundBonusDialog.setConfirmationDialog(false);\n        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\n        RetentionPanel.revalidate();\n    }\n\n    private static onNo(): void {\n        // FreeRoundBonus.state = ''; //we need to keep state, etc. when reality check dialog open\n        PlayList.play(\"SND_Click\");\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\n\n        FreeRoundBonusDialog.setConfirmationDialog(false);\n        FreeRoundBonusDialog.setPointerEventsButtons(\"\");\n    }\n\n    private static onOk(): void {\n        FreeRoundBonus.state = \"\";\n        PlayList.play(\"SND_Click\");\n\n        FreeRoundBonusDialog.hideDialog();\n\n        if (FreeRoundBonus.isLastFrb) {\n            FreeRoundBonus.finishFreeRounds();\n        } else {\n            FreeRoundBonus.enableGame();\n        }\n\n        RetentionPanel.revalidate();\n    }\n\n    public static revalidateOtherGames(): boolean {\n        if (\n            AppContext != null &&\n            AppContext.gameConfiguration != null &&\n            AppContext.gameConfiguration.StaticContentUrl === \"\"\n        ) {\n            return false;\n        }\n        FreeRoundBonusDialog.otherOffersKeys = [];\n        if (FreeRoundBonus.otherOfferes.length > 0) {\n            let now: number = new Date().getTime();\n            for (let i: number = 0; i < FreeRoundBonus.otherOfferes.length; i++) {\n                if (FreeRoundBonus.otherOfferes[i][\"validTo\"] != null) {\n                    let countDownDate: number = new Date(\n                        FreeRoundBonus.otherOfferes[i][\"validTo\"] + \"+00:00\",\n                    ).getTime();\n                    let distance: number = countDownDate - now;\n                    if (distance > 0 && FreeRoundBonus.otherOfferes[i][\"gameCode\"] != null) {\n                        FreeRoundBonusDialog.otherOffersKeys.push(FreeRoundBonus.otherOfferes[i][\"gameCode\"]);\n                    }\n                }\n            }\n        }\n        if (FreeRoundBonusDialog.otherOffersKeys.length > 0) {\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    public static refillOtherGames(): void {\n        if (FreeRoundBonusDialog.DialogContentOtherList != null) {\n            FreeRoundBonusDialog.DialogContentOtherList.innerHTML = \"\";\n        }\n        if (FreeRoundBonusDialog.DialogContentOtherList2 != null) {\n            FreeRoundBonusDialog.DialogContentOtherList2.innerHTML = \"\";\n        }\n        for (let i: number = 0; i < 5; i++) {\n            if (FreeRoundBonusDialog.otherOffersKeys.length > 0 && FreeRoundBonusDialog.otherOffersKeys[i] != null) {\n                FreeRoundBonusDialog.createItem(\n                    FreeRoundBonusDialog.otherOffersKeys[i],\n                    false,\n                    FreeRoundBonusDialog.DialogContentOtherList,\n                );\n                FreeRoundBonusDialog.createItem(\n                    FreeRoundBonusDialog.otherOffersKeys[i],\n                    true,\n                    FreeRoundBonusDialog.DialogContentOtherList2,\n                );\n            }\n        }\n    }\n\n    private static createItem(gameCode: string, noClick: boolean, parent: HTMLElement): void {\n        if (\n            AppContext != null &&\n            AppContext.gameConfiguration != null &&\n            AppContext.gameConfiguration.StaticContentUrl === \"\"\n        ) {\n            return;\n        }\n        let itemHolder: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let itemLoading: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let itemLoadingIcon: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let itemLogo: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n\n        itemHolder.classList.add(\"frbOfferItem\");\n        itemLoading.classList.add(\"frbGameLoading\");\n        itemLoadingIcon.classList.add(\"loadingIcon\");\n        itemLogo.classList.add(\"frbGameLogo\");\n        itemLogo.setAttribute(\"game\", gameCode);\n        itemLogo.style.background =\n            \"url(\" + AppContext.gameConfiguration.StaticContentUrl + gameCode + \"/\" + window[\"QUALITY\"] + \"/logo.jpg)\";\n\n        itemHolder.appendChild(itemLoading);\n        itemLoading.appendChild(itemLoadingIcon);\n        itemHolder.appendChild(itemLogo);\n        if (!noClick) {\n            itemLogo.onclick = FreeRoundBonusDialog.selectGame;\n        }\n\n        if (parent != null) {\n            parent.appendChild(itemHolder);\n        }\n    }\n\n    private static selectGame(e: any): void {\n        PlayList.play(\"SND_Click\");\n        if (e != null && e.target != null && e.target.hasAttribute(\"game\")) {\n            let urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\n\n            if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\n                let serverUrl: string = urlInfo[\"query\"][\"serverUrl\"];\n                let token: string = urlInfo[\"hash\"].substring(1);\n                let newUrl: string = serverUrl + \"Launch/\" + e.target.getAttribute(\"game\") + \"?\" + token;\n                let root: HTMLElement = document.getElementById(\"root\");\n                if (root != null) {\n                    root.style.display = \"none\";\n                }\n\n                Platforms.Platforms.gameChange(e.target.getAttribute(\"game\"));\n                if (Platforms.Platforms.handleChangeGame) {\n                    return;\n                }\n\n                setTimeout(() => {\n                    window.location.href = newUrl;\n                }, 100);\n            }\n        }\n    }\n\n    private static termsUrl(): void {\n        if (FreeRoundBonus.termsUrl != null && FreeRoundBonus.termsUrl !== \"\") {\n            let elements: HTMLCollectionOf<Element> = document.getElementsByClassName(\"termsLink\");\n            for (let i: number = 0; i < elements.length; i++) {\n                let element: HTMLElement = <HTMLElement>elements[i];\n                if (element != null) {\n                    element.setAttribute(\"href\", FreeRoundBonus.termsUrl);\n\n                    //fix to prevent Focus.onClick calling\n                    element.addEventListener(\"click\", function (e: Event) {\n                        e.stopPropagation();\n                    });\n                }\n            }\n        }\n    }\n\n    private static setupFRBDialogByConfiguration(): void {\n        if (AppContext.gameConfiguration) {\n            if (!AppContext.gameConfiguration.FRBShowDenyButton) {\n                FreeRoundBonusDialog.hideFRBDenyButton();\n            }\n\n            if (!AppContext.gameConfiguration.FRBShowPostponeButton) {\n                FreeRoundBonusDialog.hideFRBPostPoneButton();\n            }\n        }\n    }\n\n    private static hideFRBDenyButton(): void {\n        if (FreeRoundBonusDialog.DialogButtonDeny) {\n            FreeRoundBonusDialog.DialogButtonDeny.parentNode.removeChild(FreeRoundBonusDialog.DialogButtonDeny);\n        }\n\n        //remove info text from message\n        let infoMsg = document.getElementById(\"frbDialogPlayingOptions3\");\n        if (infoMsg) {\n            infoMsg.parentNode.removeChild(infoMsg);\n        }\n    }\n\n    private static hideFRBPostPoneButton(): void {\n        if (FreeRoundBonusDialog.DialogButtonPostPone) {\n            FreeRoundBonusDialog.DialogButtonPostPone.parentNode.removeChild(FreeRoundBonusDialog.DialogButtonPostPone);\n        }\n\n        //remove info text from message\n        let infoMsg = document.getElementById(\"frbDialogPlayingOptions3\");\n        if (infoMsg) {\n            infoMsg.parentNode.removeChild(infoMsg);\n        }\n    }\n\n    public static dialogActive(): boolean {\n        return !FreeRoundBonusDialog.Dialog.classList.contains(\"_hidden\");\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/FreeRoundBonusDialog.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\nimport { Song } from \"./Song\";\nimport { ComponentTypes } from \"../ComponentTypes\";\nimport { SoundManager } from \"../Managers/SoundManager\";\n\n@engineComponent(ComponentTypes.PlayList)\nexport class PlayList {\n    static Songs: { [id: string]: Song } = {};\n\n    static addToPlayList(song: Song): void {\n        PlayList.Songs[song.id] = song;\n    }\n\n    create(node: Element): void {\n        SoundManager.parseElements(node, node.nodeName);\n    }\n\n    static isPlaying(song: string): boolean {\n        if (PlayList.Songs[song] != null) {\n            return PlayList.Songs[song].isPlaying();\n        }\n    }\n\n    static play(\n        song: string,\n        fadeIn: number = 0,\n        reset: boolean = true,\n        onProgress: (progress: number, duration: number) => void = null,\n    ): void {\n        if (PlayList.Songs[song] != null) {\n            PlayList.Songs[song].play(false, fadeIn, reset, onProgress);\n        }\n    }\n\n    static loop(song: string, fadeIn: number = 0, reset: boolean = false): void {\n        if (PlayList.Songs[song] != null) {\n            PlayList.Songs[song].play(true, fadeIn, reset);\n        }\n    }\n\n    static stop(song: string, fadeOut: number = 0): void {\n        if (PlayList.Songs[song] != null) {\n            PlayList.Songs[song].stop(fadeOut);\n        }\n    }\n\n    static stopAll(fadeOut: number = 0): void {\n        if (PlayList.Songs != null) {\n            for (let song in PlayList.Songs) {\n                PlayList.Songs[song].stop(fadeOut);\n            }\n        }\n    }\n\n    static pauseAll(): void {\n        if (PlayList.Songs != null) {\n            for (let song in PlayList.Songs) {\n                PlayList.Songs[song].pause();\n            }\n        }\n    }\n    static resumeAll(): void {\n        if (PlayList.Songs != null) {\n            for (let song in PlayList.Songs) {\n                PlayList.Songs[song].resume();\n            }\n        }\n    }\n\n    static stopAllInGroup(group: string, toggle: boolean = false): void {\n        if (PlayList.Songs != null) {\n            for (let song in PlayList.Songs) {\n                PlayList.Songs[song].toggleGroup(group, toggle);\n            }\n        }\n    }\n\n    static log(s: string): void {\n        if (DEBUG) {\n            const compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Sounds/PlayList.ts\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\nimport { ComponentTypes } from \"../ComponentTypes\";\nimport { PlayList } from \"../Sounds/PlayList\";\n\n/**\n * The SoundManager class is used for parsing elements which are representation of playlists and songs.\n * @class SoundManager\n */\nexport class SoundManager {\n    // TODO any\n    static PlayLists: { [id: string]: any } = {};\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param data any\n     * @return void\n     */\n    private static log(data: any): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"SoundManager\", data);\n        }\n    }\n\n    /**\n     * Parse songs and playlists.\n     * @method parseElements\n     * @param node Element\n     * @param playList string - optional\n     * @return void\n     */\n    static parseElements(node: Element, playList: string = \"\"): void {\n        if (node != null) {\n            var next: Element = node.firstElementChild;\n\n            while (next != null) {\n                var cls: string = \"\";\n                if (next.hasAttribute(\"Class\")) {\n                    cls = next.getAttribute(\"Class\");\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING element with name: \" + next.nodeName + \" has no class\");\n                    }\n                }\n\n                if (cls !== \"\") {\n                    if (EngineComponentFactory.isTypeOf(cls, ComponentTypes.PlayList)) {\n                        var element: any = EngineComponentFactory.get(cls);\n                        SoundManager.PlayLists[next.nodeName] = element;\n                        element.create(next);\n                    } else if (EngineComponentFactory.isTypeOf(cls, ComponentTypes.Song)) {\n                        var element: any = EngineComponentFactory.get(cls);\n                        element.create(next);\n\n                        if (playList !== \"\") {\n                            PlayList.addToPlayList(element);\n                        }\n                    }\n                }\n                next = next.nextElementSibling;\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/SoundManager.ts\n **/","import { StringUtils, Logger } from \"neo-common\";\nimport { Scaling } from \"./Scaling\";\nimport { Platforms } from \"neo-games\";\nimport { BetHigherThanMinDialog } from \"../Channels/Common/Dialogs/BetHigherThanMinDialog\";\n\nexport class RetentionPanel {\n    //******************************************************************************************************************\n    //  INSTANCE\n    //******************************************************************************************************************\n\n    private static instance: RetentionPanel;\n\n    //******************************************************************************************************************\n    //  SETTINGS\n    //******************************************************************************************************************\n\n    private static panelParentId: string = \"root\";\n\n    private static initRevalidateTimeout: number = 500;\n\n    private static landscapeMaxIconCount: number = window[\"CHANNEL\"] === \"mobile\" ? 4 : 5;\n\n    private static portraitMaxIconCount: number = 2;\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    private static panelWidth: number = 0;\n\n    private static canShow: boolean = false;\n\n    private static peakActive: number = 0;\n\n    private screen: HTMLElement;\n\n    private content: HTMLElement;\n\n    private panel: HTMLElement;\n\n    private icons: HTMLElement;\n\n    private lastCount: number;\n\n    private iconsSlotsCount: number;\n\n    //******************************************************************************************************************\n    //  EVENTS\n    //******************************************************************************************************************\n\n    constructor() {\n        this.screen = null;\n        this.panel = null;\n        this.icons = null;\n        this.lastCount = 0;\n\n        this.createPanel();\n    }\n\n    //******************************************************************************************************************\n    //  PUBLIC\n    //******************************************************************************************************************\n\n    public revalidate(): void {\n        if (!RetentionPanel.canShow) {\n            return;\n        }\n\n        if (this.screen == null) {\n            return;\n        }\n\n        if (this.panel == null) {\n            return;\n        }\n\n        this.log(\"revalidate\");\n        if (this.hasActiveIcon()) {\n            document.body.classList.add(\"retention-panel-active\");\n            RetentionPanel.panelWidth = parseInt(window.getComputedStyle(this.panel).width);\n        } else {\n            document.body.classList.remove(\"retention-panel-active\");\n            RetentionPanel.panelWidth = 0;\n        }\n        this.showPeakHelpIcon();\n        Scaling.LeftPanelWidth = RetentionPanel.panelWidth;\n    }\n\n    //******************************************************************************************************************\n    //  PRIVATE\n    //******************************************************************************************************************\n\n    private showPeakHelpIcon(): void {\n        let peakHelp = document.querySelector(\".hlpTournamentsBtn\");\n\n        if (RetentionPanel.peakActive) {\n            let peakHelpIcon = document.querySelector(\".btnTournaments\");\n            let peakHelpIconBackground =\n                document.getElementById(\"peakMenuBtn\") != null\n                    ? window.getComputedStyle(document.getElementById(\"peakMenuBtn\")).backgroundImage\n                    : false;\n            let peakHelpIconBackgroundSize =\n                document.querySelector(\".hlpMenu\") != null\n                    ? window.getComputedStyle(document.querySelector(\".hlpMenu\")).width\n                    : false;\n            if (peakHelp != null && peakHelpIcon != null && peakHelpIconBackground && peakHelpIconBackgroundSize) {\n                peakHelpIcon.setAttribute(\n                    \"style\",\n                    \"background-image:\" +\n                        peakHelpIconBackground +\n                        \"; height:100%; background-position: center; background-size: auto \" +\n                        peakHelpIconBackgroundSize +\n                        \"; -webkit-transform: scale(0.66); transform: scale(0.66);\",\n                );\n                peakHelp.classList.remove(\"_hidden\");\n            } else {\n                setTimeout(() => {\n                    this.showPeakHelpIcon();\n                }, RetentionPanel.initRevalidateTimeout);\n            }\n        } else {\n            peakHelp.classList.add(\"_hidden\");\n        }\n    }\n\n    private createPanel(): void {\n        const root = document.getElementById(RetentionPanel.panelParentId);\n\n        if (root == null) {\n            if (DEBUG) {\n                console.log(`ERROR - panel with id ${RetentionPanel.panelParentId} was not found`);\n            }\n            return;\n        }\n\n        this.screen = this.createElement(\"div\", \"retentionScreen\", [\"screen\"]);\n        this.content = this.createElement(\"div\", \"retentionContent\");\n        this.panel = this.createElement(\"div\", \"retentionPanel\", [\"gameControls\"]);\n        this.icons = this.createElement(\"div\", \"retentionPanelIcons\");\n\n        this.createContentPlaceholder(this.content);\n        this.createIconsPlaceholder(this.icons);\n\n        this.screen.appendChild(this.content);\n        this.screen.appendChild(this.panel);\n        this.panel.appendChild(this.icons);\n\n        root.appendChild(this.screen);\n    }\n\n    private createContentPlaceholder(contentHolder: HTMLElement): void {\n        if (contentHolder == null) {\n            return;\n        }\n\n        contentHolder.appendChild(this.createElement(\"div\", \"peakContentHolder\", [\"retentionContentHolder\"]));\n        contentHolder.appendChild(this.createElement(\"div\", \"frbContentHolder\", [\"retentionContentHolder\"]));\n    }\n\n    private createIconsPlaceholder(iconsHolder: HTMLElement): void {\n        if (iconsHolder == null) {\n            return;\n        }\n\n        iconsHolder.appendChild(this.createElement(\"div\", \"peakIconHolder\", [\"retentionIconHolder\"]));\n        iconsHolder.appendChild(this.createElement(\"div\", \"frbIconHolder\", [\"retentionIconHolder\"]));\n\n        for (let i = 0; i < iconsHolder.children.length; i++) {\n            let child = iconsHolder.children[i];\n            child.addEventListener(\"click\", (event) => {\n                BetHigherThanMinDialog.closeDialog();\n            });\n        }\n    }\n\n    private createElement(type: string, id: string = \"\", classList: Array<string> = []): HTMLElement {\n        const elem = document.createElement(type);\n\n        if (!StringUtils.isNullOrEmpty(id)) {\n            elem.id = id;\n        }\n\n        if (classList.length > 0) {\n            for (let i = 0; i < classList.length; i++) {\n                elem.classList.add(classList[i]);\n            }\n        }\n\n        return elem;\n    }\n\n    public updateCount(currentCount: number = -1): void {\n        currentCount = currentCount == -1 ? this.lastCount : currentCount;\n\n        const isPortrait = Scaling.isPortrait();\n        const slots = isPortrait\n            ? RetentionPanel.portraitMaxIconCount - currentCount\n            : RetentionPanel.landscapeMaxIconCount - currentCount;\n\n        if (this.iconsSlotsCount != slots) {\n            this.iconsSlotsCount = slots;\n            Platforms.Platforms.iconsCountAvailable(slots);\n        }\n\n        const isMultiIcon = this.isMultiIcon(currentCount);\n        this.icons.classList.remove(\n            \"retention-icon-count-\" + this.lastCount,\n            \"retention-icon-count-\" + this.lastCount + \"-m\",\n        );\n        this.icons.classList.add(\n            \"retention-icon-count-\" + currentCount + (isMultiIcon || RetentionPanel.peakActive > 1 ? \"-m\" : \"\"),\n        );\n        this.lastCount = currentCount;\n    }\n\n    private isMultiIcon(count: number): boolean {\n        if (count == 0 || count > 1) {\n            return false;\n        }\n\n        const style = window.getComputedStyle(this.icons);\n        const width = parseInt(style.width);\n        const height = parseInt(style.height);\n\n        return width != 0 ? height / width > 1.5 : false;\n    }\n\n    private hasActiveIcon(): boolean {\n        if (this.panel == null) {\n            return false;\n        }\n\n        if (this.icons == null) {\n            return false;\n        }\n\n        let result = false;\n        let count = 0;\n        RetentionPanel.peakActive = 0;\n        const children = this.icons.children;\n        for (let i = 0; i < children.length; i++) {\n            const child = children[i] as HTMLElement;\n            if (child != null) {\n                const iconChildren = child.children;\n\n                for (let j = 0; j < iconChildren.length; j++) {\n                    const iconChild = iconChildren[j] as HTMLElement;\n\n                    if (iconChild.getAttribute(\"active\") == \"true\") {\n                        result = true;\n                        count++;\n                        if (\n                            iconChild.hasAttribute(\"promotions-count\") &&\n                            parseInt(iconChild.getAttribute(\"promotions-count\")) > 0\n                        )\n                            RetentionPanel.peakActive = parseInt(iconChild.getAttribute(\"promotions-count\"));\n                    }\n                }\n            }\n        }\n\n        this.updateCount(count);\n        return result;\n    }\n\n    protected log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"RetentionPanel\", \"RetentionPanel \" + s);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  PUBLIC STATIC\n    //******************************************************************************************************************\n\n    private static getInstance(): RetentionPanel {\n        if (RetentionPanel.instance == null) {\n            RetentionPanel.instance = new RetentionPanel();\n        }\n\n        return RetentionPanel.instance;\n    }\n\n    public static initialize(): void {\n        RetentionPanel.getInstance();\n    }\n\n    public static show(): void {\n        RetentionPanel.canShow = true;\n        RetentionPanel.revalidate();\n\n        Scaling.Emitter.on(Scaling.EventResize, () => {\n            RetentionPanel.getInstance().updateCount();\n            RetentionPanel.getInstance().revalidate();\n        });\n\n        //revalidate possible loaded plugins after loading screen is hidden\n        setTimeout(() => {\n            RetentionPanel.revalidate();\n        }, RetentionPanel.initRevalidateTimeout);\n    }\n\n    public static revalidate(): void {\n        RetentionPanel.getInstance().revalidate();\n        Scaling.resizeRoot(false, false);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/RetentionPanel.ts\n **/","import { Languages } from \"../../../Utils/Languages\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { BetManager } from \"../../../Managers/BetManager\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { GameData } from \"../Datas/GameData\";\nimport { Communication } from \"neo-games\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\nimport { Jackpot } from \"../Bonuses/Jackpot\";\nimport { FreeRoundBonusDialog } from \"./FreeRoundBonusDialog\";\n\n/**\n * Class representing the Bet Higher Than Minimum Dialog.\n */\nexport class BetHigherThanMinDialog {\n    private static _wasOpened: boolean = false;\n    private static _isOpened: boolean = false;\n    private static _reopenDialog: boolean = false;\n    private static _gameStartedWithFeature: boolean = false;\n    private static _gameStarted: boolean = true;\n\n    /**\n     * Opens the dialog if the conditions are met.\n     */\n    public static openDialog(): void {\n        if (\n            !this.canNotifyBetHigherThanMin() ||\n            (this._wasOpened && !this._reopenDialog) ||\n            FreeRoundBonusDialog.dialogActive()\n        ) {\n            return;\n        }\n\n        const minBet =\n            Languages.formatText(Languages.FormatMoney, this.getMinBet().toString()) +\n            \" \" +\n            DataManager.getDataById(GameData.DataCurrency);\n        const message = Languages.getRid(\"EXCEED_MIN_BET\", minBet);\n\n        const dialogData = {\n            text: message,\n            actions: [\n                {\n                    type: \"restore\",\n                    text: Languages.getRid(\"CONTINUE\"),\n                    customData: Communication.Game.GameModules.Base,\n                },\n            ],\n            special: true,\n        };\n\n        AppContext.current.showDialog(message, false, null, null, null, dialogData);\n        this._wasOpened = true;\n        this._isOpened = true;\n    }\n\n    /**\n     * Determines if the dialog can be opened.\n     * @returns True if the dialog can be opened, otherwise false.\n     */\n    public static canOpenDialog(): boolean {\n        return (\n            AppContext.gameConfiguration.NotifyBetHigherThanMin &&\n            !this.isMinBet() &&\n            !ModuleManager.gambleActive() &&\n            !(FreeRoundBonus.status && FreeRoundBonus.status === \"active\") &&\n            !Jackpot.hasMiniGame() &&\n            !this._wasOpened &&\n            this._gameStartedWithFeature\n        );\n    }\n\n    /**\n     * Closes the dialog if it is opened or prevents from opening if bet was changed.\n     * @param changeBet - Indicates whether the bet was changed.\n     */\n    public static closeDialog(changeBet?: boolean): void {\n        if (this._isOpened) {\n            this._isOpened = false;\n            AppContext.current.closeDialog();\n        }\n        if (changeBet) {\n            this._wasOpened = true;\n        }\n    }\n\n    /**\n     * Hides the dialog for later restoration.\n     */\n    public static hideDialog(): void {\n        if (this._isOpened) {\n            this._reopenDialog = true;\n        }\n    }\n\n    /**\n     * Restores the dialog if it was hidden.\n     */\n    public static restoreDialog(): void {\n        if (this._reopenDialog) {\n            this.openDialog();\n            this._reopenDialog = false;\n        }\n    }\n\n    /**\n     * Sets the opened status of the dialog to false.\n     */\n    public static setOpenedStatus(): void {\n        if (this._isOpened) {\n            this._isOpened = false;\n        }\n    }\n\n    /**\n     * Checks if a game feature is currently active.\n     * @returns True if any game feature is active, otherwise false.\n     */\n    private static gameFeatureActive(): boolean {\n        return (\n            ModuleManager.gambleActive() ||\n            (FreeRoundBonus.status && FreeRoundBonus.status === \"active\") ||\n            Jackpot.hasMiniGame() ||\n            !DataManager.GameRoundClosed\n        );\n    }\n\n    /**\n     * Checks if the current bet is the minimum bet.\n     * @returns True if the current bet is the minimum bet, otherwise false.\n     */\n    private static isMinBet(): boolean {\n        BetManager.updateBetPosition();\n        return BetManager.minBet;\n    }\n\n    /**\n     * Determines if a notification for a bet higher than the minimum should be sent.\n     * @returns True if a notification should be sent, otherwise false.\n     */\n    public static canNotifyBetHigherThanMin(): boolean {\n        return (\n            !this.isMinBet() &&\n            AppContext.gameConfiguration.NotifyBetHigherThanMin &&\n            this._gameStartedWithFeature &&\n            !this.gameFeatureActive()\n        );\n    }\n\n    /**\n     * Gets the minimum bet value from total bets.\n     * @returns The minimum bet.\n     */\n    private static getMinBet(): number {\n        return Math.min(...BetManager.TotalBets);\n    }\n\n    /**\n     * Checks if the game started with a feature.\n     * @returns True if the game started with a feature active, otherwise false.\n     */\n    public static getGameStartedWithoutFeature(): boolean {\n        if (this._gameStarted) {\n            this._gameStartedWithFeature = this.gameFeatureActive();\n            this._gameStarted = false;\n        }\n        return !this._gameStartedWithFeature && AppContext.gameConfiguration.NotifyBetHigherThanMin;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/BetHigherThanMinDialog.ts\n **/","import { Communication } from \"neo-games\";\nimport { FreeRoundBonusDialog } from \"./FreeRoundBonusDialog\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\nimport { GameApp } from \"../../../GameApp\";\nimport { RetentionPanel } from \"../../../Utils/RetentionPanel\";\n\ntype FreeRoundsOffersResponse = Communication.Game.FreeRoundsOffersResponse;\n\nvar GameModules = Communication.Game.GameModules;\n\nexport class FreeRoundBonusIcon {\n    private static IconNew: HTMLElement;\n    private static IconActive: HTMLElement;\n\n    public static initialize(): void {\n        FreeRoundBonusIcon.IconNew = document.getElementById(\"frbIconNew\");\n        FreeRoundBonusIcon.IconActive = document.getElementById(\"frbIconActive\");\n        FreeRoundBonusIcon.bindEvents();\n    }\n\n    // new, active\n    public static showIcon(type: string): void {\n        FreeRoundBonusIcon.hideAllIcons();\n        switch (type) {\n            case \"new\":\n                DataManager.showDataElements(\"helpFRB\", \"block\");\n                DataManager.showDataElements(\"helpFRB_flex\", \"flex\");\n                FreeRoundBonusIcon.showElement(FreeRoundBonusIcon.IconNew);\n                RetentionPanel.revalidate();\n                break;\n            case \"active\":\n                DataManager.showDataElements(\"helpFRB\", \"block\");\n                DataManager.showDataElements(\"helpFRB_flex\", \"flex\");\n                FreeRoundBonusIcon.showElement(FreeRoundBonusIcon.IconActive);\n                if (FreeRoundBonus.winPayMethod === \"cumulative\") {\n                    if (FreeRoundBonusIcon.IconActive != null) {\n                        FreeRoundBonusIcon.IconActive.classList.add(\"_disabled\");\n                    }\n                }\n                RetentionPanel.revalidate();\n                break;\n        }\n        FreeRoundBonusIcon.toggleCumulative();\n    }\n\n    /**\n     * Toggle cumulative style(s)\n     */\n    private static toggleCumulative(): void {\n        if (FreeRoundBonus.winPayMethod === \"cumulative\") {\n            if (FreeRoundBonusIcon.IconActive != null) {\n                FreeRoundBonusIcon.IconActive.classList.add(\"cumulativeFrb\");\n            }\n        } else {\n            if (FreeRoundBonusIcon.IconActive != null) {\n                FreeRoundBonusIcon.IconActive.classList.remove(\"cumulativeFrb\");\n            }\n        }\n    }\n\n    private static bindEvents(): void {\n        if (FreeRoundBonusIcon.IconNew != null) {\n            FreeRoundBonusIcon.IconNew.onclick = FreeRoundBonusIcon.handleIconClick.bind(\n                this,\n                FreeRoundBonusIcon.onNew,\n            );\n        }\n\n        if (FreeRoundBonusIcon.IconActive != null) {\n            FreeRoundBonusIcon.IconActive.onclick = FreeRoundBonusIcon.handleIconClick.bind(\n                this,\n                FreeRoundBonusIcon.onActive,\n            );\n        }\n    }\n\n    public static hideAllIcons(): void {\n        DataManager.hideDataElements(\"helpFRB\");\n        FreeRoundBonusIcon.hideElement(FreeRoundBonusIcon.IconNew);\n        FreeRoundBonusIcon.hideElement(FreeRoundBonusIcon.IconActive);\n    }\n\n    public static disableActiveIcon(): void {\n        if (\n            FreeRoundBonusIcon.IconNew != null &&\n            !FreeRoundBonusIcon.IconNew.classList.contains(\"_hidden\") &&\n            !FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")\n        ) {\n            FreeRoundBonusIcon.IconNew.classList.add(\"_disabled\");\n        }\n        if (\n            FreeRoundBonusIcon.IconActive != null &&\n            !FreeRoundBonusIcon.IconActive.classList.contains(\"_hidden\") &&\n            !FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")\n        ) {\n            FreeRoundBonusIcon.IconActive.classList.add(\"_disabled\");\n        }\n    }\n\n    public static enableActiveIcon(): void {\n        if (DataManager.Autoplay && (parseFloat(DataManager.AutoplayCount) > 0 || DataManager.AutoplayCount === \"∞\")) {\n            return;\n        }\n        if (\n            FreeRoundBonusIcon.IconNew != null &&\n            !FreeRoundBonusIcon.IconNew.classList.contains(\"_hidden\") &&\n            FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")\n        ) {\n            FreeRoundBonusIcon.IconNew.classList.remove(\"_disabled\");\n        }\n        if (\n            FreeRoundBonusIcon.IconActive != null &&\n            !FreeRoundBonusIcon.IconActive.classList.contains(\"_hidden\") &&\n            FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")\n        ) {\n            FreeRoundBonusIcon.IconActive.classList.remove(\"_disabled\");\n        }\n        RetentionPanel.revalidate();\n    }\n\n    private static showElement(element: HTMLElement): void {\n        if (element != null) {\n            if (element.classList.contains(\"_disabled\")) {\n                element.classList.remove(\"_disabled\");\n            }\n            if (element.classList.contains(\"_hidden\")) {\n                element.classList.remove(\"_hidden\");\n            }\n            if (element.getAttribute(\"active\") != \"true\") {\n                element.setAttribute(\"active\", \"true\");\n            }\n        }\n    }\n\n    private static hideElement(element: HTMLElement): void {\n        if (element != null) {\n            if (element.classList.contains(\"_disabled\")) {\n                element.classList.remove(\"_disabled\");\n            }\n            if (!element.classList.contains(\"_hidden\")) {\n                element.classList.add(\"_hidden\");\n            }\n            if (element.getAttribute(\"active\") != \"false\") {\n                element.setAttribute(\"active\", \"false\");\n            }\n        }\n    }\n\n    private static disableElement(element: HTMLElement): void {\n        if (element != null) {\n            if (!element.classList.contains(\"_disabled\")) {\n                element.classList.add(\"_disabled\");\n            }\n            if (element.classList.contains(\"_hidden\")) {\n                element.classList.remove(\"_hidden\");\n            }\n            if (element.getAttribute(\"active\") != \"true\") {\n                element.setAttribute(\"active\", \"true\");\n            }\n        }\n    }\n\n    public static isDisabled(): boolean {\n        let isDis: boolean = false;\n        if (FreeRoundBonusIcon.IconNew != null && FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")) {\n            isDis = true;\n        }\n        if (FreeRoundBonusIcon.IconActive != null && FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")) {\n            isDis = true;\n        }\n        return isDis;\n    }\n\n    private static handleIconClick(callback: () => void, event: Event): void {\n        let element = <Element>event.target;\n\n        if (!FreeRoundBonusIcon.isDisabled() && element != null) {\n            element.classList.add(\"_loading\");\n\n            GameApp.gameClient\n                .sendFreeRoundsOffersRequest(GameApp.key)\n                .then((response: FreeRoundsOffersResponse) => {\n                    if (response != null) {\n                        if (response.currentOffer != null || response.otherOffers != null) {\n                            callback();\n                        } else {\n                            FreeRoundBonus.expiredFreeRounds();\n                        }\n                    } else {\n                        FreeRoundBonus.expiredFreeRounds();\n                    }\n                })\n                .finally(() => {\n                    element.classList.remove(\"_loading\");\n                });\n        }\n    }\n\n    private static onNew(): void {\n        if (!FreeRoundBonusIcon.isDisabled()) {\n            PlayList.play(\"SND_Click\");\n            if (FreeRoundBonus.id != null) {\n                FreeRoundBonusDialog.showDialog(\"new\");\n            } else {\n                if (FreeRoundBonus.otherOfferes.length > 0) {\n                    FreeRoundBonusDialog.showDialog(\"other\");\n                }\n            }\n            ModuleManager.disableBase();\n        }\n    }\n\n    private static onActive(): void {\n        if (!FreeRoundBonusIcon.isDisabled() && parseInt(FreeRoundBonus.remainingCount()) > 0) {\n            PlayList.play(\"SND_Click\");\n            FreeRoundBonusDialog.showDialog(\"active\");\n            ModuleManager.disableBase();\n            ModuleManager.resetSceneAsOnCollect(GameModules.Base);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/FreeRoundBonusIcon.ts\n **/","import { Utils, Logger, NumberUtils, StringUtils } from \"neo-common\";\nimport { ClientHost, GameEngine, Platforms } from \"neo-games\";\nimport { Languages } from \"../../../Utils/Languages\";\nimport { FrameTimerEventEmitter, FrameTimerEvents, CreateFrameTimer } from \"../../../Utils/FrameTimer\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { GameApp } from \"../../../GameApp\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { GameManager } from \"../../../Managers/GameManager\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\nimport { FreeRoundBonusDialog } from \"./FreeRoundBonusDialog\";\nimport { RealityCheckGetInfoResponse } from \"neo-games/Engine/Communication/Game/Responses/RealityCheckGetInfoResponse\";\nimport { BetManager } from \"../../../Managers/BetManager\";\nimport { MessageManager } from \"../../../Managers/MessageManager\";\nimport { Jackpot } from \"../Bonuses/Jackpot\";\nimport { BetHigherThanMinDialog } from \"./BetHigherThanMinDialog\";\n\n/**\n * Create dialog filled from code.\n * @class Dialog\n */\nexport class ResponsibleDialog1 {\n    static opened: boolean = false;\n\n    static DisabledClass: string = \"_disabled\";\n\n    private static _element: HTMLElement;\n    private static _continueButton: HTMLElement;\n    private static _historyButton: HTMLElement;\n    private static _closeButton: HTMLElement;\n\n    static showResponsibleDialog1OnCollect: boolean = false;\n    static responsibleDialog1Data: ClientHost.Types.ClientHostResponsibleDialogData;\n\n    static openDialog(data: ClientHost.Types.ClientHostResponsibleDialogData): void {\n        if (AppContext.gameConfiguration.RCIInfo) {\n            GameManager.gameClient.getRealityCheckInfo().then((response: any): any => {\n                ResponsibleDialog1.openDialogContinue(data, response);\n            });\n        } else {\n            ResponsibleDialog1.openDialogContinue(data);\n        }\n    }\n\n    static openDialogContinue(\n        data: ClientHost.Types.ClientHostResponsibleDialogData,\n        info: RealityCheckGetInfoResponse = null,\n    ): void {\n        if (ResponsibleDialog1._element == null) {\n            ResponsibleDialog1._element = document.getElementById(\"responsibleGamingDialog\");\n        }\n\n        if (\n            !Utils.isNullOrUndefined(info) &&\n            !Utils.isNullOrUndefined(info[\"messages\"]) &&\n            info[\"messages\"].length > 0\n        ) {\n            MessageManager.postpone(ResponsibleDialog1.onContinue, info);\n            return;\n        }\n\n        let elementWin: HTMLElement = document.getElementById(\"rciWin\");\n        let elementLost: HTMLElement = document.getElementById(\"rciLost\");\n        let totalGain: number = 0;\n\n        Platforms.Platforms.dialogOpened(\"rci\", true);\n\n        if (info != null) {\n            if (info.totalGain <= 0) {\n                elementWin.style.display = \"none\";\n                elementLost.style.display = \"block\";\n                totalGain = -1 * info.totalGain;\n            } else {\n                elementWin.style.display = \"block\";\n                elementLost.style.display = \"none\";\n                totalGain = info.totalGain;\n            }\n        } else {\n            elementWin.style.display = \"none\";\n            elementLost.style.display = \"none\";\n        }\n\n        BetHigherThanMinDialog.hideDialog();\n        AppContext.current.closeDialog();\n        FreeRoundBonusDialog.hideDialog();\n        FreeRoundBonus.disableUi();\n        Jackpot.closeAllHistoryDialogs();\n        ResponsibleDialog1.opened = true;\n\n        if (ResponsibleDialog1._continueButton == null) {\n            ResponsibleDialog1._continueButton = document.getElementById(\"continueButton\");\n            if (ResponsibleDialog1._continueButton != null) {\n                ResponsibleDialog1._continueButton.onclick = ResponsibleDialog1.onContinue;\n                if (data.continue) {\n                    ResponsibleDialog1._continueButton.style.display = \"inline-block\";\n                } else {\n                    ResponsibleDialog1._continueButton.style.display = \"none\";\n                }\n            }\n        }\n\n        if (ResponsibleDialog1._historyButton == null) {\n            ResponsibleDialog1._historyButton = document.getElementById(\"historyButton\");\n            if (ResponsibleDialog1._historyButton != null) {\n                if (data.history) {\n                    ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onHistory;\n                    ResponsibleDialog1._historyButton.style.display = \"inline-block\";\n                } else {\n                    if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\n                        ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onGameRoundHistory;\n                        ResponsibleDialog1._historyButton.style.display = \"inline-block\";\n                    } else {\n                        if (AppContext.gameConfiguration.RCIShowHistoryButton) {\n                            ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onGameRoundHistory;\n                            ResponsibleDialog1._historyButton.style.display = \"inline-block\";\n                        } else {\n                            ResponsibleDialog1._historyButton.style.display = \"none\";\n                        }\n                    }\n                }\n            }\n        }\n\n        if (ResponsibleDialog1._closeButton == null) {\n            ResponsibleDialog1._closeButton = document.getElementById(\"closeButton\");\n            if (ResponsibleDialog1._closeButton != null) {\n                ResponsibleDialog1._closeButton.onclick = ResponsibleDialog1.onClose;\n                if (data.exit) {\n                    ResponsibleDialog1._closeButton.style.display = \"inline-block\";\n                } else {\n                    ResponsibleDialog1._closeButton.style.display = \"none\";\n                }\n            }\n        }\n\n        //var now: Date = Time;\n        var startTime: number = (Date.now() - data.startTime.getTime()) / 1000;\n        var interval: string = \"\";\n        var t: number = startTime / 60;\n        var h: string = parseInt(t / 60 + \"\") + \"\";\n        if (parseInt(h) < 10) {\n            h = \"0\" + h;\n        }\n        var m: string = parseInt((t % 60) + \"\") + \"\";\n        if (parseInt(m) < 10) {\n            m = \"0\" + m;\n        }\n\n        if (data.interval % 60 === 0) {\n            interval = (data.interval / 60).toFixed(0);\n        } else {\n            interval = (data.interval / 60).toFixed(2);\n        }\n\n        DataManager.updateDataElement(\"RESPONSIBLE_DIALOG_1\", Math.floor(t) + \"\");\n\n        if (AppContext.gameConfiguration.RCIInfo) {\n            if (info != null) {\n                if (DataManager.DisplayCurrencies.hasOwnProperty(info.currency)) {\n                    info.currency = DataManager.DisplayCurrencies[info.currency];\n                }\n\n                if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                    DataManager.updateDataElement(\n                        \"RESPONSIBLE_DIALOG_1_SUM\",\n                        NumberUtils.devide(totalGain, BetManager.CoinSize).toString() + \" \" + info.currency,\n                    );\n                } else {\n                    DataManager.updateDataElement(\n                        \"RESPONSIBLE_DIALOG_1_SUM\",\n                        Languages.formatText(Languages.FormatMoney, totalGain.toString()) + \" \" + info.currency,\n                    );\n                }\n            }\n        }\n\n        // RCI_IntervalInfo\n        DataManager.updateDataElement(\"RESPONSIBLE_DIALOG_1_INTERVAL\", interval);\n\n        let elementRciIntervalInfo = document.getElementById(\"rciIntervalInfo\");\n        if (AppContext.gameConfiguration.RCIIntervalInfo) {\n            if (elementRciIntervalInfo != null) {\n                elementRciIntervalInfo.style.display = \"block\";\n            }\n        } else {\n            if (elementRciIntervalInfo != null) {\n                elementRciIntervalInfo.style.display = \"none\";\n            }\n        }\n\n        if (ResponsibleDialog1._element != null) {\n            if (ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\n                ResponsibleDialog1._element.classList.remove(ResponsibleDialog1.DisabledClass);\n            }\n        } else {\n            if (DEBUG) {\n                Logger.errorGroup(\"ResponsibleDialog1\", \"ERROR no responsibleDialog1\");\n            }\n        }\n    }\n\n    static onContinue(): void {\n        Platforms.Platforms.dialogOpened(\"rci\", false);\n\n        ResponsibleDialog1.opened = false;\n        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\n            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\n        }\n\n        PlayList.play(\"SND_Click\");\n        GameApp.continue();\n        GameManager.closeResponsibleDialog1();\n        BetHigherThanMinDialog.restoreDialog();\n        FreeRoundBonus.reopenFreeRounds();\n    }\n\n    static onHistory(): void {\n        Platforms.Platforms.dialogOpened(\"rci\", false);\n\n        ResponsibleDialog1.opened = false;\n        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\n            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\n        }\n\n        PlayList.play(\"SND_Click\");\n        GameApp.closeRealityCheck();\n        GameApp.history();\n        GameManager.closeResponsibleDialog1();\n        BetHigherThanMinDialog.restoreDialog();\n        FreeRoundBonus.reopenFreeRounds();\n    }\n\n    static onGameRoundHistory(): void {\n        Platforms.Platforms.dialogOpened(\"rci\", false);\n\n        ResponsibleDialog1.opened = false;\n        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\n            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\n        }\n\n        PlayList.play(\"SND_Click\");\n        GameApp.closeRealityCheck();\n        if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\n            GameApp.openGameRoundHistoryFromUrl();\n        } else {\n            GameApp.openGameRoundHistory();\n        }\n        GameManager.closeResponsibleDialog1();\n        BetHigherThanMinDialog.restoreDialog();\n        FreeRoundBonus.reopenFreeRounds();\n    }\n\n    static onClose(): void {\n        Platforms.Platforms.dialogOpened(\"rci\", false);\n\n        ResponsibleDialog1.opened = false;\n        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\n            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\n        }\n\n        PlayList.play(\"SND_Click\");\n        Platforms.Platforms.exitHandler = \"responsibleDialog\";\n        GameApp.exit();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/ResponsibleDialog1.ts\n **/","import { StringUtils, Utils } from \"neo-common\";\nimport { Platforms } from \"neo-games\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\nimport { Languages } from \"../Utils/Languages\";\nimport { GameApp } from \"../GameApp\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { BaseModel } from \"../GameComponents/Base/BaseModel\";\n\nexport class MessageManager {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected static dialog: HTMLElement;\n\n    protected static title: HTMLElement;\n\n    protected static text: HTMLElement;\n\n    protected static buttonsHolder: HTMLElement;\n\n    protected static buttons: Array<HTMLElement>;\n\n    protected static callback: (response: any) => void;\n\n    protected static response: any;\n\n    protected static step: number;\n\n    //******************************************************************************************************************\n    //  POSTPONE\n    //******************************************************************************************************************\n\n    public static postpone(callback: (response: any) => void, response: any): void {\n        if (\n            !Utils.isNullOrUndefined(response) &&\n            !Utils.isNullOrUndefined(response.messages) &&\n            response.messages.length > 0\n        ) {\n            if (Utils.isNullOrUndefined(MessageManager.dialog)) {\n                MessageManager.dialog = document.getElementById(\"messageDialog\");\n\n                if (!Utils.isNullOrUndefined(MessageManager.dialog)) {\n                    MessageManager.title = MessageManager.dialog.getElementsByTagName(\"h3\")[0];\n                    MessageManager.text = document.getElementById(\"messageDialogText\");\n\n                    MessageManager.buttonsHolder = document.getElementById(\"messageDialogButtons\");\n                    MessageManager.buttons = [];\n                }\n            }\n\n            if (Utils.isNullOrUndefined(MessageManager.dialog)) {\n                callback(response);\n            } else {\n                MessageManager.callback = callback;\n                MessageManager.response = response;\n                MessageManager.step = 0;\n                MessageManager.handle();\n            }\n        } else {\n            callback(response);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  UPDATE DIALOG DATA\n    //******************************************************************************************************************\n\n    protected static updateDialogData(data: any): void {\n        MessageManager.resetDialogData();\n\n        if (!Utils.isNullOrUndefined(data[\"title\"])) {\n            MessageManager.title.innerHTML = data[\"title\"];\n        }\n\n        if (!Utils.isNullOrUndefined(data[\"text\"])) {\n            MessageManager.text.innerHTML = data[\"text\"];\n        }\n\n        if (!Utils.isNullOrUndefined(data[\"actions\"])) {\n            MessageManager.removeAllButtons();\n\n            for (let i = 0; i < data[\"actions\"].length; i++) {\n                let action = data[\"actions\"][i];\n\n                switch (action.type) {\n                    case \"continue\":\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionContinue.bind(this, action));\n                        break;\n                    case \"exit\":\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionExit.bind(this, action));\n                        break;\n                    case \"history\":\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionHistory.bind(this, action));\n                        break;\n                    case \"reload\":\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionReload.bind(this, action));\n                        break;\n                    case \"cashier\":\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionCashier.bind(this, action));\n                        break;\n                    case \"link\":\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionLink.bind(this, action));\n                        break;\n                }\n            }\n        }\n    }\n\n    protected static resetDialogData(): void {\n        //default title\n        MessageManager.title.innerHTML = Languages.getRid(\"DLG_INFO\");\n\n        //remove all custom buttons\n        MessageManager.removeAllButtons();\n\n        //create default continue button\n        MessageManager.createButton(Languages.getRid(\"CONTINUE\"), MessageManager.actionContinue);\n    }\n\n    protected static removeAllButtons(): void {\n        while (MessageManager.buttons.length > 0) {\n            let button = MessageManager.buttons.pop();\n            MessageManager.buttonsHolder.removeChild(button);\n        }\n    }\n\n    protected static createButton(text: string, action: (data: any) => void): void {\n        let button: HTMLElement = document.createElement(\"div\");\n        button.textContent = text;\n        button.classList.add(\"dialogBtn\", \"customDialogBtn\");\n        button.onclick = action;\n\n        MessageManager.buttonsHolder.appendChild(button);\n        MessageManager.buttons.push(button);\n    }\n\n    //******************************************************************************************************************\n    //  ACTIONS\n    //******************************************************************************************************************\n\n    protected static actionContinue(data: any): void {\n        PlayList.play(\"SND_Click\");\n        MessageManager.handle();\n    }\n\n    protected static actionExit(data: any): void {\n        PlayList.play(\"SND_Click\");\n        Platforms.Platforms.exitHandler = \"messageDialog\";\n        GameApp.exit();\n    }\n\n    protected static actionReload(data: any): void {\n        PlayList.play(\"SND_Click\");\n        Platforms.Platforms.gameReloading();\n        if (Platforms.Platforms.handleGameReload) {\n            return;\n        }\n\n        window.location.reload(true);\n    }\n\n    protected static actionHistory(data: any): void {\n        PlayList.play(\"SND_Click\");\n\n        if (!Utils.isNullOrUndefined(data[\"linkUrl\"])) {\n            Platforms.Platforms.gotoHistory({ target: data[\"linkUrl\"] });\n            if (Platforms.Platforms.handleOpenHistoryPage) {\n                return;\n            }\n            window.open(data[\"linkUrl\"], !Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_blank\");\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.HistoryUrl)) {\n            GameApp.openGameRoundHistoryFromUrl();\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\n            GameApp.openGameRoundHistoryFromUrl();\n        } else {\n            GameApp.openGameRoundHistory();\n        }\n    }\n\n    protected static actionCashier(data: any): void {\n        PlayList.play(\"SND_Click\");\n\n        if (!Utils.isNullOrUndefined(data[\"linkUrl\"])) {\n            Platforms.Platforms.gotoCasier({ reason: \"InsufficientFunds\", target: data[\"linkUrl\"] });\n            if (Platforms.Platforms.handleOpenCashierPage) {\n                return;\n            }\n            window.open(data[\"linkUrl\"], !Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_self\");\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.CashierUrl)) {\n            Platforms.Platforms.gotoCasier({\n                reason: \"InsufficientFunds\",\n                target: AppContext.gameConfiguration.CashierUrl,\n            });\n            if (Platforms.Platforms.handleOpenCashierPage) {\n                return;\n            }\n            window.open(AppContext.gameConfiguration.CashierUrl, \"_self\");\n        }\n    }\n\n    protected static actionLink(data: any): void {\n        PlayList.play(\"SND_Click\");\n\n        if (!Utils.isNullOrUndefined(data[\"linkUrl\"])) {\n            window.open(data[\"linkUrl\"], !Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_blank\");\n        }\n    }\n\n    //******************************************************************************************************************\n    //  HANDLE\n    //******************************************************************************************************************\n\n    protected static handle(): void {\n        if (MessageManager.response.messages.length === MessageManager.step) {\n            MessageManager.dialog.classList.add(\"_disabled\");\n            MessageManager.callback(MessageManager.response);\n            Platforms.Platforms.dialogOpened(\"default\", false);\n        } else {\n            if (MessageManager.response.messages[MessageManager.step].type == \"plugin\") {\n                Platforms.Platforms.sendPluginMessage(MessageManager.response.messages[MessageManager.step].text);\n                MessageManager.step++;\n                MessageManager.handle();\n            } else {\n                MessageManager.dialog.classList.remove(\"_disabled\");\n                MessageManager.updateDialogData(MessageManager.response.messages[MessageManager.step]);\n                MessageManager.step++;\n                Platforms.Platforms.dialogOpened(\"default\", true);\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CALLBACK\n    //******************************************************************************************************************\n    public static callbackFnc(response: any): void {\n        BaseModel.spinContinue();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/MessageManager.ts\n **/","import { Utils, NumberUtils } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { BaseController } from \"./BaseController\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { MessageManager } from \"../../Managers/MessageManager\";\nimport { FreeRoundBonus } from \"../../Channels/Common/Bonuses/FreeRoundBonus\";\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\n\nexport class BaseModel {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    private static GameRequest: GameClientRequest = null;\n\n    protected controller: BaseController;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor(controller: BaseController) {\n        this.controller = controller;\n    }\n\n    //******************************************************************************************************************\n    //  REQUESTS\n    //******************************************************************************************************************\n\n    public start(id?: number): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        GameManager.gameClient.start(Communication.Game.GameModules.Base, { index: id }).then((response: any): any => {\n            MessageManager.postpone(this.startReceived.bind(this), response);\n        });\n    }\n\n    public spin(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        BaseModel.GameRequest = {} as GameClientRequest;\n        BaseModel.GameRequest.module = Communication.Game.GameModules.Base;\n        BaseModel.GameRequest.bet = BetManager.createBetForSpin();\n        BaseModel.GameRequest.callBackFcn = this.spinReceived.bind(this);\n\n        DataManager.controlAutoplay();\n        GameManager.gameClient\n            .spin(Communication.Game.GameModules.Base, BetManager.createBetForSpin())\n            .then((response: any): any => {\n                MessageManager.postpone(this.spinReceived.bind(this), response);\n            });\n    }\n\n    public static spinContinue(): void {\n        if (!GameManager.requestSend && BaseModel.GameRequest) {\n            GameManager.requestSend = true;\n\n            GameManager.gameClient\n                .spin(BaseModel.GameRequest.module, BaseModel.GameRequest.bet)\n                .then((response: any): any => {\n                    MessageManager.postpone(BaseModel.GameRequest.callBackFcn, response);\n                });\n\n            //after message, we call gameclient spin once again, so we also need to send round started event\n            Platforms.Platforms.roundStarted({\n                totalBet: BetManager.Bet,\n                freeRound: FreeRoundBonus.inFrb,\n                userAction: DataManager.getTrustedUserAction(BaseActions.ActionSpin),\n            });\n        }\n    }\n\n    public end(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        GameManager.gameClient.endFreespin().then((response: any): any => {\n            MessageManager.postpone(this.endReceived.bind(this), response);\n        });\n    }\n\n    //******************************************************************************************************************\n    //  RESPONSES\n    //******************************************************************************************************************\n\n    protected startReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            this.controller.startReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    protected spinReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            BaseModel.GameRequest = null;\n            this.controller.spinReceived();\n            Platforms.Platforms.spinReceived({\n                balance: parseFloat(NumberUtils.add(response.balance.real, response.balance.bonus)),\n                win: GameManager.baseResponse.currentWin,\n                totalBet: BetManager.createBetForSpin().totalBet,\n                roundId: response.roundId,\n            });\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    protected endReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            this.controller.endReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n}\n\nexport type GameClientRequest = {\n    module: string;\n    bet: Communication.Game.SpinBet;\n    callBackFcn: () => void;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Base/BaseModel.ts\n **/","export class BaseActions {\n    static ActionSpin: string = \"SPIN\";\n    static ActionSpinStop: string = \"SPIN_STOP\";\n    static ActionAutoplay: string = \"AUTOPLAY\";\n    static ActionAutoplayStop: string = \"AUTOPLAY_STOP\";\n    static ActionBetPlus: string = \"BET_PLUS\";\n    static ActionBetMinus: string = \"BET_MINUS\";\n    static ActionBetCycle: string = \"BET_CYCLE\";\n    static ActionMaxBet: string = \"MAX_BET\";\n    static ActionBaseCollect: string = \"BASE_COLLECT\";\n    static ActionSelectPayline: string = \"SELECT_PAYLINE_\";\n    static ActionDenomSelect: string = \"DENOM_SELECT\";\n    static ActionDenomSelectValue: string = \"DENOM_SELECT_VALUE_\";\n    static ActionCoinCountSelect: string = \"COIN_COUNT_SELECT\";\n    static ActionCoinCountSelectValue: string = \"COIN_COUNT_SELECT_VALUE_\";\n    static ActionBetSelect: string = \"BET_SELECT\";\n    static ActionBetSelectValue: string = \"BET_SELECT_VALUE_\";\n\n    static ActionFsConfiguratorTreasure: string = \"FS_CONFIGURATOR_TREASURE_\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/BaseActions.ts\n **/","import { Logger, lodash } from \"neo-common\";\nimport { Platforms } from \"neo-games\";\nimport { HtmlButtonElement } from \"./Elements/HtmlButtonElement\";\nimport { HtmlElement } from \"./Elements/HtmlElement\";\nimport { UserAction } from \"./UserAction\";\nimport { HtmlContainerElement } from \"./Elements/HtmlContainerElement\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { GameManager } from \"../Managers/GameManager\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { BetManager } from \"../Managers/BetManager\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\nimport { GameApp } from \"../GameApp\";\nimport { BaseActions } from \"../Channels/Common/Actions/BaseActions\";\nimport { HtmlSoundContainerElement } from \"./Custom/HtmlSoundContainerElement\";\nimport { HtmlHideButtonElement } from \"./Custom/HtmlHideButtonElement\";\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\nimport { DataManager } from \"../Managers/DataManager\";\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\nimport { QuickspinDialog } from \"../Channels/Common/Dialogs/QuickspinDialog\";\nimport { Paytable } from \"../Channels/Common/Paytable/Paytable\";\nimport { BetHigherThanMinDialog } from \"../Channels/Common/Dialogs/BetHigherThanMinDialog\";\n\n/**\n * Controller for html elements. Handle action dispatched from html elements.\n * @class HtmlController\n */\nexport class HtmlController {\n    static Configurations = { SHOW_BONUS_BALANCE: false };\n    static ActionElements: { [action: string]: Array<HtmlButtonElement> } = {};\n    static UiActionElements: { [action: string]: Array<HtmlButtonElement> } = {};\n    static UiDispatchElements: { [action: string]: Array<HtmlContainerElement> } = {};\n    static UiActionDispatchElements: { [action: string]: Array<HtmlContainerElement> } = {};\n    static ActionsHoldersElements: { [action: string]: Array<HtmlContainerElement> } = {};\n    static ContainerElementsById: { [id: string]: HtmlContainerElement } = {};\n    static DataElements: { [data: string]: Array<HtmlElement> } = {};\n    static RidElements: Array<HtmlElement> = [];\n    static DisabledClass: string = \"_disabled\";\n\n    public static SoundContainer: HtmlSoundContainerElement;\n    public static HideButtons: HtmlHideButtonElement[] = [];\n    public static dispatchActionAllowed: boolean = true;\n\n    /**\n     * Register HtmlButtonElement and pair him with action.\n     * @method registerActionElement\n     * @param action string name of action\n     * @param element HtmlButtonElement\n     * @return void\n     */\n    static registerActionElement(action: string, element: HtmlButtonElement): void {\n        if (DEBUG) {\n            this.log(\"registerActionElement action: \" + action);\n        }\n\n        if (this.ActionElements[action] == null) {\n            this.ActionElements[action] = [];\n        }\n        this.ActionElements[action].push(element);\n    }\n\n    /**\n     * Register HtmlButtonElement and pair him with ui action.\n     * @method registerUiActionElement\n     * @param action string name of action\n     * @param element HtmlButtonElement\n     * @return void\n     */\n    static registerUiActionElement(action: string, element: HtmlButtonElement): void {\n        if (DEBUG) {\n            this.log(\"registerUiActionElement action: \" + action);\n        }\n\n        if (this.UiActionElements[action] == null) {\n            this.UiActionElements[action] = [];\n        }\n        this.UiActionElements[action].push(element);\n    }\n\n    /**\n     * Register HtmlContainerElement and pair him with ui disptacher.\n     * @method registerUiActionElement\n     * @param action string name of action\n     * @param element HtmlButtonElement\n     * @return void\n     */\n    static registerUiDispatchElement(action: string, element: HtmlContainerElement): void {\n        if (DEBUG) {\n            this.log(\"registerUiDispatchElement action: \" + action);\n        }\n\n        if (this.UiDispatchElements[action] == null) {\n            this.UiDispatchElements[action] = [];\n        }\n        this.UiDispatchElements[action].push(element);\n    }\n\n    static registerActionsHoldersElement(action: string, element: HtmlContainerElement): void {\n        if (DEBUG) {\n            this.log(\"registerActionsHoldersElement action: \" + action);\n        }\n\n        if (this.ActionsHoldersElements[action] == null) {\n            this.ActionsHoldersElements[action] = [];\n        }\n        this.ActionsHoldersElements[action].push(element);\n    }\n\n    /**\n     * Register HtmlContainerElement and pair him with ui action disptacher.\n     * @method registerUiActionElement\n     * @param action string name of action\n     * @param element HtmlButtonElement\n     * @return void\n     */\n    static registerUiActionDispatchElement(action: string, element: HtmlContainerElement): void {\n        if (DEBUG) {\n            this.log(\"registerUiDispatchElement action: \" + action);\n        }\n\n        if (this.UiActionDispatchElements[action] == null) {\n            this.UiActionDispatchElements[action] = [];\n        }\n        this.UiActionDispatchElements[action].push(element);\n    }\n\n    /**\n     * Register HtmlElement and pair him with some data id.\n     * @method registerDataElement\n     * @param data string name of data id\n     * @param element HtmlElement\n     * @return void\n     */\n    static registerDataElement(data: string, element: HtmlElement): void {\n        if (DEBUG) {\n            this.log(\"registerDataElement data: \" + data);\n        }\n\n        if (this.DataElements[data] == null) {\n            this.DataElements[data] = [];\n        }\n        this.DataElements[data].push(element);\n    }\n\n    /**\n     * Dispatch action to controller.\n     * @method dispatchAction\n     * @param action string name of action\n     * @return void\n     */\n    static dispatchAction(action: string): void {\n        if (DEBUG) {\n            this.log(\"dispatchAction action: \" + action);\n        }\n\n        if (!HtmlController.dispatchActionAllowed) {\n            return;\n        }\n\n        let updateUI: boolean = true;\n        if (action === BaseActions.ActionDenomSelect) {\n            updateUI = false;\n            if (BetManager.CoinCountContainer != null) {\n                BetManager.CoinCountContainer.disable();\n            }\n            if (BetManager.BetContainer != null) {\n                BetManager.BetContainer.disable();\n            }\n            if (HtmlController.SoundContainer != null) {\n                HtmlController.SoundContainer.disable();\n            }\n            PlayList.play(\"SND_Click\");\n        }\n\n        if (action === BaseActions.ActionCoinCountSelect) {\n            updateUI = false;\n            if (BetManager.DenomContainer != null) {\n                BetManager.DenomContainer.disable();\n            }\n            if (BetManager.BetContainer != null) {\n                BetManager.BetContainer.disable();\n            }\n            if (HtmlController.SoundContainer != null) {\n                HtmlController.SoundContainer.disable();\n            }\n            PlayList.play(\"SND_Click\");\n        }\n\n        if (action === BaseActions.ActionBetSelect) {\n            updateUI = false;\n            if (BetManager.DenomContainer != null) {\n                BetManager.DenomContainer.disable();\n            }\n            if (BetManager.BetContainer != null) {\n                BetManager.BetContainer.disable();\n            }\n            if (HtmlController.SoundContainer != null) {\n                HtmlController.SoundContainer.disable();\n            }\n            PlayList.play(\"SND_Click\");\n        }\n\n        if (AppContext.gameDefinition.ClientHostType === \"Mobile\") {\n            switch (action) {\n                case BaseActions.ActionBetPlus:\n                    updateUI = false;\n                    break;\n                case BaseActions.ActionBetMinus:\n                    updateUI = false;\n                    break;\n            }\n        }\n\n        if (updateUI) {\n            this.dispatchUiAction(\"\");\n        }\n        ModuleManager.dispatchAction(action);\n    }\n\n    static setSound(level: number): void {\n        if (HtmlController.SoundContainer != null) {\n            HtmlController.SoundContainer.setLevel(level);\n            return;\n        }\n\n        for (var i: number = 0; i < HtmlController.UiActionElements[UserAction.ActionToggleSound].length; i++) {\n            var ele: HtmlButtonElement = HtmlController.UiActionElements[UserAction.ActionToggleSound][i];\n            if (ele.instance != null) {\n                ele.instance.classList.remove(\"off\");\n                ele.instance.classList.remove(\"on1\");\n                ele.instance.classList.remove(\"on2\");\n                ele.instance.classList.remove(\"on3\");\n\n                switch (level) {\n                    case 0:\n                        ele.instance.classList.add(\"off\");\n                        PIXI.sound.volumeAll = 0;\n                        Platforms.Platforms.setVolume(0);\n                        break;\n                    case 1:\n                        ele.instance.classList.add(\"on1\");\n                        PIXI.sound.volumeAll = 0.25;\n                        Platforms.Platforms.setVolume(1);\n                        break;\n                    case 2:\n                        ele.instance.classList.add(\"on2\");\n                        PIXI.sound.volumeAll = 0.5;\n                        Platforms.Platforms.setVolume(2);\n                        break;\n                    case 3:\n                    default:\n                        ele.instance.classList.add(\"on3\");\n                        PIXI.sound.volumeAll = 1;\n                        Platforms.Platforms.setVolume(3);\n                        break;\n                }\n            }\n        }\n    }\n\n    /**\n     * Dispatch ui action.\n     * @method dispatchUiAction\n     * @param action string name of action\n     * @return void\n     */\n    static dispatchUiAction(action: string): void {\n        if (DEBUG) {\n            this.log(\"dispatchUiAction action: \" + action);\n        }\n\n        if (!HtmlController.dispatchActionAllowed) {\n            return;\n        }\n\n        BetHigherThanMinDialog.closeDialog();\n\n        Jackpot.closeAllHistoryDialogs();\n        Platforms.Platforms.gameCloseMenu();\n\n        if (action === \"EMPTY\") {\n            PlayList.play(\"SND_Click\");\n            action = \"\";\n        }\n\n        var playSound: boolean = true;\n\n        if (HtmlController.ContainerElementsById[\"autoplaySelector\"]) {\n            var autoplaySelector: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplaySelector\"];\n            if (\n                autoplaySelector != null &&\n                autoplaySelector.instance != null &&\n                !autoplaySelector.instance.classList.contains(\"_disabled\")\n            ) {\n                if (autoplaySelector.recalculateHeight) {\n                    autoplaySelector.instance.removeAttribute(\"style\");\n                }\n                autoplaySelector.instance.classList.add(\"_disabled\");\n            }\n        }\n\n        if (HtmlController.ContainerElementsById[\"autoplayDialog\"]) {\n            var autoplayDialog: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplayDialog\"];\n            if (\n                autoplayDialog != null &&\n                autoplayDialog.instance != null &&\n                !autoplayDialog.instance.classList.contains(\"_disabled\")\n            ) {\n                autoplayDialog.instance.classList.add(\"_disabled\");\n            }\n        }\n\n        if (BetManager.DenomContainer != null) {\n            BetManager.DenomContainer.disable();\n        }\n\n        if (BetManager.CoinCountContainer != null) {\n            BetManager.CoinCountContainer.disable();\n        }\n\n        if (action !== UserAction.ActionExit && DataManager.SimilarGames != null) {\n            DataManager.SimilarGames.disable();\n        }\n\n        switch (action) {\n            case \"\":\n                Paytable.clearListeners();\n                this.disableAllUiDispatchers(action);\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                playSound = false;\n                break;\n            case UserAction.ActionHelpTerminal:\n                ModuleManager.cycleHelp();\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionGameRoundReport:\n                HtmlController.dispatchUiAction(\"\");\n\n                GameApp.openGameRoundHistory(true);\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionExit:\n                this.disableAllUiDispatchers(action);\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                if (DataManager.SimilarGames != null && DataManager.SimilarGames.enabled) {\n                    if (DataManager.SimilarGames.open()) {\n                    } else {\n                        this.dispatchUiAction(\"\");\n                    }\n                    if (HtmlController.SoundContainer != null) {\n                        HtmlController.SoundContainer.disable();\n                    }\n                } else {\n                    Platforms.Platforms.exitHandler = \"exitBtn\";\n                    GameApp.exit();\n                }\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionExit + \"2\":\n                Platforms.Platforms.exitHandler = \"similarGamesExitBtn\";\n                GameApp.exit();\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionToggleSound:\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.toggle();\n                } else {\n                    if (HtmlController.UiActionElements[UserAction.ActionToggleSound] != null) {\n                        for (\n                            var i: number = 0;\n                            i < HtmlController.UiActionElements[UserAction.ActionToggleSound].length;\n                            i++\n                        ) {\n                            var ele: HtmlButtonElement =\n                                HtmlController.UiActionElements[UserAction.ActionToggleSound][i];\n                            if (ele.instance != null) {\n                                if (ele.instance.classList.contains(\"off\")) {\n                                    ele.instance.classList.remove(\"off\");\n                                    ele.instance.classList.add(\"on3\");\n                                    PIXI.sound.volumeAll = 1;\n                                    AppContext.current.setVolume(3);\n                                    Platforms.Platforms.setVolume(3);\n                                } else if (ele.instance.classList.contains(\"on1\")) {\n                                    ele.instance.classList.remove(\"on1\");\n                                    ele.instance.classList.add(\"off\");\n                                    playSound = false;\n                                    PIXI.sound.volumeAll = 0;\n                                    AppContext.current.setVolume(0);\n                                    Platforms.Platforms.setVolume(0);\n                                } else if (ele.instance.classList.contains(\"on2\")) {\n                                    ele.instance.classList.remove(\"on2\");\n                                    ele.instance.classList.add(\"on1\");\n                                    PIXI.sound.volumeAll = 0.25;\n                                    AppContext.current.setVolume(1);\n                                    Platforms.Platforms.setVolume(1);\n                                } else if (ele.instance.classList.contains(\"on3\")) {\n                                    ele.instance.classList.remove(\"on3\");\n                                    ele.instance.classList.add(\"on2\");\n                                    PIXI.sound.volumeAll = 0.5;\n                                    AppContext.current.setVolume(2);\n                                    Platforms.Platforms.setVolume(2);\n                                }\n                            }\n                        }\n                    }\n                }\n                break;\n            case UserAction.ActionToggleBet:\n                this.disableAllUiDispatchers(action);\n                this.toggleUiAction(action, \"toggle\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                break;\n            case UserAction.ActionTogglePaytable:\n                this.toggleUiAction(action, \"toggle\");\n                this.toggleUiAction(UserAction.ActionHelpOn, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                Paytable.instance.updateDataValues();\n                break;\n            case UserAction.ActionToggleMenu:\n                this.toggleUiAction(action, \"toggle\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"remove\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionToggleMenuBack:\n                this.toggleUiAction(UserAction.ActionToggleMenu, \"toggle\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionHelpOn:\n                this.disableAllUiDispatchers(action);\n                this.toggleUiAction(action, \"toggle\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                Platforms.Platforms.gotoHelp();\n                break;\n            case UserAction.ActionHelpOff:\n                this.disableAllUiDispatchers(action);\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionPaytableOn:\n                this.disableAllUiDispatchers(action);\n                this.toggleUiAction(action, \"toggle\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"remove\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                Platforms.Platforms.gotoPaytable();\n                Paytable.instance.updateDataValues();\n                break;\n            case UserAction.ActionPaytableOff:\n                Paytable.clearListeners();\n                this.disableAllUiDispatchers(action);\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionSettingsOn:\n                this.disableAllUiDispatchers(action);\n                this.toggleUiAction(action, \"toggle\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                Platforms.Platforms.gotoSettings();\n                break;\n            case UserAction.ActionSettingsOff:\n                this.disableAllUiDispatchers(action);\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\n                if (HtmlController.SoundContainer != null) {\n                    HtmlController.SoundContainer.disable();\n                }\n                break;\n            case UserAction.ActionQuickspinDialogOff:\n                QuickspinDialog.closeDialog();\n                break;\n            case UserAction.ActionQuickspinToggle:\n                DataManager.quickspinSet();\n                break;\n            case UserAction.ActionVibrationToggle:\n                DataManager.vibrationSet();\n                break;\n            case UserAction.ActionSwitchControls:\n                let body = document.body;\n                if (body.classList.contains(\"reverse\")) {\n                    body.classList.remove(\"reverse\");\n                } else {\n                    body.classList.add(\"reverse\");\n                }\n                break;\n            default:\n                if (DEBUG) {\n                    this.log(\"No element with ui disptacher: \" + action);\n                }\n        }\n\n        if (playSound) {\n            PlayList.play(\"SND_Click\");\n        }\n    }\n\n    /**\n     * Disable all ui dispatcher at once.\n     * @method disableAllUiDispatchers\n     * @param action string name of action\n     * @return void\n     */\n    private static disableAllUiDispatchers(action: string): void {\n        for (var key in this.UiDispatchElements) {\n            for (var i: number = 0; i < this.UiDispatchElements[key].length; i++) {\n                if (\n                    this.UiDispatchElements[key][i].instance.classList.contains(HtmlController.DisabledClass) ===\n                        false &&\n                    key != action\n                ) {\n                    this.UiDispatchElements[key][i].instance.classList.add(HtmlController.DisabledClass);\n                    if (this.UiActionDispatchElements[key] != null) {\n                        for (var j: number = 0; j < this.UiActionDispatchElements[key].length; j++) {\n                            this.UiActionDispatchElements[key][j].instance.classList.toggle(\n                                HtmlController.DisabledClass,\n                            );\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Toggle disable for specific UI dispatcher.\n     * @method changeUiAcionDispatchers\n     * @param action string name of action\n     * @param type string\n     * @return void\n     */\n    private static changeUiAcionDispatchers(action: string, type: string): void {\n        if (this.UiActionDispatchElements[action] != null) {\n            for (var i: number = 0; i < this.UiActionDispatchElements[action].length; i++) {\n                if (type === \"add\") {\n                    if (\n                        this.UiActionDispatchElements[action][i].instance.classList.contains(\n                            HtmlController.DisabledClass,\n                        ) === false\n                    ) {\n                        this.UiActionDispatchElements[action][i].instance.classList.add(HtmlController.DisabledClass);\n                    }\n                } else if (type === \"remove\") {\n                    this.UiActionDispatchElements[action][i].instance.classList.remove(HtmlController.DisabledClass);\n                } else {\n                    this.UiActionDispatchElements[action][i].instance.classList.toggle(HtmlController.DisabledClass);\n                }\n            }\n        }\n    }\n\n    /**\n     * Toggle disable for specific UI action.\n     * @method toggleUiAction\n     * @param action string name of action\n     * @param type string\n     * @return void\n     */\n    private static toggleUiAction(action: string, type: string): void {\n        if (this.UiDispatchElements[action] != null) {\n            for (var i: number = 0; i < this.UiDispatchElements[action].length; i++) {\n                if (type === \"add\") {\n                    if (\n                        this.UiDispatchElements[action][i].instance.classList.contains(HtmlController.DisabledClass) ===\n                        false\n                    ) {\n                        this.UiDispatchElements[action][i].instance.classList.add(HtmlController.DisabledClass);\n                    }\n                } else if (type === \"remove\") {\n                    this.UiDispatchElements[action][i].instance.classList.remove(HtmlController.DisabledClass);\n                } else {\n                    this.UiDispatchElements[action][i].instance.classList.toggle(HtmlController.DisabledClass);\n                }\n            }\n        }\n    }\n\n    /**\n     * Update all elements with one data id.\n     * @method updateDataElement\n     * @param data string data id\n     * @param value string value for this data id\n     * @return void\n     */\n    static updateDataElement(data: string, value: string): void {\n        if (this.DataElements[data] != null) {\n            for (var i: number = 0; i < this.DataElements[data].length; i++) {\n                HtmlController.currencyNoZero(data, value);\n                this.DataElements[data][i].setText(value);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"No element with data id: \" + data);\n            }\n        }\n    }\n\n    /**\n     * Update all elements which has set some data id.\n     * @method updateDataElements\n     * @param gameData Object\n     * @return void\n     */\n    static updateDataElements(gameData: { [data: string]: string }): void {\n        if (DEBUG) {\n            this.log(\"udpateDataElements\");\n        }\n\n        for (var key in gameData) {\n            if (this.DataElements[key] != null) {\n                for (var i: number = 0; i < this.DataElements[key].length; i++) {\n                    HtmlController.currencyNoZero(key, gameData[key]);\n                    this.DataElements[key][i].setText(gameData[key]);\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"No element with data id: \" + key);\n                }\n            }\n        }\n    }\n\n    static currencyNoZero(data: string, value: string): void {\n        let parsedValue: number;\n\n        if (value === \"\") {\n            parsedValue = 0;\n        } else {\n            parsedValue = parseFloat(value);\n        }\n\n        if (data === GameData.DataTotalWin) {\n            if (parsedValue === 0) {\n                HtmlController.toggleElementsByClass(\"currencyNoZero\");\n            } else {\n                HtmlController.toggleElementsByClass(\"currencyNoZero\", true);\n            }\n        } else if (data === GameData.DataGambleColorWin) {\n            if (parsedValue === 0) {\n                HtmlController.toggleElementsByClass(\"gambleCurrencyNoZero\");\n            } else {\n                HtmlController.toggleElementsByClass(\"gambleCurrencyNoZero\", true);\n            }\n        }\n    }\n\n    static toggleElementsByClass(cls: string, show: boolean = false): void {\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\n        for (var i: number = 0; i < elements.length; i++) {\n            var element: HTMLElement = <HTMLElement>elements[i];\n            if (element != null) {\n                if (show) {\n                    element.style.display = \"\";\n                } else {\n                    element.style.display = \"none\";\n                }\n            }\n        }\n    }\n\n    /**\n     * Update all elements which has set some action id.\n     * @method updateActionElements\n     * @param actionData Object\n     * @return void\n     */\n    static updateActionElements(actionData: Object): void {\n        if (DEBUG) {\n            this.log(\"updateActionElements\");\n        }\n\n        for (var key in actionData) {\n            if (this.ActionElements[key] != null) {\n                var i: number;\n                for (i = 0; i < this.ActionElements[key].length; i++) {\n                    this.ActionElements[key][i].changeState(actionData[key]);\n                }\n\n                if (this.ActionsHoldersElements[key] != null) {\n                    for (i = 0; i < this.ActionsHoldersElements[key].length; i++) {\n                        this.ActionsHoldersElements[key][i].changeState(actionData[key]);\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    var keys = lodash.keys(this.ActionElements).join(\";\");\n\n                    this.log(\"No element with data id: \" + key + \", current keys: \" + keys);\n                }\n            }\n        }\n    }\n\n    static updateActionElement(key: string, value: boolean): void {\n        var i: number;\n        if (this.ActionElements[key] != null) {\n            for (i = 0; i < this.ActionElements[key].length; i++) {\n                this.ActionElements[key][i].changeState(value);\n            }\n        }\n\n        if (this.ActionsHoldersElements[key] != null) {\n            for (i = 0; i < this.ActionsHoldersElements[key].length; i++) {\n                this.ActionsHoldersElements[key][i].changeState(value);\n            }\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param data any\n     * @return void\n     */\n    private static log(data: any): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"HtmlController\", data);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/HtmlController.ts\n **/","/**\n * Static variables of all UI action ids.\n * This variables can be used in xml as UiAction=\"{id}\".\n * @class UserAction\n */\nexport class UserAction {\n    // sound\n    static ActionToggleSound: string = \"TOGGLE_SOUND\";\n\n    // exit\n    static ActionExit: string = \"EXIT\";\n\n    // paytable\n    static ActionTogglePaytable: string = \"TOGGLE_PAYTABLE\";\n    static ActionPaytableOn: string = \"PAYTABLE_ON\";\n    static ActionPaytableOff: string = \"PAYTABLE_OFF\";\n\n    // menu\n    static ActionMenuOn: string = \"MENU_ON\";\n    static ActionMenuOff: string = \"MENU_OFF\";\n    static ActionToggleMenu: string = \"TOGGLE_MENU\";\n    static ActionToggleMenuBack: string = \"TOGGLE_MENU_BACK\";\n    static ActionSwitchControls: string = \"SWITCH_CONTROLS\";\n\n    // help\n    static ActionHelpOn: string = \"HELP_ON\";\n    static ActionHelpOff: string = \"HELP_OFF\";\n    static ActionHelpTerminal: string = \"TERMINAL_HELP_CYCLE\";\n\n    // bet\n    static ActionToggleBet: string = \"TOGGLE_BET\";\n\n    // settings\n    static ActionSettingsOn: string = \"SETTINGS_ON\";\n    static ActionSettingsOff: string = \"SETTINGS_OFF\";\n\n    // quickspin\n    static ActionQuickspinDialogOff: string = \"QUICKSPIN_DIALOG_OFF\";\n    static ActionQuickspinToggle: string = \"QUICKSPIN_TOGGLE\";\n\n    //vibration\n    static ActionVibrationToggle: string = \"VIBRATION_TOGGLE\";\n\n    static ActionGameRoundReport: string = \"GAME_ROUND_REPORT\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/UserAction.ts\n **/","import { FrameTimerEventEmitter, FrameTimerEvents, CreateFrameTimer } from \"../../../Utils/FrameTimer\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { StageController } from \"../../../Components/StageController\";\nimport { FrameTimerPool } from \"../../../Utils/FrameTimerPool\";\nimport { TweenMax } from \"gsap\";\nimport { PageVisibilityHandler } from \"../../../CustomComponents/PageVisibilityHandler\";\nimport { Platforms } from \"neo-games\";\nimport { DataManager } from \"../../../Managers/DataManager\";\n\nexport class QuickspinDialog {\n    private static _opened: boolean = false;\n    private static _wasOpened: boolean = false;\n    private static _container: HTMLElement;\n\n    static openDialog(): void {\n        QuickspinDialog.initializeDialog();\n\n        if (!QuickspinDialog._opened && !QuickspinDialog._wasOpened) {\n            if (QuickspinDialog._container != null && QuickspinDialog._container.classList.contains(\"_disabled\")) {\n                QuickspinDialog._container.classList.remove(\"_disabled\");\n            }\n\n            PIXI.sound.pauseAll();\n            StageController.pauseAnimations();\n            FrameTimerPool.pause();\n            TweenMax.pauseAll();\n\n            PageVisibilityHandler.Enabled = false;\n            QuickspinDialog._opened = true;\n            QuickspinDialog._wasOpened = true;\n\n            Platforms.Platforms.dialogOpened(\"quickspin\", true);\n        }\n    }\n\n    static closeDialog(): void {\n        if (QuickspinDialog._opened) {\n            QuickspinDialog.initializeDialog();\n            if (QuickspinDialog._container != null && !QuickspinDialog._container.classList.contains(\"_disabled\")) {\n                QuickspinDialog._container.classList.add(\"_disabled\");\n            }\n\n            PIXI.sound.resumeAll();\n            StageController.resumeAnimations();\n            FrameTimerPool.unpause();\n            TweenMax.resumeAll();\n\n            PageVisibilityHandler.Enabled = true;\n            QuickspinDialog._opened = false;\n\n            Platforms.Platforms.quickSpinDialog(DataManager.quickspinEnabled());\n            Platforms.Platforms.dialogOpened(\"quickspin\", false);\n        }\n    }\n\n    private static initializeDialog(): void {\n        if (QuickspinDialog._container == null) {\n            QuickspinDialog._container = document.getElementById(\"quickspinDialog\");\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/QuickspinDialog.ts\n **/","import { FrameTimerPool } from \"../Utils/FrameTimerPool\";\nimport { TweenMax } from \"gsap\";\n\nexport class PageVisibilityHandler {\n    public static Enabled: boolean = true;\n\n    private static Timer: number;\n\n    public static handle(): void {\n        let hidden: string;\n        let visibilityChange: string;\n        if (typeof document.hidden !== \"undefined\") {\n            hidden = \"hidden\";\n            visibilityChange = \"visibilitychange\";\n        } else if (typeof document.mozHidden !== \"undefined\") {\n            hidden = \"mozHidden\";\n            visibilityChange = \"mozvisibilitychange\";\n        } else if (typeof document.msHidden !== \"undefined\") {\n            hidden = \"msHidden\";\n            visibilityChange = \"msvisibilitychange\";\n        } else if (typeof document.webkitHidden !== \"undefined\") {\n            hidden = \"webkitHidden\";\n            visibilityChange = \"webkitvisibilitychange\";\n        } else {\n            return;\n        }\n\n        document.addEventListener(\n            visibilityChange,\n            (e: any) => {\n                if (PageVisibilityHandler.Enabled) {\n                    let isIos = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\n\n                    if (document[hidden]) {\n                        PageVisibilityHandler.pauseAll();\n                    } else {\n                        if (isIos) {\n                            clearTimeout(PageVisibilityHandler.Timer);\n                            PageVisibilityHandler.Timer = setTimeout(() => {\n                                PageVisibilityHandler.resumeAll();\n                            }, 200);\n                        } else {\n                            PageVisibilityHandler.resumeAll();\n                        }\n                    }\n                }\n            },\n            false,\n        );\n\n        // https://github.com/pixijs/sound/issues/126#issuecomment-1460499693\n        window.addEventListener(\"focus\", () => {\n            let isIos = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\n            if (isIos) {\n                const context: any = PIXI.sound.context.audioContext;\n\n                if (context.state === \"suspended\" || context.state === \"interrupted\") {\n                    context.resume();\n                }\n            }\n        });\n    }\n\n    public static pauseAll(): void {\n        TweenMax.pauseAll();\n        FrameTimerPool.pause();\n        PIXI.sound.pauseAll();\n    }\n\n    public static resumeAll(): void {\n        TweenMax.resumeAll();\n        FrameTimerPool.unpause();\n        PIXI.sound.resumeAll();\n        PIXI.sound.unmuteAll();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PageVisibilityHandler.ts\n **/","import { Configuration } from \"../../../Components/Configuration\";\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { NumberUtils } from \"neo-common\";\nimport { BetManager } from \"../../../Managers/BetManager\";\nimport { Languages } from \"../../../Utils/Languages\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { GameData } from \"../Datas/GameData\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { UserAction } from \"../../../HTMLComponents/UserAction\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\n\nexport class Paytable {\n    static Configurations = {\n        PAYTABLE_COUNT_PREFIX: \"\",\n        PAYTABLE_COUNT_POSTFIX: \"\",\n        PAYTABLE_VALUE_PREFIX: \"\",\n        PAYTABLE_VALUE_POSTFIX: \"x\",\n    };\n\n    public static instance: Paytable;\n\n    private static hasBeenDisplayed: boolean = false;\n    private static payoutPage: number = -1;\n\n    private _pages: HTMLCollectionOf<Element>;\n    private _paginations: HTMLCollectionOf<Element>;\n    private _defaultFontSize: number;\n    private _defaultWidth: number;\n    private _maxBet: number;\n\n    constructor() {\n        Paytable.instance = this;\n    }\n\n    initialize(): void {\n        let prewPageButton: HTMLElement = document.getElementById(\"paytableButtonLeft\");\n        let nextPageButton: HTMLElement = document.getElementById(\"paytableButtonRight\");\n\n        if (prewPageButton != null) {\n            prewPageButton.onclick = this.prewPage.bind(this);\n        }\n\n        if (nextPageButton != null) {\n            nextPageButton.onclick = this.nextPage.bind(this);\n        }\n\n        this._pages = document.getElementsByClassName(\"paytablePage\");\n        this._paginations = document.getElementsByClassName(\"paytablePageNumber\");\n\n        this.updateDataValues();\n    }\n\n    public updateDataValues(): void {\n        var config: Element = Configuration.Configurations[\"PaytableConfiguration\"];\n\n        if (config != null) {\n            var data = {};\n            var next: Element = config.firstElementChild;\n            var maxValue = 0;\n            while (next != null) {\n                if (next.nodeName == \"Pages\") {\n                    if (next.hasAttribute(\"Payouts\")) {\n                        Paytable.payoutPage = parseInt(next.getAttribute(\"Payouts\")) - 1;\n                    }\n                } else if (next.hasAttribute(\"Symbol\")) {\n                    var id: string = next.getAttribute(\"Symbol\");\n                    var attrCounts: string = null;\n                    var attrValues: string = null;\n\n                    var i: number;\n                    if (next.hasAttribute(\"Counts\")) {\n                        attrCounts = next.getAttribute(\"Counts\");\n                        var counts: Array<string> = next.getAttribute(\"Counts\").split(\";\");\n                        for (i = 0; i < counts.length; i++) {\n                            data[\"PTB_SYMBOL_\" + id + \"_COUNT_\" + (i + 1)] =\n                                Paytable.Configurations.PAYTABLE_COUNT_PREFIX +\n                                counts[i] +\n                                Paytable.Configurations.PAYTABLE_COUNT_POSTFIX;\n                        }\n                    }\n\n                    if (next.hasAttribute(\"Values\")) {\n                        attrValues = next.getAttribute(\"Values\");\n                        var values: Array<string> = next.getAttribute(\"Values\").split(\";\");\n                        for (i = 0; i < values.length; i++) {\n                            if (parseInt(values[i]) > maxValue) {\n                                maxValue = parseInt(values[i]);\n                            }\n                            data[\"PTB_SYMBOL_\" + id + \"_VALUE_\" + (i + 1)] = this.getPaytableValue(values[i]);\n                        }\n                    }\n                }\n                next = next.nextElementSibling;\n            }\n\n            if (AppContext != null && AppContext.gameConfiguration.PaytableUseValue) {\n                let elements = document.getElementsByClassName(\"ptbTotalBetMultiplierDisplay\");\n                for (let i = 0; i < elements.length; i++) {\n                    elements[i].classList.add(\"_hidden\");\n                }\n\n                elements = document.getElementsByClassName(\"ptbTotalBetMultiplier\");\n                for (let i = 0; i < elements.length; i++) {\n                    elements[i].classList.add(\"_invisible\");\n                }\n            }\n\n            if (data != null) {\n                this.updateFontSize(maxValue, data);\n                HtmlController.updateDataElements(data);\n            }\n\n            this.customContent();\n        }\n    }\n\n    private getPaytableValue(value: string, valueSepratator: string = \"-\"): string {\n        const valueArray = value.split(valueSepratator);\n\n        for (let i = 0; i < valueArray.length; i++) {\n            if (AppContext != null && AppContext.gameConfiguration.PaytableUseValue) {\n                valueArray[i] =\n                    Languages.formatText(Languages.FormatMoney, NumberUtils.multiply(valueArray[i], BetManager.Bet)) +\n                    \" \" +\n                    DataManager.getDataById(GameData.DataCurrency);\n            } else {\n                valueArray[i] =\n                    Paytable.Configurations.PAYTABLE_VALUE_PREFIX +\n                    valueArray[i] +\n                    Paytable.Configurations.PAYTABLE_VALUE_POSTFIX;\n            }\n        }\n\n        return valueArray.join(valueSepratator);\n    }\n\n    private updateFontSize(maxValue: number, data: Object): void {\n        if (AppContext != null && !AppContext.gameConfiguration.PaytableUseValue) {\n            return;\n        }\n\n        let elements = HtmlController.DataElements[\"PTB_SYMBOL_1_VALUE_1\"];\n        let conversionRate = 1;\n\n        if (elements != null && elements.length > 0) {\n            const element = elements[0].instance;\n            element.removeAttribute(\"style\");\n            if (this._defaultWidth == undefined) {\n                this._defaultFontSize = parseInt(window.getComputedStyle(element).fontSize);\n                const defaultWidth = window.getComputedStyle(element).width;\n                this._defaultWidth =\n                    defaultWidth.indexOf(\"%\") > -1 ? undefined : parseInt(window.getComputedStyle(element).width);\n                this._maxBet = Math.max(...BetManager.TotalBets);\n            }\n\n            element.textContent =\n                Languages.formatText(Languages.FormatMoney, NumberUtils.multiply(maxValue, BetManager.Bet)) +\n                \" \" +\n                DataManager.getDataById(GameData.DataCurrency);\n            element.style.fontSize = this._defaultFontSize + \"px\";\n            element.style.width = \"auto\";\n            element.style.whiteSpace = \"nowrap\";\n            element.offsetWidth;\n            let currentWidth = parseFloat(window.getComputedStyle(element).width);\n            conversionRate = this._defaultWidth / (currentWidth * 1.1); //1.1 is padding\n            if (isNaN(conversionRate) || conversionRate > 1) {\n                conversionRate = 1;\n            }\n            element.style.fontSize = \"\";\n            element.style.width = \"\";\n        }\n\n        let fontConversion = window[\"CHANNEL\"] == \"mobile\" ? 0.65 : 0.75;\n        let fontSize = Math.floor(this._defaultFontSize * conversionRate * fontConversion) + \"px\";\n        for (let key in data) {\n            elements = HtmlController.DataElements[key];\n\n            if (elements != null) {\n                for (let i = 0; i < elements.length; i++) {\n                    elements[i].instance.style.fontSize = fontSize;\n                }\n            }\n        }\n    }\n\n    private customContent(): void {\n        if (AppContext != null && !AppContext.gameConfiguration.PaytableUseValue) {\n            return;\n        }\n    }\n\n    private prewPage(): void {\n        let activeIndex: number = this.disableElementsAndReturnActive();\n        if (this._pages != null) {\n            if (activeIndex === 0) {\n                this._pages[this._pages.length - 1].classList.remove(\"_disabled\");\n                this._pages[this._pages.length - 1].classList.add(\"_active\");\n            } else {\n                this._pages[activeIndex - 1].classList.remove(\"_disabled\");\n                this._pages[activeIndex - 1].classList.add(\"_active\");\n            }\n            PlayList.play(\"SND_Click\");\n        }\n        if (this._paginations != null) {\n            if (activeIndex === 0) {\n                this._paginations[this._paginations.length - 1].classList.remove(\"_disabled\");\n                this._paginations[this._paginations.length - 1].classList.add(\"_active\");\n            } else {\n                this._paginations[activeIndex - 1].classList.remove(\"_disabled\");\n                this._paginations[activeIndex - 1].classList.add(\"_active\");\n            }\n        }\n    }\n\n    private nextPage(): void {\n        let activeIndex: number = this.disableElementsAndReturnActive();\n        if (this._pages != null) {\n            if (activeIndex === this._pages.length - 1) {\n                this._pages[0].classList.remove(\"_disabled\");\n                this._pages[0].classList.add(\"_active\");\n            } else {\n                this._pages[activeIndex + 1].classList.remove(\"_disabled\");\n                this._pages[activeIndex + 1].classList.add(\"_active\");\n            }\n            PlayList.play(\"SND_Click\");\n        }\n        if (this._paginations != null) {\n            if (activeIndex === this._paginations.length - 1) {\n                this._paginations[0].classList.remove(\"_disabled\");\n                this._paginations[0].classList.add(\"_active\");\n            } else {\n                this._paginations[activeIndex + 1].classList.remove(\"_disabled\");\n                this._paginations[activeIndex + 1].classList.add(\"_active\");\n            }\n        }\n    }\n\n    private setPage(page: number): void {\n        if (page < 0 || page > this._pages.length - 1) {\n            return;\n        }\n\n        this.disableElementsAndReturnActive();\n        if (this._pages != null) {\n            this._pages[page].classList.remove(\"_disabled\");\n            this._pages[page].classList.add(\"_active\");\n            (this._pages[page] as HTMLElement).scrollIntoView();\n        }\n\n        if (this._paginations != null) {\n            this._paginations[page].classList.remove(\"_disabled\");\n            this._paginations[page].classList.add(\"_active\");\n        }\n    }\n\n    private disableElementsAndReturnActive(): number {\n        let activeIndex: number = 0;\n        for (var i: number = 0; i < this._pages.length; i++) {\n            var element: HTMLElement = <HTMLElement>this._pages[i];\n            if (element != null) {\n                if (!element.classList.contains(\"_disabled\")) {\n                    element.classList.add(\"_disabled\");\n                }\n                if (element.classList.contains(\"_active\")) {\n                    activeIndex = i;\n                    element.classList.remove(\"_active\");\n                }\n            }\n        }\n\n        for (var i: number = 0; i < this._paginations.length; i++) {\n            var element: HTMLElement = <HTMLElement>this._paginations[i];\n            if (element != null) {\n                if (!element.classList.contains(\"_disabled\")) {\n                    element.classList.add(\"_disabled\");\n                }\n                if (element.classList.contains(\"_active\")) {\n                    element.classList.remove(\"_active\");\n                }\n            }\n        }\n\n        return activeIndex;\n    }\n\n    public static openAtStart(newGameRound: boolean = false): void {\n        if (Paytable.shouldOpen(newGameRound)) {\n            Paytable.show();\n        }\n    }\n\n    public static show(): void {\n        Paytable.hasBeenDisplayed = true;\n\n        let dipatchElementId = UserAction.ActionPaytableOn;\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\n\n            if (dipatchElement != null) {\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOn);\n                }\n            }\n        }\n\n        Paytable.openPayoutPage();\n        window.addEventListener(\"resize\", Paytable.openPayoutPage);\n    }\n\n    private static openPayoutPage(): void {\n        Paytable.instance.setPage(Paytable.payoutPage);\n    }\n\n    public static clearListeners(): void {\n        window.removeEventListener(\"resize\", Paytable.openPayoutPage);\n    }\n\n    public static shouldOpen(newGameRound: boolean = false, isSpin: boolean = false): boolean {\n        if (!AppContext || !AppContext.gameConfiguration.ShowPaytableAtStart) {\n            return false;\n        }\n\n        //if prepareNewGameRound was called before GameManager.showGame, ignore hasBeenDisplayed\n        if (Paytable.hasBeenDisplayed && newGameRound) {\n            return false;\n        }\n\n        if (ModuleManager.gambleActive()) {\n            return false;\n        }\n\n        if (!DataManager.GameRoundClosed && !isSpin) {\n            return false;\n        }\n\n        if (FreeRoundBonus.isLastFrb) {\n            return false;\n        }\n\n        return true;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Paytable/Paytable.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"./ComponentTypes\";\n\n/**\n * Configuration hold elements configurations from xml by ID.\n * @class Configuration\n */\n@engineComponent(ComponentTypes.Element)\nexport class Configuration {\n    static Configurations: { [id: string]: Element } = {};\n}\n\nexport const GeneralConfigurationAttributes = {\n    /**\n     * ReelCount is count of reels on screen for game.\n     * @property ReelCount\n     * @default null\n     */\n    REEL_COUNT: \"ReelCount\",\n    /**\n     * ReelX is array of x position for reels.\n     * @property ReelX\n     * @default null\n     */\n    REEL_X: \"ReelX\",\n    /**\n     * ReelY is array of y position for reels.\n     * @property ReelY\n     * @default null\n     */\n    REEL_Y: \"ReelY\",\n    /**\n     * Standard symbol width without offsets.\n     * @property SymbolWidth\n     * @default null\n     */\n    SYMBOL_WIDTH: \"SymbolWidth\",\n    /**\n     * Standard symbol height without offsets.\n     * @property SymbolHeight\n     * @default null\n     */\n    SYMBOL_HEIGHT: \"SymbolHeight\",\n    /**\n     * @property SymbolBottomCount\n     */\n    SYMBOL_BOTTOM_COUNT: \"SymbolBottomCount\",\n    /**\n     *@property SymbolTopCount\n     */\n    SYMBOL_TOP_COUNT: \"SymbolTopCount\",\n    /**\n     * Number of symbols visible on reel.\n     * @property VisibleSymbolCount\n     * @default null\n     */\n    VISIBLE_SYMBOL_COUNT: \"VisibleSymbolCount\",\n    /**\n     * Wins multipliers (need WinsAnimations with same array length).\n     * @property WinsMultipliers\n     * @default null\n     */\n    WINS_MULTIPLIERS: \"WinsMultipliers\",\n    /**\n     * Wins animations (need WinsMultipliers with same array length).\n     * @property WinsAnimations\n     * @default null\n     */\n    WINS_ANIMATIONS: \"WinsAnimations\",\n};\n\nexport const ReelConfigurationAttributes = {\n    /**\n     * Pre roll height in pixels.\n     * @property PreRoll\n     * @default 180\n     */\n    PRE_ROLL: \"PreRoll\",\n    /**\n     * Pre roll speed in frames.\n     * @property PreRollSpeed\n     * @default 10\n     */\n    PRE_ROLL_SPEED: \"PreRollSpeed\",\n    /**\n     * Post roll height in pixels.\n     * @property PostRoll\n     * @default 180\n     */\n    POST_ROLL: \"PostRoll\",\n    /**\n     * Post roll speed in frames.\n     * @property PostRollSpeed\n     * @default 5\n     */\n    POST_ROLL_SPEED: \"PostRollSpeed\",\n    /**\n     * Speed of rotation in frames.\n     * @property Speed\n     * @default 3\n     */\n    SPEED: \"Speed\",\n    /**\n     * Multiplier for force speed.\n     * @property ForceSpeedMultipler\n     * @default 1.5\n     */\n    FORCE_SPEED_MULTIPLER: \"ForceSpeedMultipler\",\n};\n\nexport const MachineConfigurationAttributes = {\n    /**\n     * Min spin rotation in frames.\n     * @property MinSpinRotation\n     * @default 40\n     */\n    MIN_SPIN_ROTATION: \"MinSpinRotation\",\n    /**\n     * Min spin rotation in frames for outro high wins.\n     * @property MinSpinRotationLong\n     * @default 100\n     */\n    MIN_SPIN_ROTATION_LONG: \"MinSpinRotationLong\",\n    /**\n     * Delay to start rotation in frames.\n     * @property StartDelay\n     * @default 3\n     */\n    START_DELAY: \"StartDelay\",\n    /**\n     * Delay to stop rotation in frames.\n     * @property StopDelay\n     * @default 10\n     */\n    STOP_DELAY: \"StopDelay\",\n    /**\n     * Configuration ID for reels.\n     * @property StopDelay\n     * @type string\n     * @default null\n     */\n    REEL_CONFIGURATION: \"ReelConfiguration\",\n    /**\n     * Teasings defined array of symbols which will go after reel stopped to teaser state.\n     * @property Teasings\n     * @default null\n     *\n     * @deprecated Use TeasingSymbols istead Teasing\n     */\n    TEASINGS: \"Teasings\",\n    /**\n     * Teasings defined array of symbols which will go after reel stopped to teaser state.\n     * @property Teasings\n     * @default null\n     */\n    TEASING_SYMBOLS: \"TeasingSymbols\",\n    /**\n     *\n     */\n    TEASING_STOP_DELAY: \"TeasingStopDelay\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Configuration.ts\n **/","import { Configuration } from \"../../../Components/Configuration\";\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { UriHelper } from \"neo-common\";\nimport { GameApp } from \"../../../GameApp\";\nimport { Platforms } from \"neo-games\";\n\nexport class SimilarGames {\n    public enabled: boolean = false;\n\n    private _holder: HTMLElement;\n    private _pagesHolder: HTMLElement;\n    private _pagingHolder: HTMLElement;\n    private _pages: Array<HTMLElement> = [];\n    private _paging: Array<HTMLElement> = [];\n    private _actualPage: number = 0;\n\n    constructor() {}\n\n    initialize(): void {\n        if (\n            AppContext != null &&\n            AppContext.gameConfiguration != null &&\n            AppContext.gameConfiguration.ShowSimilarGames &&\n            AppContext.gameConfiguration.StaticContentUrl !== \"\" &&\n            this.getSimilarGamesList().length > 0\n        ) {\n            this._holder = document.getElementById(\"similarGames\");\n            this._pagesHolder = document.getElementById(\"similarGamesPagesContainer\");\n            this._pagingHolder = document.getElementById(\"similarGamesPaging\");\n\n            if (this._holder != null && this._pagesHolder != null) {\n                this.createPages();\n                this.enabled = true;\n            }\n        }\n    }\n\n    private getSimilarGamesList(): Array<string> {\n        if (\n            AppContext != null &&\n            AppContext.gameConfiguration != null &&\n            AppContext.gameConfiguration.SimilarGamesList.length > 0\n        ) {\n            return AppContext.gameConfiguration.SimilarGamesList.filter((e) => e !== GameApp.key);\n        }\n\n        return [];\n    }\n\n    private createPages(): void {\n        if (AppContext != null && AppContext.gameConfiguration != null && this.getSimilarGamesList().length > 0) {\n            let filterArray: Array<string> = this.getSimilarGamesList();\n            let page: number = 0;\n            for (let i: number = 0; i < filterArray.length; i++) {\n                if (i % 15 === 0) {\n                    page = this.createNextPage();\n                }\n                this.createPageItem(filterArray[i], page);\n            }\n        }\n\n        if (this._pages.length > 1) {\n            let prewPageButton: HTMLElement = document.getElementById(\"similarGamesPrewArrow\");\n            let nextPageButton: HTMLElement = document.getElementById(\"similarGamesNextArrow\");\n            if (prewPageButton != null) {\n                prewPageButton.classList.remove(\"_hidden\");\n                prewPageButton.onclick = this.prewPage.bind(this);\n            }\n            if (nextPageButton != null) {\n                nextPageButton.classList.remove(\"_hidden\");\n                nextPageButton.onclick = this.nextPage.bind(this);\n            }\n            if (this._pagingHolder != null) {\n                this._pagingHolder.classList.remove(\"_hidden\");\n            }\n        }\n\n        const exitBtn = document.getElementById(\"exitBtn\");\n        if (exitBtn != null) {\n            if (\n                AppContext != null &&\n                AppContext.gameConfiguration != null &&\n                AppContext.gameConfiguration.ShowExitGameButton\n            ) {\n                exitBtn.classList.remove(\"_hidden\");\n            } else {\n                exitBtn.classList.add(\"_hidden\");\n            }\n        }\n    }\n\n    private createNextPage(): number {\n        let newPage: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let newPageChild: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let newPaging: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n\n        newPage.classList.add(\"similarGamesPage\");\n        newPageChild.classList.add(\"customContent\");\n        newPaging.classList.add(\"similarGamesPageNumber\");\n\n        if (this._pages.length === 0) {\n            newPage.classList.add(\"_active\");\n            newPaging.classList.add(\"_active\");\n        } else {\n            newPage.classList.add(\"_disabled\");\n        }\n\n        newPage.appendChild(newPageChild);\n\n        this._pages.push(newPage);\n        this._paging.push(newPaging);\n        if (this._pagesHolder != null) {\n            this._pagesHolder.appendChild(newPage);\n        }\n        if (this._pagingHolder != null) {\n            this._pagingHolder.appendChild(newPaging);\n        }\n\n        return this._pages.length - 1;\n    }\n\n    private createPageItem(name: string, page: number): void {\n        let itemHolder: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let item: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let itemLoading: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let itemLoadingIcon: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let itemLogo: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n\n        itemHolder.classList.add(\"similarGameContainer\");\n        item.classList.add(\"similarGameItem\");\n        itemLoading.classList.add(\"similarGameLoading\");\n        itemLoadingIcon.classList.add(\"loadingIcon\");\n        itemLogo.classList.add(\"similarGameLogo\");\n        itemLogo.setAttribute(\"game\", name);\n        itemLogo.style.background =\n            \"url(\" + AppContext.gameConfiguration.StaticContentUrl + name + \"/\" + window[\"QUALITY\"] + \"/logo.jpg)\";\n\n        itemHolder.appendChild(item);\n        item.appendChild(itemLoading);\n        itemLoading.appendChild(itemLoadingIcon);\n        item.appendChild(itemLogo);\n        itemLogo.onclick = this.selectGame.bind(this);\n\n        if (this._pages[page] != null) {\n            this._pages[page].firstChild.appendChild(itemHolder);\n        }\n    }\n\n    private prewPage(): void {\n        if (!this.enabled) {\n            return;\n        }\n        PlayList.play(\"SND_Click\");\n        this.disableAllPages();\n        this._actualPage--;\n        if (this._pages[this._actualPage] == null) {\n            this._actualPage = this._pages.length - 1;\n        }\n        if (this._pages[this._actualPage] != null) {\n            this._pages[this._actualPage].classList.remove(\"_disabled\");\n            this._pages[this._actualPage].classList.add(\"_active\");\n        }\n        if (this._paging[this._actualPage] != null) {\n            this._paging[this._actualPage].classList.add(\"_active\");\n        }\n    }\n\n    private nextPage(): void {\n        if (!this.enabled) {\n            return;\n        }\n        PlayList.play(\"SND_Click\");\n        this.disableAllPages();\n        this._actualPage++;\n        if (this._pages[this._actualPage] == null) {\n            this._actualPage = 0;\n        }\n        if (this._pages[this._actualPage] != null) {\n            this._pages[this._actualPage].classList.remove(\"_disabled\");\n            this._pages[this._actualPage].classList.add(\"_active\");\n        }\n        if (this._paging[this._actualPage] != null) {\n            this._paging[this._actualPage].classList.add(\"_active\");\n        }\n    }\n\n    private disableAllPages(): void {\n        if (!this.enabled) {\n            return;\n        }\n        for (let i: number = 0; i < this._pages.length; i++) {\n            if (this._pages[i].classList.contains(\"_active\")) {\n                this._pages[i].classList.remove(\"_active\");\n            }\n            if (!this._pages[i].classList.contains(\"_disabled\")) {\n                this._pages[i].classList.add(\"_disabled\");\n            }\n        }\n\n        for (let i: number = 0; i < this._paging.length; i++) {\n            if (this._paging[i].classList.contains(\"_active\")) {\n                this._paging[i].classList.remove(\"_active\");\n            }\n        }\n    }\n\n    private selectGame(e: any): void {\n        if (!this.enabled) {\n            return;\n        }\n        PlayList.play(\"SND_Click\");\n        if (e != null && e.target != null && e.target.hasAttribute(\"game\")) {\n            let urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\n            if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\n                let serverUrl: string = urlInfo[\"query\"][\"serverUrl\"];\n                let token: string = urlInfo[\"hash\"].substring(1);\n                let newUrl: string = serverUrl + \"Launch/\" + e.target.getAttribute(\"game\") + \"?\" + token;\n                let root: HTMLElement = document.getElementById(\"root\");\n                if (root != null) {\n                    root.style.display = \"none\";\n                }\n                Platforms.Platforms.gameChange(e.target.getAttribute(\"game\"));\n                if (Platforms.Platforms.handleChangeGame) {\n                    return;\n                }\n\n                // GameApp.gameClient.leaveGame();\n                setTimeout(() => {\n                    window.location.replace(newUrl);\n                }, 100);\n            }\n        }\n    }\n\n    public open(): boolean {\n        if (this.enabled) {\n            if (this._holder.classList.contains(\"_disabled\")) {\n                this._holder.classList.remove(\"_disabled\");\n                return true;\n            } else {\n                return false;\n            }\n        } else {\n            return false;\n        }\n    }\n\n    public disable(): void {\n        if (!this.enabled) {\n            return;\n        }\n        if (!this._holder.classList.contains(\"_disabled\")) {\n            this._holder.classList.add(\"_disabled\");\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/SimilarGames/SimilarGames.ts\n **/","import { FrameTimerEventEmitter, FrameTimerEvents, CreateFrameTimer } from \"../../../Utils/FrameTimer\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { Platforms } from \"neo-games\";\n\nexport class LimitDialog {\n    private static _opened: boolean = false;\n    private static _limit: HTMLElement;\n    private static _openTimer: FrameTimerEventEmitter;\n    private static _closeTimer: FrameTimerEventEmitter;\n\n    static openDialog(): void {\n        LimitDialog.initializeDialog();\n\n        if (!LimitDialog._opened) {\n            LimitDialog._openTimer.start(1);\n            if (LimitDialog._limit != null) {\n                LimitDialog._limit.style.display = \"block\";\n            }\n\n            LimitDialog._opened = true;\n            Platforms.Platforms.dialogOpened(\"limit\", true);\n        }\n    }\n\n    static closeDialog(): void {\n        if (LimitDialog._opened) {\n            LimitDialog.initializeDialog();\n\n            LimitDialog._closeTimer.start(60);\n            if (LimitDialog._limit != null && !LimitDialog._limit.classList.contains(\"_disabled\")) {\n                LimitDialog._limit.classList.add(\"_disabled\");\n            }\n\n            Platforms.Platforms.dialogOpened(\"limit\", false);\n        }\n    }\n\n    private static initializeDialog(): void {\n        if (LimitDialog._limit == null) {\n            LimitDialog._limit = document.getElementById(\"limitDialog\");\n        }\n\n        if (LimitDialog._openTimer == null) {\n            LimitDialog._openTimer = CreateFrameTimer(\"openTimer\");\n            LimitDialog._openTimer.on(FrameTimerEvents.Complete, this.showDialog);\n        }\n\n        if (LimitDialog._closeTimer == null) {\n            LimitDialog._closeTimer = CreateFrameTimer(\"closeTimer\");\n            LimitDialog._closeTimer.on(FrameTimerEvents.Complete, this.hideDialog);\n        }\n    }\n\n    private static showDialog(): void {\n        LimitDialog.initializeDialog();\n\n        if (LimitDialog._limit != null && LimitDialog._limit.classList.contains(\"_disabled\")) {\n            LimitDialog._limit.classList.remove(\"_disabled\");\n            PlayList.play(\"SND_BaseLimit\");\n        }\n    }\n\n    private static hideDialog(): void {\n        LimitDialog.initializeDialog();\n        if (LimitDialog._limit != null) {\n            LimitDialog._limit.style.display = \"none\";\n        }\n\n        LimitDialog._opened = false;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/LimitDialog.ts\n **/","import { Communication, Plugins } from \"neo-games\";\nimport { WebSocketClient } from \"../Utils/WebSocketClient\";\nimport { BalanceManager } from \"./BalanceManager\";\nimport { GameManager } from \"./GameManager\";\nimport { ApiClientCommunication } from \"neo-common\";\nimport { ModuleManager } from \"./ModuleManager\";\nimport { PageVisibilityHandler } from \"../CustomComponents/PageVisibilityHandler\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\nimport { Scaling } from \"../Utils/Scaling\";\nimport { WebSocketClientHub } from \"../Utils/WebSocketClientHub\";\nimport { DataManager } from \"./DataManager\";\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\n\nexport class NotificationManager {\n    //******************************************************************************************************************\n    //  INSTANCE\n    //******************************************************************************************************************\n\n    private static instance: NotificationManager;\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    private webSocketClient: WebSocketClient;\n\n    private webSocketClientHub: WebSocketClientHub;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor() {\n        if (AppContext.gameConfiguration.ApplicationGatewayUrl) {\n            this.webSocketClientHub = new WebSocketClientHub();\n        } else {\n            this.webSocketClient = new WebSocketClient();\n        }\n\n        this.bindMessages();\n    }\n\n    //******************************************************************************************************************\n    //  PRIVATE FUNCTIONS\n    //******************************************************************************************************************\n\n    private bindMessages(): void {\n        if (this.webSocketClient != null) {\n            this.webSocketClient.on(\"RefreshBalance\", this.refreshBalance.bind(this));\n            this.webSocketClient.on(\"CloseSession\", this.closeSession.bind(this));\n            this.webSocketClient.on(\"UpdateStatusBar\", this.updateStatusBar.bind(this));\n        }\n\n        if (this.webSocketClientHub != null) {\n            this.onReceiveMessage(this.messageReceiver.bind(this));\n        }\n    }\n\n    //******************************************************************************************************************\n    //  GAME 2 SERVER\n    //******************************************************************************************************************\n\n    private sendMessage(message: Message): void {\n        if (this.webSocketClient != null) {\n            let methodName = message.action;\n            let data = message.data;\n\n            if (methodName == \"event/log\") {\n                methodName = \"LogEvent\";\n            }\n\n            this.webSocketClient.sendMessage(methodName, data);\n        }\n\n        if (this.webSocketClientHub != null) {\n            if (!this.webSocketClientHub.isConnectionEstablished()) {\n                this.webSocketClientHub.addMessage(this.sendMessage.bind(this, message));\n                return;\n            }\n\n            this.webSocketClientHub\n                .sendMessage(message)\n                .then(() => {\n                    if (DEBUG) {\n                        console.log(\"Message received\");\n                    }\n                })\n                .catch((error) => {\n                    if (DEBUG) {\n                        console.log(error);\n                    }\n                });\n        }\n    }\n\n    private invokeCommand(message: Message): Promise<Result> {\n        if (this.webSocketClientHub != null) {\n            return this.webSocketClientHub.invokeCommand(message);\n        }\n\n        return Promise.reject({ code: \"Hub connection not initialized\" } as Result);\n    }\n\n    private onReceiveMessage(receiver: (message: Message) => void): void {\n        if (this.webSocketClientHub != null) {\n            this.webSocketClientHub.onReceiveMessage(receiver);\n        }\n    }\n\n    private disconnect(): void {\n        if (this.webSocketClientHub != null) {\n            this.webSocketClientHub.disconnect();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SERVER 2 GAME\n    //******************************************************************************************************************\n\n    private messageReceiver(message: Message): void {\n        if (message == null) {\n            if (DEBUG) {\n                console.log(\"ERROR - message object was not received from websocket\");\n            }\n            return;\n        }\n\n        if (message.application.toLowerCase() != \"neo\") {\n            if (DEBUG) {\n                console.log('ERROR - message application was not \"NEO\"');\n            }\n            return;\n        }\n\n        if (message.service.toLowerCase() == \"notification\") {\n            switch (message.action.toLowerCase()) {\n                case \"refreshbalance\":\n                    this.refreshBalance(message.data);\n                    break;\n                case \"closesession\":\n                    this.closeSession();\n                    break;\n                case \"updatestatusbar\":\n                    this.updateStatusBar(message.data);\n                    break;\n            }\n        }\n\n        if (message.service.toLowerCase() == \"servertime\") {\n            switch (message.action.toLowerCase()) {\n                case \"update\":\n                    this.updateServerTime(message.data);\n                    break;\n            }\n        }\n    }\n\n    private refreshBalance(data: any): void {\n        //dynamic frb\n        if (data[\"freeRounds\"] != null) {\n            FreeRoundBonus.updateRemainingCount(data[\"freeRounds\"]);\n        }\n\n        //we dont want to update balance during mini game\n        if (Jackpot.hasActiveGame()) {\n            return;\n        }\n\n        BalanceManager.balanceReceived(data as Communication.Game.IBalance);\n    }\n\n    private closeSession(): void {\n        for (let key in Communication.Game.GameModules) {\n            ModuleManager.disableChannelModule(Communication.Game.GameModules[key]);\n        }\n\n        PageVisibilityHandler.Enabled = false;\n        PageVisibilityHandler.pauseAll();\n        HtmlController.dispatchActionAllowed = false;\n\n        GameManager.errorReceived({\n            requestInfo: {\n                request: NotificationManager,\n                url: null,\n                gameKey: null,\n            } as ApiClientCommunication.Types.IRequestInfo,\n            httpStatusCode: 401,\n        } as ApiClientCommunication.Types.ApiClientError);\n    }\n\n    private updateStatusBar(data: any): void {\n        let statusBar = Plugins.StatusBar.getInstance();\n        if (statusBar.hasActiveWidget(\"statusBarMessage\") && data != null && data[\"statusBarMessage\"]) {\n            statusBar.add(Plugins.StatusBar.Types.StatusBarMessage, \"statusBarMessage\", data[\"statusBarMessage\"]);\n            Scaling.resizeRoot();\n        }\n    }\n\n    private updateServerTime(data: any): void {\n        if (data == null) {\n            return;\n        }\n\n        DataManager.serverTimeReceived(data);\n    }\n\n    //******************************************************************************************************************\n    //  PUBLIC FUNCTIONS\n    //******************************************************************************************************************\n\n    public static initialize(): void {\n        if (NotificationManager.instance == null) {\n            NotificationManager.instance = new NotificationManager();\n        }\n    }\n\n    public static sendMessage(message: Message): void {\n        if (NotificationManager.instance != null) {\n            NotificationManager.instance.sendMessage(message);\n        }\n    }\n\n    public static invokeCommand(message: Message): Promise<Result> {\n        if (NotificationManager.instance != null) {\n            return NotificationManager.instance.invokeCommand(message);\n        }\n\n        return Promise.reject({ code: \"Hub connection not initialized\" } as Result);\n    }\n\n    public static onReceiveMessage(receiver: (message: Message) => void): void {\n        if (NotificationManager.instance != null) {\n            return NotificationManager.instance.onReceiveMessage(receiver);\n        }\n    }\n\n    public static disconnect(): void {\n        if (NotificationManager.instance != null) {\n            NotificationManager.instance.disconnect();\n        }\n    }\n}\n\nexport interface Message {\n    application: string;\n    service: string;\n    action: string;\n    data: Object;\n}\n\nexport interface Result {\n    code: string;\n    data: Object;\n}\n\nexport interface ResultError extends Error {\n    result: Result;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/NotificationManager.ts\n **/","import GameClientHubConnection = GameClientHub.GameClientHubConnection;\nimport { UriHelper } from \"neo-common\";\nimport { AppContext } from \"../../Common/AppContext\";\n\nexport class WebSocketClient {\n    private hubConnection: GameClientHubConnection;\n    private connected: boolean;\n\n    constructor() {\n        this.connected = false;\n\n        const urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\n        if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\n            let serverUrl: string = urlInfo[\"query\"][\"serverUrl\"];\n\n            try {\n                this.hubConnection = new GameClientHub.GameClientHubConnection(\n                    serverUrl,\n                    this.getToken,\n                    AppContext.gameConfiguration,\n                );\n                this.connected = true;\n            } catch (e) {\n                if (DEBUG) {\n                    console.log(\"ERROR websocket connection was not created: \" + e);\n                }\n            }\n        }\n    }\n\n    private getToken(): string {\n        let token = \"\";\n\n        const urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\n        if (urlInfo != null && urlInfo[\"hash\"]) {\n            token = urlInfo[\"hash\"].substring(1).split(\"=\")[1];\n        }\n\n        return token;\n    }\n\n    public sendMessage(methodName: string, data: any): void {\n        if (this.hubConnection != null && this.connected) {\n            this.hubConnection.sendMessage(methodName, data);\n        }\n    }\n\n    public on(methodName: string, callbackFn: (message: string) => void): void {\n        if (this.hubConnection != null) {\n            this.hubConnection.on(methodName, callbackFn);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/WebSocketClient.ts\n **/","import ClientHubConnection = ClientHub.ClientHubConnection;\nimport Message = ClientHub.Message;\nimport UpdateTokenRequest = ClientHub.UpdateTokenRequest;\nimport { AppContext } from \"../../Common/AppContext\";\nimport { UriHelper } from \"neo-common\";\nimport Result = ClientHub.Result;\nimport { Platforms } from \"neo-games\";\n\nexport class WebSocketClientHub {\n    private clientHubConnection: ClientHubConnection;\n    private jwtToken: string;\n    private connectionEstablished: boolean;\n    private stackedMessages: Array<Function>;\n\n    constructor() {\n        if (AppContext.gameConfiguration == null) {\n            return;\n        }\n\n        if (AppContext.gameConfiguration.ApplicationGatewayUrl === \"\") {\n            return;\n        }\n\n        try {\n            this.stackedMessages = [];\n            this.connectionEstablished = false;\n            this.clientHubConnection = new ClientHubConnection(\n                AppContext.gameConfiguration.ApplicationGatewayUrl,\n                this.getToken,\n                () => {\n                    this.connectionEstablished = true;\n                    Platforms.Platforms.webSocketsInitialized();\n                    this.sendStackedMessages();\n                },\n            );\n            this.jwtToken = this.getToken();\n        } catch (e) {\n            if (DEBUG) {\n                console.log(\"ERROR websocket connection was not created: \" + e);\n            }\n        }\n    }\n\n    private getToken(): string {\n        let token = \"\";\n\n        const urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\n        if (urlInfo != null && urlInfo[\"hash\"]) {\n            token = urlInfo[\"hash\"].substring(1).split(\"=\")[1];\n        }\n\n        return token;\n    }\n\n    private tokenChanged(): boolean {\n        const currentToken = this.getToken();\n        return currentToken != this.jwtToken;\n    }\n\n    private updateToken(): void {\n        if (!this.tokenChanged()) {\n            return;\n        }\n\n        if (!this.clientHubConnection) {\n            return;\n        }\n\n        const _self = this;\n        const token = this.getToken();\n        this.clientHubConnection\n            .updateToken(new UpdateTokenRequest(token))\n            .then(() => {\n                if (DEBUG) {\n                    console.log(\"Websocket connection token was updated successfully.\");\n                }\n                _self.jwtToken = token;\n            })\n            .catch((e) => {\n                if (DEBUG) {\n                    console.log(\"ERROR websocket token was not updated: \" + e);\n                }\n            });\n    }\n\n    private sendStackedMessages(): void {\n        for (let i = 0; i < this.stackedMessages.length; i++) {\n            const fn = this.stackedMessages[i];\n            if (fn) {\n                fn();\n            }\n        }\n\n        this.stackedMessages = [];\n    }\n\n    public addMessage(message: Function): void {\n        if (this.stackedMessages != null) {\n            this.stackedMessages.push(message);\n        }\n    }\n\n    public isConnectionEstablished(): boolean {\n        return this.connectionEstablished;\n    }\n\n    public sendMessage(message: Message): Promise<void> {\n        if (!this.clientHubConnection) {\n            return Promise.reject(new Error(\"Not initialized\"));\n        }\n\n        this.updateToken();\n        return this.clientHubConnection.sendMessage(message);\n    }\n\n    public invokeCommand(message: Message): Promise<Result> {\n        if (!this.clientHubConnection) {\n            return Promise.reject({ code: \"Not initialized\" } as Result);\n        }\n\n        this.updateToken();\n        return this.clientHubConnection.invokeCommand(message);\n    }\n\n    public onReceiveMessage(receiver: (message: Message) => void): void {\n        if (!this.clientHubConnection) {\n            return;\n        }\n\n        this.updateToken();\n        this.clientHubConnection.onReceiveMessage(receiver);\n    }\n\n    public disconnect(): void {\n        if (!this.clientHubConnection) {\n            return;\n        }\n\n        this.clientHubConnection.disconnect().catch((e) => {\n            console.log(\"ERROR websocket connection was disconnected: \" + e);\n        });\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/WebSocketClientHub.ts\n **/","import { PlayList } from \"../../../../Components/Sounds/PlayList\";\nimport { GameApp } from \"../../../../GameApp\";\nimport { GameManager } from \"../../../../Managers/GameManager\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { BaseModel } from \"../../../../GameComponents/Base/BaseModel\";\nimport { IErrorResponse } from \"neo-common/Engine/ApiClient/Types\";\nimport { Languages } from \"../../../../Utils/Languages\";\nimport { StringUtils, Utils } from \"neo-common\";\n\nexport class SessionTimer {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected static dialog: HTMLElement;\n\n    protected static title: HTMLElement;\n\n    protected static text: HTMLElement;\n\n    protected static buttonsHolder: HTMLElement;\n\n    protected static buttons: Array<HTMLElement>;\n\n    protected static callback: (response: any) => void;\n\n    protected static response: any;\n\n    protected static step: number;\n\n    protected static intervals: Array<number>;\n\n    protected static intervalIndex: number;\n\n    protected static intervalHolder: HTMLElement;\n\n    protected static intervalDisplay: HTMLElement;\n\n    //******************************************************************************************************************\n    //  POSTPONE\n    //******************************************************************************************************************\n\n    public static postpone(callback: (response: any) => void, response: any): void {\n        if (\n            !Utils.isNullOrUndefined(response) &&\n            !Utils.isNullOrUndefined(response.messages) &&\n            response.messages.length > 0\n        ) {\n            if (Utils.isNullOrUndefined(SessionTimer.dialog)) {\n                SessionTimer.dialog = document.getElementById(\"messageDialog\");\n\n                if (!Utils.isNullOrUndefined(SessionTimer.dialog)) {\n                    SessionTimer.dialog.classList.add(\"sessionTimer\");\n                    SessionTimer.title = SessionTimer.dialog.getElementsByTagName(\"h3\")[0];\n                    SessionTimer.text = document.getElementById(\"messageDialogText\");\n\n                    SessionTimer.buttonsHolder = document.getElementById(\"messageDialogButtons\");\n                    SessionTimer.buttons = [];\n                }\n            }\n\n            if (Utils.isNullOrUndefined(SessionTimer.dialog)) {\n                callback(response);\n            } else {\n                SessionTimer.callback = callback;\n                SessionTimer.response = response;\n                SessionTimer.step = 0;\n                SessionTimer.handle();\n            }\n        } else {\n            callback(response);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  UPDATE DIALOG DATA\n    //******************************************************************************************************************\n\n    protected static updateDialogData(data: any): void {\n        SessionTimer.resetDialogData();\n\n        if (!Utils.isNullOrUndefined(data[\"title\"])) {\n            SessionTimer.title.innerHTML = data[\"title\"];\n        }\n\n        if (!Utils.isNullOrUndefined(data[\"text\"])) {\n            SessionTimer.text.innerHTML = data[\"text\"];\n        }\n\n        if (!Utils.isNullOrUndefined(data[\"actions\"])) {\n            SessionTimer.removeAllButtons();\n\n            for (let i = 0; i < data[\"actions\"].length; i++) {\n                let action = data[\"actions\"][i];\n\n                switch (action.type) {\n                    case \"continue\":\n                        SessionTimer.createButton(action[\"text\"], SessionTimer.actionContinue.bind(this, action));\n                        break;\n                    case \"exit\":\n                        SessionTimer.createButton(action[\"text\"], SessionTimer.actionExit.bind(this, action));\n                        break;\n                }\n            }\n        }\n\n        if (!Utils.isNullOrUndefined(data[\"intervals\"])) {\n            SessionTimer.createIntervals(data[\"intervals\"]);\n        }\n    }\n\n    protected static resetDialogData(): void {\n        //default title\n        SessionTimer.title.innerHTML = Languages.getRid(\"DLG_INFO\");\n\n        //remove all custom buttons\n        SessionTimer.removeAllButtons();\n\n        //create default continue button\n        SessionTimer.createButton(Languages.getRid(\"CONTINUE\"), SessionTimer.actionContinue);\n\n        if (SessionTimer.intervalHolder != null) {\n            SessionTimer.intervalHolder.parentElement.removeChild(SessionTimer.intervalHolder);\n            SessionTimer.intervalHolder = null;\n        }\n    }\n\n    protected static removeAllButtons(): void {\n        while (SessionTimer.buttons.length > 0) {\n            let button = SessionTimer.buttons.pop();\n            SessionTimer.buttonsHolder.removeChild(button);\n        }\n    }\n\n    protected static disableAllButtons(): void {\n        for (let i = 0; i < SessionTimer.buttons.length; i++) {\n            let button = SessionTimer.buttons[i];\n\n            if (button != null) {\n                button.classList.add(\"_disabled\");\n                button.onclick = null;\n            }\n        }\n    }\n\n    protected static createButton(text: string, action: (data: any) => void): void {\n        let button: HTMLElement = document.createElement(\"div\");\n        button.textContent = text;\n        button.classList.add(\"dialogBtn\", \"customDialogBtn\");\n        button.onclick = action;\n\n        SessionTimer.buttonsHolder.appendChild(button);\n        SessionTimer.buttons.push(button);\n    }\n\n    //******************************************************************************************************************\n    //  ACTIONS\n    //******************************************************************************************************************\n\n    protected static actionContinue(): void {\n        PlayList.play(\"SND_Click\");\n\n        SessionTimer.disableAllButtons();\n\n        let interval: number;\n        if (SessionTimer.intervals != null && SessionTimer.intervalIndex > 0) {\n            interval = SessionTimer.intervals[SessionTimer.intervalIndex];\n        }\n        GameManager.gameClient.resetRealityCheck(interval).then((response: Communication.Game.RealityCheckResponse) => {\n            this.onActionContinueReceived();\n        });\n    }\n\n    protected static onActionContinueReceived(): void {\n        SessionTimer.handle();\n    }\n\n    protected static actionExit(): void {\n        PlayList.play(\"SND_Click\");\n\n        SessionTimer.disableAllButtons();\n\n        GameManager.gameClient.closeRealityCheck().then((response: Communication.Game.RealityCheckResponse) => {\n            this.onActionExitReceived();\n        });\n    }\n\n    protected static onActionExitReceived(): void {\n        Platforms.Platforms.exitHandler = \"responsibleDialog\";\n        GameApp.exit();\n    }\n\n    //******************************************************************************************************************\n    //  HANDLE\n    //******************************************************************************************************************\n\n    protected static handle(): void {\n        if (SessionTimer.response.messages.length === SessionTimer.step) {\n            SessionTimer.dialog.classList.add(\"_disabled\");\n            SessionTimer.callback(SessionTimer.response);\n            Platforms.Platforms.dialogOpened(\"sessionTimer\", false);\n        } else {\n            if (SessionTimer.response.messages[SessionTimer.step].type == \"plugin\") {\n                Platforms.Platforms.sendPluginMessage(SessionTimer.response.messages[SessionTimer.step].text);\n                SessionTimer.step++;\n                SessionTimer.handle();\n            } else {\n                SessionTimer.dialog.classList.remove(\"_disabled\");\n                SessionTimer.updateDialogData(SessionTimer.response.messages[SessionTimer.step]);\n                SessionTimer.step++;\n                Platforms.Platforms.dialogOpened(\"sessionTimer\", true);\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CUSTOM\n    //******************************************************************************************************************\n\n    protected static createIntervals(intervals: Array<number>): void {\n        if (SessionTimer.buttonsHolder != null) {\n            SessionTimer.intervals = intervals;\n            SessionTimer.intervalIndex = 0;\n\n            SessionTimer.intervalHolder = document.createElement(\"div\");\n            SessionTimer.intervalHolder.setAttribute(\"class\", \"sessionIntervals\");\n\n            let buttonMinus = document.createElement(\"div\");\n            buttonMinus.setAttribute(\"class\", \"minusBtn\");\n            buttonMinus.textContent = \"-\";\n\n            let buttonPlus = document.createElement(\"div\");\n            buttonPlus.setAttribute(\"class\", \"plusBtn\");\n            buttonPlus.textContent = \"+\";\n\n            buttonMinus.addEventListener(\n                \"click\",\n                SessionTimer.changeInterval.bind(this, true, buttonMinus, buttonPlus),\n            );\n            buttonPlus.addEventListener(\n                \"click\",\n                SessionTimer.changeInterval.bind(this, false, buttonMinus, buttonPlus),\n            );\n\n            SessionTimer.intervalDisplay = document.createElement(\"div\");\n            SessionTimer.intervalDisplay.setAttribute(\"class\", \"value\");\n            SessionTimer.intervalDisplay.innerText = intervals[0].toString();\n\n            if (SessionTimer.intervalIndex == SessionTimer.intervals.length - 1) {\n                buttonMinus.classList.add(\"_disabled\");\n            }\n\n            if (SessionTimer.intervalIndex == 0) {\n                buttonPlus.classList.add(\"_disabled\");\n            }\n\n            SessionTimer.intervalHolder.appendChild(buttonMinus);\n            SessionTimer.intervalHolder.appendChild(SessionTimer.intervalDisplay);\n            SessionTimer.intervalHolder.appendChild(buttonPlus);\n            SessionTimer.buttonsHolder.parentElement.insertBefore(\n                SessionTimer.intervalHolder,\n                SessionTimer.buttonsHolder,\n            );\n        }\n    }\n\n    protected static changeInterval(\n        increase: boolean = false,\n        buttonMinus: HTMLElement,\n        buttonPlus: HTMLElement,\n    ): void {\n        buttonMinus.classList.remove(\"_disabled\");\n        buttonPlus.classList.remove(\"_disabled\");\n\n        if (increase) {\n            if (SessionTimer.intervalIndex < SessionTimer.intervals.length - 1) {\n                SessionTimer.intervalIndex++;\n            }\n        } else {\n            if (SessionTimer.intervalIndex > 0) {\n                SessionTimer.intervalIndex--;\n            }\n        }\n\n        if (SessionTimer.intervalIndex == SessionTimer.intervals.length - 1) {\n            buttonMinus.classList.add(\"_disabled\");\n        }\n\n        if (SessionTimer.intervalIndex == 0) {\n            buttonPlus.classList.add(\"_disabled\");\n        }\n\n        SessionTimer.intervalDisplay.innerText = SessionTimer.intervals[SessionTimer.intervalIndex].toString();\n    }\n\n    public static callbackFnc(response: any): void {\n        SessionTimer.dialog.classList.remove(\"sessionTimer\");\n        BaseModel.spinContinue();\n    }\n\n    public static prepareData(response: IErrorResponse): any {\n        return {\n            messages: [\n                {\n                    text: response.message,\n                    actions: [\n                        {\n                            type: \"continue\",\n                            text: Languages.getRid(\"CONTINUE\"),\n                        },\n                        {\n                            type: \"exit\",\n                            text: Languages.getRid(\"CLOSE\"),\n                        },\n                    ],\n                    intervals: response.intervals,\n                },\n            ],\n        };\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Platforms/Playtech/SessionTimer.ts\n **/","import { Utils, StringUtils } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { TweenLite, TweenMax } from \"gsap\";\nimport { GsapEffects } from \"../../../Components/Effects/GsapEffects\";\nimport { GameManager } from \"../../../Managers/GameManager\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { CustomEase } from \"../../../Components/Effects/CustomEase\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { Jackpot } from \"../Bonuses/Jackpot\";\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\nimport { IProgressiveBonusLevel } from \"neo-games/Engine/Communication/Game/Types/IProgressiveBonusLevel\";\nimport { BalanceManager } from \"../../../Managers/BalanceManager\";\nimport { GameData } from \"../Datas/GameData\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { FrameTimerPool } from \"../../../Utils/FrameTimerPool\";\nimport { StageController } from \"../../../Components/StageController\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { AmbientBackground } from \"../../../Utils/AmbientBackground\";\nimport { Languages } from \"../../../Utils/Languages\";\nimport { MessageManager } from \"../../../Managers/MessageManager\";\nimport { JackpotData } from \"../Datas/JackpotData\";\nimport { LimitDialog } from \"../Dialogs/LimitDialog\";\n\nvar GameModules = Communication.Game.GameModules;\n\ntype MaxPowerBonusInitResponse = Communication.Game.MaxPowerBonusInitResponse;\ntype MaxPowerBonusSpinResponse = Communication.Game.MaxPowerBonusSpinResponse;\n\nexport class JackpotGame {\n    //******************************************************************************************************************\n    //  SEETTINGS\n    //******************************************************************************************************************\n\n    private static readonly Strip: Array<number> = [\n        1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 4, 1, 2, 1, 1, 2, 1, 3, 1, 1, 2, 1, 1, 1, 2, 1, 1,\n        1, 1, 3, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 4,\n    ];\n\n    private static readonly SymbolsCount: number = 4;\n\n    private static readonly BuzzerDuration: number = 180; //in frames\n\n    private static readonly SpinRollSpeed: number = 8; //lower number is faster\n\n    private static readonly MinSpinDuration: number = 360; //in frames\n\n    private static readonly MiddleSymbolIndex: number = 1;\n\n    private static readonly SpinPreRollDuration: number = 120;\n\n    private static readonly SpinPreRollSymbolCount: number = 8;\n\n    private static readonly SpinPostRollDuration: number = 360;\n\n    private static readonly SpinPostRollSymbolCount: number = 12;\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected ticket: { id: string };\n\n    protected gameInitialized: boolean;\n\n    protected gameStarted: boolean;\n\n    protected autostart: boolean;\n\n    protected callback: () => void;\n\n    protected holder: HTMLElement;\n\n    protected root: HTMLElement;\n\n    protected reel: HTMLElement;\n\n    protected spinBtn: HTMLElement;\n\n    protected winContainer: HTMLElement;\n\n    protected gameData: MaxPowerBonusSpinResponse;\n\n    protected lastEvent: () => void;\n\n    protected stoppedFromMachine: boolean;\n\n    protected stoppedFromServer: boolean;\n\n    protected stopTimer: FrameTimerEventEmitter;\n\n    protected isStopping: boolean;\n\n    protected currentSymbols: Array<HTMLElement>;\n\n    protected currentSymbolsHeight: Array<number>;\n\n    protected symbolStepOffsets: Array<number>;\n\n    protected symbolsHeight: Array<number>;\n\n    protected stripIndex: number;\n\n    protected rootHeight: number;\n\n    protected currentOffset: number;\n\n    protected showHandPayDialog: boolean;\n\n    protected buzzerTimer: FrameTimerEventEmitter;\n\n    protected showWinDelay: FrameTimerEventEmitter;\n\n    protected assetsLoaded: boolean;\n\n    protected startAfterLoad: boolean;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor(holder: HTMLElement) {\n        this.holder = holder;\n\n        this.root = this.createBaseLayout();\n        this.holder.appendChild(this.root);\n\n        let intro = this.createAnimations();\n        this.holder.appendChild(intro);\n\n        this.stopTimer = CreateFrameTimer(\"MiniGameSpinStop\");\n        this.stopTimer.on(FrameTimerEvents.Complete, this.spinStop.bind(this));\n\n        this.buzzerTimer = CreateFrameTimer(\"BuzzerTimer\");\n        this.buzzerTimer.on(FrameTimerEvents.Complete, this.buzzerTimeFinished.bind(this));\n\n        this.showWinDelay = CreateFrameTimer(\"BuzzerTimer\");\n        this.showWinDelay.on(FrameTimerEvents.Complete, this.updateWin.bind(this));\n\n        this.gameInitialized = false;\n        this.gameStarted = false;\n        this.autostart = false;\n        this.showHandPayDialog = false;\n        this.assetsLoaded = false;\n        this.startAfterLoad = false;\n\n        // CustomEase.create(\"miniGameSpinStopEase\", \"M0,0,C0,0,0.09,0.494,0.652,0.862,0.844,0.987,1,1,1,1\");\n        CustomEase.create(\n            \"miniGameSpinStopEase\",\n            \"M0,0,C0,0,0.212,0.616,0.452,0.842,0.519,0.905,0.627,1.008,0.716,1.026,0.768,1.036,0.819,1.031,0.848,1.028,0.89,1.022,1,1,1,1\",\n        );\n    }\n\n    //******************************************************************************************************************\n    //  CREATE\n    //******************************************************************************************************************\n\n    protected createBaseLayout(): HTMLElement {\n        let root = this.createElement(\"div\", \"jackpotGame\");\n\n        this.reel = this.createElement(\"div\", \"jackpotReel\", root);\n\n        this.createElement(\"div\", \"jackpotTextOverlay\", root);\n\n        let hintContainer = this.createElement(\"div\", \"jackpotStartHint\", root);\n        this.createTextElement(\"div\", \"jackpotStartHintText\", Languages.getRid(\"PB_MINIGAME_SPINSTART\"), hintContainer);\n        this.createTextElement(\"div\", \"jackpotStartHintText\", Languages.getRid(\"PB_MINIGAME_SPINSTART\"), hintContainer);\n\n        this.createElement(\"div\", \"jackpotFrameLeft\", root);\n        this.createElement(\"div\", \"jackpotFrameRight\", root);\n        this.createElement(\"div\", \"jackpotGlowLeft\", root);\n        this.createElement(\"div\", \"jackpotGlowRight\", root);\n\n        let arrows = this.createElement(\"div\", \"jackpotArrows\", root);\n        let arrow = this.createElement(\"div\", \"jackpotArrowLeft\", arrows);\n        this.createElement(\"div\", \"jackpotArrowBlur\", arrow);\n        arrow = this.createElement(\"div\", \"jackpotArrowRight\", arrows);\n        this.createElement(\"div\", \"jackpotArrowBlur\", arrow);\n\n        this.createTextElement(\"div\", \"jackpotGameName\", document.getElementById(\"gameTitle\").innerHTML, root);\n\n        return root;\n    }\n\n    protected createAnimations(): HTMLElement {\n        let intro = this.createElement(\"div\", \"jackpotIntro\");\n\n        for (let i = 0; i < 5; i++) {\n            let firework = this.createElement(\"div\", \"jackpotFireworks\", intro);\n            for (let j = 0; j < 8; j++) {\n                this.createElement(\"div\", \"fireworksPart\", firework);\n            }\n        }\n\n        let titles = this.createElement(\"div\", \"jackpotTitles\", intro);\n        let _self = this;\n\n        document.body.classList.add(\"jpt-loading\");\n\n        //dynamic content loader\n        Promise.all<Array<string>>([\n            this.getCustomContent(\"jackpotTextSynot\", \".png\"),\n            this.getCustomContent(\"jackpotTextProgressive\", \".png\"),\n            this.getCustomContent(\"jackpotTextBonus\", \".png\"),\n        ]).then((values: Array<Array<string>>) => {\n            for (let i = 0; i < values.length; i++) {\n                let elem = _self.createElement(\"div\", values[i][0], titles);\n\n                if (values[i][1] != \"\") {\n                    elem.style.background = `url(${values[i][1]}) no-repeat`;\n                }\n            }\n\n            document.body.classList.remove(\"jpt-loading\");\n            _self.assetsLoaded = true;\n            if (_self.startAfterLoad) {\n                _self.intro();\n            }\n        });\n\n        this.createElement(\"div\", \"jackpotTextOverlay\", intro);\n        this.winContainer = this.createElement(\"div\", \"jackpotWinValue\", intro);\n\n        return intro;\n    }\n\n    //******************************************************************************************************************\n    //  HANDLE GAME\n    //******************************************************************************************************************\n\n    public init(autostart: boolean, callback: () => void): void {\n        if (this.ticket == null && GameManager.gameResponse && GameManager.gameResponse[\"progressiveBonus\"].ticket) {\n            this.ticket = GameManager.gameResponse[\"progressiveBonus\"].ticket;\n\n            this.gameInitialized = false;\n            this.autostart = autostart;\n            this.callback = callback;\n            this.initSymbols();\n            this.createSymbols();\n            this.sendInitBonusGameRequest();\n        }\n    }\n\n    private initFinished(): void {\n        this.gameInitialized = true;\n\n        if (this.autostart) {\n            if (this.callback != null) {\n                this.callback();\n            }\n\n            this.intro();\n        }\n    }\n\n    public start(): void {\n        if (!this.autostart) {\n            this.intro();\n        }\n    }\n\n    private startGame(): void {\n        //close all opened dialogs\n        HtmlController.dispatchAction(\"\");\n\n        Jackpot.refreshBonusInfoBeforeSpin(this.sendSpinBonusGameRequest.bind(this));\n        this.spinStart();\n    }\n\n    private spinStop(fromMachine: boolean = true, fromServer: boolean = false): void {\n        if (fromMachine) {\n            this.stoppedFromMachine = true;\n        }\n\n        if (fromServer) {\n            this.stoppedFromServer = true;\n        }\n\n        if (this.stoppedFromMachine && this.stoppedFromServer) {\n            this.isStopping = true;\n        }\n    }\n\n    private closeMiniGame(): void {\n        if (this.callback != null && this.autostart) {\n            this.callback();\n        }\n\n        this.outroFinished(false);\n    }\n\n    private setBaseGameSound(enable: boolean): void {\n        ModuleManager.toggleModuleSounds(GameModules.Base, enable);\n    }\n\n    public hasInitializedGame(): boolean {\n        return this.gameInitialized;\n    }\n\n    public hasStartedGame(): boolean {\n        return this.gameStarted;\n    }\n\n    public disableAutostart(): void {\n        this.autostart = false;\n\n        //clear response to allow realitycheck on spin\n        this.clearJackpotGameResponse();\n    }\n\n    //******************************************************************************************************************\n    //  CLEAR\n    //******************************************************************************************************************\n\n    private clearJackpotGame(): void {\n        if (this.holder) {\n            this.holder.classList.remove(\"outro\");\n            this.holder.classList.add(\"_hidden\");\n            this.holder.className = \"jackpotGameHolder _hidden\";\n        }\n\n        if (this.root) {\n            this.root.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\n            this.root.removeEventListener(\"animationend\", this.lastEvent);\n        }\n\n        if (this.reel) {\n            this.reel.innerHTML = \"\";\n\n            this.currentOffset = 0;\n            this.setTransformY(this.reel, this.currentOffset);\n            this.currentSymbols = [];\n            this.currentSymbolsHeight = [];\n        }\n\n        if (this.winContainer) {\n            this.winContainer.style.transform = \"scale(0)\";\n            this.winContainer.innerHTML = \"\";\n\n            this.winContainer.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\n            this.winContainer.removeEventListener(\"animationend\", this.lastEvent);\n        }\n\n        this.ticket = null;\n    }\n\n    private clearJackpotGameResponse(): void {\n        if (GameManager.gameResponse[\"progressiveBonus\"]) {\n            GameManager.gameResponse[\"progressiveBonus\"] = null;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  REQUESTS & RESPONSE\n    //******************************************************************************************************************\n\n    private sendInitBonusGameRequest(): void {\n        if (GameManager.gameClient) {\n            GameManager.gameClient\n                .sendMaxPowerBonusInitRequest(this.ticket)\n                .then((response: MaxPowerBonusInitResponse) => {\n                    if (response != null && response.status == \"Active\") {\n                        this.initFinished();\n                    } else {\n                        this.closeMiniGame();\n                    }\n                });\n        }\n    }\n\n    private sendSpinBonusGameRequest(): void {\n        if (GameManager.gameClient) {\n            GameManager.gameClient\n                .sendMaxPowerBonusSpinRequest(this.ticket)\n                .then((response: MaxPowerBonusSpinResponse) => {\n                    this.setGameData(response);\n                });\n        }\n    }\n\n    private setGameData(response: MaxPowerBonusSpinResponse): void {\n        if (response != null) {\n            this.gameData = response;\n            this.spinStop(false, true);\n\n            if (AppContext != null && AppContext.gameConfiguration.GameRoundIdVisible) {\n                HtmlController.updateDataElement(GameData.DataRoundId, this.ticket.id);\n            }\n        } else {\n            Jackpot.showError();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  INTRO & OUTRO\n    //******************************************************************************************************************\n\n    private intro(): void {\n        if (!this.assetsLoaded) {\n            this.startAfterLoad = true;\n            return;\n        }\n        if (!this.gameStarted) {\n            this.gameStarted = true;\n\n            PlayList.loop(\"SND_JackpotBuzzer\");\n            this.bounceCounters(true);\n\n            this.buzzerTimer.stop();\n            this.buzzerTimer.start(JackpotGame.BuzzerDuration);\n\n            //intro calls preparenewgameround before baseview intro\n            //timeout will call method after baseview intro\n            setTimeout(() => {\n                this.setBaseGameSound(false);\n            }, 1);\n        }\n    }\n\n    private buzzerTimeFinished(): void {\n        this.buzzerTimer.stop();\n        this.bounceCounters(false);\n        PlayList.stop(\"SND_JackpotBuzzer\");\n        LimitDialog.closeDialog();\n        DataManager.GameLimit = false; //avoid restoregameround open limit dialog again\n\n        if (this.holder) {\n            this.lastEvent = this.introFinished.bind(this);\n            this.root.addEventListener(\"webkitAnimationEnd\", this.lastEvent);\n            this.root.addEventListener(\"animationend\", this.lastEvent);\n\n            AmbientBackground.changeAmbientBackground(\"jackpotBg\", 1000, 5500);\n\n            PlayList.play(\"SND_JackpotIntroHit\");\n            PlayList.loop(\"SND_JackpotIntroWaitingLoop\", 360);\n\n            this.holder.classList.remove(\"_hidden\");\n            void this.holder.offsetWidth;\n            this.holder.classList.add(\"start\");\n        }\n    }\n\n    private introFinished(): void {\n        if (this.holder) {\n            this.root.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\n            this.root.removeEventListener(\"animationend\", this.lastEvent);\n\n            PlayList.stop(\"SND_JackpotIntroHit\");\n            this.holder.classList.add(\"startFinished\");\n\n            this.setStageVisibility(false);\n            this.createSpinBtn();\n        }\n    }\n\n    private outro(): void {\n        this.setStageVisibility(true);\n\n        this.holder.classList.remove(\"spin\");\n        void this.holder.offsetWidth;\n        this.holder.classList.add(\"outro\");\n\n        AmbientBackground.changeAmbientBackground(\"base\", 2000, 8000);\n\n        //fire end event after winvalue animation end\n        this.lastEvent = this.outroFinished.bind(this);\n        this.winContainer.addEventListener(\"webkitAnimationEnd\", this.lastEvent);\n        this.winContainer.addEventListener(\"animationend\", this.lastEvent);\n    }\n\n    private outroFinished(collect: boolean = true): void {\n        if (collect) {\n            this.updateBalance();\n        }\n\n        this.clearJackpotGame();\n        this.clearJackpotGameResponse();\n\n        this.setBaseGameSound(true);\n\n        BalanceManager.refreshBalance();\n\n        if (this.showHandPayDialog) {\n            this.openHandPayDialog();\n        } else {\n            this.restoreGameRound(collect);\n        }\n\n        this.autostart = false;\n    }\n\n    private updateBalance(): void {\n        if (this.gameData != null) {\n            if (this.gameData.balance != null) {\n                this.showHandPayDialog = false;\n                BalanceManager.balanceReceived(this.gameData.balance);\n                PlayList.play(\"SND_BaseCollect\");\n\n                if (this.gameData.game != null && this.gameData.game.win != null) {\n                    DataManager.updateTotalGain(false, this.gameData.game.win.amount);\n                }\n\n                if (AppContext != null && !AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\n                    this.updateWin(false, \"0\");\n                }\n            } else {\n                this.showHandPayDialog = true;\n            }\n        }\n    }\n\n    private restoreGameRound(collect: boolean = true): void {\n        this.gameInitialized = false;\n        this.gameStarted = false;\n        this.showHandPayDialog = false;\n        ModuleManager.restoreGameRound(GameModules.Base, collect);\n    }\n\n    private openHandPayDialog(): void {\n        let response = {\n            messages: [\n                {\n                    text: Languages.getRid(\n                        \"HANDPAY_DIALOG\",\n                        Languages.formatText(Languages.FormatMoney, this.gameData.game.win.amount.toString()) +\n                            \" \" +\n                            DataManager.getDataById(GameData.DataCurrency),\n                    ),\n                },\n            ],\n        };\n        MessageManager.postpone(this.restoreGameRound.bind(this), response);\n    }\n\n    //******************************************************************************************************************\n    //  SHOW & UPDATE SYMBOLS\n    //******************************************************************************************************************\n\n    private initSymbols(): void {\n        if (this.reel) {\n            this.currentSymbols = [];\n            this.currentSymbolsHeight = [];\n            // this.stripIndex = Math.floor(Math.random() * JackpotGame.Strip.length);\n            this.stripIndex = (JackpotGame.Strip.indexOf(4) + 2 + JackpotGame.Strip.length) % JackpotGame.Strip.length; //start with diamond symbols\n\n            //get rootHeight\n            if (!this.rootHeight) {\n                this.rootHeight = this.getElementHeight(this.root);\n            }\n\n            let symbolId: number;\n\n            //getSymbolsHeight\n            this.symbolsHeight = [];\n            for (let i = 0; i < JackpotGame.SymbolsCount; i++) {\n                symbolId = i + 1;\n                let symbol = this.createElement(\"div\", \"jackpotSymbol l-\" + symbolId, this.reel);\n                this.symbolsHeight.push(this.getElementHeight(symbol));\n\n                this.reel.removeChild(symbol);\n            }\n        }\n    }\n\n    private createSymbols(): void {\n        if (this.reel) {\n            //add start symbols queue\n            let symbolId: number;\n            for (let i = 0; i < JackpotGame.SpinPreRollSymbolCount; i++) {\n                this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\n                symbolId = JackpotGame.Strip[this.stripIndex];\n                this.addSymbolToReel(symbolId, false, i > 3);\n            }\n\n            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\n            this.setTransformY(this.reel, this.currentOffset);\n        }\n    }\n\n    private updateSymbols(): void {\n        //clear number of elements to 3\n        while (this.currentSymbols.length > 3) {\n            this.currentSymbolsHeight.pop();\n            let symbol = this.currentSymbols.pop();\n            this.reel.removeChild(symbol);\n        }\n\n        if (this.isStopping) {\n            this.updatePostRollSymbols();\n        } else {\n            this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\n            let symbolId = JackpotGame.Strip[this.stripIndex];\n            this.addSymbolToReel(symbolId, false, true);\n\n            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\n            this.setTransformY(this.reel, this.currentOffset);\n\n            this.spinRoll();\n        }\n    }\n\n    private updatePostRollSymbols(): void {\n        //get finish strip index\n        if (this.gameData != null) {\n            let winSymbolId = this.gameData.game.symbols[JackpotGame.MiddleSymbolIndex];\n            let finishStripIndex = Math.floor(Math.random() * JackpotGame.Strip.length);\n\n            //check if finished symbol is our win symbol, if not try next\n            while (JackpotGame.Strip[finishStripIndex] != winSymbolId) {\n                finishStripIndex = (finishStripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\n            }\n\n            //set new strip index to finishStripIndex + postroll symbols - 1\n            this.stripIndex =\n                (finishStripIndex + (JackpotGame.SpinPostRollSymbolCount - 1) + JackpotGame.Strip.length) %\n                JackpotGame.Strip.length;\n\n            for (let i = 0; i < JackpotGame.SpinPostRollSymbolCount; i++) {\n                this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\n                let symbolId = JackpotGame.Strip[this.stripIndex];\n                this.addSymbolToReel(symbolId, i == JackpotGame.SpinPostRollSymbolCount - 2, i < 8);\n            }\n\n            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\n            this.setTransformY(this.reel, this.currentOffset);\n\n            this.spinPostRoll();\n        }\n    }\n\n    private removeOffScreenSymbols(): void {\n        //clear number of elements to 3\n        while (this.currentSymbols.length > 3) {\n            this.currentSymbolsHeight.pop();\n            let symbol = this.currentSymbols.pop();\n            this.reel.removeChild(symbol);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SPIN\n    //******************************************************************************************************************\n\n    private spinStart(): void {\n        //remove spin btn\n        if (this.spinBtn) {\n            this.spinBtn.parentElement.removeChild(this.spinBtn);\n        }\n\n        document.removeEventListener(\"keyup\", this.lastEvent);\n\n        this.updateWin(false, \"0\");\n\n        PlayList.stop(\"SND_JackpotIntroWaitingLoop\");\n        PlayList.play(\"SND_JackpotStartHit\");\n        PlayList.play(\"SND_JackpotWheelMusic\");\n\n        this.stoppedFromMachine = false;\n        this.stoppedFromServer = false;\n\n        if (this.holder) {\n            this.holder.classList.remove(\"start\");\n            this.holder.classList.remove(\"startFinished\");\n            this.holder.classList.add(\"spin\");\n        }\n\n        this.isStopping = false;\n        this.stopTimer.start(JackpotGame.MinSpinDuration);\n        this.spinPreRoll();\n    }\n\n    private spinPreRoll(): void {\n        let nextOffset = this.getReelOffset(1);\n        this.symbolStepOffsets = this.getSymbolStepOffsets(1);\n        this.animate(\n            this.currentOffset,\n            nextOffset,\n            this.updateSymbols,\n            JackpotGame.SpinPreRollDuration,\n            \"Power2.easeIn\",\n            0,\n            <() => void>this.onSpinPostRollUpdate,\n        );\n    }\n\n    //******************************************************************************************************************\n    //  ROLL\n    //******************************************************************************************************************\n\n    private spinRoll(): void {\n        let nextOffset = this.getReelOffset(1);\n        let duration = this.getSpinRollDuration(nextOffset);\n\n        this.symbolStepOffsets = this.getSymbolStepOffsets(1);\n        this.animate(\n            this.currentOffset,\n            nextOffset,\n            this.updateSymbols,\n            duration,\n            \"linear\",\n            0,\n            <() => void>this.onSpinPostRollUpdate,\n        );\n    }\n\n    //******************************************************************************************************************\n    //  POST ROLL\n    //******************************************************************************************************************\n\n    private spinPostRoll(): void {\n        Jackpot.refreshBonusInfoInMiniGame(this.createLevelDataOverride(false));\n\n        let nextOffset = this.getReelOffset(1);\n        this.symbolStepOffsets = this.getSymbolStepOffsets(1);\n        this.animate(\n            this.currentOffset,\n            nextOffset,\n            this.spinComplete,\n            JackpotGame.SpinPostRollDuration,\n            \"miniGameSpinStopEase\",\n            0,\n            <() => void>this.onSpinPostRollUpdate,\n        );\n    }\n\n    private onSpinPostRollUpdate(tween: TweenMax): void {\n        if (this.symbolStepOffsets.length > 0) {\n            if (tween.target._gsTransform.y > this.symbolStepOffsets[0]) {\n                PlayList.play(\"SND_JackpotWheelClick1\");\n\n                if (this.holder) {\n                    this.holder.classList.remove(\"hit\");\n                    this.holder.offsetWidth;\n                    this.holder.classList.add(\"hit\");\n                }\n\n                this.symbolStepOffsets.shift();\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  COMPLETE\n    //******************************************************************************************************************\n\n    private spinComplete(): void {\n        //close all opened dialogs\n        HtmlController.dispatchAction(\"\");\n\n        if (this.gameData != null) {\n            this.showWinDelay.start(135);\n\n            if (this.gameData.game.limit) {\n                LimitDialog.openDialog();\n            }\n        }\n\n        this.removeOffScreenSymbols();\n        Jackpot.refreshBonusInfoWithWinValue(this.createLevelDataOverride(true));\n        let isHigh = this.createWinValue();\n        PlayList.stop(\"SND_JackpotWheelMusic\", 30);\n        PlayList.play(\"SND_JackpotWinMusic\");\n\n        this.outro();\n    }\n\n    private updateWin(collected: boolean, value: string = \"\"): void {\n        this.showWinDelay.stop();\n        let uncollectedWin = document.getElementById(\"uncollectedWin\");\n        let collectedWin = document.getElementById(\"collectedWin\");\n\n        if (uncollectedWin != null && collectedWin != null) {\n            if (!StringUtils.isNullOrEmpty(value)) {\n                HtmlController.updateDataElement(GameData.DataTotalWin, value);\n            } else {\n                HtmlController.updateDataElement(GameData.DataTotalWin, this.gameData.game.win.amount.toString());\n            }\n\n            if (collected) {\n                uncollectedWin.classList.add(\"_hidden\");\n                collectedWin.classList.remove(\"_hidden\");\n            } else {\n                uncollectedWin.classList.remove(\"_hidden\");\n                collectedWin.classList.add(\"_hidden\");\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SPIN ANIMATION\n    //******************************************************************************************************************\n\n    private animate(\n        currentOffset: number,\n        newOffset: number,\n        callback: () => void,\n        duration: number,\n        ease: string = \"linear\",\n        delay: number = 0,\n        updateCallback: () => void = null,\n    ): void {\n        duration = duration * GsapEffects.TickTime;\n        delay = delay * GsapEffects.TickTime;\n\n        TweenMax.killTweensOf(this.reel);\n        let tween = TweenMax.fromTo(\n            this.reel,\n            duration,\n            { y: currentOffset, roundProps: \"y\" },\n            { y: newOffset, ease: ease, delay: delay, roundProps: \"y\" },\n        );\n\n        this.currentOffset = newOffset;\n\n        if (!Utils.isNullOrUndefined(callback)) {\n            tween.eventCallback(\"onComplete\", callback, [], this);\n        }\n\n        if (!Utils.isNullOrUndefined(updateCallback)) {\n            tween.eventCallback(\"onUpdate\", updateCallback, [\"{self}\"], this);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  WIN COUNTER\n    //******************************************************************************************************************\n\n    public createWinValue(): boolean {\n        if (this.gameData != null) {\n            let winValue = Languages.formatText(Languages.FormatMoney, this.gameData.game.win.amount.toString());\n\n            if (this.winContainer) {\n                let childs = this.winContainer.children;\n\n                for (let i = 0; i < winValue.length; i++) {\n                    if (!childs[i]) {\n                        this.createElement(\"div\", \"n\" + winValue.charCodeAt(i).toString(), this.winContainer);\n                    } else {\n                        childs[i].className = \"n\" + winValue.charCodeAt(i).toString();\n                    }\n                }\n            }\n\n            return this.gameData.game.win.level == \"Gold\" || this.gameData.game.win.level == \"Diamond\";\n        }\n\n        return false;\n    }\n\n    //******************************************************************************************************************\n    //  HELPER\n    //******************************************************************************************************************\n\n    public getRoot(): HTMLElement {\n        return this.root;\n    }\n\n    private getElementHeight(elem: HTMLElement): number {\n        return parseInt(window.getComputedStyle(elem).height);\n    }\n\n    private getSpinRollDuration(newOffset: number): number {\n        let diff = Math.abs(this.currentOffset - newOffset);\n        return Math.round((diff / this.symbolsHeight[0]) * JackpotGame.SpinRollSpeed);\n    }\n\n    private getReelOffset(middleSymbolIndex: number): number {\n        let offset = Math.round(this.rootHeight * 0.5);\n\n        if (this.currentSymbols.length > 0) {\n            for (let i = 0; i < middleSymbolIndex; i++) {\n                offset -= this.currentSymbolsHeight[i];\n            }\n\n            offset -= Math.round(this.currentSymbolsHeight[middleSymbolIndex] * 0.5);\n        }\n\n        return offset;\n    }\n\n    private getSymbolStepOffsets(middleSymbolIndex: number): Array<number> {\n        let offset = this.currentOffset;\n        let result: Array<number> = [];\n\n        if (this.currentSymbols.length > 2) {\n            offset += this.currentSymbolsHeight[this.currentSymbols.length - 2] * 0.5;\n            result.push(offset);\n\n            for (let i = this.currentSymbolsHeight.length - 3; i > middleSymbolIndex; i--) {\n                offset += this.currentSymbolsHeight[i];\n                result.push(offset);\n            }\n        }\n\n        return result;\n    }\n\n    private createElement(\n        tag: string,\n        className: string,\n        rootElem?: HTMLElement,\n        appendBefore: HTMLElement = null,\n    ): HTMLElement {\n        let elem = document.createElement(tag);\n        elem.setAttribute(\"class\", className);\n\n        if (rootElem != null) {\n            if (appendBefore != null) {\n                rootElem.insertBefore(elem, appendBefore);\n            } else {\n                rootElem.appendChild(elem);\n            }\n        }\n\n        return elem;\n    }\n\n    private createSymbol(\n        tag: string,\n        className: string,\n        rootElem?: HTMLElement,\n        appendBefore: HTMLElement = null,\n    ): HTMLElement {\n        let elem = document.createElement(tag);\n        elem.setAttribute(\"class\", className);\n\n        let symbolHolder = document.createElement(tag);\n        symbolHolder.className = \"jackpotSymbolHolder\";\n        elem.appendChild(symbolHolder);\n\n        if (rootElem != null) {\n            if (appendBefore != null) {\n                rootElem.insertBefore(elem, appendBefore);\n            } else {\n                rootElem.appendChild(elem);\n            }\n        }\n\n        return elem;\n    }\n\n    //ToDo prerobit na resource ID\n    private createTextElement(tag: string, className: string, text: string, rootElem?: HTMLElement): HTMLElement {\n        let elem = this.createElement(tag, className, rootElem);\n        elem.innerHTML = text;\n\n        return elem;\n    }\n\n    private createSpinBtn(): void {\n        let userControls = document.getElementById(\"userControls\");\n        if (userControls) {\n            let spinBtn = userControls.getElementsByClassName(\"spinBtn\")[0];\n            if (spinBtn) {\n                let parent = spinBtn.parentElement;\n                this.spinBtn = this.createElement(\"div\", \"btn spinBtn\", parent);\n                this.spinBtn.innerHTML = spinBtn.innerHTML;\n                this.spinBtn.addEventListener(\"click\", this.startGame.bind(this));\n\n                this.lastEvent = this.handleSpaceStart.bind(this);\n                document.addEventListener(\"keyup\", this.lastEvent);\n            }\n        }\n    }\n\n    private createLevelDataOverride(winData: boolean): IProgressiveBonusLevel {\n        let result = {} as IProgressiveBonusLevel;\n\n        if (this.gameData != null) {\n            result.code = this.gameData.game.win.level;\n\n            //to always show minigame win value in counter\n            if (winData) {\n                result.lastWinAmount = this.gameData.game.win.amount;\n            } else {\n                result.nextValue = this.gameData.game.win.amount;\n                result.nextTimestamp = new Date(new Date().getTime() + 8000).toISOString();\n                result.previousValue = this.gameData.game.win.amount;\n            }\n        }\n\n        return result;\n    }\n\n    private setTransformY(elem: HTMLElement, y: number): void {\n        elem.style.transform = \"translate3d(0, \" + y + \"px, 0)\";\n    }\n\n    private setStageVisibility(visible: boolean): void {\n        if (StageController.Stage != null) {\n            StageController.Stage.visible = visible;\n        }\n    }\n\n    private handleSpaceStart(event: KeyboardEvent): void {\n        if (event.keyCode == 32) {\n            this.startGame();\n        }\n    }\n\n    private addSymbolToReel(symbolId: number, winSymbol: boolean = false, blured: boolean = false): void {\n        let className = \"jackpotSymbol l-\" + symbolId;\n\n        if (winSymbol) {\n            className += \" jackpotWinSymbol\";\n            this.holder.classList.add(\"win-\" + symbolId);\n        }\n\n        if (blured) {\n            className += \" blur\";\n        }\n\n        let symbol = this.createSymbol(\"div\", className, this.reel, this.currentSymbols[0]);\n        // symbol.setAttribute('data-symbolId', symbolId.toString());\n        this.currentSymbols.unshift(symbol);\n        this.currentSymbolsHeight.unshift(this.symbolsHeight[symbolId - 1]);\n    }\n\n    private bounceCounters(enable: boolean): void {\n        let countersHolder = document.getElementById(\"jackpotCounters\");\n        let countersLogo = document.getElementById(\"jackpotLogo\");\n\n        if (countersHolder != null && countersLogo != null) {\n            if (enable) {\n                countersHolder.classList.add(\"jackpotBounce\");\n                countersLogo.classList.add(\"jackpotBounce\");\n            } else {\n                countersHolder.classList.remove(\"jackpotBounce\");\n                countersLogo.classList.remove(\"jackpotBounce\");\n            }\n        }\n    }\n\n    private getCustomContent(name: string, extension: string): Promise<Array<string>> {\n        return new Promise<Array<string>>((resolve: Function, reject: Function) => {\n            if (AppContext.gameConfiguration == null) {\n                resolve([name, \"\"]);\n                return;\n            }\n\n            if (AppContext.gameConfiguration.StaticContentUrl == \"\") {\n                resolve([name, \"\"]);\n                return;\n            }\n\n            let theme = AppContext.gameConfiguration.ProgressiveBonusTheme;\n            if (theme == \"\") {\n                if (AppContext.gameConfiguration.UseJackpotLocalization) {\n                    theme = Jackpot.JackpotTheme;\n                } else {\n                    resolve([name, \"\"]);\n                    return;\n                }\n            }\n\n            const staticContentUrl = AppContext.gameConfiguration.StaticContentUrl;\n            const spbFolder = \"SynotProgressiveBonus\";\n            const url = `${staticContentUrl}${spbFolder}/${theme}/${window[\"QUALITY\"]}/${name}${extension}`;\n            let img = document.createElement(\"img\");\n            img.setAttribute(\"src\", url);\n\n            img.addEventListener(\"load\", (ev) => {\n                resolve([name, url]);\n            });\n            img.addEventListener(\"error\", (ev) => {\n                resolve([name, \"\"]);\n            });\n        });\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Jackpot/JackpotGame.ts\n **/","import { ArrayUtils } from \"neo-common\";\nimport { TweenLite, Ease } from \"gsap\";\n\nexport class CustomEase extends Ease {\n    private id: string;\n    private data: string;\n    private lookup: Array<any>;\n    private points: Array<any>;\n    private rawBezier: Array<number>;\n\n    private fast: boolean;\n    private l: number;\n\n    private _numbersExp = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi;\n    private _svgPathExp = /[achlmqstvz]|(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi;\n    private _scientific = /[\\+\\-]?\\d*\\.?\\d+e[\\+\\-]?\\d+/gi;\n    private _needsParsingExp = /[cLlsS]/g;\n    private _bezierError = \"CustomEase only accepts Cubic Bezier data.\";\n\n    constructor(id: string, data: string, config?: any) {\n        super();\n\n        this.id = id;\n        if (id) {\n            Ease.map[id] = this;\n        }\n\n        this._calcEnd = true;\n        this.getRatio = this._getRatio; //speed optimization, faster lookups.\n\n        this.setData(data, config);\n    }\n\n    private _bezierToPoints(\n        x1: number,\n        y1: number,\n        x2: number,\n        y2: number,\n        x3: number,\n        y3: number,\n        x4: number,\n        y4: number,\n        threshold: number,\n        points: Array<any>,\n        index: number,\n    ) {\n        let x12 = (x1 + x2) / 2;\n        let y12 = (y1 + y2) / 2;\n        let x23 = (x2 + x3) / 2;\n        let y23 = (y2 + y3) / 2;\n        let x34 = (x3 + x4) / 2;\n        let y34 = (y3 + y4) / 2;\n        let x123 = (x12 + x23) / 2;\n        let y123 = (y12 + y23) / 2;\n        let x234 = (x23 + x34) / 2;\n        let y234 = (y23 + y34) / 2;\n        let x1234 = (x123 + x234) / 2;\n        let y1234 = (y123 + y234) / 2;\n        let dx = x4 - x1;\n        let dy = y4 - y1;\n        let d2 = Math.abs((x2 - x4) * dy - (y2 - y4) * dx);\n        let d3 = Math.abs((x3 - x4) * dy - (y3 - y4) * dx);\n        let length: number;\n\n        if (!points) {\n            points = [\n                { x: x1, y: y1 },\n                { x: x4, y: y4 },\n            ];\n            index = 1;\n        }\n        points.splice(index || points.length - 1, 0, { x: x1234, y: y1234 });\n        if ((d2 + d3) * (d2 + d3) > threshold * (dx * dx + dy * dy)) {\n            length = points.length;\n            this._bezierToPoints(x1, y1, x12, y12, x123, y123, x1234, y1234, threshold, points, index);\n            this._bezierToPoints(\n                x1234,\n                y1234,\n                x234,\n                y234,\n                x34,\n                y34,\n                x4,\n                y4,\n                threshold,\n                points,\n                index + 1 + (points.length - length),\n            );\n        }\n        return points;\n    }\n\n    private _pathDataToBezier(d: string) {\n        let a: RegExpMatchArray =\n            (d + \"\")\n                .replace(this._scientific, function (m) {\n                    let n = +m;\n                    let result = n < 0.0001 && n > -0.0001 ? 0 : n;\n                    return result.toString();\n                })\n                .match(this._svgPathExp) || [];\n\n        let path: Array<any> = [];\n        let relativeX = 0;\n        let relativeY = 0;\n        let elements = a.length;\n        let l = 2;\n        let i: number;\n        let x: number;\n        let y: number;\n        let command: string;\n        let isRelative: boolean;\n        let segment: any;\n        let startX: number;\n        let startY: number;\n        let prevCommand: string;\n        let difX: number;\n        let difY: number;\n        for (i = 0; i < elements; i++) {\n            prevCommand = command;\n            if (isNaN(parseFloat(a[i]))) {\n                command = a[i].toUpperCase();\n                isRelative = command !== a[i]; //lower case means relative\n            } else {\n                //commands like \"C\" can be strung together without any new command characters between.\n                i--;\n            }\n            x = +a[i + 1];\n            y = +a[i + 2];\n            if (isRelative) {\n                x += relativeX;\n                y += relativeY;\n            }\n            if (!i) {\n                startX = x;\n                startY = y;\n            }\n            if (command === \"M\") {\n                if (segment && segment.length < 8) {\n                    //if the path data was funky and just had a M with no actual drawing anywhere, skip it.\n                    path.length -= 1;\n                    l = 0;\n                }\n                relativeX = startX = x;\n                relativeY = startY = y;\n                segment = [x, y];\n                l = 2;\n                path.push(segment);\n                i += 2;\n                command = \"L\"; //an \"M\" with more than 2 values gets interpreted as \"lineTo\" commands (\"L\").\n            } else if (command === \"C\") {\n                if (!segment) {\n                    segment = [0, 0];\n                }\n                segment[l++] = x;\n                segment[l++] = y;\n                if (!isRelative) {\n                    relativeX = relativeY = 0;\n                }\n                segment[l++] = relativeX + parseFloat(a[i + 3]); //note: \"*1\" is just a fast/short way to cast the value as a Number. WAAAY faster in Chrome, slightly slower in Firefox.\n                segment[l++] = relativeY + parseFloat(a[i + 4]);\n                segment[l++] = relativeX = relativeX + parseFloat(a[i + 5]);\n                segment[l++] = relativeY = relativeY + parseFloat(a[i + 6]);\n                i += 6;\n            } else if (command === \"S\") {\n                if (prevCommand === \"C\" || prevCommand === \"S\") {\n                    difX = relativeX - segment[l - 4];\n                    difY = relativeY - segment[l - 3];\n                    segment[l++] = relativeX + difX;\n                    segment[l++] = relativeY + difY;\n                } else {\n                    segment[l++] = relativeX;\n                    segment[l++] = relativeY;\n                }\n                segment[l++] = x;\n                segment[l++] = y;\n                if (!isRelative) {\n                    relativeX = relativeY = 0;\n                }\n                segment[l++] = relativeX = relativeX + parseFloat(a[i + 3]);\n                segment[l++] = relativeY = relativeY + parseFloat(a[i + 4]);\n                i += 4;\n            } else if (command === \"L\" || command === \"Z\") {\n                if (command === \"Z\") {\n                    x = startX;\n                    y = startY;\n                    segment.closed = true;\n                }\n                if (command === \"L\" || Math.abs(relativeX - x) > 0.5 || Math.abs(relativeY - y) > 0.5) {\n                    segment[l++] = relativeX + (x - relativeX) / 3;\n                    segment[l++] = relativeY + (y - relativeY) / 3;\n                    segment[l++] = relativeX + ((x - relativeX) * 2) / 3;\n                    segment[l++] = relativeY + ((y - relativeY) * 2) / 3;\n                    segment[l++] = x;\n                    segment[l++] = y;\n                    if (command === \"L\") {\n                        i += 2;\n                    }\n                }\n                relativeX = x;\n                relativeY = y;\n            } else {\n                throw this._bezierError;\n            }\n        }\n        return path[0];\n    }\n\n    private _findMinimum(values: Array<number>) {\n        let l = values.length,\n            min = 999999999999,\n            i: number;\n        for (i = 1; i < l; i += 6) {\n            if (+values[i] < min) {\n                min = +values[i];\n            }\n        }\n        return min;\n    }\n\n    private _normalize(values: Array<number>, height?: number, originY?: number) {\n        //takes all the points and translates/scales them so that the x starts at 0 and ends at 1.\n        if (!originY && originY !== 0) {\n            originY = Math.max(+values[values.length - 1], +values[1]);\n        }\n        let tx = +values[0] * -1,\n            ty = -originY,\n            l = values.length,\n            sx = 1 / (+values[l - 2] + tx),\n            sy =\n                -height ||\n                (Math.abs(+values[l - 1] - +values[1]) < 0.01 * (+values[l - 2] - +values[0])\n                    ? this._findMinimum(values) + ty\n                    : +values[l - 1] + ty),\n            i: number;\n        if (sy) {\n            //typically y ends at 1 (so that the end values are reached)\n            sy = 1 / sy;\n        } else {\n            //in case the ease returns to its beginning value, scale everything proportionally\n            sy = -sx;\n        }\n        for (i = 0; i < l; i += 2) {\n            values[i] = (+values[i] + tx) * sx;\n            values[i + 1] = (+values[i + 1] + ty) * sy;\n        }\n    }\n\n    private _getRatio(p: number) {\n        var point = this.lookup[(p * this.l) | 0] || this.lookup[this.l - 1];\n        if (point.nx < p) {\n            point = point.n;\n        }\n        let result = point.y + ((p - point.x) / point.cx) * point.cy;\n        return result;\n    }\n\n    private setData(data: string, config?: any) {\n        this.data = data || \"0,0,1,1\";\n        this.points = [];\n        this.lookup = [];\n\n        let values = ArrayUtils.numberArray(this.data.match(this._numbersExp).join(\";\"));\n        let closest = 1;\n\n        let a1: any,\n            a2: any,\n            i: number,\n            inc: number,\n            j: number,\n            point: any,\n            prevPoint: any,\n            p: number,\n            precision: number;\n\n        precision = (config && config.precision) || 1;\n        this.fast = precision <= 1;\n\n        if (this._needsParsingExp.test(data) || (data.indexOf(\"M\") !== -1 && data.indexOf(\"C\") === -1)) {\n            values = this._pathDataToBezier(data);\n        }\n\n        this.l = values.length;\n\n        if (this.l === 4) {\n            values.unshift(0, 0);\n            values.push(1, 1);\n            this.l = 8;\n        } else if ((this.l - 2) % 6) {\n            throw this._bezierError;\n        }\n        if (+values[0] !== 0 || +values[this.l - 2] !== 1) {\n            let height = config && config.height ? config.height : null;\n            let originY = config && config.originY ? config.originY : null;\n            this._normalize(values, height, originY);\n        }\n\n        this.rawBezier = values;\n\n        for (i = 2; i < this.l; i += 6) {\n            a1 = { x: +values[i - 2], y: +values[i - 1] };\n            a2 = { x: +values[i + 4], y: +values[i + 5] };\n            this.points.push(a1, a2);\n            this._bezierToPoints(\n                a1.x,\n                a1.y,\n                +values[i],\n                +values[i + 1],\n                +values[i + 2],\n                +values[i + 3],\n                a2.x,\n                a2.y,\n                1 / (precision * 200000),\n                this.points,\n                this.points.length - 1,\n            );\n        }\n\n        this.l = this.points.length;\n        for (i = 0; i < this.l; i++) {\n            point = this.points[i];\n            prevPoint = this.points[i - 1] || point;\n            if (point.x > prevPoint.x || (prevPoint.y !== point.y && prevPoint.x === point.x) || point === prevPoint) {\n                //if a point goes BACKWARD in time or is a duplicate, just drop it.\n                prevPoint.cx = point.x - prevPoint.x; //change in x between this point and the next point (performance optimization)\n                prevPoint.cy = point.y - prevPoint.y;\n                prevPoint.n = point;\n                prevPoint.nx = point.x; //next point's x value (performance optimization, making lookups faster in getRatio()). Remember, the lookup will always land on a spot where it's either this point or the very next one (never beyond that)\n                if (\n                    this.fast &&\n                    i > 1 &&\n                    Math.abs(prevPoint.cy / prevPoint.cx - this.points[i - 2].cy / this.points[i - 2].cx) > 2\n                ) {\n                    //if there's a sudden change in direction, prioritize accuracy over speed. Like a bounce ease - you don't want to risk the sampling chunks landing on each side of the bounce anchor and having it clipped off.\n                    this.fast = false;\n                }\n                if (prevPoint.cx < closest) {\n                    if (!prevPoint.cx) {\n                        prevPoint.cx = 0.001; //avoids math problems in getRatio() (dividing by zero)\n                        if (i === this.l - 1) {\n                            //in case the final segment goes vertical RIGHT at the end, make sure we end at the end.\n                            prevPoint.x -= 0.001;\n                            closest = Math.min(closest, 0.001);\n                            this.fast = false;\n                        }\n                    } else {\n                        closest = prevPoint.cx;\n                    }\n                }\n            } else {\n                this.points.splice(i--, 1);\n                this.l--;\n            }\n        }\n\n        this.l = (1 / closest + 1) | 0;\n        inc = 1 / this.l;\n        j = 0;\n        point = this.points[0];\n        if (this.fast) {\n            for (i = 0; i < this.l; i++) {\n                //for fastest lookups, we just sample along the path at equal x (time) distance. Uses more memory and is slightly less accurate for anchors that don't land on the sampling points, but for the vast majority of eases it's excellent (and fast).\n                p = i * inc;\n                if (point.nx < p) {\n                    point = this.points[++j];\n                }\n                a1 = point.y + ((p - point.x) / point.cx) * point.cy;\n                this.lookup[i] = { x: p, cx: inc, y: a1, cy: 0, nx: 9 };\n                if (i) {\n                    this.lookup[i - 1].cy = a1 - this.lookup[i - 1].y;\n                }\n            }\n            this.lookup[this.l - 1].cy = this.points[this.points.length - 1].y - a1;\n        } else {\n            //this option is more accurate, ensuring that EVERY anchor is hit perfectly. Clipping across a bounce, for example, would never happen.\n            for (i = 0; i < this.l; i++) {\n                //build a lookup table based on the smallest distance so that we can instantly find the appropriate point (well, it'll either be that point or the very next one). We'll look up based on the linear progress. So it's it's 0.5 and the lookup table has 100 elements, it'd be like lookup[Math.floor(0.5 * 100)]\n                if (point.nx < i * inc) {\n                    point = this.points[++j];\n                }\n                this.lookup[i] = point;\n            }\n\n            if (j < this.points.length - 1) {\n                this.lookup[i - 1] = this.points[this.points.length - 2];\n            }\n        }\n        this._calcEnd = this.points[this.points.length - 1].y !== 1 || this.points[0].y !== 0; //ensures that we don't run into floating point errors. As long as we're starting at 0 and ending at 1, tell GSAP to skip the final calculation and use 0/1 as the factor.\n    }\n\n    public static create(id: string, data: string, config?: any): CustomEase {\n        return new CustomEase(id, data, config);\n    }\n\n    public static get(id: string): Ease {\n        return Ease.map[id];\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Effects/CustomEase.ts\n **/","import { Logger } from \"neo-common\";\n\n/**\n * @class AmbientBackground\n */\nexport class AmbientBackground {\n    static changeAmbientBackground(newBackgroundName: string, duration: number = 200, delay: number = 0): void {\n        let base = document.getElementById(\"ambientBackgroundBase\");\n        let transition = document.getElementById(\"ambientBackgroundTransition\");\n\n        if (base && transition) {\n            if (!transition.classList.contains(newBackgroundName)) {\n                transition.classList.remove(\"show\");\n                base.className = transition.className;\n\n                transition.style.transitionDuration = duration + \"ms\";\n                transition.style.transitionDelay = delay + \"ms\";\n                transition.className = \"\";\n                transition.offsetWidth;\n                transition.classList.add(newBackgroundName, \"show\");\n            }\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string which will be traced to browser console.\n     * @return void\n     */\n    static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"Scaling\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/AmbientBackground.ts\n **/","import { Utils, Logger } from \"neo-common\";\nimport { Platforms } from \"neo-games\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { Scaling } from \"./Scaling\";\n\n/**\n * @class Focus\n */\nexport class Focus {\n    static clicked: boolean = false;\n\n    static focus(): void {\n        window.onblur = Focus.onBlur;\n        window.onfocus = Focus.onFocus;\n        window.onclick = Focus.onClick;\n\n        window.addEventListener(\"fullscreenchange\", Focus.onFullscreenChange.bind(this));\n    }\n\n    static onClick(): void {\n        if (\n            AppContext.gameConfiguration &&\n            AppContext.gameConfiguration.FullscreenOnClick &&\n            !Scaling.IsIOs &&\n            !Platforms.Platforms.handleFullscreen\n        ) {\n            if (document.body.requestFullscreen) {\n                document.body.requestFullscreen();\n            } else if (document.body.webkitRequestFullscreen) {\n                document.body.webkitRequestFullscreen();\n            }\n        }\n\n        if (!Focus.clicked) {\n            Focus.clicked = true;\n        }\n    }\n\n    static onFullscreenChange(e: Event): void {\n        Platforms.Platforms.fullscreen(document.fullscreenElement != null);\n    }\n\n    static onFocus(): void {\n        if (AppContext.gameConfiguration && AppContext.gameConfiguration.MuteOnLostFocus) {\n            PIXI.sound.unmuteAll();\n        }\n    }\n\n    static onBlur(): void {\n        if (AppContext.gameConfiguration && AppContext.gameConfiguration.MuteOnLostFocus) {\n            PIXI.sound.muteAll();\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string which will be traced to browser console.\n     * @return void\n     */\n    static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"Focus\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Focus.ts\n **/","import {\n    UriHelper,\n    Logger,\n    StringUtils,\n    lodash,\n    CommonTypes,\n    PreloaderProviderBase,\n    PreloaderResourceLoader,\n    PreloaderResourceItem,\n    PreloaderInfo,\n} from \"neo-common\";\n\nimport { Platforms } from \"neo-games\";\n\nimport { SndResource } from \"../Resources/SndResource\";\nimport { XmlResource } from \"../Resources/XmlResource\";\nimport { SoundManager } from \"./SoundManager\";\nimport { StyleManager } from \"./StyleManager\";\nimport { CanvasManager } from \"./CanvasManager\";\nimport { ConfigurationManager } from \"./ConfigurationManager\";\nimport { HtmlManager } from \"./HtmlManager\";\nimport { StageController } from \"../StageController\";\nimport { ActionManager } from \"./ActionManager\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { GameApp } from \"../../GameApp\";\nimport { ILoadingElement } from \"../Elements/Interfaces/ILoadingElement\";\nimport { GameManager } from \"../../Managers/GameManager\";\n\nconst DOCUMENT_TYPE = \"document\";\n\nconst PIXI_EVENTS = {\n    Load: \"load\",\n    Error: \"error\",\n    Complete: \"complete\",\n};\n\nconst LOADJS_EVENTS = {\n    FileLoad: \"fileload\",\n    Complete: \"complete\",\n    Progress: \"progress\",\n    Error: \"error\",\n};\n\nconst RESOURCE_FLAGS = {\n    Gamble: \"G\",\n};\n\nexport class PreloaderProvider extends PreloaderProviderBase {\n    private static _loadingElements: Array<ILoadingElement> = [];\n    private static _loadedGroups: Array<string> = [];\n\n    private _resourceLoader: PIXIResourceLoader;\n    private _audioResourceLoader: PIXIResourceLoader;\n\n    get resourceLoader(): PreloaderResourceLoader {\n        return this._resourceLoader;\n    }\n\n    get audioResourceLoader(): PreloaderResourceLoader {\n        return this._audioResourceLoader;\n    }\n\n    public static addLoadingElementFunction(fnc: ILoadingElement): void {\n        PreloaderProvider._loadingElements.push(fnc);\n    }\n\n    constructor() {\n        super();\n        this._resourceLoader = new PIXIResourceLoader(false);\n        this._audioResourceLoader = new PIXIResourceLoader(true);\n    }\n\n    public static isGroupLoaded(group: string): boolean {\n        return PreloaderProvider._loadedGroups.indexOf(group) != -1;\n    }\n\n    cleanup(): void {\n        this._resourceLoader = null;\n        this._audioResourceLoader = null;\n        XmlResource.cleanup();\n        StyleManager.cleanup();\n    }\n\n    prepareFileList(resources: Array<PreloaderResourceItem>): void {\n        if (resources) {\n            var gambleIsDisabled = !AppContext.gameDefinition.Gamble;\n\n            lodash.remove(resources, (resource) => {\n                var gambleResource = this.resourceHasFlag(resource, RESOURCE_FLAGS.Gamble);\n                // if resource has flag 'G' (gamble) but game is disabled, remove it from resources to be loaded!\n                var removeRes = gambleResource && gambleIsDisabled;\n\n                if (DEBUG) {\n                    if (removeRes) {\n                        Logger.debugGroup(\n                            \"Preloader\",\n                            `Gamble disabled -> removing resource path '${resource.path}' (because has gamble flag) from file list to be loaded.`,\n                        );\n                    }\n                }\n\n                return removeRes;\n            });\n        }\n    }\n\n    loadCompleted(): Promise<any> {\n        for (let i = 0; i < PreloaderProvider._loadingElements.length; i++) {\n            let fnc = PreloaderProvider._loadingElements[i];\n            if (fnc != null) {\n                fnc.onLoadCompleted(PreloaderInfo.instance.loadSucceed);\n            }\n        }\n\n        return new Promise<any>((resolve: any, reject: any) => {\n            resolve();\n        });\n    }\n\n    onUpdateProgress(progress: number): void {\n        Platforms.Platforms.loadProgress(progress);\n\n        for (let i = 0; i < PreloaderProvider._loadingElements.length; i++) {\n            let fnc = PreloaderProvider._loadingElements[i];\n            if (fnc != null) {\n                fnc.onProgressUpdate(progress);\n            }\n        }\n    }\n\n    loadGroupCompleted(group: string): void {\n        Logger.debugGroup(\"loadGroupCompleted\", `Loaded group: ${group}`);\n\n        if (PreloaderProvider._loadedGroups.indexOf(group) == -1) {\n            PreloaderProvider._loadedGroups.push(group);\n        }\n    }\n\n    handleGroupError(error: any, group: string): void {\n        //todo\n    }\n\n    parseCurrentElements(): void {\n        const xmlItems = XmlResource.Items;\n\n        if (xmlItems != null && xmlItems.length > 0) {\n            const tempElements = lodash.map(xmlItems, (item) => {\n                const el = item.documentElement;\n                const prio = el.hasAttribute(\"Priority\") ? parseInt(el.getAttribute(\"Priority\")) : -1;\n                if (prio === -1) {\n                    if (DEBUG) {\n                        Logger.errorGroup(\"Preloader\", `Element does not have \"Priority\" attr!`);\n                    }\n                }\n                return { element: el, priority: prio };\n            });\n\n            const elements = lodash.map(\n                lodash.orderBy(tempElements, (item) => item.priority, \"desc\"),\n                (x) => x.element,\n            );\n\n            // 1st) parse: config/sound/style elements\n            if (DEBUG) {\n                Logger.debugGroup(\"Preloader\", `Parse Elements started: ${new Date().toString()}`);\n            }\n\n            for (var i = 0; i < elements.length; i++) {\n                var element = elements[i];\n                ConfigurationManager.parseElements(element);\n                SoundManager.parseElements(element);\n            }\n\n            for (var i = 0; i < elements.length; i++) {\n                var element = elements[i];\n                StyleManager.parseElements(element);\n            }\n\n            for (var i = 0; i < elements.length; i++) {\n                var element = elements[i];\n                ActionManager.parseActionSets(element);\n            }\n\n            // 2nd) set correct language for body, as GameApp.handleStringsLoadCompleted may be skipped because of non-existing AppContext\n            document.body.setAttribute(\"Language\", GameApp.language);\n\n            // 3rd) parse: canvas/html elements\n            for (var i = 0; i < elements.length; i++) {\n                var element = elements[i];\n                CanvasManager.parseElements(element);\n                HtmlManager.parseElements(element);\n            }\n            if (DEBUG) {\n                Logger.debugGroup(\"Preloader\", `Parse Elements ended: ${new Date().toString()}`);\n            }\n        }\n\n        XmlResource.emptyItems();\n\n        if (DEBUG) {\n            Logger.debugGroup(\"Preloader\", `Parse xml resources ended.`);\n        }\n    }\n\n    parseElements(): Promise<any> {\n        return new Promise<any>((resolve: any, reject: any) => {\n            if (DEBUG) {\n                Logger.debugGroup(\"Preloader\", `Parse xml resources started`);\n            }\n\n            const xmlItems = XmlResource.Items;\n\n            if (xmlItems != null && xmlItems.length > 0) {\n                const tempElements = lodash.map(xmlItems, (item) => {\n                    const el = item.documentElement;\n                    const prio = el.hasAttribute(\"Priority\") ? parseInt(el.getAttribute(\"Priority\")) : -1;\n                    if (prio === -1) {\n                        if (DEBUG) {\n                            Logger.errorGroup(\"Preloader\", `Element does not have \"Priority\" attr!`);\n                        }\n                    }\n                    return { element: el, priority: prio };\n                });\n\n                const elements = lodash.map(\n                    lodash.orderBy(tempElements, (item) => item.priority, \"desc\"),\n                    (x) => x.element,\n                );\n\n                // 1st) parse: config/sound/style elements\n                if (DEBUG) {\n                    Logger.debugGroup(\"Preloader\", `Parse Elements started: ${new Date().toString()}`);\n                }\n\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    ConfigurationManager.parseElements(element);\n                    SoundManager.parseElements(element);\n                }\n\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    StyleManager.parseElements(element);\n                }\n\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    ActionManager.parseActionSets(element);\n                }\n\n                // 2nd) set correct language for body, as GameApp.handleStringsLoadCompleted may be skipped because of non-existing AppContext\n                document.body.setAttribute(\"Language\", GameApp.language);\n\n                // 3rd) parse: canvas/html elements\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    CanvasManager.parseElements(element);\n                    HtmlManager.parseElements(element);\n                }\n                if (DEBUG) {\n                    Logger.debugGroup(\"Preloader\", `Parse Elements ended: ${new Date().toString()}`);\n                }\n            }\n            if (DEBUG) {\n                Logger.debugGroup(\"Preloader\", `Parse xml resources ended.`);\n            }\n            resolve();\n        });\n    }\n}\n\nexport class PIXIResourceLoader extends PreloaderResourceLoader {\n    private _hasPreloaderVersionId: boolean;\n    private _loadSingleCompletedCallback: CommonTypes.ErrorFunction;\n    private _loadCompletedCallback: CommonTypes.ErrorFunction;\n    private _preloaderVersionId: string;\n    private _updatedTextures: Object;\n    private _loadingErrorCount: number;\n    private _loadingErrorFiles: Array<string>;\n    private _resourcesWithNoId: Object;\n\n    private loader: PIXI.loaders.Loader;\n\n    constructor(audio: boolean) {\n        super(audio);\n\n        this.loader = new PIXI.loaders.Loader();\n\n        this._hasPreloaderVersionId = null;\n        this._loadingErrorCount = 0;\n        this._loadingErrorFiles = [];\n        this._resourcesWithNoId = {};\n\n        this.handleBeforeLoad = this.handleBeforeLoad.bind(this);\n        this.handleLoad = this.handleLoad.bind(this);\n        this.handleError = this.handleError.bind(this);\n        this.handleComplete = this.handleComplete.bind(this);\n        this.handleGroupComplete = this.handleGroupComplete.bind(this);\n        this.updateTextureAfterLoad = this.updateTextureAfterLoad.bind(this);\n    }\n\n    cleanup(): void {\n        this._loadCompletedCallback = null;\n        this._updatedTextures = null;\n        this._preloaderVersionId = null;\n        this._loadingErrorCount = 0;\n        this._loadingErrorFiles = [];\n        this._resourcesWithNoId = null;\n\n        this.loader.reset();\n    }\n\n    xmlsResourceLoaded(document: XMLDocument, resource: PreloaderResourceItem): void {\n        const acceptedAsXmlResource = document && document.documentElement.nodeName === XmlResource.Root;\n        if (DEBUG) {\n            const extra = acceptedAsXmlResource ? \" and is accepted as xml resource for app\" : \"\";\n\n            Logger.debugGroup(\"Preloader\", `Resource \"${resource.path}\" is loaded as xml document` + extra);\n        }\n\n        if (acceptedAsXmlResource) {\n            XmlResource.add(document);\n        }\n    }\n\n    beforeResourcesLoad(): void {\n        this.loader.reset();\n        this._updatedTextures = {};\n        this.loader.use(this.updateTextureAfterLoad);\n    }\n\n    updateTextureAfterLoad(resource: PIXI.loaders.Resource, next: Function): void {\n        if (resource.data && (resource as any).isImage) {\n            if (resource.texture && resource.texture.baseTexture && resource.texture.baseTexture.hasLoaded) {\n                const imageUrl = resource.texture.baseTexture.imageUrl;\n                const noId = this._resourcesWithNoId.hasOwnProperty(imageUrl);\n\n                if (!this._updatedTextures.hasOwnProperty(imageUrl)) {\n                    if (noId) {\n                        if (DEBUG) {\n                            Logger.debugGroup(\n                                \"Preloader\",\n                                `Resource '${imageUrl}' has no 'id' assigned and will not be pushed to webgl cache`,\n                            );\n                        }\n                    } else {\n                        if (resource.name.substr(0, 3) === \"ANI\" || resource.name.substr(0, 5) === \"GROUP\") {\n                            StageController.updateTexture(resource.texture.baseTexture);\n                            this._updatedTextures[imageUrl] = true;\n                        }\n\n                        if (DEBUG) {\n                            Logger.debugGroup(\"Preloader\", `Updated texture '${imageUrl}' to webgl cache`);\n                        }\n                    }\n                }\n            }\n        }\n\n        try {\n            next();\n        } catch (e) {\n            this._loadCompletedCallback(e);\n        }\n    }\n\n    handleBeforeLoad(resource: PIXI.loaders.Resource, next: Function): void {\n        if (this._hasPreloaderVersionId) {\n            const oldurl = resource.url;\n            resource.url = UriHelper.setTimeStamp(resource.url, this._preloaderVersionId);\n\n            if (DEBUG && resource.url !== oldurl) {\n                Logger.debugGroup(\"Preloader\", `Resource url \"${oldurl}\" changed to non-cached url \"${resource.url}\"`);\n            }\n        }\n\n        try {\n            next();\n        } catch (e) {\n            this._loadCompletedCallback(e);\n        }\n    }\n\n    handleLoad(loader: any, resource: PIXI.loaders.Resource): void {\n        if (DEBUG) {\n            Logger.debugGroup(\n                \"Preloader\",\n                `Resource \"${resource.url}\" [${resource.xhrType}] [${this.preloader.progressPercent} %]`,\n            );\n        }\n\n        if (resource.xhrType === DOCUMENT_TYPE) {\n            const xmlRoot: string = resource.data.documentElement.nodeName;\n            if (xmlRoot === XmlResource.Root) {\n                throw new Error(`Should not be there!`);\n                //XmlResource.add(resource.data);\n            }\n        }\n\n        this._loadSingleCompletedCallback(false);\n    }\n\n    handleError(error: Error, loader: any, resource: PIXI.loaders.Resource): void {\n        if (DEBUG) {\n            Logger.errorGroup(\"Preloader\", `Resource load error: ${resource.url}`);\n        }\n\n        this._loadingErrorCount++;\n        this._loadingErrorFiles.push(resource.url);\n        this._loadSingleCompletedCallback(`Failed to load ${resource.url} resource!`);\n    }\n\n    handleComplete(): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"Preloader\", \"Completed PIXI resource load\");\n        }\n\n        if (this.audio) {\n            for (let key in this.loader.resources) {\n                if (key.indexOf(\"_meta\") !== -1) {\n                    const sound = key.substr(0, key.length - 5);\n\n                    if (PIXI.sound.exists(sound)) {\n                        let soundSprite: PIXI.sound.Sound = PIXI.sound.find(sound);\n\n                        if (lodash.isEmpty(soundSprite.sprites)) {\n                            soundSprite.addSprites(this.loader.resources[key].data.spritemap);\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    handleGroupComplete(): void {\n        this.loader.removeAllListeners(PIXI_EVENTS.Load);\n        this.loader.removeAllListeners(PIXI_EVENTS.Error);\n\n        this.handleComplete();\n\n        const loadError =\n            this._loadingErrorCount === 0\n                ? null\n                : `Failed to load ${this._loadingErrorCount} resources!: \\n${this._loadingErrorFiles.join(\",\\n\")}`;\n        this._loadingErrorCount = 0;\n        this._loadingErrorFiles = []; //reset counter of error for current group\n        this._loadCompletedCallback(loadError);\n    }\n\n    loadAllGroupsCompleted(): void {\n        // don't need to be implemented yed\n    }\n\n    loadResources(\n        resources: Array<PreloaderResourceItem>,\n        resolveSingleCallback: CommonTypes.ErrorFunction,\n        resolveCallback: CommonTypes.ErrorFunction,\n    ): void {\n        if (StageController.Renderer instanceof PIXI.CanvasRenderer) {\n            if (!AppContext.gameConfiguration.CanvasFallback) {\n                const loadingScreen = document.getElementById(\"loading\");\n                const element = document.getElementById(\"progressNumber\");\n\n                if (loadingScreen != null) {\n                    loadingScreen.classList.add(\"_error\");\n                }\n                if (element != null) {\n                    element.innerHTML = \"WebGL error. Please contact support.\";\n                }\n\n                return;\n            }\n        }\n\n        this._loadSingleCompletedCallback = resolveSingleCallback;\n        this._loadCompletedCallback = resolveCallback;\n\n        this._preloaderVersionId = this.preloader.versionId;\n        this._hasPreloaderVersionId = !StringUtils.isNullOrEmpty(this._preloaderVersionId);\n\n        for (let i = 0; i < resources.length; i++) {\n            const resource = resources[i];\n\n            if (StringUtils.isNullOrEmpty(resource.id)) {\n                this.loader.add(resource.path);\n                this._resourcesWithNoId[resource.path] = true;\n            } else {\n                this.loader.add(resource.id, resource.path);\n            }\n        }\n\n        this.loader.pre(this.handleBeforeLoad);\n        this.loader.on(\"load\" /*PIXI_EVENTS.Load*/, this.handleLoad);\n        this.loader.on(\"error\" /*PIXI_EVENTS.Error*/, this.handleError);\n        this.loader.once(\"complete\" /*PIXI_EVENTS.Complete*/, this.handleGroupComplete);\n        this.loader.load();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/PreloaderProvider.ts\n **/","import { Resource } from \"./Resource\";\n\n/**\n * The XmlResource is used for holding xmls from preloading.\n * @class XmlResource\n * @extends Resource\n */\nexport class XmlResource extends Resource {\n    static Root: string = \"Elements\";\n\n    private static items: Array<XMLDocument> = [];\n\n    public static get Items(): Array<XMLDocument> {\n        return XmlResource.items;\n    }\n\n    public static add(doc: XMLDocument): void {\n        XmlResource.items.push(doc);\n    }\n\n    public static cleanup(): void {\n        if (XmlResource.items) {\n            XmlResource.items.length = 0;\n            XmlResource.items = null;\n        }\n    }\n\n    public static emptyItems(): void {\n        if (XmlResource.items) {\n            XmlResource.items = [];\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Resources/XmlResource.ts\n **/","/**\n * The Resource class is used as parent for all types of resources.\n * @class Resource\n */\nexport class Resource {}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Resources/Resource.ts\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\nimport { ComponentTypes } from \"../ComponentTypes\";\nimport { StageController } from \"../StageController\";\nimport { ActionSet } from \"../ActionSet\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\n\n/**\n * The CanvasManager class is used for parsing elements which are extending display objects and render them to canvas.\n * @class CanvasManager\n */\nexport class CanvasManager {\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param data any\n     * @return void\n     */\n    private static log(data: any): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"CanvasManager\", data);\n        }\n    }\n\n    /**\n     * Parse display object elements from xml and add them to stage.\n     * @method parseElements\n     * @param {Element} startNode\n     * @param {PIXI.Container} parent\n     * @returns {Object}\n     */\n    static parseElements(startNode: Element, parent: PIXI.Container = null): Object {\n        const children: Object = {};\n\n        if (!startNode) {\n            return children;\n        }\n\n        CanvasManager.getNodesList(startNode.firstElementChild)\n            .reverse()\n            .filter(\n                (node: Element) =>\n                    node.hasAttribute(\"Class\") &&\n                    EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes.DisplayObject),\n            )\n            .forEach((node: Element) => {\n                const element: any = EngineComponentFactory.get(node.getAttribute(\"Class\"));\n                element.create(node);\n\n                if (node.hasAttribute(\"LinkId\")) {\n                    ActionSet.ElementsToLink[node.getAttribute(\"LinkId\")] = element;\n                }\n\n                var noGamble: boolean = false;\n\n                if (node.hasAttribute(\"Key\")) {\n                    if (node.getAttribute(\"Key\") === \"gamble\" && !AppContext.gameDefinition.Gamble) {\n                        noGamble = true;\n                    }\n                }\n\n                if (!noGamble) {\n                    CanvasManager._addElementToParent(element, parent);\n                    CanvasManager._handleElementController(node, element);\n                }\n\n                children[node.nodeName] = element;\n            });\n\n        return children;\n    }\n\n    /**\n     * Recursively extracts sibling nodes.\n     * @method getNodesList\n     * @param {Element} node\n     * @param {Array<Element>} nodeList\n     * @returns {Array<Element>}\n     */\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\n        if (!node) {\n            return nodeList;\n        }\n\n        if (node.nextElementSibling) {\n            nodeList = CanvasManager.getNodesList(node.nextElementSibling, nodeList);\n        }\n\n        return nodeList.concat(node);\n    }\n\n    /**\n     * Adds element either to its parent or to the stage\n     * @method _addElementToParent\n     * @param {PIXI.DisplayObject} element\n     * @param {PIXI.Container} parent\n     * @returns void\n     */\n    private static _addElementToParent(element: any, parent: PIXI.Container): void {\n        if (parent != null) {\n            parent.addChild(element);\n        } else if (element.children.length > 0) {\n            StageController.addChild(element);\n        }\n    }\n\n    /**\n     * If node has controller attribute, (creates new controller, inits it and) registers it\n     * @method _handleElementController\n     * @param {Element} node\n     * @param {any} element\n     * @returns void\n     */\n    private static _handleElementController(node: Element, element: any): void {\n        const controllerAttribute = node.hasAttribute(\"Controller\") ? node.getAttribute(\"Controller\") : \"\";\n        if (controllerAttribute === \"\") {\n            return;\n        }\n\n        const elementController: any = EngineComponentFactory.get(controllerAttribute);\n        if (elementController != null) {\n            elementController.startInitialization(element);\n            if (node.hasAttribute(\"Key\")) {\n                if (!AppContext.gameDefinition.Gamble && node.getAttribute(\"Key\") === \"gamble\") {\n                    return;\n                }\n                ModuleManager.registerGameModule(node.getAttribute(\"Key\"), elementController);\n            }\n        } else {\n            if (DEBUG) {\n                CanvasManager.log(\"ERROR no controller with name: \" + controllerAttribute);\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/CanvasManager.ts\n **/","import { engineComponent, EngineComponentFactory, Logger } from \"neo-common\";\nimport { ComponentTypes } from \"./ComponentTypes\";\nimport { ActionSetAttributes } from \"./ComponentAttributes\";\n\n/**\n * Registers action sets, their elements, actions and dispatch action on event.\n *\n * @class ActionSet\n * @author Marek Turkovic\n */\n@engineComponent(ComponentTypes.ActionSet)\nexport class ActionSet {\n    /**\n     * Registered actions per action block\n     * @type {{}}\n     */\n    static ActionSets: { [id: string]: any } = {};\n\n    /**\n     * Elements that we want to control.\n     * @type {{}}\n     */\n    static ElementsToLink: { [id: string]: any } = {};\n\n    /**\n     * Elements containing attributes Action, Event, ActionCase. These elements emits actions.\n     * @type {{}}\n     */\n    actionElements: { [id: string]: any } = {};\n\n    /**\n     * xml nodes added to object by case name\n     */\n    cases: Object = {};\n\n    /**\n     * Registers action sets, their elements and actions\n     * @param node\n     */\n    public RegisterActionSet(node: Element): void {\n        ActionSet.getNodesList(node.firstElementChild)\n            .reverse()\n            .forEach((actionSetNode: Element) => {\n                switch (actionSetNode.nodeName) {\n                    case \"Elements\":\n                        ActionSet.getNodesList(actionSetNode.firstElementChild)\n                            .reverse()\n                            .forEach((elementNode: Element) => {\n                                this.actionElements[elementNode.nodeName] = elementNode;\n                            });\n\n                        break;\n                    case \"Actions\":\n                        ActionSet.getNodesList(actionSetNode.firstElementChild)\n                            .reverse()\n                            .forEach((actionCase: Element) => {\n                                if (!actionCase.hasAttribute(ActionSetAttributes.CASE)) {\n                                    return;\n                                }\n\n                                if (this.cases[actionCase.getAttribute(ActionSetAttributes.CASE)] !== null) {\n                                    this.cases[actionCase.getAttribute(ActionSetAttributes.CASE)] = actionCase;\n                                } else {\n                                    if (DEBUG) {\n                                        this.log(\n                                            \"ERROR case \" +\n                                                actionCase.getAttribute(\"Case\") +\n                                                \" already exist in ActionSet \" +\n                                                node.nodeName,\n                                        );\n                                    }\n                                }\n                            });\n                        break;\n                }\n            });\n\n        ActionSet.ActionSets[node.nodeName] = this;\n    }\n\n    /**\n     * Recursively extracts sibling nodes.\n     * @method getNodesList\n     * @param node Element\n     * @param nodeList Array<Element>\n     * @return Array<Element>\n     */\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\n        if (!node) {\n            return nodeList;\n        }\n\n        if (node.nextElementSibling) {\n            nodeList = ActionSet.getNodesList(node.nextElementSibling, nodeList);\n        }\n\n        return nodeList.concat(node);\n    }\n\n    /**\n     * Perform set of actions on main element throught linked element.\n     *\n     * @param action\n     * @constructor\n     */\n    public DispatchEvent(action: string): void {\n        ActionSet.getNodesList(this.cases[action].firstElementChild)\n            .reverse()\n            .forEach((elementNode: Element) => {\n                const linkedElement = this.actionElements[elementNode.nodeName];\n                const classAttribute = linkedElement.hasAttribute(\"Class\") ? linkedElement.getAttribute(\"Class\") : \"\";\n\n                if (classAttribute === \"\") {\n                    if (DEBUG) {\n                        this.log(\"WARNING element with name: \" + linkedElement.nodeName + \" has no class\");\n                    }\n                    return;\n                }\n\n                if (!EngineComponentFactory.isTypeOf(classAttribute, ComponentTypes.LinkedElement)) {\n                    return;\n                }\n\n                const element: any = EngineComponentFactory.get(classAttribute);\n                element.create(linkedElement, elementNode);\n            });\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/ActionSet.ts\n **/","export const ActionSetAttributes = {\n    CASE: \"Case\",\n};\n\nexport const AnimationElementAttributes = {\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n\n    ANCHOR: \"Anchor\",\n    /*\n     * A ImageElement instance that defines a mask for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property BitmapMask\n     * @type string\n     * @default null\n     */\n    BITMAP_MASK: \"BitmapMask\",\n    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\n    BITMAP_MASK_X: \"BitmapMaskX\",\n    BITMAP_MASK_Y: \"BitmapMaskY\",\n    DEBUG_INFO: \"DebugInfo\",\n    DEBUG: \"Debug\",\n    /*\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property Mask\n     * @type ShapeElement\n     * @default null\n     */\n    MASK: \"Mask\",\n    /*\n     * X pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotX\n     * @type number\n     * @default null\n     */\n    PIVOT_X: \"PivotX\",\n    /*\n     * Y pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotY\n     * @type number\n     * @default null\n     */\n    PIVOT_Y: \"PivotY\",\n    /*\n     * Start playing animation.\n     * @property Play\n     * @type boolean\n     */\n    PLAY: \"Play\",\n    POSITION_TWEEN_X: \"PositionTweenX\",\n    POSITION_TWEEN_Y: \"PositionTweenY\",\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\n    POSITION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n    },\n    /*\n     *\n     */\n    RANDOM_START_FRAME: \"RandomStartFrame\",\n    /*\n     * Indicates if animation should animate reverse.\n     * @property Reverse\n     * @type boolean\n     * @default false\n     */\n    REVERSE: \"Reverse\",\n    /*\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    /*\n     * Tween rotation of this display object with children.\n     * For duration use RotateTweenDuration (number - frames).\n     * For tweenEase use RotateTweenEase (string - name of easeing function).\n     * @property RotateTweenDegrees\n     * @type Array<numbers> - consist of two values (start degrees; end degrees) or three values (start degrees, middle degrees, end degrees)\n     * @default null\n     */\n    ROTATION_TWEEN: \"RotationTween\",\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\n    /*\n     * Tween scale of this display object with children.\n     * For ease use ScaleTweenEase (string - name of easeing function).\n     * For scaling X use ScaleTweenX (consist of two values (start scaleX; end scaleX) or three values (start scaleX; middle scaleX, end scaleX)).\n     * For scaling Y use ScaleTweenY (consist of two values (start scaleY; end scaleY) or three values (start scaleY; middle scaleY, end scaleY)).\n     * @property ScaleTweenDuration\n     * @type number - frames\n     * @default null\n     */\n    SCALE_TWEEN: \"ScaleTween\",\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\n    /*\n     * The factor to stretch this display object horizontally.\n     * For example, setting scaleX to 2 will stretch the display object to twice its nominal width. To horizontally flip an object, set the scale to a negative number.\n     * @property ScaleX\n     * @type Number\n     * @default 1\n     */\n    SCALE_X: \"ScaleX\",\n    /*\n     * The factor to stretch this display object vertically.\n     * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n     * @property ScaleY\n     * @type Number\n     * @default 1\n     */\n    SCALE_Y: \"ScaleY\",\n    /*\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n     * @property Scale\n     * @type Number\n     * @default 1\n     */\n    SCALE: \"Scale\",\n    /*\n     * Random rotation in degrees for this display object.\n     * @property StartRotation\n     * @type Number\n     * @default null\n     */\n    START_ROTATION: \"StartRotation\",\n    STYLE: \"Style\",\n    STYLE2: \"Style2\",\n    /*\n     * Tint of animation. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n    /*\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\n     * @property Visible\n     * @type Boolean\n     * @default true\n     */\n    VISIBLE: \"Visible\",\n    /*\n     * X (horizontal) position of the display object, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /*\n     * Y (vertical) position of the display object, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n};\n\n/**\n *\n * @type {{ANIMATION: string; START_FRAME: string; END_FRAME: string; LOOP: string; STOP: string; SPEED: string; ALPHA: string; TINT: string; BLEND_MODE: string}}\n */\nexport const AnimationStyleAttributes = {\n    /*\n     * Animation is library ID from javascript libs.\n     * @property Animation\n     * @type string\n     * @default null\n     */\n    ANIMATION: \"Animation\",\n    /*\n     * Frames is a semicolon separated list of individual frames used for the animation\n     * @type string\n     * @default null\n     */\n    FRAMES: \"Frames\",\n    /*\n     * Start frame is number of frame when animation start on timeline.\n     * @property StartFrame\n     * @type number\n     * @default 0\n     */\n    START_FRAME: \"StartFrame\",\n    /*\n     * End frame is number of frame when animation ends on timeline.\n     * Use only if end frame is smaller then last frame on timeline.\n     * @property EndFrame\n     * @type number\n     * @default null\n     */\n    END_FRAME: \"EndFrame\",\n    /*\n     * Indicates whenever this MovieClip should loop when it reaches the end of its timeline.\n     * @property Loop\n     * @type boolean\n     * @default false\n     */\n    LOOP: \"Loop\",\n    /*\n     * Indicates whether this MovieClip shoud play only single frame animation.\n     * @property Stop\n     * @type boolean\n     * @default false\n     */\n    STOP: \"Stop\",\n    /*\n     * Speed of animation. Less than one will slow down animation. Calc with game FPS.\n     * @property Speed\n     * @type number\n     * @default 1\n     */\n    SPEED: \"Speed\",\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n    /*\n     * Tint of animation. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n    /*\n     * Blend mode for animation.\n     * Bleding modes:\n     *   0 = NORMAL;\n     *   1 = ADD;\n     *   2 = MULTIPLY;\n     *   3 = SCREEN;\n     *   4 = OVERLAY;\n     *   5 = DARKEN;\n     *   6 = LIGHTEN;\n     *   7 = COLOR_DODGE;\n     *   8 = COLOR_BURN;\n     *   9 = HARD_LIGHT;\n     *   10 = SOFT_LIGHT;\n     *   11 = DIFFERENCE;\n     *   12 = EXCLUSION;\n     *   13 = HUE;\n     *   14 = SATURATION;\n     *   15 = COLOR;\n     *   16 = LUMINOSITY;\n     * @property BlendMode\n     * @type number\n     * @default null\n     */\n    BLEND_MODE: \"BlendMode\",\n    /*\n     * Indicates if animation should animate reverse.\n     * @property Reverse\n     * @type boolean\n     * @default false\n     */\n    REVERSE: \"Reverse\",\n};\n\nexport const BaseElementAttributes = {\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\n    /*\n     * A ImageElement instance that defines a mask for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property BitmapMask\n     * @type string\n     * @default null\n     */\n    BITMAP_MASK: \"BitmapMask\",\n    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\n    BITMAP_MASK_X: \"BitmapMaskX\",\n    BITMAP_MASK_Y: \"BitmapMaskY\",\n    /*\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property Mask\n     * @type ShapeElement\n     * @default null\n     */\n    MASK: \"Mask\",\n    /*\n     * X pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotX\n     * @type number\n     * @default null\n     */\n    PIVOT_X: \"PivotX\",\n    /*\n     * Y pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotY\n     * @type number\n     * @default null\n     */\n    PIVOT_Y: \"PivotY\",\n    POSITION_TWEEN_POSITION: \"ChildsPositionTweenPosition\",\n    POSITION_TWEEN_X: \"ChildsPositionTweenX\",\n    POSITION_TWEEN_Y: \"ChildsPositionTweenY\",\n    POSITION_TWEEN_EASE: \"ChildsPositionTweenEase\",\n    POSITION_TWEEN_DELAY: \"ChildsPositionTweenDelay\",\n    POSITION_TWEEN_DURATION: \"ChildsPositionTweenDuration\",\n    POSITION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n    },\n    /*\n     *\n     */\n    ROTATION_TWEEN: \"RotationTween\",\n    /**\n     * @deprecated Use ROTATION_TWEEN instead ROTATION_TWEEN_DEGREES\n     */\n    ROTATION_TWEEN_DEGREES: \"RotationTweenDegrees\",\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\n    /*\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    SCALE_TWEEN: \"ScaleTween\",\n    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\n    /**\n     * @deprecated Use SCALE_TWEEN instead SCALE_TWEEN_DURATION\n     */\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\n    SCALE_TWEEN_X: \"ScaleTweenX\",\n    SCALE_TWEEN_Y: \"ScaleTweenY\",\n    /*\n     * The factor to stretch this display object horizontally.\n     * For example, setting scaleX to 2 will stretch the display object to twice its nominal width. To horizontally flip an object, set the scale to a negative number.\n     * @property ScaleX\n     * @type Number\n     * @default 1\n     */\n    /*\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n     * @property Scale\n     * @type Number\n     * @default 1\n     */\n    SCALE: \"Scale\",\n    SCALE_X: \"ScaleX\",\n    /*\n     * The factor to stretch this display object vertically.\n     * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n     * @property ScaleY\n     * @type Number\n     * @default 1\n     */\n    SCALE_Y: \"ScaleY\",\n    /*\n     * Random rotation in degrees for this display object.\n     * @property StartRotation\n     * @type Number\n     * @default null\n     */\n    START_ROTATION: \"StartRotation\",\n    TWEEN_ENGINE: \"TweenEngine\",\n    /*\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\n     * @property Visible\n     * @type Boolean\n     * @default true\n     */\n    VISIBLE: \"Visible\",\n    /*\n     * X (horizontal) position of the display object, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /*\n     * Y (vertical) position of the display object, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n};\n\nexport const ButtonElementAttributes = {\n    /*\n     * The X (horizontal) position of the shape, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /*\n     * The Y (vertical) position of the shape, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n\n    /*\n     * Shape's width.\n     * @property Width\n     * @type number\n     * @default null\n     */\n    WIDTH: \"Width\",\n    /*\n     * Shape's height.\n     * @property Height\n     * @type number\n     * @default null\n     */\n    HEIGHT: \"Height\",\n\n    ACTION: \"Action\",\n\n    EVENT: \"Event\",\n\n    ACTION_SET: \"ActionSet\",\n\n    HIT_AREA: \"HitArea\",\n};\n\n/**\n * XML has attributes ContainerElementAttributes, BaseElementAttributes\n * @type {{STYLE: string}}\n */\nexport const ContainerElementAttributes = {\n    STYLE: \"Style\",\n    MULTIPLY: \"Multiply\",\n    CHILDS: {\n        X: \"ChildsX\",\n        Y: \"ChildsY\",\n        SCALE: \"ChildsScale\",\n        ALPHA: \"ChildsAlpha\",\n        ROTATION: \"ChildsRotation\",\n\n        ALPHA_TWEEN: \"ChildsAlphaTween\",\n        ALPHA_TWEEN_EASE: \"ChildsAlphaTweenEase\",\n        ALPHA_TWEEN_DELAY: \"ChildsAlphaTweenDelay\",\n        ALPHA_TWEEN_DURATION: \"ChildsAlphaTweenDuration\",\n\n        ROTATION_TWEEN: \"ChildsRotationTween\",\n        ROTATION_TWEEN_EASE: \"ChildsRotationTweenEase\",\n        ROTATION_TWEEN_DELAY: \"ChildsRotationTweenDelay\",\n        ROTATION_TWEEN_DURATION: \"ChildsRotationTweenDuration\",\n\n        SCALE_TWEEN: \"ChildsScaleTween\",\n        SCALE_TWEEN_X: \"ChildsScaleTweenX\",\n        SCALE_TWEEN_Y: \"ChildsScaleTweenY\",\n        SCALE_TWEEN_EASE: \"ChildsScaleTweenEase\",\n        SCALE_TWEEN_DELAY: \"ChildsScaleTweenDelay\",\n        SCALE_TWEEN_DURATION: \"ChildsScaleTweenDuration\",\n\n        POSITION_TWEEN_POSITION: \"ChildsPositionTweenPosition\",\n        POSITION_TWEEN_X: \"ChildsPositionTweenX\",\n        POSITION_TWEEN_Y: \"ChildsPositionTweenY\",\n        POSITION_TWEEN_EASE: \"ChildsPositionTweenEase\",\n        POSITION_TWEEN_DELAY: \"ChildsPositionTweenDelay\",\n        POSITION_TWEEN_DURATION: \"ChildsPositionTweenDuration\",\n    },\n};\n\nexport const ImageElementAttributes = {\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\n    ANCHOR: \"Anchor\",\n    /**\n     * Target animation from where is specific frame selected. Attribute Frame=\"?\" needed.\n     */\n    FROM_FRAME: \"FromFrame\",\n    /*\n     * A ImageElement instance that defines a mask for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property BitmapMask\n     * @type string\n     * @default null\n     */\n    BITMAP_MASK: \"BitmapMask\",\n    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\n    BITMAP_MASK_X: \"BitmapMaskX\",\n    BITMAP_MASK_Y: \"BitmapMaskY\",\n    /*\n     * Blend mode for animation.\n     * Bleding modes:\n     *   0 = NORMAL;\n     *   1 = ADD;\n     *   2 = MULTIPLY;\n     *   3 = SCREEN;\n     *   4 = OVERLAY;\n     *   5 = DARKEN;\n     *   6 = LIGHTEN;\n     *   7 = COLOR_DODGE;\n     *   8 = COLOR_BURN;\n     *   9 = HARD_LIGHT;\n     *   10 = SOFT_LIGHT;\n     *   11 = DIFFERENCE;\n     *   12 = EXCLUSION;\n     *   13 = HUE;\n     *   14 = SATURATION;\n     *   15 = COLOR;\n     *   16 = LUMINOSITY;\n     * @property BlendMode\n     * @type number\n     * @default null\n     */\n    BLEND_MODE: \"BlendMode\",\n    /*\n     * If true cache image as bitmap.\n     * @property Cache\n     * @type boolean\n     * @default null\n     */\n    CACHE: \"Cache\",\n    DEBUG_INFO: \"DebugInfo\",\n    DEBUG: \"Debug\",\n\n    FRAME: \"Frame\",\n    /*\n     * Reference to image from resources.\n     * @property Image\n     * @type string\n     * @default 0\n     */\n    IMAGE: \"Image\",\n    /*\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property Mask\n     * @type ShapeElement\n     * @default null\n     */\n    MASK: \"Mask\",\n    /*\n     * X pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotX\n     * @type number\n     * @default null\n     */\n    PIVOT_X: \"PivotX\",\n    /*\n     * Y pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotY\n     * @type number\n     * @default null\n     */\n    PIVOT_Y: \"PivotY\",\n    POSITION_TWEEN_X: \"PositionTweenX\",\n    POSITION_TWEEN_Y: \"PositionTweenY\",\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\n    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\n    POSITION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n    },\n    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\n    /*\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    ROTATION_TWEEN: \"RotationTween\",\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\n    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\n    /**\n     *\n     */\n    SCALE_TWEEN: \"ScaleTween\",\n    SCALE_TWEEN_X: \"ScaleTweenX\",\n    SCALE_TWEEN_Y: \"ScaleTweenY\",\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\n    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\n    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\n    /*\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n     * @property Scale\n     * @type Number\n     * @default 1\n     */\n    SCALE: \"Scale\",\n    SCALE_X: \"ScaleX\",\n    /*\n     * The factor to stretch this display object vertically.\n     * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n     * @property ScaleY\n     * @type Number\n     * @default 1\n     */\n    SCALE_Y: \"ScaleY\",\n    /*\n     * Random rotation in degrees for this display object.\n     * @property StartRotation\n     * @type Number\n     * @default null\n     */\n    START_ROTATION: \"StartRotation\",\n    /*\n     * Tint of image. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n    TWEEN_ENGINE: \"TweenEngine\",\n    VISIBLE: \"Visible\",\n    /*\n     * X (horizontal) position of the display object, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /*\n     * Y (vertical) position of the display object, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n};\n\n/**\n *\n * @type {{DURATION: string; ROUND: string; FORCE: string}}\n */\nexport const ImageTextCounterElementAttributes = {\n    /*\n     * Duration in frames. This property set how long will counter running in frames.\n     * @property Duration\n     * @type number\n     * @default 0\n     */\n    DURATION: \"Duration\",\n    /*\n     * Round will show numbers without decimal places.\n     * @property Round\n     * @type boolean\n     * @default false\n     */\n    ROUND: \"Round\",\n    /*\n     * Force counting to end.\n     * @property Force\n     * @type boolean\n     * @default true\n     */\n    FORCE: \"Force\",\n    VALUE: \"Value\",\n};\n\n/**\n *\n * @type {{DURATION: string; ROUND: string; FORCE: string}}\n */\nexport const ImageTextElementAttributes = {\n    /*\n     * The text to display.\n     * @property Text\n     * @type string\n     * @default null\n     */\n    TEXT: \"Text\",\n    /*\n     * Bitmap font for text.\n     * @property Font\n     * @type string\n     * @default null\n     */\n    FONT: \"Font\",\n    /*\n     * The horizontal text alignment. Any of \"left\", \"right\", and \"center\".\n     * For detailed information view the whatwg spec. Default is \"left\".\n     * @property TextAlign\n     * @type string\n     * @default left\n     */\n    TEXT_ALIGN: \"TextAlign\",\n    TEXT_ALIGN_VALUE: {\n        CENTER: \"center\",\n        RIGHT: \"right\",\n    },\n    /*\n     * The vertical alignment point on the text.\n     * Any of \"top\", \"middle\" or \"bottom\". Default is \"top\".\n     * @property TextBaseline\n     * @type string\n     * @default top\n     */\n    TEXT_BASELINE: \"TextBaseline\",\n    TEXT_BASELINE_VALUE: {\n        MIDDLE: \"middle\",\n        BOTTOM: \"bottom\",\n    },\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n    /*\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    /*\n     * Random rotation in degrees for this display object.\n     * @property StartRotation\n     * @type Number\n     * @default null\n     */\n    START_ROTATION: \"StartRotation\",\n    /*\n     * The factor to stretch this display object horizontally.\n     * For example, setting scaleX to 2 will stretch the display object to twice its nominal width. To horizontally flip an object, set the scale to a negative number.\n     * @property ScaleX\n     * @type Number\n     * @default 1\n     */\n    SCALE_X: \"ScaleX\",\n    /*\n     * The factor to stretch this display object vertically.\n     * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n     * @property ScaleY\n     * @type Number\n     * @default 1\n     */\n    SCALE_Y: \"ScaleY\",\n    /*\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n     * @property Scale\n     * @type Number\n     * @default 1\n     */\n    SCALE: \"Scale\",\n    /*\n     * X (horizontal) position of the display object, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /*\n     * Y (vertical) position of the display object, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n    /*\n     * X pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotX\n     * @type number\n     * @default null\n     */\n    PIVOT_X: \"PivotX\",\n    /*\n     * Y pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotY\n     * @type number\n     * @default null\n     */\n    PIVOT_Y: \"PivotY\",\n    /*\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\n     * @property Visible\n     * @type Boolean\n     * @default true\n     */\n    VISIBLE: \"Visible\",\n    /*\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property Mask\n     * @type ShapeElement\n     * @default null\n     */\n};\n\nexport const LinkedElementAttributes = {\n    LINKED_TO_ID: \"LinkedToId\",\n};\n\n/**\n * Extended by BaseElementAttributes\n * @type {{TINT: string; BLEND_MODE: string; STYLE: string; STYLE2: string; START: string; EMIT: string; STOPPING: string; STOP: string; ALPHA_TWEEN_EASE: string; ALPHA_TWEEN_DELAY: string; ALPHA_TWEEN_DURATION: string; ROTATION_TWEEN: string; ROTATION_TWEEN_EASE: string; ROTATION_TWEEN_DURATION: string; ROTATION_TWEEN_DELAY: string; SCALE_TWEEN: string; SCALE_TWEEN_EASE: string; SCALE_TWEEN_DURATION: string; POSITION_TWEEN_X: string; POSITION_TWEEN_Y: string; POSITION_TWEEN_EASE: string; POSITION_TWEEN_DURATION: string; POSITION_TWEEN_POSITION: string; POSITION_TWEEN_POSITION_VALUE: {ABSOLUTE: string; RELATIVE: string}}}\n */\nexport const ParticleElementAttributes = {\n    /*\n     * Blend mode for animation.\n     * Bleding modes:\n     *   0 = NORMAL;\n     *   1 = ADD;\n     *   2 = MULTIPLY;\n     *   3 = SCREEN;\n     *   4 = OVERLAY;\n     *   5 = DARKEN;\n     *   6 = LIGHTEN;\n     *   7 = COLOR_DODGE;\n     *   8 = COLOR_BURN;\n     *   9 = HARD_LIGHT;\n     *   10 = SOFT_LIGHT;\n     *   11 = DIFFERENCE;\n     *   12 = EXCLUSION;\n     *   13 = HUE;\n     *   14 = SATURATION;\n     *   15 = COLOR;\n     *   16 = LUMINOSITY;\n     * @property BlendMode\n     * @type number\n     * @default null\n     */\n    BLEND_MODE: \"BlendMode\",\n    SPEED: \"Speed\",\n    EMIT_ONCE: \"EmitOnce\",\n    START_TYPE: \"StartType\",\n    // Tweens used in BaseElementParticle\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n\n    POSITION_TWEEN_X: \"PositionTweenX\",\n    POSITION_TWEEN_Y: \"PositionTweenY\",\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\n    POSITION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n    },\n\n    ROTATION_TWEEN: \"RotationTween\",\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\n\n    SCALE_TWEEN: \"ScaleTween\",\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\n    /*\n     * Style define animation. You can use one style on more than one place.\n     * Style for ParticleElement has to be instance of ParticleStyle.\n     * @property Style\n     * @type string\n     * @default null\n     */\n    STYLE: \"Style\",\n    STYLE2: \"Style2\",\n    EXTEND_STYLE: \"ExtendStyle\",\n    START: \"Start\",\n    STOPPING: \"Stopping\",\n    STOP: \"Stop\",\n    /*\n     * Tint of animation. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n    ATTR_COUNT: \"Count\",\n    ATTR_TIME: \"Time\",\n    ATTR_MIN: \"Min\",\n    ATTR_MAX: \"Max\",\n    ATTR_FROM_FRAME: \"FromFrame\",\n    ATTR_IMAGES: \"Images\",\n    ATTR_TYPE: \"Type\",\n    ATTR_X: \"X\",\n    ATTR_Y: \"Y\",\n    ATTR_RANDOM_X: \"RandomX\",\n    ATTR_RANDOM_Y: \"RandomY\",\n    ATTR_WIDTH: \"Width\",\n    ATTR_HEIGHT: \"Height\",\n    ATTR_VALUES: \"Values\",\n    ATTR_VALUE: \"Value\",\n};\n\n/**\n * XML has attributes SwitchElementAttributes, BaseElementAttributes\n * @type {{STYLE: string; CASE: string}}\n */\nexport const SwitchElementAttributes = {\n    /*\n     * Property case is used for set element to some case\n     * @property Case\n     * @type string\n     * @default null\n     */\n    CASE: \"Case\",\n    DEBUG_INFO: \"DebugInfo\",\n    /*\n     * Style holds elements as ContainerElement and also holds cases as xml nodes.\n     * Style for switch element has to be instance of SwitchStyle.\n     * @property Style\n     * @type string\n     * @default null\n     */\n    STYLE: \"Style\",\n};\n\nexport const SwitchStyleAttributes = {\n    CASE: \"Case\",\n};\n\nexport const SwitchStyleCaseAttributes = {\n    NEXT_CASE: \"NextCase\",\n    TIMER: \"Timer\",\n    HANDLER: \"Handler\",\n};\n\n/**\n *\n * @type {{DURATION: string; ROUND: string; FORCE: string}}\n */\nexport const TextElementAttributes = {\n    /**\n     * The text to display.\n     * @property Text\n     * @type string\n     * @default null\n     */\n    TEXT: \"Text\",\n    /*\n     * Bitmap font for text.\n     * @property Font\n     * @type string\n     * @default null\n     */\n    FONT: \"Font\",\n    /**\n     * The font size (as a number it converts to px, but as a string, equivalents are '26px','20pt','160%' or '1.6em')\n     */\n    SIZE: \"Size\",\n    /*\n     * The horizontal text alignment. Any of \"left\", \"right\", and \"center\".\n     * For detailed information view the whatwg spec. Default is \"left\".\n     * @property TextAlign\n     * @type string\n     * @default left\n     */\n    TEXT_ALIGN: \"TextAlign\",\n    TEXT_ALIGN_VALUE: {\n        LEFT: \"left\",\n        CENTER: \"center\",\n        RIGHT: \"right\",\n    },\n    /*\n     * The vertical alignment point on the text.\n     * Any of \"top\", \"middle\" or \"bottom\". Default is \"top\".\n     * @property TextBaseline\n     * @type string\n     * @default top\n     */\n    TEXT_BASELINE: \"TextBaseline\",\n    TEXT_BASELINE_VALUE: {\n        MIDDLE: \"middle\",\n        BOTTOM: \"bottom\",\n    },\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n    /*\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    /*\n     * Random rotation in degrees for this display object.\n     * @property StartRotation\n     * @type Number\n     * @default null\n     */\n    START_ROTATION: \"StartRotation\",\n    /*\n     * The factor to stretch this display object horizontally.\n     * For example, setting scaleX to 2 will stretch the display object to twice its nominal width. To horizontally flip an object, set the scale to a negative number.\n     * @property ScaleX\n     * @type Number\n     * @default 1\n     */\n    SCALE_X: \"ScaleX\",\n    /*\n     * The factor to stretch this display object vertically.\n     * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n     * @property ScaleY\n     * @type Number\n     * @default 1\n     */\n    SCALE_Y: \"ScaleY\",\n    /*\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n     * @property Scale\n     * @type Number\n     * @default 1\n     */\n    SCALE: \"Scale\",\n    /*\n     * X (horizontal) position of the display object, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /*\n     * Y (vertical) position of the display object, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n    /*\n     * X pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotX\n     * @type number\n     * @default null\n     */\n    PIVOT_X: \"PivotX\",\n    /*\n     * Y pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotY\n     * @type number\n     * @default null\n     */\n    PIVOT_Y: \"PivotY\",\n    /*\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\n     * @property Visible\n     * @type Boolean\n     * @default true\n     */\n    VISIBLE: \"Visible\",\n    /*\n     * Tint of image. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n};\n\n/**\n * XML has attributes TimelineElementAttributes, BaseElementAttributes\n * @type {{LOOP: string; TINT: string; STYLE: string; CLONE: string; SOUNDS: string; PLAY: string}}\n */\nexport const TimelineElementAttributes = {\n    /*\n     * Indicates whenever this element should loop when it reaches the end of its timeline.\n     * @property Loop\n     * @type boolean\n     * @default false\n     */\n    LOOP: \"Loop\",\n    /*\n     * Tint of animation. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n    /*\n     * Style holds elements as ContainerElement and also holds frames as xml nodes.\n     * Style for TimelineElement has to be instance of TimelineStyle.\n     * @property Style\n     * @type string\n     * @default null\n     */\n    STYLE: \"Style\",\n    CLONE: \"Clone\",\n    /*\n     * Playlist id for machine.\n     * @property Sounds\n     * @type string\n     * @default null\n     */\n    SOUNDS: \"Sounds\",\n    /*\n     * Start playing animation.\n     * @property Play\n     * @type boolean\n     */\n    PLAY: \"Play\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/ComponentAttributes.ts\n **/","import { Logger } from \"neo-common\";\nimport { Configuration } from \"../Configuration\";\n\n/**\n * The ConfigurationManager class is used for parsing elements which are type of Configuration and store them for next usage.\n * @class ConfigurationManager\n */\nexport class ConfigurationManager {\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param data any\n     * @return void\n     */\n    private static log(data: any): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"ConfigurationManager\", data);\n        }\n    }\n\n    /**\n     * Parse configuration from xml and store them for next usage.\n     * @method parseElements\n     * @param startNode Element\n     * @return void\n     */\n    static parseElements(startNode: Element): void {\n        if (!startNode) {\n            return;\n        }\n\n        ConfigurationManager.getNodesList(startNode.firstElementChild)\n            .reverse()\n            .filter((node: Element) => node.hasAttribute(\"Class\") && node.getAttribute(\"Class\") === \"Configuration\")\n            .forEach((node: Element) => (Configuration.Configurations[node.nodeName] = node));\n    }\n\n    /**\n     * Recursively extracts sibling nodes.\n     * @method getNodesList\n     * @param node Element\n     * @param nodeList Array<Element>\n     * @return Array<Element>\n     */\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\n        if (!node) {\n            return nodeList;\n        }\n\n        if (node.nextElementSibling) {\n            nodeList = ConfigurationManager.getNodesList(node.nextElementSibling, nodeList);\n        }\n\n        return nodeList.concat(node);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/ConfigurationManager.ts\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\nimport { ComponentTypes } from \"../ComponentTypes\";\nimport { HtmlElement } from \"../../HTMLComponents/Elements/HtmlElement\";\nimport { UserControls } from \"../../Channels/Common/UserControls/UserControls\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { GambleUserControls } from \"../../Channels/Common/UserControls/GambleUserControls\";\nimport { DesktopBaseUserControls } from \"../../Channels/Desktop/DesktopBaseUserControls\";\nimport { MobileBaseUserControls } from \"../../Channels/Mobile/MobileBaseUserControls\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { DesktopFreespinsUserControls } from \"../../Channels/Desktop/DesktopFreespinsUserControls\";\nimport { MobileFreespinsUserControls } from \"../../Channels/Mobile/MobileFreespinsUserControls\";\nimport { DesktopGambleUserControls } from \"../../Channels/Desktop/DesktopGambleUserControls\";\nimport { MobileGambleUserControls } from \"../../Channels/Mobile/MobileGambleUserControls\";\nimport { FireBirdFreespinsUserControls } from \"../../Channels/FireBird/FireBirdFreespinsUserControls\";\nimport { FireBirdBaseUserControls } from \"../../Channels/FireBird/FireBirdBaseUserControls\";\nimport { FireBirdGambleUserControls } from \"../../Channels/FireBird/FireBirdGambleUserControls\";\n\n/**\n * The HtmlManager class is used for parsing html elements which are extending html element and append them to index.html.\n * @class HtmlManager\n */\nexport class HtmlManager {\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param data any\n     * @return void\n     */\n    private static log(data: any): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"HtmlManager\", data);\n        }\n    }\n\n    /**\n     * Parse html elements from xml and append them to index.html.\n     * @method parseElements\n     * @param startNode Element\n     * @param parent HtmlElement\n     * @return void\n     */\n    static parseElements(startNode: Element, parent: HtmlElement = null): Object {\n        const children: Object = {};\n\n        if (!startNode) {\n            return;\n        }\n\n        HtmlManager.getNodesList(startNode.firstElementChild, [])\n            .reverse()\n            .filter(\n                (node: Element) =>\n                    node.hasAttribute(\"Class\") &&\n                    EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes.HtmlElement),\n            )\n            .forEach((node: Element) => {\n                const element: any = EngineComponentFactory.get(node.getAttribute(\"Class\"));\n                const root: HTMLElement = document.getElementById(\"root\");\n                let customRoot: HTMLElement;\n\n                if (node.hasAttribute(\"RootId\")) {\n                    customRoot = document.getElementById(node.getAttribute(\"RootId\"));\n                }\n\n                if (node.hasAttribute(\"Key\")) {\n                    if (!AppContext.gameDefinition.Gamble && node.getAttribute(\"Key\") === \"gamble\") {\n                        return;\n                    }\n\n                    if (Object.getPrototypeOf(element) instanceof UserControls) {\n                        ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\n                    }\n                }\n\n                if (element.instance != null) {\n                    if (parent != null) {\n                        parent.instance.appendChild(element.instance);\n                    } else {\n                        if (customRoot != null) {\n                            customRoot.appendChild(element.instance);\n                        } else if (root != null) {\n                            root.appendChild(element.instance);\n                        } else {\n                            document.body.appendChild(element.instance);\n                        }\n                    }\n                    element.create(node);\n                } else {\n                    element.create(node);\n                    if (parent != null) {\n                        parent.instance.appendChild(element.instance);\n                    } else {\n                        if (customRoot != null) {\n                            customRoot.appendChild(element.instance);\n                        } else if (root != null) {\n                            root.appendChild(element.instance);\n                        } else {\n                            document.body.appendChild(element.instance);\n                        }\n                    }\n                }\n\n                children[node.nodeName] = element;\n            });\n\n        return children;\n    }\n\n    /**\n     * Recursively extracts sibling nodes.\n     * @method getNodesList\n     * @param node Element\n     * @param nodeList Array<Element>\n     * @return Array<Element>\n     */\n    private static getNodesList(node: Element, nodeList: Array<Element>): Array<Element> {\n        if (!node) {\n            return nodeList;\n        }\n\n        if (node.nextElementSibling) {\n            nodeList = HtmlManager.getNodesList(node.nextElementSibling, nodeList);\n        }\n\n        return nodeList.concat(node);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/HtmlManager.ts\n **/","import { engineComponent, EngineComponentFactory } from \"neo-common\";\nimport { HtmlContainerElement } from \"../../../HTMLComponents/Elements/HtmlContainerElement\";\nimport { ComponentTypes } from \"../../../Components/ComponentTypes\";\nimport { ActionsTypes, ActionSet } from \"../Actions/ActionSet\";\nimport { Controller } from \"../../../GameComponents/Controller\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { GameManager } from \"../../../Managers/GameManager\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { GameData } from \"../Datas/GameData\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { BetManager } from \"../../../Managers/BetManager\";\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class UserControls extends HtmlContainerElement {\n    protected _key: string = \"\";\n    protected _actions: ActionSet;\n\n    private _betLabel: HTMLElement;\n    private _freeBetLabel: HTMLElement;\n    private _betLabelFS: HTMLElement;\n    private _freeBetLabelFS: HTMLElement;\n    private _betValue: HTMLElement;\n    private _betPlus: HTMLElement;\n    private _betMinus: HTMLElement;\n    private _uncollectedWin: HTMLElement;\n    private _collectedWin: HTMLElement;\n\n    constructor(key: string) {\n        super();\n\n        this._key = key;\n\n        this._actions = new ActionSet(`${this._key}.actions`, EngineComponentFactory.getComponentName(this));\n    }\n\n    protected get actions(): ActionSet {\n        return this._actions;\n    }\n\n    getAllActions(): ActionsTypes {\n        return this._actions.getAllActions();\n    }\n\n    create(node: Element): void {\n        super.create(node);\n    }\n\n    addController(controller: Controller): void {}\n\n    initReceived(): void {\n        this._uncollectedWin = document.getElementById(\"uncollectedWin\");\n        this._collectedWin = document.getElementById(\"collectedWin\");\n    }\n\n    collectReceived(): void {}\n\n    dispatchAction(action: string): void {}\n\n    collect(): void {}\n\n    initIntro(): void {}\n\n    flashBet(): void {\n        if (this._betValue == null) {\n            this._betValue = document.getElementById(\"betValue\");\n        }\n\n        if (this._betValue != null) {\n            this._betValue.classList.remove(\"flash\");\n            setTimeout(() => this._betValue.classList.add(\"flash\"), 33);\n            setTimeout(() => this._betValue.classList.remove(\"flash\"), 2000);\n            PlayList.play(\"SND_LowCredit\");\n        }\n    }\n\n    initNewBet(animate: boolean = true): void {\n        if (this._betLabel == null) {\n            this._betLabel = document.getElementById(\"betLabel\");\n        }\n\n        if (this._freeBetLabel == null) {\n            this._freeBetLabel = document.getElementById(\"freeBetLabel\");\n        }\n\n        if (this._betLabelFS == null) {\n            this._betLabelFS = document.getElementById(\"betLabelFS\");\n        }\n\n        if (this._freeBetLabelFS == null) {\n            this._freeBetLabelFS = document.getElementById(\"freeBetLabelFS\");\n        }\n\n        if (this._betValue == null) {\n            this._betValue = document.getElementById(\"betValue\");\n        }\n\n        if (this._betPlus == null) {\n            this._betPlus = document.getElementById(\"betPlus\");\n        }\n\n        if (this._betMinus == null) {\n            this._betMinus = document.getElementById(\"betMinus\");\n        }\n\n        if (FreeRoundBonus.inFrb) {\n            if (this._betLabel != null && !this._betLabel.classList.contains(\"_hidden\")) {\n                this._betLabel.classList.add(\"_hidden\");\n            }\n            if (this._freeBetLabel != null) {\n                if (this._freeBetLabel.classList.contains(\"_hidden\")) {\n                    this._freeBetLabel.classList.remove(\"_hidden\");\n                }\n                if (animate) {\n                    this._freeBetLabel.classList.remove(\"flash\");\n                    setTimeout(() => this._freeBetLabel.classList.add(\"flash\"), 33);\n                    setTimeout(() => this._freeBetLabel.classList.remove(\"flash\"), 2000);\n                }\n            }\n            if (this._betLabelFS != null && !this._betLabelFS.classList.contains(\"_hidden\")) {\n                this._betLabelFS.classList.add(\"_hidden\");\n            }\n            if (this._freeBetLabelFS != null) {\n                if (this._freeBetLabelFS.classList.contains(\"_hidden\")) {\n                    this._freeBetLabelFS.classList.remove(\"_hidden\");\n                }\n            }\n        } else {\n            if (this._freeBetLabel != null && !this._freeBetLabel.classList.contains(\"_hidden\")) {\n                this._freeBetLabel.classList.add(\"_hidden\");\n            }\n            if (this._betLabel != null) {\n                if (this._betLabel.classList.contains(\"_hidden\")) {\n                    this._betLabel.classList.remove(\"_hidden\");\n                }\n                if (animate) {\n                    this._betLabel.classList.remove(\"flash\");\n                    setTimeout(() => this._betLabel.classList.add(\"flash\"), 33);\n                    setTimeout(() => this._betLabel.classList.remove(\"flash\"), 2000);\n                }\n            }\n\n            if (this._freeBetLabelFS != null && !this._freeBetLabelFS.classList.contains(\"_hidden\")) {\n                this._freeBetLabelFS.classList.add(\"_hidden\");\n            }\n            if (this._betLabelFS != null) {\n                if (this._betLabelFS.classList.contains(\"_hidden\")) {\n                    this._betLabelFS.classList.remove(\"_hidden\");\n                }\n            }\n        }\n\n        if (this._betValue != null) {\n            if (animate) {\n                this._betValue.classList.remove(\"flash\");\n                setTimeout(() => this._betValue.classList.add(\"flash\"), 33);\n                setTimeout(() => this._betValue.classList.remove(\"flash\"), 2000);\n            }\n        }\n\n        if (BetManager.TotalBets.length > 1) {\n            if (this._betPlus != null && this._betPlus.classList.contains(\"_invisible\")) {\n                this._betPlus.classList.remove(\"_invisible\");\n            }\n\n            if (this._betMinus != null && this._betMinus.classList.contains(\"_invisible\")) {\n                this._betMinus.classList.remove(\"_invisible\");\n            }\n        } else {\n            if (this._betPlus != null && !this._betPlus.classList.contains(\"_invisible\")) {\n                this._betPlus.classList.add(\"_invisible\");\n            }\n\n            if (this._betMinus != null && !this._betMinus.classList.contains(\"_invisible\")) {\n                this._betMinus.classList.add(\"_invisible\");\n            }\n        }\n    }\n\n    changeBetColor(green: boolean = false): void {\n        if (this._betValue == null) {\n            this._betValue = document.getElementById(\"betValue\");\n        }\n\n        if (this._betValue != null) {\n            if (green) {\n                this._betValue.style.color = \"#39ff04\";\n            } else {\n                this._betValue.style.color = \"#ffffff\";\n            }\n        }\n    }\n\n    playCollectSound(): void {\n        if (GameManager.gameResponse.totalWin > 0) {\n            if (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod !== \"cumulative\") {\n                PlayList.play(\"SND_BaseCollect\");\n            } else if (!FreeRoundBonus.inFrb) {\n                PlayList.play(\"SND_BaseCollect\");\n            }\n        }\n    }\n\n    cycleHelp(): void {}\n\n    changeWinBox(collect: boolean = false): void {\n        if (AppContext != null && !AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\n            return;\n        }\n        if (this._uncollectedWin != null) {\n            if (collect) {\n                if (!this._uncollectedWin.classList.contains(\"_hidden\")) {\n                    this._uncollectedWin.classList.add(\"_hidden\");\n                }\n            } else {\n                if (this._uncollectedWin.classList.contains(\"_hidden\")) {\n                    DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n                    DataManager.updateDataElement(GameData.DataTotalWinDenom, \"0\");\n                    this._uncollectedWin.classList.remove(\"_hidden\");\n                }\n            }\n        }\n        if (this._collectedWin != null) {\n            if (collect) {\n                if (this._collectedWin.classList.contains(\"_hidden\")) {\n                    this._collectedWin.classList.remove(\"_hidden\");\n                }\n            } else {\n                if (!this._collectedWin.classList.contains(\"_hidden\")) {\n                    this._collectedWin.classList.add(\"_hidden\");\n                }\n            }\n        }\n    }\n\n    restoreGameRound(): void {}\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/UserControls/UserControls.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\nimport { HtmlElement } from \"./HtmlElement\";\nimport { HtmlContainerStyle } from \"../Styles/HtmlContainerStyle\";\nimport { StyleManager } from \"../../Components/Managers/StyleManager\";\nimport { HtmlManager } from \"../../Components/Managers/HtmlManager\";\nimport { HtmlController } from \"../HtmlController\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\n\n/**\n * The HtmlContainerElement class is class which creates holder for other html elements.\n * Can be defined also by Style with class HtmlContainerStyle.\n * Example 1:\n *   <HtmlContainerElement Class=\"HtmlContainerElement\">\n *       <Child1 />\n *       <Child1 />\n *       ...\n *   </HtmlContainerElement>\n *\n * Example 2:\n *   <HtmlContainerElement Class=\"HtmlContainerElement\" Style=\"HtmlContainerStyle\" />\n *\n * @class HtmlContainerElement\n * @extends HtmlElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlContainerElement extends HtmlElement {\n    static Over: string = \"mouseover\";\n    static Out: string = \"mouseout\";\n    static TouchStart: string = \"touchstart\";\n    static TouchEnd: string = \"touchend\";\n    static CustomClick: string = \"click\";\n\n    private _overId: string;\n    private _clickId: string;\n\n    childs: Object;\n    style: HtmlContainerStyle;\n\n    childrenHolderClass: string = \"\";\n    childrenClass: string = \"\";\n    recalculateHeight: boolean = false;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        if (node.hasAttribute(\"id\")) {\n            HtmlController.ContainerElementsById[node.getAttribute(\"id\")] = this;\n        }\n\n        /*\n         * Style can be define for better usage of html container elements.\n         * For example when you want to use same html element with same names on more than one places.\n         * Style for container element has to be instance of HtmlContainerStyle\n         * @property Style\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Style\")) {\n            // get style from loaded resources\n            this.style = <HtmlContainerStyle>StyleManager.HtmlStyles[node.getAttribute(\"Style\")];\n            if (this.style != null) {\n                // parse childs from style\n                this.childs = HtmlManager.parseElements(this.style.node, <HtmlElement>this);\n            } else {\n                if (DEBUG) {\n                    this.logError(\"ERROR no style with name \" + node.getAttribute(\"Style\"));\n                }\n            }\n        } else {\n            // parse childs from node\n            this.childs = HtmlManager.parseElements(node, <HtmlElement>this);\n        }\n\n        if (this.childs == null) {\n            if (DEBUG) {\n                this.log(\"WARNING html container element with name \" + node.nodeName + \" has no children\");\n            }\n        }\n\n        /*\n         * Attribute OnOver define element which will be react to over event handled from this element.\n         * @property OnOver\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"OnOver\")) {\n            if (node.hasAttribute(\"OnOverAction\")) {\n                var actionEnabled: boolean = HtmlController.Configurations[node.getAttribute(\"OnOverAction\")];\n                if (actionEnabled) {\n                    this._overId = node.getAttribute(\"OnOver\");\n                }\n            } else {\n                this._overId = node.getAttribute(\"OnOver\");\n            }\n        }\n\n        if (node.hasAttribute(\"ChildrenHolderClass\")) {\n            this.childrenHolderClass = node.getAttribute(\"ChildrenHolderClass\");\n        }\n        if (node.hasAttribute(\"ChildrenClass\")) {\n            this.childrenClass = node.getAttribute(\"ChildrenClass\");\n        }\n\n        if (node.hasAttribute(\"RecalculateHeight\")) {\n            this.recalculateHeight = StringUtils.parseBoolean(node.getAttribute(\"RecalculateHeight\"));\n        }\n\n        if (node.hasAttribute(\"OnClick\")) {\n            if (node.hasAttribute(\"OnClickAction\")) {\n                this._clickId = node.getAttribute(\"OnClick\");\n                this.instance.addEventListener(HtmlContainerElement.CustomClick, this.onCustomClick.bind(this));\n            }\n        }\n\n        if (this._overId != null) {\n            this.instance.addEventListener(HtmlContainerElement.Over, this.onOver.bind(this));\n            this.instance.addEventListener(HtmlContainerElement.Out, this.onOut.bind(this));\n        }\n\n        if (node.hasAttribute(\"ActionsHolder\")) {\n            HtmlController.registerActionsHoldersElement(node.getAttribute(\"ActionsHolder\"), this);\n        }\n\n        /*\n         * Test is html data attribute for automated testing support.\n         * @property Test\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Test\")) {\n            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\n        }\n\n        /*\n         * Attribute UIDispatcher define element which will be dispatch UI action from this element.\n         * @property UIDispatcher\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"UIDispatcher\")) {\n            HtmlController.registerUiDispatchElement(node.getAttribute(\"UIDispatcher\"), this);\n        }\n\n        /*\n         * Attribute UIActionDispatcher define element which will be dispatch UI action from this element.\n         * @property UIActionDispatcher\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"UIActionDispatcher\")) {\n            HtmlController.registerUiActionDispatchElement(node.getAttribute(\"UIActionDispatcher\"), this);\n        }\n\n        /**\n         * Attribute TouchScroll define element scrollable by touchmove.\n         * @type {boolean}\n         */\n        let touchScroll: boolean = false;\n        if (node.hasAttribute(\"TouchScroll\")) {\n            touchScroll = StringUtils.parseBoolean(node.getAttribute(\"TouchScroll\"));\n        }\n\n        if (touchScroll) {\n            this.enableScrollOnTouchmove();\n        }\n    }\n\n    /**\n     *\n     */\n    private enableScrollOnTouchmove(): void {\n        var allowScrollUp = true;\n        var allowScrollDown = true;\n        var lastY = 0;\n        let self = this;\n\n        /**\n         * On Touchstart event remember init values.\n         */\n        this.instance.addEventListener(\n            \"touchstart\",\n            function (event) {\n                // Decide enabled direction\n                allowScrollUp = this.scrollTop > 0;\n                allowScrollDown = this.scrollTop < this.scrollHeight - this.clientHeight;\n\n                // Remember where the touch started\n                lastY = event.touches[0].pageY;\n            },\n            true,\n        );\n\n        /**\n         * On Touchmove event decide if scroll if possible up or down.\n         */\n        this.instance.addEventListener(\n            \"touchmove\",\n            function (event) {\n                // Action only for one finger touch\n                if (event.touches.length === 1) {\n                    // Trying move by touch up or down?\n                    let up = event.touches[0].pageY > lastY;\n                    let down = !up;\n                    lastY = event.touches[0].pageY;\n\n                    // Trying to start past scroller bounds\n                    if ((up && allowScrollUp) || (down && allowScrollDown)) {\n                        // Stop this event from propagating, lest another object cancel it.\n                        event.stopPropagation();\n                    } else {\n                        // Cancel this event\n                        event.preventDefault();\n                    }\n                }\n            },\n            true,\n        );\n    }\n\n    /**\n     * Handler for on over event.\n     * @method onOver\n     * @return void\n     */\n    private onOver(): void {\n        if (this._overId != null) {\n            var element: HTMLElement = document.getElementById(this._overId);\n            if (element != null) {\n                element.classList.remove(HtmlController.DisabledClass);\n            }\n        }\n    }\n\n    /**\n     * Handler for on out event.\n     * @method onOut\n     * @return void\n     */\n    private onOut(): void {\n        if (this._overId != null) {\n            var element: HTMLElement = document.getElementById(this._overId);\n            if (element != null) {\n                element.classList.add(HtmlController.DisabledClass);\n            }\n        }\n    }\n\n    private onCustomClick(): void {\n        if (this._clickId != null && HtmlController.ContainerElementsById[this._clickId] != null) {\n            PlayList.play(\"SND_Click\");\n            var element: HtmlContainerElement = HtmlController.ContainerElementsById[this._clickId];\n            if (element != null && element.instance != null) {\n                if (element.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(\"\");\n                    if (element.recalculateHeight) {\n                        element.recalculateChildrenHeight(element);\n                    }\n                    element.reset();\n                    element.instance.classList.remove(HtmlController.DisabledClass);\n                } else {\n                    if (element.recalculateHeight) {\n                        element.instance.removeAttribute(\"style\");\n                    }\n                    element.instance.classList.add(HtmlController.DisabledClass);\n                }\n                if (document.getElementById(\"autoPlayDialogTop\") != null) {\n                    document.getElementById(\"autoPlayDialogTop\").scrollTop = 0;\n                }\n            }\n        }\n    }\n\n    recalculateChildrenHeight(element: HtmlContainerElement): void {\n        if (element.instance != null && element.childrenHolderClass != \"\" && element.childrenClass != \"\") {\n            let holders: NodeListOf<Element> = element.instance.getElementsByClassName(element.childrenHolderClass);\n            if (holders[0] != null) {\n                let paddingTop: number = parseInt(\n                    window.getComputedStyle(holders[0], null).getPropertyValue(\"padding-top\"),\n                );\n                let paddingBottom: number = parseInt(\n                    window.getComputedStyle(holders[0], null).getPropertyValue(\"padding-bottom\"),\n                );\n                let holdersChildren: NodeListOf<Element> = holders[0].getElementsByClassName(element.childrenClass);\n                if (holdersChildren != null && holdersChildren.length > 0) {\n                    let height: number = paddingTop + paddingBottom;\n                    for (let i: number = 0; i < holdersChildren.length; i++) {\n                        let itemHeight: number = parseInt(\n                            window.getComputedStyle(holdersChildren[i], null).getPropertyValue(\"height\"),\n                        );\n                        height += itemHeight;\n                    }\n                    element.instance.style.height = height + \"px\";\n                }\n            }\n        }\n    }\n\n    changeState(value: boolean): void {\n        if (this.instance != null) {\n            if (value) {\n                this.instance.classList.remove(HtmlController.DisabledClass);\n            } else {\n                this.instance.classList.add(HtmlController.DisabledClass);\n                if (this._clickId != null && HtmlController.ContainerElementsById[this._clickId] != null) {\n                    var element: HtmlContainerElement = HtmlController.ContainerElementsById[this._clickId];\n                    if (element != null && element.instance != null) {\n                        if (!element.instance.classList.contains(HtmlController.DisabledClass)) {\n                            if (element.recalculateHeight) {\n                                element.instance.removeAttribute(\"style\");\n                            }\n                            element.instance.classList.add(HtmlController.DisabledClass);\n                        }\n                    }\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no instance\");\n            }\n        }\n    }\n\n    reset(): void {}\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlContainerElement.ts\n **/","import { Logger, engineComponent, StringUtils } from \"neo-common\";\nimport { HtmlController } from \"../HtmlController\";\nimport { Languages } from \"../../Utils/Languages\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { GameApp } from \"../../GameApp\";\n\n/**\n * HtmlElement handle basic properties for all kind of html elements.\n * @class HtmlElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlElement {\n    data: string;\n\n    instance: HTMLElement;\n\n    rid: string;\n    ridType: string;\n    ridFilter: string;\n\n    private currentValue: string;\n\n    constructor(tagName: string = \"div\") {\n        if (tagName !== \"\") {\n            this.instance = document.createElement(tagName);\n        }\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        /*\n         * CSS id reference.\n         * @property id\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"id\")) {\n            this.instance.id = node.getAttribute(\"id\");\n        }\n\n        /*\n         * Filter text when reach some values. For example NO_ZERO will dont show zero values.\n         * @property RidFilter\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"RidFilter\")) {\n            this.ridFilter = node.getAttribute(\"RidFilter\");\n        }\n\n        /*\n         * RidType is typing for formating text. For example use MONEY to have number on two decimal places.\n         * @property RidType\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"RidType\")) {\n            this.ridType = node.getAttribute(\"RidType\");\n        }\n\n        /*\n         * Rid is key from languages.\n         * @property Rid\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Rid\")) {\n            this.rid = node.getAttribute(\"Rid\");\n            HtmlController.RidElements.push(this);\n            this.setText();\n        }\n\n        /*\n         * CssClass is html class attribute.\n         * @property CssClass\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"CssClass\")) {\n            this.instance.className = node.getAttribute(\"CssClass\");\n        }\n\n        /*\n         * Test is html data attribute for automated testing support.\n         * @property Test\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Test\")) {\n            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\n        }\n\n        /*\n         * Data will handle dynamic texts dynamic from system.\n         * @property Data\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Data\")) {\n            this.data = node.getAttribute(\"Data\");\n            HtmlController.registerDataElement(node.getAttribute(\"Data\"), this);\n        }\n\n        if (node.hasAttribute(\"Lang\") && this.instance != null && GameApp.language != null) {\n            this.instance.setAttribute(\"Language\", GameApp.language);\n        }\n    }\n\n    /**\n     * Set text content to instance if exists\n     * @method setText\n     * @param value string\n     * @return void\n     */\n    setText(value?: string): void {\n        var text: string = \"\";\n\n        if (value != null) {\n            text = value;\n            this.currentValue = value;\n        }\n\n        if (this.instance != null) {\n            // find out rid from languages if element has rid\n            if (this.rid != null) {\n                if (Languages.getRid(this.rid) != null) {\n                    if (!StringUtils.isNullOrEmpty(text)) {\n                        var texts: Array<string> = text.split(\";\");\n                        if (texts.length === 2) {\n                            text = Languages.getRid(this.rid, texts[0], texts[1]);\n                        } else {\n                            text = Languages.getRid(this.rid, text);\n                        }\n                    } else {\n                        text = Languages.getRid(this.rid);\n                    }\n                }\n            }\n            // format text with ridType\n            if (this.ridType != null) {\n                text = Languages.formatText(this.ridType, text);\n            }\n            // filter text based on rid filter\n            if (this.ridFilter != null) {\n                text = Languages.filterText(this.ridFilter, text);\n                if (this.ridFilter === Languages.FilterNoZero && this.instance.classList.contains(\"bonus\")) {\n                    if (text === \"\") {\n                        this.instance.classList.add(\"_hidden\");\n                    } else {\n                        this.instance.classList.remove(\"_hidden\");\n                    }\n                }\n            }\n            // set text to instance\n            this.instance.innerHTML = text;\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no instance\");\n            }\n        }\n    }\n\n    updateText(): void {\n        var text: string = \"\";\n\n        if (this.currentValue != null) {\n            text = this.currentValue;\n        }\n\n        if (this.instance != null) {\n            // find out rid from languages if element has rid\n            if (this.rid != null) {\n                if (Languages.getRid(this.rid) != null) {\n                    if (!StringUtils.isNullOrEmpty(text)) {\n                        var texts: Array<string> = text.split(\";\");\n                        if (texts.length === 2) {\n                            text = Languages.getRid(this.rid, texts[0], texts[1]);\n                        } else {\n                            text = Languages.getRid(this.rid, text);\n                        }\n                    } else {\n                        text = Languages.getRid(this.rid);\n                    }\n                }\n            }\n\n            // format text with ridType\n            if (this.ridType != null) {\n                text = Languages.formatText(this.ridType, text);\n            }\n\n            // filter text based on rid filter\n            if (this.ridFilter != null) {\n                text = Languages.filterText(this.ridFilter, text);\n\n                if (this.ridFilter === Languages.FilterNoZero && this.instance.classList.contains(\"bonus\")) {\n                    if (text === \"\") {\n                        this.instance.classList.add(\"_hidden\");\n                    } else {\n                        this.instance.classList.remove(\"_hidden\");\n                    }\n                }\n            }\n\n            // set text to instance\n            this.instance.innerHTML = text;\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no instance\");\n            }\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected logError(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.errorGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlElement.ts\n **/","import { Logger, Utils } from \"neo-common\";\n\nexport type ActionsTypes = { [action: string]: boolean };\n\n/**\n * @type BatchUpdatesFunction - predicate function where is able to do multiple batched actions changes and\n * only after on updates ends, event 'onChange' is triggered once!\n * @returns true if where was any changes, false if there was not changes (and thus no 'onChange' is called on end)\n */\nexport type BatchUpdatesFunction = (actions: IActionSet) => boolean | void;\n\nexport interface IActionSet {\n    changeActionState(action: string, value: boolean): boolean;\n}\n\n/**\n * @class ActionsData - List of actions and its states.\n */\nexport class ActionSet implements IActionSet {\n    private _setName: string;\n    private _owner: string;\n    private _actions: ActionsTypes = {};\n    private _batchUpdatesActive: boolean;\n    private _onChange: Function;\n    private _readonly: boolean;\n\n    constructor(setName: string, owner: string) {\n        this._setName = setName;\n        this._owner = owner;\n        this._batchUpdatesActive = false;\n        this._readonly = false;\n\n        this.registerActions = this.registerActions.bind(this);\n        this.registerAction = this.registerAction.bind(this);\n        this.changeActionState = this.changeActionState.bind(this);\n        this.getActionState = this.getActionState.bind(this);\n        this.getAllActions = this.getAllActions.bind(this);\n        this.batchUpdates = this.batchUpdates.bind(this);\n        this.disableAllActions = this.disableAllActions.bind(this);\n        this.invokeOnChange = this.invokeOnChange.bind(this);\n    }\n\n    public get onChange(): Function {\n        return this._onChange;\n    }\n\n    public set onChange(value: Function) {\n        this._onChange = value;\n    }\n\n    private log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(this._owner, `[${this._setName}] ` + s);\n        }\n    }\n\n    private logError(s: string, e?: Error): void {\n        if (DEBUG) {\n            Logger.errorGroup(this._owner, e, `[${this._setName}] ` + s);\n        }\n    }\n\n    private invokeOnChange(): void {\n        if (this._onChange && !this._batchUpdatesActive) {\n            try {\n                this.onChange();\n            } catch (e) {\n                if (DEBUG) {\n                    this.logError(\"invokeOnChange\", e);\n                }\n            }\n        }\n    }\n\n    private checkForReadonly(): void {\n        if (this._readonly) {\n            throw new Error(`ActionSet \"${this._owner}\" [${this._setName}] is readonly!`);\n        }\n    }\n\n    private beginBatchUpdates(): void {\n        this.checkForReadonly();\n\n        if (this._batchUpdatesActive) {\n            throw new Error(`\"${this._owner}\" [${this._setName}] Other batch updates is in pending state!`);\n        }\n\n        this._batchUpdatesActive = true;\n    }\n\n    private endBatchUpdates(hasChanges: boolean): void {\n        this.checkForReadonly();\n\n        this._batchUpdatesActive = false;\n\n        // when return is null or undefined we assume that something HAS changed (return bool was forgotten?)\n        if (Utils.isNullOrUndefined(hasChanges)) {\n            hasChanges = true;\n        }\n\n        if (hasChanges) {\n            this.invokeOnChange();\n        }\n    }\n\n    public batchUpdates(updateFn: BatchUpdatesFunction): void {\n        this.beginBatchUpdates();\n\n        var hasChanges: boolean;\n        try {\n            hasChanges = updateFn(this) as boolean;\n        } finally {\n            this.endBatchUpdates(hasChanges);\n        }\n    }\n\n    /**\n     * @method registerActions - registers multiple actions at once, on end event 'onChange' is triggered.\n     * @param actions - list of actions with its initial state value.\n     */\n    public registerActions(actions: ActionsTypes): void {\n        this.beginBatchUpdates();\n\n        try {\n            for (var key in actions) {\n                if (actions.hasOwnProperty(key)) {\n                    this.registerAction(key, actions[key]);\n                }\n            }\n        } finally {\n            this.endBatchUpdates(true);\n        }\n    }\n\n    /**\n     * Register game action for specific controller and add him default value.\n     * @method registerAction\n     * @param action string name of action\n     * @param value boolean default value false\n     * @return true if successfully registered, otherwise returns false\n     */\n    private registerAction(action: string, value: boolean = false): boolean {\n        this.checkForReadonly();\n\n        var notExist = Utils.isNullOrUndefined(this._actions[action]);\n        if (notExist) {\n            this._actions[action] = value;\n\n            this.invokeOnChange();\n        } else {\n            if (DEBUG) {\n                this.log(\n                    `[changeActionState] Could not register action '${action}', action was already registered!` +\n                        ` all actions: ${JSON.stringify(this._actions)}`,\n                );\n            }\n        }\n\n        return notExist;\n    }\n\n    /**\n     * @method changeActionStates - change value to multiple actions at once, after which event 'onChange' is triggered.\n     * @param actionNames\n     * @param value\n     */\n    public changeActionStates(actions: ActionsTypes): void;\n    public changeActionStates(value: boolean, actionNames: Array<string>): void;\n    public changeActionStates(actionsOrValue: boolean | ActionsTypes, actionNames?: Array<string>): void {\n        this.beginBatchUpdates();\n\n        try {\n            var hasValue = typeof actionsOrValue === \"boolean\";\n            if (hasValue) {\n                for (var i = 0; i < actionNames.length; i++) {\n                    var action = actionNames[i];\n                    this.changeActionState(action, actionsOrValue as boolean);\n                }\n            } else {\n                for (var key in actionsOrValue as ActionsTypes) {\n                    if ((actionsOrValue as ActionsTypes).hasOwnProperty(key)) {\n                        this.changeActionState(key, (actionsOrValue as ActionsTypes)[key]);\n                    }\n                }\n            }\n        } finally {\n            this.endBatchUpdates(true);\n        }\n    }\n\n    /**\n     * Change value for specific action.\n     * @method changeActionState\n     * @param action string name of action\n     * @param value boolean\n     * @return true when state was successfully changed, otherwise returns false\n     */\n    public changeActionState(action: string, value: boolean): boolean {\n        this.checkForReadonly();\n\n        var exist = !Utils.isNullOrUndefined(this._actions[action]);\n\n        if (exist) {\n            this._actions[action] = value;\n\n            this.invokeOnChange();\n        } else {\n            if (DEBUG) {\n                this.log(\n                    `[changeActionState] Could not change action '${action}' value to '${value}', action was not registered!` +\n                        ` all actions: ${JSON.stringify(this._actions)}`,\n                );\n            }\n        }\n\n        return exist;\n    }\n\n    /**\n     * Get action state (true - action is enabled, false - action is disabled)\n     * @method getActionState\n     * @param action string name of action\n     * @return boolean\n     */\n    public getActionState(action: string): boolean {\n        if (this._actions[action] != null) {\n            return this._actions[action];\n        } else {\n            if (DEBUG) {\n                this.log(\n                    `[changeActionState] Could not get action '${action}' value, action was not registered!` +\n                        ` all actions: ${JSON.stringify(this._actions)}`,\n                );\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Return all actions with states.\n     * @method getAllActions\n     * @return Object\n     */\n    public getAllActions(): ActionsTypes {\n        return this._actions;\n    }\n\n    /**\n     * clone action set to new instance and is returned as readonly by default\n     */\n    public clone(readonly?: boolean): ActionSet {\n        var cloned = new ActionSet(this._setName, this._owner);\n\n        for (var key in this._actions) {\n            if (this._actions.hasOwnProperty(key)) {\n                cloned.registerAction(key, this._actions[key]);\n            }\n        }\n\n        cloned._readonly = Utils.valueOrDefault(readonly, true);\n        return cloned;\n    }\n\n    /**\n     * Add value false for all action. Use this method for example after dispatch spin action.\n     * @method disableAllActions\n     * @return void\n     */\n    public disableAllActions(): void {\n        this.beginBatchUpdates();\n\n        try {\n            for (var key in this._actions) {\n                this._actions[key] = false;\n            }\n        } finally {\n            this.endBatchUpdates(true);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/ActionSet.ts\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\nimport { ActionSet } from \"../ActionSet\";\nimport { ComponentTypes } from \"../ComponentTypes\";\n\n/**\n * The ActionManager class is used for parsing elements which are extending display objects and render them to canvas.\n * @class ActionManager\n * @author Marek Turkovic\n *\n *  <Actions123 Class=\"ActionSet\">\n *      <Elements>\n *          <Hocico LinkedToId=\"123\" Class=\"LinkedElement\"/>\n *      </Elements>\n *      <Actions>\n *          <Action Case=\"PackOfActions1\">\n *              <Hocico RotationTween=\"50\" />\n *          </Action>\n *          <Action Case=\"PackOfActions2\">\n *              <Hocico Scale=\"0.5\" Tint=\"ff0000\" Rotation=\"45\"/>\n *          </Action>\n *      </Actions>\n *  </Actions123>\n */\nexport class ActionManager {\n    /**\n     * Parse ActionSet object elements from xml and add them to ActionSet.ActionSets object.\n     *\n     * @method parseActionSets\n     * @param startNode\n     * @return void\n     */\n    static parseActionSets(startNode: Element): void {\n        if (!startNode) {\n            return;\n        }\n\n        ActionManager.getNodesList(startNode.firstElementChild)\n            .reverse()\n            .filter(\n                (node: Element) =>\n                    node.hasAttribute(\"Class\") &&\n                    node.getAttribute(\"Class\") === \"ActionSet\" &&\n                    EngineComponentFactory.isTypeOf(\"ActionSet\", ComponentTypes.ActionSet),\n            )\n            .forEach((node: Element) => (EngineComponentFactory.get(\"ActionSet\") as ActionSet).RegisterActionSet(node));\n    }\n\n    /**\n     * Recursively extracts sibling nodes.\n     * @method getNodesList\n     * @param node Element\n     * @param nodeList Array<Element>\n     * @return Array<Element>\n     */\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\n        if (!node) {\n            return nodeList;\n        }\n\n        if (node.nextElementSibling) {\n            nodeList = ActionManager.getNodesList(node.nextElementSibling, nodeList);\n        }\n\n        return nodeList.concat(node);\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param data any\n     * @return void\n     */\n    private static log(data: any): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"ActionManager\", data);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/ActionManager.ts\n **/","import { Logger, Utils } from \"neo-common\";\nimport { ClientHost, GameEngine, Communication } from \"neo-games\";\n\nimport { Dialog, DialogOpenData } from \"../Channels/Common/Dialogs/Dialog\";\nimport { GameManager } from \"../Managers/GameManager\";\nimport { BalanceManager } from \"../Managers/BalanceManager\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { BetManager } from \"../Managers/BetManager\";\nimport { DataManager } from \"../Managers/DataManager\";\nimport { Languages } from \"../Utils/Languages\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\n\ntype IBalance = Communication.Game.IBalance;\n\nexport class GameClientHostConsumer extends GameEngine.GameClientHostConsumerBase {\n    private _dialog: Dialog;\n\n    constructor(app: GameEngine.IApp) {\n        super(app);\n    }\n\n    private get dialog(): Dialog {\n        if (Utils.isNullOrUndefined(this._dialog)) {\n            this._dialog = new Dialog(this._app);\n        }\n\n        return this._dialog;\n    }\n\n    /**\n     * Handle dispatched action from client host\n     * @param actionGroup - group name where action belongs to\n     * @param action - name of action to handle\n     */\n    handleAction(actionGroup: string, action: string): void {\n        if (!HtmlController.dispatchActionAllowed) {\n            return;\n        }\n\n        if (actionGroup === ClientHost.Types.ClientHostActionGroup.Default.toString()) {\n            if (DEBUG) {\n                Logger.debugGroup(\n                    \"GameClientHostConsumer\",\n                    `Received action \"${action}\" (group: '${actionGroup}'), dispatching to controller.dispatchAction() ...`,\n                );\n            }\n\n            DataManager.addTrustedUserAction(action);\n            ModuleManager.dispatchAction(action);\n        } else if (actionGroup === ClientHost.Types.ClientHostActionGroup.Terminal.toString()) {\n            if (DEBUG) {\n                Logger.debugGroup(\n                    \"GameClientHostConsumer\",\n                    `Received action \"${action}\" (group: '${actionGroup}'), dispatching to controller.dispatchTerminalAction() ...`,\n                );\n            }\n\n            DataManager.addTrustedUserAction(action);\n            ModuleManager.dispatchAction(action);\n        }\n    }\n\n    /**\n     * handle request to show dialog with message (optionally error)\n     * @param request - show dialog request data\n     */\n    handleShowDialog(request: ClientHost.Types.ClientHostDialogRequest): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"GameClientHostConsumer\", `inside handleShowDialog(), request: `, request);\n        }\n\n        if (request.type === ClientHost.Types.ClientHostDialogType.Responsible1) {\n            this.showResponsibleDialog1(request.data as ClientHost.Types.ClientHostResponsibleDialogData);\n        } else {\n            let dialogData = Utils.isNullOrUndefined(request.data) ? null : (request.data as DialogOpenData);\n            let special = false;\n            let gameRoundId = \"0\";\n            let errorId = \"\";\n            if (!Utils.isNullOrUndefined(dialogData)) {\n                special = dialogData.special;\n                gameRoundId = dialogData.gameRoundId;\n                errorId = dialogData.errorId;\n            }\n            let isError = request.type === ClientHost.Types.ClientHostDialogType.Error;\n            let code = request.error ? request.error.errorCode : \"\";\n\n            this.dialog.openDialog(request.text, code, errorId, isError, special, gameRoundId, request);\n        }\n    }\n\n    /**\n     * handle request to show dialog with message\n     */\n    handleShowEndGameDialog(): void {\n        //dialog without buttons\n        let customData = {\n            data: {\n                actions: [null] as Array<Object>,\n            },\n        };\n\n        this.dialog.openDialog(Languages.getRid(\"DLG_ENDGAME\"), \"\", \"\", false, true, \"\", customData);\n        PIXI.sound.removeAll();\n\n        //remove game and keep only dialog\n        let dialog = document.getElementById(\"dialog\");\n        let root = document.getElementById(\"root\");\n        if (root != null && dialog != null) {\n            root.innerHTML = dialog.outerHTML;\n            document.body.innerHTML = \"\";\n            document.body.appendChild(root);\n        }\n    }\n\n    /**\n     * handle request to close currently visible dialog (if any)\n     */\n    handleCloseDialog(): void {\n        this.dialog.closeDialog();\n    }\n\n    /**\n     * @method handleRefreshAccount - handle 'refresh account' request from client host\n     */\n    handleRefreshAccount(): void {\n        BalanceManager.refreshBalance();\n    }\n\n    /**\n     * @method handleError - handle error from client host.\n     * @param error - error message\n     * @param data - structure with information about error\n     */\n    handleError(error: string, data?: any): void {\n        this.dialog.openDialog(error, null, \"\", true);\n    }\n\n    handleBlockRequest(blocked: boolean): void {\n        if (blocked) {\n            if (DataManager.Autoplay) {\n                DataManager.gameState(\"AutoPlayEnded\");\n            }\n            DataManager.Autoplay = false;\n            DataManager.AutoplayCount = \"∞\";\n            DataManager.AutoplayLossLimit = \"∞\";\n            DataManager.AutoplayWinLimit = \"∞\";\n        }\n    }\n\n    /**\n     * @method handlePaytableAction - handle paytable action (load, show, ...)\n     * @param request - request to do with paytable\n     */\n    handlePaytableRequest(request: ClientHost.Types.ClientHostPaytableRequest): void {}\n\n    handleAccountUpdate(balance: IBalance, forceShow: boolean): void {\n        if (forceShow) {\n            BetManager.unHideValues(true);\n        }\n\n        BalanceManager.balanceReceived(balance);\n    }\n\n    handleAutoplayAction(action: ClientHost.Types.AutoplayAction): void {\n        switch (action) {\n            case ClientHost.Types.AutoplayAction.Stop: {\n                if (DataManager.Autoplay) {\n                    DataManager.gameState(\"AutoPlayEnded\");\n                }\n                DataManager.Autoplay = false;\n                DataManager.AutoplayCount = \"∞\";\n                DataManager.AutoplayLossLimit = \"∞\";\n                DataManager.AutoplayWinLimit = \"∞\";\n                break;\n            }\n            case ClientHost.Types.AutoplayAction.Enable: {\n                DataManager.AutoplayEnabled = true;\n                break;\n            }\n            case ClientHost.Types.AutoplayAction.Disable: {\n                if (DataManager.Autoplay) {\n                    DataManager.gameState(\"AutoPlayEnded\");\n                }\n                DataManager.Autoplay = false;\n                DataManager.AutoplayCount = \"∞\";\n                DataManager.AutoplayLossLimit = \"∞\";\n                DataManager.AutoplayWinLimit = \"∞\";\n                DataManager.AutoplayEnabled = false;\n                break;\n            }\n            default: {\n                if (DEBUG) {\n                    Logger.errorGroup(\"GameClientHostConsumer\", `Unknown autoplay action '${action}'`);\n                }\n                break;\n            }\n        }\n    }\n\n    handleGameplayAction(action: ClientHost.Types.GamePlayAction): void {\n        switch (action) {\n            case ClientHost.Types.GamePlayAction.Enable: {\n                GameManager.enablePlay();\n                break;\n            }\n            case ClientHost.Types.GamePlayAction.Disable: {\n                GameManager.disablePlay();\n                break;\n            }\n            default: {\n                if (DEBUG) {\n                    Logger.errorGroup(\"GameClientHostConsumer\", `Unknown gameplay action '${action}'`);\n                }\n                break;\n            }\n        }\n    }\n\n    terminateOnCollect(): boolean {\n        if (DEBUG) {\n            Logger.debugGroup(\"GameClientHostConsumer\", `inside terminateOnCollect()`);\n        }\n\n        return GameManager.canExit(true);\n    }\n\n    private showResponsibleDialog1(data: ClientHost.Types.ClientHostResponsibleDialogData) {\n        if (DEBUG) {\n            Logger.debugGroup(\"GameClientHostConsumer\", `showResponsibleDialog1(), data: `, data);\n        }\n\n        GameManager.showResponsibleDialog1(data);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/ClientHost/ClientHostConsumer.ts\n **/","import { GameEngine } from \"neo-games\";\n\nexport class GameDefinition extends GameEngine.GameDefinitionBase {\n    /**\n     * @property ClientHostType - type name for client host, eg.(Default, Desktop ...)\n     */\n    public get Gamble(): boolean {\n        return this.getValue(\"Gamble\", true);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Common/GameDefinition.ts\n **/","import { GameEngine } from \"neo-games\";\nimport { GameManager } from \"../Game/Managers/GameManager\";\n\nconst key_GameEnableReelsStop = \"GameEnableReelsStop\";\nconst key_GameEnableQuickSpin = \"GameEnableQuickSpin\";\nconst key_QuickSpinDialogCount = \"QuickSpinDialogCount\";\nconst key_QuickSpinDecayDelay = \"QuickSpinDecayDelay\";\nconst key_MinGameRoundDuration = \"MinGameRoundDuration\";\nconst key_GameRoundMinSpan = \"GameRoundMinSpan\";\nconst key_UIShowTime = \"UIShowTime\";\nconst key_GUIShowSessionTime = \"GUI_ShowSessionTime\";\nconst key_GUIShowSessionTimeStartValue = \"GUI_ShowSessionTimeStartValue\";\nconst key_UseServerTime = \"UseServerTime\";\nconst key_UseHtmlAudio = \"UseHtmlAudio\";\nconst key_FullscreenOnClick = \"FullscreenOnClick\";\nconst key_UseCoins = \"UseCoins\";\nconst key_AutoplayGambleEnabled = \"AutoplayGambleEnabled\";\nconst key_AutoplayMode = \"AutoplayMode\";\nconst key_AutoplayCounts = \"AutoplayCounts\";\nconst key_AutoplayLossLimit = \"AutoplayLossLimit\";\nconst key_AutoplaySingleWinLimit = \"AutoplaySingleWinLimit\";\nconst key_HelpShowGameLimit = \"HelpShowGameLimit\";\nconst key_HelpShowRTP = \"HelpShowRTP\";\nconst key_ShowGameRoundsHistory = \"ShowGameRoundsHistory\";\nconst key_ExpirationResolveHours = \"ExpirationResolveHours\";\nconst key_AutoplayModeSpeed = \"AutoplayModeSpeed\";\nconst key_HideAmountsEnabled = \"HideAmountsEnabled\";\nconst key_AutoplayModeEnabled = \"AutoplayModeEnabled\";\nconst key_ResetCoinCountOnDenomChange = \"ResetCoinCountOnDenomChange\";\nconst key_CollectOnUnCalculatedWin = \"CollectOnUnCalculatedWin\";\nconst key_PluginUrl = \"PluginUrl\";\nconst key_PluginOrigin = \"PluginOrigin\";\nconst key_Platform = \"Platform\";\nconst key_PollCredit = \"PollCredit\";\nconst key_ShowDecimalPlaces = \"ShowDecimalPlaces\";\nconst key_SelectorRolloutDuration = \"SelectorRolloutDuration\";\nconst key_DisplayCurrencies = \"DisplayCurrencies\";\nconst key_CanvasFallback = \"CanvasFallback\";\nconst key_GameRoundIdVisible = \"GameRoundIdVisible\";\nconst key_MuteOnLostFocus = \"MuteOnLostFocus\";\nconst key_ShowCashierMessage = \"ShowCashierMessage\";\nconst key_CashierMessageShowRefreshBalanceButton = \"CashierMessageShowRefreshBalanceButton\";\nconst key_CashierUrl = \"CashierUrl\";\nconst key_DisableUntrustedClicks = \"DisableUntrustedClicks\";\nconst key_PlayerSessionReconnectionInterval = \"PlayerSessionReconnectionInterval\";\nconst key_ApplicationGatewayUrl = \"ApplicationGatewayUrl\";\nconst key_EventTrackerEnabled = \"EventTrackerEnabled\";\nconst key_GameEnableVibration = \"GameEnableVibration\";\nconst key_PaytableUseValue = \"PaytableUseValue\";\n\nconst key_GUI_HistoryUrl = \"GUI_HistoryUrl\";\nconst key_RCI_HistoryUrl = \"RCI_HistoryUrl\";\nconst key_RCI_Info = \"RCI_Info\";\nconst key_RCI_IntervalInfo = \"RCI_IntervalInfo\";\nconst key_RCI_ShowHistoryButton = \"RCI_ShowHistoryButton\";\n\nconst key_FeatureAutoPlay = \"FeatureAutoPlay\";\nconst key_FeatureAutoPick = \"FeatureAutoPick\";\n\nconst key_ShowSimilarGames = \"ShowSimilarGames\";\nconst key_SimilarGamesList = \"SimilarGamesList\";\nconst key_ShowExitGameButton = \"ShowExitGameButton\";\nconst key_StaticContentUrl = \"StaticContentUrl\";\nconst key_ShowHomeButton = \"ShowHomeButton\";\nconst key_UsePortraitMode = \"UsePortraitMode\";\nconst key_FRBShowDenyButton = \"FRBShowDenyButton\";\nconst key_FRBShowPostponeButton = \"FRBShowPostponeButton\";\nconst key_StatusBar = \"StatusBar\";\nconst key_StatusBarData = \"StatusBarData\";\n\nconst key_ProgressiveBonusId = \"ProgressiveBonusId\";\nconst key_ProgressiveBonusContributeOnlyQualified = \"ProgressiveBonusContributeOnlyQualified\";\nconst key_ProgressiveBonusMinQualifyingBet = \"ProgressiveBonusMinQualifyingBet\";\nconst key_ProgressiveBonusMaxQualifyingBet = \"ProgressiveBonusMaxQualifyingBet\";\nconst key_ProgressiveBonusVisibleMax = \"ProgressiveBonusVisibleMax\";\nconst key_ProgressiveBonusHelpShowMaxVisibleLimit = \"ProgressiveBonusHelpShowMaxVisibleLimit\";\nconst key_ProgressiveBonusHelpShowCumulativeWinLimit = \"ProgressiveBonusHelpShowCumulativeWinLimit\";\nconst key_ProgressiveBonusTicketConstraint = \"ProgressiveBonusTicketConstraint\";\nconst key_UseJackpotLocalization = \"UseJackpotLocalization\";\nconst key_ProgressiveBonusTheme = \"ProgressiveBonusTheme\";\n\nconst key_SessionBalance = \"SessionBalance\";\nconst key_TotalBet = \"TotalBet\";\nconst key_TotalWin = \"TotalWin\";\nconst key_PlayerTokenId = \"PlayerTokenId\";\nconst key_ClientToken = \"ClientToken\";\nconst key_MaxBetEnabled = \"MaxBetEnabled\";\nconst key_ShowMaxBetMessage = \"ShowMaxBetMessage\";\nconst key_HelpShowGameModuleVersion = \"HelpShowGameModuleVersion\";\nconst key_NotifyBetHigherThanMin = \"NotifyBetHigherThanMin\";\nconst key_ShowPaytableAtStart = \"ShowPaytableAtStart\";\nconst key_HelpShowMaxPayoutProbability = \"HelpShowMaxPayoutProbability\";\nconst key_HelpShowMaxPayoutProbabilityFrequency = \"HelpShowMaxPayoutProbabilityFrequency\";\n\nexport class GameConfiguration extends GameEngine.GameConfigurationBase {\n    /**\n     * @property GameEnableReelsStop - game enable reels stop.\n     */\n    public get GameEnableReelsStop(): boolean {\n        return this.getValue(key_GameEnableReelsStop, true);\n    }\n\n    /**\n     * @property GameEnableQuickSpin - game allows automatic quick stop.\n     */\n    public get GameEnableQuickSpin(): boolean {\n        return this.getValue(key_GameEnableQuickSpin, false);\n    }\n\n    /**\n     * @property QuickSpinDialogCount - number of subsequent quick stops before dialog is shown.\n     */\n    public get QuickSpinDialogCount(): number {\n        return this.getValue(key_QuickSpinDialogCount, 3);\n    }\n\n    public get QuickSpinDecayDelay(): number {\n        return this.getValue(key_QuickSpinDecayDelay, 30);\n    }\n\n    /**\n     * @property MinGameRoundDuration - number min round duration from start to stop reels\n     */\n    public get MinGameRoundDuration(): number {\n        return this.getValue(key_MinGameRoundDuration, 0);\n    }\n\n    /**\n     * @property GameRoundMinSpan - min game round duration in milliseconds\n     */\n    public get GameRoundMinSpan(): number {\n        return this.getValue(key_GameRoundMinSpan, 0);\n    }\n\n    /**\n     * @property UIShowTime\n     */\n    public get UIShowTime(): boolean {\n        return this.getValue(key_UIShowTime, false);\n    }\n\n    /**\n     * @property GUIShowSessionTime\n     */\n    public get GUIShowSessionTime(): boolean {\n        return this.getValue(key_GUIShowSessionTime, false);\n    }\n\n    /**\n     * @property GUIShowSessionTimeStartValue\n     */\n    public get GUIShowSessionTimeStartValue(): number {\n        return this.getValue(key_GUIShowSessionTimeStartValue, 0);\n    }\n\n    /**\n     * @property UseServerTime\n     */\n    public get UseServerTime(): boolean {\n        return this.getValue(key_UseServerTime, false);\n    }\n\n    /**\n     * @property UseHtmlAudio\n     */\n    public get UseHtmlAudio(): boolean {\n        return this.getValue(key_UseHtmlAudio, false);\n    }\n\n    /**\n     * @property FullscreenOnClick\n     */\n    public get FullscreenOnClick(): boolean {\n        return this.getValue(key_FullscreenOnClick, false);\n    }\n\n    /**\n     * @property UseCoins\n     */\n    public get UseCoins(): boolean {\n        return this.getValue(key_UseCoins, false);\n    }\n\n    /**\n     * @property AutoplayGambleEnabled - Enables/disables gamble feature during Autoplay\n     */\n    public get AutoplayGambleEnabled(): boolean {\n        return this.getValue(key_AutoplayGambleEnabled, true);\n    }\n\n    /**\n     * @property MaxBetEnabled Enables max bet button in game UI\n     */\n    public get MaxBetEnabled(): boolean {\n        return this.getValue(key_MaxBetEnabled, false);\n    }\n\n    /**\n     * @property ShowMaxBetMessage Enables max bet button confirmation dialog in game UI\n     */\n    public get ShowMaxBetMessage(): boolean {\n        return this.getValue(key_ShowMaxBetMessage, false);\n    }\n\n    /**\n     * @property AutoplayMode - Determines what autoplay features are available to the player:\n     * Basic = Basic autoplay is used\n     * Simple = simple autoplay is used\n     * Advanced = advanced autoplay is used\n     */\n    public get AutoplayMode(): string {\n        return this.getValue(key_AutoplayMode, \"simple\");\n    }\n\n    /**\n     * @property AutoplayCounts - shows selection of preset Autoplay games for simple and advanced autoplay; -1 = no limit/infinite option\n     */\n    public get AutoplayCounts(): Array<number> {\n        return this.getValue(key_AutoplayCounts, [-1, 1000, 750, 500, 250, 100, 75, 50, 25, 10]);\n    }\n\n    /**\n     * @property AutoplayLossLimit - List of values shown to player, where player can set his Loss limit, available only in advanced autoplay; -1 = no limit option\n     */\n    public get AutoplayLossLimit(): Array<number> {\n        return this.getValue(key_AutoplayLossLimit, [-1, 5, 20, 50]);\n    }\n\n    /**\n     * @property AutoplaySingleWinLimit - List of values shown to player, where player can set his singleWinLimit; -1 = no limit option\n     */\n    public get AutoplaySingleWinLimit(): Array<number> {\n        return this.getValue(key_AutoplaySingleWinLimit, [-1, 10, 20, 75]);\n    }\n\n    /**\n     * @property HelpShowGameLimit - Show game limit in help.\n     */\n    public get HelpShowGameLimit(): boolean {\n        return this.getValue(key_HelpShowGameLimit, true);\n    }\n\n    /**\n     * @property HelpShowRTP - Show rtp in help.\n     */\n    public get HelpShowRTP(): boolean {\n        return this.getValue(key_HelpShowRTP, true);\n    }\n\n    /**\n     * @property ShowGameRoundsHistory - show button which open new window to last 10 game rounds.\n     */\n    public get ShowGameRoundsHistory(): boolean {\n        return GameManager.gameResponse.roundId > -1 && this.getValue(key_ShowGameRoundsHistory, true);\n    }\n\n    /**\n     * @property ExpirationResolveHours - Automatic game resolve\n     */\n    public get ExpirationResolveHours(): number {\n        return this.getValue(key_ExpirationResolveHours, -1);\n    }\n\n    /**\n     * @property AutoplayModeSpeed - can speed up reel rotation in autoplay - !!!! for now only in Firebird\n     * standard = normal autoplay flow\n     * fast = if game has stop button enabled reel rotation will stop rotation after response will came from server\n     */\n    public get AutoplayModeSpeed(): string {\n        return this.getValue(key_AutoplayModeSpeed, \"standard\");\n    }\n\n    /**\n     * @property HideAmountsEnabled - show hide buttons for credit and bet - !!!! for now only in Firebird\n     */\n    public get HideAmountsEnabled(): boolean {\n        return this.getValue(key_HideAmountsEnabled, false);\n    }\n\n    /**\n     * @property AutoplayModeEnabled - enable or disable autoplay functionality - !!!! for now only in Firebird\n     */\n    public get AutoplayModeEnabled(): boolean {\n        return this.getValue(key_AutoplayModeEnabled, true);\n    }\n\n    /**\n     * @property ResetCoinCountOnDenomChange\n     * true => reset coin count to lowest value available after every denomination change\n     * false => coin count is not changed if in the new denomination is available, if its not available -> same or closest lower coin count is set\n     */\n    public get ResetCoinCountOnDenomChange(): boolean {\n        return this.getValue(key_ResetCoinCountOnDenomChange, true);\n    }\n\n    /**\n     * @property CollectOnUnCalculatedWin\n     * true => collect win on spin when player didnt see calculated win in win box\n     * false => standard flow\n     */\n    public get CollectOnUnCalculatedWin(): boolean {\n        return this.getValue(key_CollectOnUnCalculatedWin, false);\n    }\n\n    /**\n     * @property PluginUrl - if is not empty create hidden iframe for communication with platforms and showing reality check (for now only for CZ fortuna - iforium)\n     */\n    public get PluginUrl(): string {\n        return this.getValue(key_PluginUrl, \"\");\n    }\n\n    /**\n     * @property PluginUrl - if is not empty  and plugin URL creates hidden iframe this parameter will be applied for messaging between iframe and game\n     */\n    public get PluginOrigin(): string {\n        return this.getValue(key_PluginOrigin, \"\");\n    }\n\n    /**\n     * @property Platform - name of platform for external apis - for now we supported only iforium platform\n     */\n    public get Platform(): string {\n        return this.getValue(key_Platform, \"\");\n    }\n\n    /**\n     * @property PollCredit\n     * -1 => Not used\n     * > 0 => Number in miliseconds run timer to refresh balance when credit is lower than bet in closed gameround\n     */\n    public get PollCredit(): number {\n        return this.getValue(key_PollCredit, -1);\n    }\n\n    /**\n     * @property ShowDecimalPlaces - all wins and currency values are shown with selected decimal places (except RTP of course)\n     */\n    public get ShowDecimalPlaces(): number {\n        return this.getValue(key_ShowDecimalPlaces, 2);\n    }\n\n    /**\n     * @property SelectorRolloutDuration\n     * 0 => Disabled\n     * > 0 => Selector rollout duration in seconds.\n     */\n    public get SelectorRolloutDuration(): number {\n        return this.getValue(key_SelectorRolloutDuration, 5);\n    }\n\n    /**\n     * @property DisplayCurrencies\n     * @returns {string[]}\n     */\n    public get DisplayCurrencies(): string[] {\n        return this.getValue(key_DisplayCurrencies, []);\n    }\n\n    /**\n     * @property CanvasFallback\n     * @returns {boolean}\n     */\n    public get CanvasFallback(): boolean {\n        return this.getValue(key_CanvasFallback, false);\n    }\n\n    /**\n     * @property GameRoundIdVisible\n     * @returns {boolean}\n     */\n    public get GameRoundIdVisible(): boolean {\n        return this.getValue(key_GameRoundIdVisible, true);\n    }\n\n    /**\n     * @property MuteOnLostFocus\n     * @returns {boolean}\n     */\n    public get MuteOnLostFocus(): boolean {\n        return this.getValue(key_MuteOnLostFocus, true);\n    }\n\n    /**\n     * @property ShowCashierMessage\n     * @returns {boolean}\n     */\n    public get ShowCashierMessage(): boolean {\n        return this.getValue(key_ShowCashierMessage, false);\n    }\n\n    /**\n     * @property CashierMessageShowRefreshBalanceButton\n     * @returns {boolean}\n     */\n    public get CashierMessageShowRefreshBalanceButton(): boolean {\n        return this.getValue(key_CashierMessageShowRefreshBalanceButton, false);\n    }\n\n    /**\n     * @property CashierUrl\n     * @returns {string}\n     */\n    public get CashierUrl(): string {\n        return this.getValue(key_CashierUrl, \"\");\n    }\n\n    /**\n     * @property DisableUntrustedClicks\n     * @returns {string}\n     */\n    public get DisableUntrustedClicks(): boolean {\n        return this.getValue(key_DisableUntrustedClicks, true);\n    }\n\n    /**\n     * @property GUIHistoryUrl\n     * @returns {string}\n     */\n    public get GUIHistoryUrl(): string {\n        return this.getValue(key_GUI_HistoryUrl, \"\");\n    }\n\n    /**\n     * @property RCIHistoryUrl\n     * @returns {string}\n     */\n    public get RCIHistoryUrl(): string {\n        return this.getValue(key_RCI_HistoryUrl, \"\");\n    }\n\n    /**\n     * @property RCIInfo\n     * @returns {boolean}\n     */\n    public get RCIInfo(): boolean {\n        return this.getValue(key_RCI_Info, false);\n    }\n\n    /**\n     * @property RCIIntervalInfo\n     * @returns {boolean}\n     */\n    public get RCIIntervalInfo(): boolean {\n        return this.getValue(key_RCI_IntervalInfo, true);\n    }\n\n    /**\n     * @property RCIShowHistoryButton\n     * @returns {boolean}\n     */\n    public get RCIShowHistoryButton(): boolean {\n        return this.getValue(key_RCI_ShowHistoryButton, false);\n    }\n\n    /**\n     *\n     * @returns {number}\n     * @constructor\n     */\n    public get FeatureAutoPlay(): number {\n        return (this.getValue(key_FeatureAutoPlay, 0) / 1000) * 60;\n    }\n\n    /**\n     *\n     * @returns {boolean}\n     * @constructor\n     */\n    public get FeatureAutoPick(): boolean {\n        return this.getValue(key_FeatureAutoPick, false);\n    }\n\n    /**\n     * @property ShowSimilarGames\n     * @returns {boolean}\n     */\n    public get ShowSimilarGames(): boolean {\n        return this.getValue(key_ShowSimilarGames, false);\n    }\n\n    /**\n     * @property SimilarGamesList\n     * @returns {array string}\n     */\n    public get SimilarGamesList(): Array<string> {\n        return this.getValue(key_SimilarGamesList, []);\n    }\n\n    /**\n     * @property ShowExitGameButton\n     * @returns {boolean}\n     */\n    public get ShowExitGameButton(): boolean {\n        return this.getValue(key_ShowExitGameButton, true);\n    }\n\n    /**\n     * @property StaticContentUrl\n     * @returns {string}\n     */\n    public get StaticContentUrl(): string {\n        return this.getValue(key_StaticContentUrl, \"\");\n    }\n\n    /**\n     * @property ShowHomeButton\n     * @returns {boolean}\n     */\n    public get ShowHomeButton(): boolean {\n        return this.getValue(key_ShowHomeButton, true);\n    }\n\n    /**\n     * @property UsePortraitMode\n     * @returns {boolean}\n     */\n    public get UsePortraitMode(): boolean {\n        return this.getValue(key_UsePortraitMode, true);\n    }\n\n    /**\n     * @property FRBShowDenyButton\n     * @returns {boolean}\n     */\n    public get FRBShowDenyButton(): boolean {\n        return this.getValue(key_FRBShowDenyButton, true);\n    }\n\n    /**\n     * @property FRBShowPostponeButton\n     * @returns {boolean}\n     */\n    public get FRBShowPostponeButton(): boolean {\n        return this.getValue(key_FRBShowPostponeButton, true);\n    }\n\n    /**\n     * @property StatusBar\n     * @returns {array string}\n     */\n    public get StatusBar(): Array<string> {\n        return this.getValue(key_StatusBar, []);\n    }\n\n    /**\n     * @property StatusBarData\n     * @returns {object}\n     */\n    public get StatusBarData(): Object {\n        return this.getValue(key_StatusBarData, {});\n    }\n\n    /**\n     * @property ProgressiveBonusId\n     * @returns {number}\n     */\n    public get ProgressiveBonusId(): number {\n        return this.getValue(key_ProgressiveBonusId, -1);\n    }\n\n    /**\n     * @property ProgressiveBonusContributeOnlyQualified\n     * @returns {boolean}\n     */\n    public get ProgressiveBonusContributeOnlyQualified(): boolean {\n        return this.getValue(key_ProgressiveBonusContributeOnlyQualified, false);\n    }\n\n    /**\n     * @property ProgressiveBonusMinQualifyingBet\n     * @returns {number}\n     */\n    public get ProgressiveBonusMinQualifyingBet(): number {\n        return this.getValue(key_ProgressiveBonusMinQualifyingBet, -1);\n    }\n\n    /**\n     * @property ProgressiveBonusMaxQualifyingBet\n     * @returns {number}\n     */\n    public get ProgressiveBonusMaxQualifyingBet(): number {\n        return this.getValue(key_ProgressiveBonusMaxQualifyingBet, -1);\n    }\n\n    /**\n     * @property ProgressiveBonusVisibleMax\n     * @returns {number}\n     */\n    public get ProgressiveBonusVisibleMax(): number {\n        return this.getValue(key_ProgressiveBonusVisibleMax, -1);\n    }\n\n    /**\n     * @property ProgressiveBonusHelpShowMaxVisibleLimit\n     * @returns {boolean}\n     */\n    public get ProgressiveBonusHelpShowMaxVisibleLimit(): boolean {\n        return this.getValue(key_ProgressiveBonusHelpShowMaxVisibleLimit, true);\n    }\n\n    /**\n     * @property ProgressiveBonusHelpShowCumulativeWinLimit\n     * @returns {boolean}\n     */\n    public get ProgressiveBonusHelpShowCumulativeWinLimit(): boolean {\n        return this.getValue(key_ProgressiveBonusHelpShowCumulativeWinLimit, true);\n    }\n\n    /**\n     * @property ProgressiveBonusTicketConstraint\n     * @returns {string}\n     */\n    public get ProgressiveBonusTicketConstraint(): string {\n        return this.getValue(key_ProgressiveBonusTicketConstraint, \"\");\n    }\n\n    /**\n     * @property UseJackpotLocalization\n     * @returns {boolean}\n     */\n    public get UseJackpotLocalization(): boolean {\n        return this.getValue(key_UseJackpotLocalization, false);\n    }\n\n    /**\n     * @property ProgressiveBonusTheme\n     * @returns {string}\n     */\n    public get ProgressiveBonusTheme(): string {\n        return this.getValue(key_ProgressiveBonusTheme, \"\");\n    }\n\n    /**\n     * @property SessionBalance\n     * @constructor\n     */\n    public get SessionBalance(): number {\n        return this.getValue(key_SessionBalance, 0);\n    }\n\n    /**\n     * @propertyTotalBet\n     * @constructor\n     */\n    public get TotalBet(): number {\n        return this.getValue(key_TotalBet, 0);\n    }\n\n    /**\n     * @propertyTotalWin\n     * @constructor\n     */\n    public get TotalWin(): number {\n        return this.getValue(key_TotalWin, 0);\n    }\n\n    /**\n     * @propertyPlayerTokenId\n     * @constructor\n     */\n    public get PlayerTokenId(): string {\n        return this.getValue(key_PlayerTokenId, \"\");\n    }\n\n    /**\n     * @propertyPlayerSessionReconnectionInterval\n     * @constructor\n     */\n    public get PlayerSessionReconnectionInterval(): number {\n        return this.getValue(key_PlayerSessionReconnectionInterval, 0);\n    }\n\n    /**\n     * @property ApplicationGatewayUrl\n     * @constructor\n     */\n    public get ApplicationGatewayUrl(): string {\n        return this.getValue(key_ApplicationGatewayUrl, \"\");\n    }\n\n    /**\n     * @property GameEnableVibration\n     * @constructor\n     */\n    public get GameEnableVibration(): boolean {\n        return this.getValue(key_GameEnableVibration, false);\n    }\n\n    /**\n     * @property HelpShowGameModuleVersion\n     * true - Enable game module version info in Help.\n     * false - Disable game module version info in Help.\n     */\n    public get HelpShowGameModuleVersion(): boolean {\n        return this.getValue(key_HelpShowGameModuleVersion, false);\n    }\n\n    /**\n     * @property NotifyBetHigherThanMin\n     * true - Set bet to minimal on game start and show\n     *        notification after if game entered during\n     *        feature using bet other than min bet.\n     * false - Disable notification and bet update\n     */\n    public get NotifyBetHigherThanMin(): boolean {\n        return this.getValue(key_NotifyBetHigherThanMin, false);\n    }\n\n    /**\n     * @property HelpShowMaxPayoutProbability\n     * true - Show additional info about Max Payout\n     *        Probability in Help.\n     */\n    public get HelpShowMaxPayoutProbability(): boolean {\n        return this.getValue(key_HelpShowMaxPayoutProbability, false);\n    }\n\n    /**\n     * @property HelpShowMaxPayoutProbabilityFrequency\n     * true - Show additional info about Max Payout\n     *        Probability Frequency in Help.\n     */\n    public get HelpShowMaxPayoutProbabilityFrequency(): boolean {\n        return this.getValue(key_HelpShowMaxPayoutProbabilityFrequency, false);\n    }\n\n    /**\n     * @property ShowPaytableAtStart\n     * If true, the game must show the paytable at start of the game session\n     */\n    public get ShowPaytableAtStart(): boolean {\n        return this.getValue(key_ShowPaytableAtStart, false);\n    }\n\n    /**\n     * @property PaytableUseValue\n     * @constructor\n     */\n    public get PaytableUseValue(): boolean {\n        return this.getValue(key_PaytableUseValue, false);\n    }\n\n    /**\n     * @propertyUseWebSocket\n     * @constructor\n     */\n    public get EventTrackerEnabled(): boolean {\n        return this.getValue(key_EventTrackerEnabled, false);\n    }\n\n    /**\n     * @propertyClientToken\n     * @constructor\n     */\n    public get ClientToken(): string {\n        return this.getValue(key_ClientToken, \"\");\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Common/GameConfiguration.ts\n **/","import { Platforms, Communication } from \"neo-games\";\nimport { DataManager } from \"./DataManager\";\nimport { Scaling } from \"../Utils/Scaling\";\nimport { BalanceManager } from \"./BalanceManager\";\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { UserAction } from \"../HTMLComponents/UserAction\";\nimport { GameApp } from \"../GameApp\";\nimport { RetentionPanel } from \"../Utils/RetentionPanel\";\nimport { ModuleManager } from \"./ModuleManager\";\nimport { PageVisibilityHandler } from \"../CustomComponents/PageVisibilityHandler\";\nimport { EventData } from \"neo-games/Engine/Plugins/EventTracker/EventTracker\";\nimport { NotificationManager } from \"./NotificationManager\";\nimport { AutoplayData } from \"neo-games/Engine/Platforms/IPlatforms\";\n\nvar GameModules = Communication.Game.GameModules;\n\nexport class PlatformsManager {\n    static create(): void {\n        let pluginOrigin = \"*\";\n\n        if (AppContext != null && AppContext.gameConfiguration != null) {\n            if (AppContext.gameConfiguration.PluginOrigin != \"\") {\n                pluginOrigin = AppContext.gameConfiguration.PluginOrigin;\n            }\n\n            Platforms.Platforms.getTimeDataFnc = DataManager.getTimeData;\n            Platforms.Platforms.getGameTimeFnc = DataManager.getGameTime;\n            Platforms.Platforms.createEmitter();\n\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.AutoplayStop, PlatformsManager.stopAutoplay);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.RestoreAutoplay, (autoplayData) => {\n                PlatformsManager.restoreAutoplay(autoplayData);\n            });\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.ResizeGame, PlatformsManager.resizeGame);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.RefreshBalance, PlatformsManager.refreshBalance);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GamePlayStop, (disableChannel) => {\n                PlatformsManager.gamePlayStop(disableChannel);\n            });\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GamePlayResume, PlatformsManager.gamePlayResume);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GamePlayFreeze, PlatformsManager.gamePlayFreeze);\n            Platforms.Platforms.eventEmitter.on(\n                Platforms.Platforms.GamePlayUnfreeze,\n                PlatformsManager.gamePlayUnfreeze,\n            );\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GameAudioEnable, PlatformsManager.gameAudioEnable);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GameAudioMute, PlatformsManager.gameAudioMute);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GameAudioSet, (level: number) => {\n                PlatformsManager.gameAudioSet(level);\n            });\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GameQuickSpin, (enabled: boolean) => {\n                PlatformsManager.gameQuickSpin(enabled);\n            });\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.ShowHelp, PlatformsManager.showHelp);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.HideHelp, PlatformsManager.hideHelp);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.ToggleHelp, PlatformsManager.toggleHelp);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.ShowPaytable, PlatformsManager.showPaytable);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.HidePaytable, PlatformsManager.hidePaytable);\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.TogglePaytable, PlatformsManager.togglePaytable);\n            Platforms.Platforms.eventEmitter.on(\n                Platforms.Platforms.PlatformCloseMenu,\n                PlatformsManager.platformCloseMenu,\n            );\n            Platforms.Platforms.eventEmitter.on(\n                Platforms.Platforms.PlatformCloseGame,\n                PlatformsManager.platformCloseGame,\n            );\n            Platforms.Platforms.eventEmitter.on(\n                Platforms.Platforms.PlatformUpdateUI,\n                PlatformsManager.platformUpdateUI,\n            );\n            Platforms.Platforms.eventEmitter.on(\n                Platforms.Platforms.PlatformErrorMessageDismissed,\n                PlatformsManager.platformErrorMessageDismissed,\n            );\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.CreateNotification, (events: Array<EventData>) => {\n                PlatformsManager.createNotification(events);\n            });\n\n            Platforms.Platforms.create(\n                AppContext.gameConfiguration.Platform,\n                AppContext.gameConfiguration.PluginUrl,\n                pluginOrigin,\n                { gameKey: GameApp.key, lang: GameApp.language, clientHub: NotificationManager },\n            );\n        }\n    }\n\n    static stopAutoplay(): void {\n        DataManager.Autoplay = false;\n        DataManager.AutoplayCount = \"∞\";\n        DataManager.AutoplayLossLimit = \"∞\";\n        DataManager.AutoplayWinLimit = \"∞\";\n    }\n\n    static restoreAutoplay(autoplayData: AutoplayData): void {\n        DataManager.Autoplay = true;\n        DataManager.AutoplayCount = autoplayData.autoplayCount;\n        DataManager.AutoplayLossLimit = autoplayData.autoplayLossLimit;\n        DataManager.AutoplayWinLimit = autoplayData.autoplayWinLimit;\n        HtmlController.dispatchAction(\"AUTOPLAY\");\n    }\n\n    static resizeGame(): void {\n        Scaling.resizeRoot();\n    }\n\n    static refreshBalance(): void {\n        BalanceManager.refreshBalance(true);\n    }\n\n    static gamePlayStop(disableChannel: boolean = false): void {\n        // Stop autoplay\n        PlatformsManager.stopAutoplay();\n\n        // Disable channel module\n        if (disableChannel) {\n            if (ModuleManager.gambleActive()) {\n                //ModuleManager.disableChannelModule(GameModules.Gamble);\n            } else if (ModuleManager[\"freespinsActive\"] && ModuleManager[\"freespinsActive\"]()) {\n                //ModuleManager.disableChannelModule(GameModules.Freespins);\n            } else {\n                ModuleManager.disableChannelModule(GameModules.Base);\n            }\n        }\n    }\n\n    static gamePlayResume(): void {\n        // Restore game round\n        if (ModuleManager.gambleActive()) {\n            //ModuleManager.restoreGameRound(GameModules.Gamble);\n        } else if (ModuleManager[\"freespinsActive\"] && ModuleManager[\"freespinsActive\"]()) {\n            //ModuleManager.restoreGameRound(GameModules.Freespins);\n        } else {\n            ModuleManager.restoreGameRound(GameModules.Base);\n        }\n    }\n\n    static gamePlayFreeze(): void {\n        if (!Platforms.Platforms.canSpinOnCollect) {\n            //handle freeze when idle (rc)\n            PlatformsManager.stopAutoplay();\n        }\n\n        PageVisibilityHandler.Enabled = false;\n        PageVisibilityHandler.pauseAll();\n        HtmlController.dispatchActionAllowed = false;\n        document.body.classList.add(\"freeze\");\n    }\n\n    static gamePlayUnfreeze(): void {\n        document.body.classList.remove(\"freeze\");\n        HtmlController.dispatchActionAllowed = true;\n        PageVisibilityHandler.resumeAll();\n        PageVisibilityHandler.Enabled = true;\n    }\n\n    static gameAudioEnable(): void {\n        HtmlController.setSound(3);\n    }\n\n    static gameAudioMute(): void {\n        HtmlController.setSound(0);\n    }\n\n    static gameAudioSet(level: number): void {\n        HtmlController.setSound(level);\n    }\n\n    static showHelp(): void {\n        let dipatchElementId = UserAction.ActionHelpOn;\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\n\n            if (dipatchElement != null) {\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(UserAction.ActionHelpOn);\n                }\n            }\n        }\n    }\n\n    static hideHelp(): void {\n        let dipatchElementId = UserAction.ActionHelpOn;\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\n\n            if (dipatchElement != null) {\n                if (!dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(UserAction.ActionHelpOff);\n                }\n            }\n        }\n    }\n\n    static toggleHelp(): void {\n        let dipatchElementId = UserAction.ActionHelpOn;\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\n\n            if (dipatchElement != null) {\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(UserAction.ActionHelpOn);\n                } else {\n                    HtmlController.dispatchUiAction(UserAction.ActionHelpOff);\n                }\n            }\n        }\n    }\n\n    static showPaytable(): void {\n        let dipatchElementId = UserAction.ActionPaytableOn;\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\n\n            if (dipatchElement != null) {\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOn);\n                }\n            }\n        }\n    }\n\n    static hidePaytable(): void {\n        let dipatchElementId = UserAction.ActionPaytableOn;\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\n\n            if (dipatchElement != null) {\n                if (!dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOff);\n                }\n            }\n        }\n    }\n\n    static togglePaytable(): void {\n        let dipatchElementId = UserAction.ActionPaytableOn;\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\n\n            if (dipatchElement != null) {\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOn);\n                } else {\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOff);\n                }\n            }\n        }\n    }\n\n    static gameQuickSpin(enabled: boolean): void {\n        //not all games has quickspin fnc, use object key as function name\n        if (DataManager[\"quickspinSet\"]) {\n            DataManager[\"quickspinSet\"](enabled);\n        }\n    }\n\n    static platformCloseMenu(): void {\n        HtmlController.dispatchUiAction(\"\");\n    }\n\n    static platformCloseGame(): void {\n        Platforms.Platforms.exitHandler = \"platformsManager\";\n        GameApp.exit();\n    }\n\n    static platformUpdateUI(): void {\n        RetentionPanel.revalidate();\n    }\n\n    static platformErrorMessageDismissed(): void {\n        //ToDo not implemented yet\n    }\n\n    static createNotification(events: Array<EventData>): void {\n        if (AppContext.gameConfiguration.EventTrackerEnabled) {\n            NotificationManager.sendMessage({\n                application: \"EventTrackingServer\",\n                service: \"EventTracker\",\n                action: \"event/log\",\n                data: { events: events },\n            });\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/PlatformsManager.ts\n **/","export class FreespinsActions {\n    static ActionStart: string = \"FREESPIN_START\";\n    static ActionBack: string = \"FREESPIN_BACK_TO_GAME\";\n    static ActionSpin: string = \"FREESPIN_SPIN\";\n    static ActionSpinStop: string = \"FREESPIN_SPIN_STOP\";\n    static ActionAutoplay: string = \"FREESPIN_AUTOPLAY\";\n    static ActionAutoplayStop: string = \"FREESPIN_AUTOPLAY_STOP\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/FreespinsActions.ts\n **/","export class GambleActions {\n    static ActionGambleStart: string = \"GAMBLE_START\";\n    static ActionGambleRed: string = \"GAMBLE_RED\";\n    static ActionGambleBlack: string = \"GAMBLE_BLACK\";\n    static ActionGambleHalve: string = \"GAMBLE_HALVE\";\n    static ActionGambleCollect: string = \"GAMBLE_COLLECT\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/GambleActions.ts\n **/","export class GameActions {\n    // space bar\n    static ActionSpinOrStop: string = \"SPIN_OR_STOP\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/GameActions.ts\n **/","export class PickActions {\n    static ActionConfirm: string = \"PICK_CONFIRM\";\n    static ActionSpot: string = \"SPOT_\";\n    static ActionBack: string = \"PICK_BACK_TO_GAME\";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/PickActions.ts\n **/","export class TerminalActions {\n    static get Payout(): string {\n        return \"Payout\";\n    }\n\n    static get BackToLobby(): string {\n        return \"BackToLobby\";\n    }\n\n    static get StartWithCollect(): string {\n        return \"StartWithCollect\";\n    }\n\n    static get Autoplay(): string {\n        return \"Autoplay\";\n    }\n\n    static get BetOrGamble(): string {\n        return \"BetOrGamble\";\n    }\n\n    static get ActionLeft(): string {\n        return \"ActionLeft\";\n    }\n\n    static get ActionRight(): string {\n        return \"ActionRight\";\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/TerminalActions.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../../Components/ComponentTypes\";\nimport { UserControls } from \"./UserControls\";\nimport { GambleActions } from \"../Actions/GambleActions\";\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\nimport { GambleController } from \"../../../GameComponents/Gamble/GambleController\";\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\nimport { DataManager } from \"../../../Managers/DataManager\";\nimport { GameData } from \"../Datas/GameData\";\nimport { GameManager } from \"../../../Managers/GameManager\";\nimport { LimitDialog } from \"../Dialogs/LimitDialog\";\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\nimport { AppContext } from \"../../../../Common/AppContext\";\nimport { BetManager } from \"../../../Managers/BetManager\";\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\n\nvar GameModules = Communication.Game.GameModules;\nvar Color = Communication.Game.Color;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class GambleUserControls extends UserControls {\n    protected _controller: GambleController;\n\n    private _collectDelay: FrameTimerEventEmitter;\n\n    private _gambleTickerDefault: HTMLElement;\n    private _gambleTickerHalveLimit: HTMLElement;\n    private _gambleTickerSoftLimit: HTMLElement;\n    private _gambleTickerGameLimit: HTMLElement;\n\n    private _collectedWinValue: number = 0;\n    private _allowStart: boolean;\n\n    private _screen: HTMLElement;\n\n    constructor() {\n        super(\"gamble\");\n\n        this._collectDelay = CreateFrameTimer(\"collectDelay\");\n        this._collectDelay.on(FrameTimerEvents.Complete, this.outro.bind(this));\n\n        this._allowStart = true;\n    }\n\n    private ticker(state: string = \"\"): void {\n        if (this._gambleTickerDefault != null) {\n            this._gambleTickerDefault.style.display = \"none\";\n        }\n        if (this._gambleTickerHalveLimit != null) {\n            this._gambleTickerHalveLimit.style.display = \"none\";\n        }\n        if (this._gambleTickerSoftLimit != null) {\n            this._gambleTickerSoftLimit.style.display = \"none\";\n        }\n        if (this._gambleTickerGameLimit != null) {\n            this._gambleTickerGameLimit.style.display = \"none\";\n        }\n\n        switch (state) {\n            case \"default\":\n                if (this._gambleTickerDefault != null) {\n                    this._gambleTickerDefault.style.display = \"block\";\n                }\n                break;\n            case \"halvelimit\":\n                if (this._gambleTickerHalveLimit != null) {\n                    this._gambleTickerHalveLimit.style.display = \"block\";\n                }\n                break;\n            case \"softLimit\":\n                if (this._gambleTickerSoftLimit != null) {\n                    this._gambleTickerSoftLimit.style.display = \"block\";\n                }\n                break;\n            case \"limit\":\n                if (this._gambleTickerGameLimit != null) {\n                    this._gambleTickerGameLimit.style.display = \"block\";\n                }\n                break;\n        }\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.registerActions();\n\n        this._gambleTickerDefault = document.getElementById(\"gambleTickerDefault\");\n        this._gambleTickerHalveLimit = document.getElementById(\"gambleTickerHalveLimit\");\n        this._gambleTickerSoftLimit = document.getElementById(\"gambleTickerSoftLimit\");\n        this._gambleTickerGameLimit = document.getElementById(\"gambleTickerGameLimit\");\n        this._screen = document.getElementById(\"screen\");\n        this.ticker(\"default\");\n    }\n\n    addController(controller: GambleController): void {\n        this._controller = controller;\n        this._controller.on(GambleController.StartReceived, this.startReceived.bind(this));\n        this._controller.on(GambleController.SelectReceived, this.selectReceived.bind(this));\n        this._controller.on(GambleController.HalveReceived, this.halveReceived.bind(this));\n        this._controller.on(GambleController.WinCalculationFinished, this.winCalculationFinished.bind(this));\n        this._controller.on(GambleController.AllWinsFinished, this.allWinsFinished.bind(this));\n        this._controller.on(GambleController.Lose, this.lose.bind(this));\n        this._controller.on(GambleController.IntroFinished, this.introFinished.bind(this));\n        this._controller.on(GambleController.OutroFinished, this.outroFinished.bind(this));\n    }\n\n    registerActions(): void {\n        this.actions.registerActions({\n            [GambleActions.ActionGambleStart]: false,\n            [GambleActions.ActionGambleRed]: false,\n            [GambleActions.ActionGambleBlack]: false,\n            [GambleActions.ActionGambleHalve]: false,\n            [GambleActions.ActionGambleCollect]: false,\n        });\n    }\n\n    initReceived(): void {\n        super.initReceived();\n\n        this._controller.initReceived();\n    }\n\n    collectReceived(): void {\n        this.ticker(\"\");\n        DataManager.updateDataElement(GameData.DataGambleAttempts, 0 + \"\");\n\n        super.collectReceived();\n\n        DataManager.updateGameDataFromModule(GameData.DataGambleColorWin, \"\");\n        DataManager.updateGameDataFromModule(GameData.DataGambleCurrentWin, \"\");\n        DataManager.updateGameDataFromModule(GameData.DataGambleColorWinDenom, \"\");\n        DataManager.updateGameDataFromModule(GameData.DataGambleCurrentWinDenom, \"\");\n        DataManager.updateDataElements();\n\n        Platforms.Platforms.roundEnded({\n            id: GameManager.gameResponse.roundId,\n            win: this._collectedWinValue,\n            balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n        });\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\n        this._collectDelay.start(30);\n\n        if (AppContext != null && AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\n            DataManager.updateDataElement(GameData.DataTotalWin, this._collectedWinValue.toString());\n        }\n        this.changeWinBox(true);\n    }\n\n    restoreGameRound(): void {\n        this.prepareNewGameRound();\n    }\n\n    startReceived(): void {\n        if (\n            GameManager.gambleResponse != null &&\n            GameManager.gambleResponse[\"totalCount\"] != null &&\n            GameManager.gambleResponse[\"currentCount\"] != null\n        ) {\n            DataManager.updateDataElement(\n                GameData.DataGambleAttempts,\n                (GameManager.gambleResponse[\"totalCount\"] - GameManager.gambleResponse[\"currentCount\"]).toString(),\n            );\n        }\n        ModuleManager.startGamble();\n    }\n\n    selectReceived(): void {\n        if (GameManager.gambleResponse[\"paidWin\"] != null) {\n            this._collectedWinValue = parseFloat(\n                NumberUtils.add(GameManager.gambleResponse.currentWin, GameManager.gambleResponse[\"paidWin\"]),\n            );\n        } else {\n            this._collectedWinValue = GameManager.gambleResponse.currentWin;\n        }\n    }\n\n    halveReceived(): void {\n        DataManager.updateGameDataFromModule(\n            GameData.DataGambleColorWin,\n            GameManager.gambleResponse.colorWin.toString(),\n        );\n        DataManager.updateGameDataFromModule(\n            GameData.DataGambleCurrentWin,\n            GameManager.gambleResponse.currentWin.toString(),\n        );\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleColorWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gambleResponse.colorWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleCurrentWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gambleResponse.currentWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n        }\n        DataManager.updateDataElements();\n\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\n\n        this.prepareNewGameRound();\n    }\n\n    dispatchAction(action: string): void {\n        super.dispatchAction(action);\n\n        if (this.actions.getActionState(action)) {\n            PlayList.play(\"SND_Click\");\n            super.dispatchAction(action);\n\n            switch (action) {\n                case GambleActions.ActionGambleStart:\n                    this.start();\n                    break;\n                case GambleActions.ActionGambleHalve:\n                    this.halve();\n                    break;\n                case GambleActions.ActionGambleBlack:\n                    this.select(Color.Black);\n                    break;\n                case GambleActions.ActionGambleRed:\n                    this.select(Color.Red);\n                    break;\n                case GambleActions.ActionGambleCollect:\n                    this.collect();\n                    break;\n            }\n        }\n    }\n\n    collect(): void {\n        if (GameManager.gameResponse != null && GameManager.gameResponse.totalWin > 0) {\n            Platforms.Platforms.win(GameManager.gameResponse.totalWin);\n        }\n\n        if (GameManager.gambleResponse[\"paidWin\"] != null) {\n            this._collectedWinValue = parseFloat(\n                NumberUtils.add(GameManager.gambleResponse.currentWin, GameManager.gambleResponse[\"paidWin\"]),\n            );\n        } else {\n            this._collectedWinValue = GameManager.gambleResponse.currentWin;\n        }\n\n        if (GameManager.gameResponse.totalWin > 0) {\n            DataManager.updateLossLimit(GameManager.gameResponse.totalWin);\n        }\n        super.collect();\n\n        this.disable();\n        this.playCollectSound();\n\n        LimitDialog.closeDialog();\n\n        GameManager.collect(GameModules.Gamble);\n    }\n\n    start(): void {\n        this._allowStart = false;\n        this._collectedWinValue = GameManager.gameResponse.totalWin;\n        ModuleManager.disableBase();\n        this.disable();\n        DataManager.updateGameDataFromModule(\n            GameData.DataGambleColorWin,\n            GameManager.gambleResponse.colorWin.toString(),\n        );\n        DataManager.updateGameDataFromModule(\n            GameData.DataGambleCurrentWin,\n            GameManager.gambleResponse.currentWin.toString(),\n        );\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleColorWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gambleResponse.colorWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleCurrentWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gambleResponse.currentWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n        }\n        DataManager.updateDataElements();\n        this._controller.start();\n    }\n\n    select(color: Communication.Game.Color): void {\n        this.ticker(\"\");\n        this.disable();\n        this._controller.select(color);\n    }\n\n    halve(): void {\n        if (GameManager.gambleResponse.currentWin > 0) {\n            DataManager.updateLossLimit(GameManager.gambleResponse.currentWin / 2);\n        }\n        this.disable();\n        this.playCollectSound();\n        this._controller.halve();\n    }\n\n    winCalculationFinished(): void {\n        if (GameManager.gambleResponse.currentWin > 0) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleCurrentWin,\n                GameManager.gambleResponse.currentWin.toString(),\n            );\n            if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataGambleCurrentWinDenom,\n                    parseInt(\n                        NumberUtils.devide(GameManager.gambleResponse.currentWin, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n            }\n            DataManager.updateDataElements();\n        } else {\n            if (\n                GameManager.gambleResponse != null &&\n                GameManager.gambleResponse[\"totalCount\"] != null &&\n                GameManager.gambleResponse[\"currentCount\"] != null\n            ) {\n                DataManager.updateDataElement(GameData.DataGambleAttempts, 0 + \"\");\n            }\n            DataManager.updateGameDataFromModule(GameData.DataGambleColorWin, \"\");\n            DataManager.updateGameDataFromModule(GameData.DataGambleCurrentWin, \"\");\n            DataManager.updateGameDataFromModule(GameData.DataGambleColorWinDenom, \"\");\n            DataManager.updateGameDataFromModule(GameData.DataGambleCurrentWinDenom, \"\");\n            DataManager.updateDataElements();\n        }\n    }\n\n    allWinsFinished(): void {\n        DataManager.updateGameDataFromModule(\n            GameData.DataGambleColorWin,\n            GameManager.gambleResponse.colorWin.toString(),\n        );\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleColorWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gambleResponse.colorWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n        }\n        DataManager.updateDataElements();\n        if (GameManager.gambleResponse.currentWin > 0) {\n            this.prepareNewGameRound();\n        }\n    }\n\n    lose(): void {\n        this.outro();\n\n        if (this._collectedWinValue > 0) {\n            if (AppContext != null && AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\n                DataManager.updateDataElement(GameData.DataTotalWin, this._collectedWinValue.toString());\n            }\n            this.changeWinBox(true);\n        } else {\n            this.changeWinBox();\n        }\n\n        Platforms.Platforms.roundEnded({\n            id: GameManager.gameResponse.roundId,\n            win: this._collectedWinValue,\n            balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n        });\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\n    }\n\n    initIntro(): void {\n        super.initIntro();\n\n        FreeRoundBonus.disableUi();\n\n        this.prepareNewGameRound();\n\n        if (this._screen != null && !this._screen.classList.contains(\"_inGamble\")) {\n            this._screen.classList.add(\"_inGamble\");\n        }\n\n        DataManager.updateGameDataFromModule(\n            GameData.DataGambleColorWin,\n            GameManager.gambleResponse.colorWin.toString(),\n        );\n        DataManager.updateGameDataFromModule(\n            GameData.DataGambleCurrentWin,\n            GameManager.gambleResponse.currentWin.toString(),\n        );\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleColorWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gambleResponse.colorWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleCurrentWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gambleResponse.currentWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n        }\n        DataManager.updateDataElements();\n\n        this._controller.initIntro();\n    }\n\n    intro(long: boolean = false): void {\n        FreeRoundBonus.disableUi();\n        if (this._screen != null && !this._screen.classList.contains(\"_inGamble\")) {\n            this._screen.classList.add(\"_inGamble\");\n        }\n        this._controller.intro(long);\n    }\n\n    introFinished(): void {\n        this.prepareNewGameRound();\n    }\n\n    outro(): void {\n        if (this._screen != null && this._screen.classList.contains(\"_inGamble\")) {\n            this._screen.classList.remove(\"_inGamble\");\n        }\n        DataManager.Collectable = true;\n        this._collectDelay.stop();\n        this._controller.outro();\n    }\n\n    outroFinished(): void {\n        this._allowStart = true;\n        FreeRoundBonus.enableUi();\n        ModuleManager.introModule(GameModules.Base);\n    }\n\n    prepareNewGameRound(): void {\n        if (\n            GameManager.gambleResponse != null &&\n            GameManager.gambleResponse[\"totalCount\"] != null &&\n            GameManager.gambleResponse[\"currentCount\"] != null\n        ) {\n            DataManager.updateDataElement(\n                GameData.DataGambleAttempts,\n                (GameManager.gambleResponse[\"totalCount\"] - GameManager.gambleResponse[\"currentCount\"]).toString(),\n            );\n            DataManager.updateGameDataFromModule(\n                GameData.DataGambleAttempts,\n                (GameManager.gambleResponse[\"totalCount\"] - GameManager.gambleResponse[\"currentCount\"]).toString(),\n            );\n        }\n\n        if (DataManager.GameLimit) {\n            DataManager.updateDataElement(GameData.DataGambleAttempts, 0 + \"\");\n            DataManager.updateGameDataFromModule(GameData.DataGambleAttempts, 0 + \"\");\n\n            this.limit();\n            this.ticker(\"limit\");\n        } else {\n            let softLimit: boolean = false;\n            if (GameManager.gambleResponse.colorWin === 0) {\n                softLimit = true;\n            }\n\n            if (softLimit) {\n                if (GameManager.gambleResponse.halveEnabled) {\n                    this.ticker(\"softLimit\");\n                } else {\n                    this.ticker(\"limit\");\n                }\n            } else if (GameManager.gambleResponse != null && !GameManager.gambleResponse.halveEnabled) {\n                this.ticker(\"halveLimit\");\n            } else {\n                this.ticker(\"default\");\n            }\n\n            this.actions.changeActionStates({\n                [GambleActions.ActionGambleStart]: false,\n                [GambleActions.ActionGambleRed]: !softLimit,\n                [GambleActions.ActionGambleBlack]: !softLimit,\n                [GambleActions.ActionGambleHalve]: GameManager.gambleResponse.halveEnabled,\n                [GambleActions.ActionGambleCollect]: true,\n            });\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    limit(): void {\n        LimitDialog.openDialog();\n\n        this.actions.changeActionStates({\n            [GambleActions.ActionGambleStart]: false,\n            [GambleActions.ActionGambleRed]: false,\n            [GambleActions.ActionGambleBlack]: false,\n            [GambleActions.ActionGambleHalve]: false,\n            [GambleActions.ActionGambleCollect]: true,\n        });\n    }\n\n    enable(): void {\n        this.actions.changeActionState(GambleActions.ActionGambleStart, this._allowStart);\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    disable(): void {\n        this._actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/UserControls/GambleUserControls.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { Controller } from \"../Controller\";\nimport { GambleModel } from \"./GambleModel\";\nimport { GambleView } from \"./GambleView\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\n\n@engineComponent(ComponentTypes.Controller)\nexport class GambleController extends Controller {\n    public static readonly StartReceived: string = \"eventStartReceived\";\n    public static readonly HalveReceived: string = \"eventHalveReceived\";\n    public static readonly SelectReceived: string = \"eventSelectReceived\";\n    public static readonly WinCalculationFinished: string = \"eventWinCalculationFinished\";\n    public static readonly AllWinsFinished: string = \"eventAllWinsFinished\";\n    public static readonly Lose: string = \"eventLose\";\n    public static readonly IntroFinished: string = \"eventIntroFinished\";\n    public static readonly OutroFinished: string = \"eventOutroFinished\";\n\n    protected _view: GambleView;\n    protected _model: GambleModel;\n\n    constructor() {\n        super();\n    }\n\n    startInitialization(view: any): void {\n        if (DEBUG) {\n            this.log(\"startInitialization\");\n        }\n\n        if (view instanceof GambleView) {\n            this._view = view;\n        } else {\n            this.log(\"ERROR view is not instance of GambleView\");\n        }\n\n        this._model = new GambleModel(this);\n    }\n\n    initReceived(): void {\n        this._view.initReceived(this);\n    }\n\n    initIntro(): void {\n        this._view.initIntro();\n    }\n\n    start(): void {\n        this._model.start();\n    }\n\n    startReceived(): void {\n        this._view.startReceived();\n        this.emit(GambleController.StartReceived);\n    }\n\n    select(color: Communication.Game.Color): void {\n        this._model.select(color);\n    }\n\n    selectReceived(): void {\n        this._view.selectReceived();\n        this.emit(GambleController.SelectReceived);\n    }\n\n    halve(): void {\n        this._model.halve();\n    }\n\n    halveReceived(): void {\n        this.emit(GambleController.HalveReceived);\n    }\n\n    winCalculationFinished(): void {\n        this.emit(GambleController.WinCalculationFinished);\n    }\n\n    allWinsFinished(): void {\n        this.emit(GambleController.AllWinsFinished);\n    }\n\n    lose(): void {\n        this.emit(GambleController.Lose);\n    }\n\n    intro(long: boolean): void {\n        this._view.intro();\n    }\n\n    introFinished(): void {\n        this.emit(GambleController.IntroFinished);\n    }\n\n    outro(): void {\n        this._view.outro();\n    }\n\n    outroFinished(): void {\n        this.emit(GambleController.OutroFinished);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Gamble/GambleController.ts\n **/","import { Logger } from \"neo-common\";\n\nexport class Controller extends PIXI.utils.EventEmitter {\n    protected log(s: string): void {\n        if (DEBUG) {\n            const compName = (this as any).__componentName__;\n\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Controller.ts\n **/","import { Utils } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { GambleController } from \"./GambleController\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { MessageManager } from \"../../Managers/MessageManager\";\n\nexport class GambleModel {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected controller: GambleController;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor(controller: GambleController) {\n        this.controller = controller;\n    }\n\n    //******************************************************************************************************************\n    //  REQUESTS\n    //******************************************************************************************************************\n\n    public start(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        DataManager.controlAutoplay();\n        GameManager.gameClient.start(Communication.Game.GameModules.Gamble).then((response: any): any => {\n            MessageManager.postpone(this.startReceived.bind(this), response);\n        });\n    }\n\n    public select(color: Communication.Game.Color): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        DataManager.controlAutoplay();\n        GameManager.gameClient.gambleSelect(color).then((response: any): any => {\n            MessageManager.postpone(this.selectReceived.bind(this), response);\n        });\n    }\n\n    public halve(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        DataManager.controlAutoplay();\n        GameManager.gameClient.gambleHalve(Communication.Game.GameModules.Gamble).then((response: any): any => {\n            MessageManager.postpone(this.halveReceived.bind(this), response);\n        });\n    }\n\n    //******************************************************************************************************************\n    //  RESPONSES\n    //******************************************************************************************************************\n\n    protected startReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            this.controller.startReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    protected selectReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            this.controller.selectReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    protected halveReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            this.controller.halveReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Gamble/GambleModel.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { GambleController } from \"./GambleController\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"../../HTMLComponents/Elements/HtmlContainerElement\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { ContainerElement } from \"../../Components/Elements/Graphics/ContainerElement\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { AmbientBackground } from \"../../Utils/AmbientBackground\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class GambleView extends ContainerElement {\n    private _controller: GambleController;\n\n    private _gambleControls: HTMLElement;\n    private _gambleRedBtn: HTMLElement;\n    private _gambleBlackBtn: HTMLElement;\n    private _gambleActualCard: HTMLElement;\n    private _gambleCardBack: HTMLElement;\n    private _gambleWin: HTMLElement;\n    private _gambleWin2: HTMLElement;\n    private _previousCards: Array<HTMLElement>;\n\n    private _actualColor: string;\n\n    private _revealTimer: FrameTimerEventEmitter;\n    private _revealBackTimer: FrameTimerEventEmitter;\n    private _winTimer: FrameTimerEventEmitter;\n    private _loseTimer: FrameTimerEventEmitter;\n    private _introDelayTimer: FrameTimerEventEmitter;\n    private _introSoundTimer: FrameTimerEventEmitter;\n    private _outroDelayTimer: FrameTimerEventEmitter;\n\n    constructor() {\n        super();\n\n        this._revealTimer = CreateFrameTimer(\"revealTimer\");\n        this._revealTimer.on(FrameTimerEvents.Complete, this.reveal.bind(this));\n\n        this._revealBackTimer = CreateFrameTimer(\"revealTimer\");\n        this._revealBackTimer.on(FrameTimerEvents.Complete, this.revealBack.bind(this));\n\n        this._winTimer = CreateFrameTimer(\"revealTimer\");\n        this._winTimer.on(FrameTimerEvents.Complete, this.win.bind(this));\n\n        this._loseTimer = CreateFrameTimer(\"revealTimer\");\n        this._loseTimer.on(FrameTimerEvents.Complete, this.lose.bind(this));\n\n        this._introDelayTimer = CreateFrameTimer(\"introDelayTimer\");\n        this._introDelayTimer.on(FrameTimerEvents.Complete, this.introDelayed.bind(this));\n\n        this._introSoundTimer = CreateFrameTimer(\"introSoundTimer\");\n        this._introSoundTimer.on(FrameTimerEvents.Complete, this.introSoundStart.bind(this));\n\n        this._outroDelayTimer = CreateFrameTimer(\"revealTimer\");\n        this._outroDelayTimer.on(FrameTimerEvents.Complete, this.outroDelayed.bind(this));\n    }\n\n    create(node: Element): void {\n        super.create(node);\n    }\n\n    initReceived(controller: GambleController): void {\n        this._controller = controller;\n\n        this._gambleControls = document.getElementById(\"gamble\");\n\n        if (this._gambleControls == null) {\n            if (DEBUG) {\n                this.log(\"ERROR no gamble controlls\");\n            }\n        }\n\n        this._gambleActualCard = document.getElementById(\"gambleActualCard\");\n        if (this._gambleActualCard == null) {\n            if (DEBUG) {\n                this.log(\"ERROR no gambleActualCard\");\n            }\n        }\n\n        this._gambleCardBack = document.getElementById(\"gambleCardBack\");\n        if (this._gambleCardBack == null) {\n            if (DEBUG) {\n                this.log(\"ERROR no gambleCardBack\");\n            }\n        }\n\n        this._gambleWin = document.getElementById(\"gambleWin\");\n        if (this._gambleWin == null) {\n            this._gambleWin = document.getElementById(\"winBox\");\n            if (this._gambleWin == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no gambleWin\");\n                }\n            }\n        }\n\n        this._gambleWin2 = document.getElementById(\"winBox2\");\n        if (this._gambleWin2 == null) {\n            if (this._gambleWin2 == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no _gambleWin2\");\n                }\n            }\n        }\n\n        this._gambleRedBtn = document.getElementById(\"gambleRedBtn\");\n        this._gambleBlackBtn = document.getElementById(\"gambleBlackBtn\");\n        if (this._gambleRedBtn != null && this._gambleBlackBtn != null) {\n            this._gambleRedBtn.addEventListener(HtmlContainerElement.Over, this.onOver.bind(this));\n            this._gambleRedBtn.addEventListener(HtmlContainerElement.TouchStart, this.onOver.bind(this));\n            this._gambleRedBtn.addEventListener(HtmlContainerElement.Out, this.onOut.bind(this));\n            this._gambleRedBtn.addEventListener(HtmlContainerElement.TouchEnd, this.onOut.bind(this));\n            this._gambleBlackBtn.addEventListener(HtmlContainerElement.Over, this.onOver.bind(this));\n            this._gambleBlackBtn.addEventListener(HtmlContainerElement.TouchStart, this.onOver.bind(this));\n            this._gambleBlackBtn.addEventListener(HtmlContainerElement.Out, this.onOut.bind(this));\n            this._gambleBlackBtn.addEventListener(HtmlContainerElement.TouchEnd, this.onOut.bind(this));\n        }\n\n        this._previousCards = [];\n        for (let i: number = 0; i < 5; i++) {\n            let card: HTMLElement = document.getElementById(\"previousCard\" + i);\n            if (card != null) {\n                this._previousCards.push(card);\n            }\n        }\n    }\n\n    initIntro(): void {\n        this.previousCards();\n        if (this._gambleControls != null && this._gambleControls.classList.contains(HtmlController.DisabledClass)) {\n            this._gambleControls.classList.remove(HtmlController.DisabledClass);\n            this._gambleControls.style.display = \"block\";\n        }\n        PlayList.loop(\"SND_GambleLoop\");\n\n        AmbientBackground.changeAmbientBackground(\"gambleBg\", 0);\n    }\n\n    private onOver(): void {\n        if (this._gambleRedBtn != null && !this._gambleRedBtn.classList.contains(\"_hover\")) {\n            this._gambleRedBtn.classList.add(\"_hover\");\n        }\n        if (this._gambleBlackBtn != null && !this._gambleBlackBtn.classList.contains(\"_hover\")) {\n            this._gambleBlackBtn.classList.add(\"_hover\");\n        }\n    }\n\n    private onOut(): void {\n        if (this._gambleRedBtn != null && this._gambleRedBtn.classList.contains(\"_hover\")) {\n            this._gambleRedBtn.classList.remove(\"_hover\");\n        }\n        if (this._gambleBlackBtn != null && this._gambleBlackBtn.classList.contains(\"_hover\")) {\n            this._gambleBlackBtn.classList.remove(\"_hover\");\n        }\n    }\n\n    startReceived(): void {\n        this.previousCards();\n    }\n\n    selectReceived(): void {\n        if (GameManager.gambleResponse.currentCard != null) {\n            if (this._gambleActualCard != null && this._gambleCardBack != null) {\n                this._gambleCardBack.classList.remove(\"_CA\");\n                this._gambleCardBack.classList.remove(\"_DA\");\n                this._gambleCardBack.classList.remove(\"_HA\");\n                this._gambleCardBack.classList.remove(\"_SA\");\n                this._gambleCardBack.classList.remove(\"_JR\");\n                this._gambleCardBack.classList.add(\"_\" + GameManager.gambleResponse.currentCard);\n                this._gambleActualCard.classList.add(\"_reveal\");\n\n                if (GameManager.gambleResponse != null && GameManager.gambleResponse.currentWin > 0) {\n                    this._revealTimer.start(30);\n                } else {\n                    this._revealTimer.start(60);\n                }\n\n                PlayList.play(\"SND_GambleDraw\");\n            }\n        }\n    }\n    private previousCards(): void {\n        if (this._previousCards != null && GameManager.gambleResponse.previousCards != null) {\n            for (var i: number = 0; i < GameManager.gambleResponse.previousCards.length; i++) {\n                var card: HTMLElement = this._previousCards[i];\n                if (card != null) {\n                    card.classList.remove(\"_CA\");\n                    card.classList.remove(\"_DA\");\n                    card.classList.remove(\"_HA\");\n                    card.classList.remove(\"_SA\");\n                    card.classList.remove(\"_JR\");\n                    if (GameManager.gambleResponse.previousCards[i] != \"XX\") {\n                        card.classList.add(\"_\" + GameManager.gambleResponse.previousCards[i]);\n                    }\n                }\n            }\n        }\n    }\n\n    reAnimate(color: string): boolean {\n        if (this._gambleActualCard != null && this._gambleActualCard.classList.contains(\"_reveal\")) {\n            this._actualColor = color;\n            this._gambleActualCard.classList.remove(\"_reveal\");\n\n            PlayList.play(\"SND_GambleDraw\");\n\n            this._revealBackTimer.start(30);\n            return false;\n        } else {\n            return true;\n        }\n    }\n\n    disabled(): void {\n        if (this._gambleControls != null && !this._gambleControls.classList.contains(HtmlController.DisabledClass)) {\n            this._gambleControls.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    intro(): void {\n        this._introDelayTimer.start(1);\n        if (this._gambleControls != null) {\n            this._gambleControls.style.display = \"block\";\n        }\n\n        AmbientBackground.changeAmbientBackground(\"gambleBg\", 100);\n    }\n\n    private introDelayed(): void {\n        this._introDelayTimer.stop();\n        if (this._gambleControls != null && this._gambleControls.classList.contains(HtmlController.DisabledClass)) {\n            this._gambleControls.classList.remove(HtmlController.DisabledClass);\n        }\n        PlayList.play(\"SND_transition\");\n        this._introSoundTimer.start(30);\n    }\n\n    private introSoundStart(): void {\n        this._introSoundTimer.stop();\n        PlayList.stop(\"SND_BaseLoop\");\n        PlayList.loop(\"SND_GambleLoop\");\n        this._controller.introFinished();\n    }\n\n    outro(): void {\n        this._outroDelayTimer.start(30);\n        if (this._gambleControls != null && !this._gambleControls.classList.contains(HtmlController.DisabledClass)) {\n            this._gambleControls.classList.add(HtmlController.DisabledClass);\n        }\n        PlayList.play(\"SND_transition\");\n        PlayList.stop(\"SND_GambleLoop\");\n        PlayList.loop(\"SND_BaseLoop\");\n\n        AmbientBackground.changeAmbientBackground(\"base\", 90);\n    }\n\n    private outroDelayed(): void {\n        this._outroDelayTimer.stop();\n        if (this._gambleControls != null) {\n            this._gambleControls.style.display = \"none\";\n        }\n        this._controller.outroFinished();\n    }\n\n    reveal(): void {\n        this._revealTimer.stop();\n        this.previousCards();\n        this._controller.winCalculationFinished();\n\n        if (GameManager.gambleResponse != null && GameManager.gambleResponse.currentWin > 0) {\n            this._gambleActualCard.classList.remove(\"_reveal\");\n            PlayList.play(\"SND_GambleWin\");\n            if (this._gambleWin != null && !this._gambleWin.classList.contains(\"winAnimation\")) {\n                this._gambleWin.classList.add(\"winAnimation\");\n            }\n            if (this._gambleWin2 != null && !this._gambleWin2.classList.contains(\"winAnimation\")) {\n                this._gambleWin2.classList.add(\"winAnimation\");\n            }\n            this._winTimer.start(15);\n        } else {\n            this._gambleActualCard.classList.remove(\"_reveal\");\n            this._revealBackTimer.start(30);\n            this._loseTimer.start(30);\n        }\n    }\n\n    revealBack(): void {\n        this.onOut(); //remove _hover class\n        this._revealBackTimer.stop();\n    }\n\n    win(): void {\n        this._winTimer.stop();\n        this._revealBackTimer.start(5);\n        if (this._gambleWin != null && this._gambleWin.classList.contains(\"winAnimation\")) {\n            this._gambleWin.classList.remove(\"winAnimation\");\n        }\n        if (this._gambleWin2 != null && this._gambleWin2.classList.contains(\"winAnimation\")) {\n            this._gambleWin2.classList.remove(\"winAnimation\");\n        }\n        this._controller.allWinsFinished();\n    }\n\n    lose(): void {\n        this._loseTimer.stop();\n        this._controller.lose();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Gamble/GambleView.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\nimport { BaseElement } from \"./BaseElement\";\nimport { ContainerStyle } from \"../Styles/ContainerStyle\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { CanvasManager } from \"../../Managers/CanvasManager\";\nimport { HtmlManager } from \"../../Managers/HtmlManager\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { Tweens } from \"../../Effects/Tweens\";\nimport { Attributes } from \"../../../Utils/Attributes\";\n\n/**\n * ContainerElement class is class which creates holder for other elements.\n * Container element can be used for grouping more display objects and better organization in xmls.\n * Can be defined also by Style with class ContainerStyle.\n * Example 1:\n *   <ContainerElement Class=\"ContainerElement\" X=\"0\" Y=\"0\">\n *       <Child1 />\n *       <Child2 />\n *       ...\n *       <ChildX />\n *   </ContainerElement>\n *\n * Example 2:\n *   <ContainerElement Class=\"ContainerElement\" Style=\"ContainerStyle\" />\n *\n * @class ContainerElement\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ContainerElement extends BaseElement {\n    // style is optional in this element\n    style: ContainerStyle;\n    // list of children\n    childs: Object;\n\n    _tint: number;\n\n    constructor() {\n        super();\n    }\n\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs.hasOwnProperty(key)) {\n                    if (this.childs[key] instanceof PIXI.DisplayObject) {\n                        this.childs[key].destroy(options);\n                    }\n                    this.childs[key] = null;\n                }\n            }\n\n            this.childs = null;\n        }\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    public createByNode(node: Element): void {\n        super.createByNode(node);\n\n        /*\n         * Style can be define for better usage of container elements.\n         * For example when you want to use same display objects with same names on more than one places.\n         * Style for container element has to be instance of ContainerStyle.\n         * @property Style\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(ContainerElementAttributes.STYLE)) {\n            // get style from StyleManager\n            this.style = <ContainerStyle>StyleManager.Styles[node.getAttribute(ContainerElementAttributes.STYLE)];\n            if (this.style != null) {\n                // parse childs from style\n                if (this.childs == null) {\n                    this.childs = CanvasManager.parseElements(this.style.node, this);\n                    HtmlManager.parseElements(this.style.node, null);\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no style with name \" + node.getAttribute(ContainerElementAttributes.STYLE));\n                }\n            }\n        } else {\n            // parse childs from node\n            if (this.childs == null) {\n                this.childs = CanvasManager.parseElements(node, this);\n                HtmlManager.parseElements(node, null);\n            }\n        }\n\n        if (this.childs == null) {\n            if (DEBUG) {\n                this.log(\"WARNING container element with name \" + node.nodeName + \" has no children\");\n            }\n        }\n    }\n\n    public updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(ContainerElementAttributes.TINT)) {\n            this.setTint(parseInt(node.getAttribute(ContainerElementAttributes.TINT), 16));\n        }\n\n        this.runTintTween(node);\n\n        let child = node.firstElementChild;\n        while (child) {\n            if (child.tagName) {\n                if (this.childs[child.tagName]) {\n                    this.childs[child.tagName].updateByNode(child);\n                }\n            }\n            child = child.nextElementSibling;\n        }\n    }\n\n    public setTint(tintColor: number): void {\n        if (this._tint === tintColor || isNaN(tintColor)) {\n            return;\n        }\n        this._tint = tintColor;\n        for (let child in this.childs) {\n            if (typeof this.childs[child].tint === \"number\") {\n                this.childs[child].tint = tintColor;\n            } else if (typeof this.childs[child].setTint === \"function\") {\n                this.childs[child].setTint(tintColor);\n            }\n        }\n    }\n\n    set tint(tintColor: number) {\n        this.setTint(tintColor);\n    }\n\n    get tint(): number {\n        return this._tint;\n    }\n\n    public runTintTween(node: Element): boolean {\n        if (!node.hasAttribute(ContainerElementAttributes.TINT_TWEEN)) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"tint\");\n\n        let tintTween: Array<number>;\n\n        let tintTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            ContainerElementAttributes.TINT_TWEEN_POSITION,\n            null,\n        );\n        if (tintTweenPosition == ContainerElementAttributes.TINT_TWEEN_POSITION_VALUE.SMOOTH) {\n            tintTween = node\n                .getAttribute(ContainerElementAttributes.TINT_TWEEN)\n                .split(\";\")\n                .map((value) => parseInt(value, 16));\n            if (tintTween.length) {\n                tintTween[0] = this.tint;\n            }\n        } else {\n            tintTween = node\n                .getAttribute(ContainerElementAttributes.TINT_TWEEN)\n                .split(\";\")\n                .map((value) => parseInt(value, 16));\n        }\n\n        const tweenValues: Array<number> = tintTween || [];\n\n        const tween: string = \"tint\";\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            ContainerElementAttributes.TINT_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ContainerElementAttributes.TINT_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(ContainerElementAttributes.TINT_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(ContainerElementAttributes.TINT_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ContainerElementAttributes.TINT_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(ContainerElementAttributes.TINT_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(ContainerElementAttributes.TINT_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.colorTween(this, { tween, tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return ContainerElement\n     */\n    clone(): ContainerElement {\n        let element: ContainerElement = new ContainerElement();\n\n        element.style = this.style;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.visible = this.visible;\n        element.name = this.name;\n\n        element.childs = {};\n        element.removeChildren();\n        for (let key in this.childs) {\n            element.childs[key] = this.childs[key].clone();\n            element.addChild(element.childs[key]);\n        }\n\n        if (this.maskSprite != null) {\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\n            elementMask.position.x = this.maskSprite.position.x;\n            elementMask.position.y = this.maskSprite.position.y;\n\n            element.maskSprite = elementMask;\n            element.addChild(elementMask);\n            element.mask = elementMask;\n        }\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\nconst ContainerElementAttributes = {\n    DEBUG: \"Debug\",\n    /**\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    STYLE: \"Style\",\n\n    TINT: \"Tint\",\n\n    TINT_TWEEN: \"TintTween\",\n    TINT_TWEEN_EASE: \"TintTweenTease\",\n    TINT_TWEEN_DURATION: \"TintTweenDuration\",\n    TINT_TWEEN_DELAY: \"TintTweenDelay\",\n    TINT_TWEEN_POSITION: \"TintTweenPosition\",\n    TINT_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        SMOOTH: \"smooth\",\n    },\n    TINT_TWEEN_LOOP: \"TintTweenLoop\",\n    TINT_TWEEN_KEY_TIMES: \"TintTweenKeyTimes\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ContainerElement.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\nimport { ClientHost, Communication, GameEngine, Platforms } from \"neo-games\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { BaseActions } from \"../Common/Actions/BaseActions\";\nimport { UserControls } from \"../Common/UserControls/UserControls\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { Paytable } from \"../Common/Paytable/Paytable\";\nimport { GameData } from \"../Common/Datas/GameData\";\nimport { GameActions } from \"../Common/Actions/GameActions\";\nimport { BaseController } from \"../../GameComponents/Base/BaseController\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { BalanceManager } from \"../../Managers/BalanceManager\";\nimport { LimitDialog } from \"../Common/Dialogs/LimitDialog\";\nimport { ResponsibleDialog1 } from \"../Common/Dialogs/ResponsibleDialog1\";\nimport { FreeRoundBonus } from \"../Common/Bonuses/FreeRoundBonus\";\nimport { Jackpot } from \"../Common/Bonuses/Jackpot\";\nimport { Languages } from \"../../Utils/Languages\";\nimport { BetHigherThanMinDialog } from \"../Common/Dialogs/BetHigherThanMinDialog\";\nimport { FreeRoundBonusDialog } from \"../Common/Dialogs/FreeRoundBonusDialog\";\nimport { FreeRoundBonusIcon } from \"../Common/Dialogs/FreeRoundBonusIcon\";\n\nvar GameModules = Communication.Game.GameModules;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class DesktopBaseUserControls extends UserControls {\n    protected _controller: BaseController;\n\n    private _userControls: HTMLElement;\n    private _fsUserControls: HTMLElement;\n    private _userControls_supreme: HTMLElement;\n    private _paytable: Paytable;\n    private _afterWinDelay: FrameTimerEventEmitter;\n    private _autoplayDelay: FrameTimerEventEmitter;\n\n    private _wasCalclulated: boolean = true;\n    private _unColectedWin: number = 0;\n    private _unColectedWinDelay: FrameTimerEventEmitter;\n    private _machineStopped: boolean = true;\n\n    private _prepareNewGameRound: FrameTimerEventEmitter;\n\n    protected _userControlsShowDelay: FrameTimerEventEmitter;\n\n    private longIntro: boolean = false;\n\n    constructor() {\n        super(\"base\");\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.registerActions();\n\n        this._afterWinDelay = CreateFrameTimer(\"afterWinDelay\");\n        this._afterWinDelay.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._autoplayDelay = CreateFrameTimer(\"autoplayDelay\");\n        this._autoplayDelay.on(FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\n\n        this._unColectedWinDelay = CreateFrameTimer(\"unColectedWinDelay\");\n        this._unColectedWinDelay.on(FrameTimerEvents.Complete, this.unColectedWinDelay.bind(this));\n\n        this._userControls = document.getElementById(\"userControls\");\n        this._fsUserControls = document.getElementById(\"freespinsUserControls\");\n\n        this._prepareNewGameRound = CreateFrameTimer(\"prepareNewGameRound\");\n        this._prepareNewGameRound.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._userControlsShowDelay = CreateFrameTimer(\"userControlsShowDelay\");\n        this._userControlsShowDelay.on(FrameTimerEvents.Complete, this.userControlsShowDelay.bind(this));\n    }\n\n    addController(controller: BaseController): void {\n        this._controller = controller;\n        this._controller.on(BaseController.SpinReceived, this.spinReceived.bind(this));\n        this._controller.on(BaseController.MachineStopped, this.machineStopped.bind(this));\n        this._controller.on(BaseController.WinCalculationFinished, this.winCalculationFinished.bind(this));\n        this._controller.on(BaseController.AllWinsFinished, this.allWinsFinished.bind(this));\n        this._controller.on(BaseController.IntroFinished, this.introFinished.bind(this));\n        this._controller.on(BaseController.OutroFinished, this.outroFinished.bind(this));\n        this._controller.on(BaseController.QuickWinCalculationFinished, this.quickWinCalculationFinished.bind(this));\n    }\n\n    registerActions(): void {\n        this.actions.registerActions({\n            [BaseActions.ActionAutoplay]: false,\n            [BaseActions.ActionAutoplayStop]: false,\n            [BaseActions.ActionBaseCollect]: false,\n            [BaseActions.ActionBetPlus]: false,\n            [BaseActions.ActionBetMinus]: false,\n            [BaseActions.ActionMaxBet]: false,\n            [BaseActions.ActionSpin]: false,\n            [BaseActions.ActionSpinStop]: false,\n        });\n    }\n\n    initReceived(): void {\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\n\n        super.initReceived();\n\n        this._controller.initReceived();\n\n        this._paytable = new Paytable();\n        this._paytable.initialize();\n\n        if (GameManager.gameResponse != null) {\n            if (!(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataTotalWin,\n                    GameManager.gameResponse.totalWin.toString(),\n                );\n            }\n        }\n\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls_supreme != null) {\n            if (ModuleManager.gambleActive()) {\n                if (this._userControls_supreme.classList.contains(HtmlController.DisabledClass)) {\n                    this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n                }\n            } else {\n                if (!this._userControls_supreme.classList.contains(HtmlController.DisabledClass)) {\n                    this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n                }\n            }\n        }\n\n        DataManager.updateDataElements();\n    }\n\n    collectReceived(): void {\n        FreeRoundBonus.enableUi();\n        Platforms.Platforms.roundEnded({\n            id: GameManager.gameResponse.roundId,\n            win: this._unColectedWin,\n            balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n        });\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\n\n        super.collectReceived();\n\n        this._wasCalclulated = true;\n        DataManager.Collectable = true;\n        DataManager.updateDataElements();\n\n        this.prepareNewGameRound();\n\n        if (AppContext.gameConfiguration.CollectOnUnCalculatedWin && this._unColectedWin > 0) {\n            DataManager.updateDataElement(GameData.DataTotalWin, this._unColectedWin.toString());\n            this.changeWinBox(true);\n        } else {\n            if (!(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\n                DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            }\n            this.changeWinBox();\n        }\n        this._unColectedWinDelay.stop();\n        //this._unColectedWinDelay.start(75);\n        this._unColectedWin = 0;\n\n        if (FreeRoundBonus.isLastFrb) {\n            FreeRoundBonus.endFreeRounds();\n            ModuleManager.disableBase();\n            return;\n        }\n    }\n\n    restoreGameRound(collect: boolean = false): void {\n        super.collectReceived();\n        this.changeWinBox(collect);\n\n        FreeRoundBonus.enableUi();\n\n        DataManager.Collectable = true;\n\n        if (this._unColectedWin == 0) {\n            this._controller.resetWinAnimator();\n        }\n        this.prepareNewGameRound();\n    }\n\n    spinReceived(): void {\n        FreeRoundBonus.frbSpin();\n\n        if (DataManager.quickspinEnabled()) {\n            // auto quick stop\n            this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n            HtmlController.updateActionElements(this.getAllActions());\n            HtmlController.dispatchUiAction(\"\");\n            DataManager.updateDataElement(GameData.DataRoundId);\n            this._controller.stop();\n        } else {\n            this.actions.changeActionState(\n                BaseActions.ActionSpinStop,\n                AppContext.gameConfiguration.GameEnableReelsStop,\n            );\n            HtmlController.updateActionElements(this.getAllActions());\n            DataManager.updateDataElement(GameData.DataRoundId);\n        }\n    }\n\n    dispatchAction(action: string): void {\n        if (ModuleManager.gambleActive() || ModuleManager.freespinsActive()) {\n            return;\n        }\n\n        if (action === GameActions.ActionSpinOrStop) {\n            if (this.actions.getActionState(BaseActions.ActionSpin)) {\n                action = BaseActions.ActionSpin;\n            } else if (this.actions.getActionState(BaseActions.ActionSpinStop)) {\n                action = BaseActions.ActionSpinStop;\n            } else {\n                return;\n            }\n        }\n\n        if (this.actions.getActionState(action)) {\n            if (action === BaseActions.ActionBaseCollect) {\n                this.changeWinBox(true);\n            } else {\n                this.changeWinBox();\n            }\n\n            PlayList.play(\"SND_Click\");\n            super.dispatchAction(action);\n\n            switch (action) {\n                case BaseActions.ActionSpin:\n                    this.spin();\n                    break;\n                case BaseActions.ActionSpinStop:\n                    this.stop();\n                    break;\n                case BaseActions.ActionAutoplay:\n                    this.autoplay();\n                    break;\n                case BaseActions.ActionAutoplayStop:\n                    this.autoplayStop();\n                    break;\n                case BaseActions.ActionMaxBet:\n                    this.changeBet(false, true, false);\n                    break;\n                case BaseActions.ActionBetPlus:\n                    this.changeBet(false, false, false);\n                    break;\n                case BaseActions.ActionBetMinus:\n                    this.changeBet(true, false, false);\n                    break;\n                case BaseActions.ActionBaseCollect:\n                    this.collect();\n                    break;\n            }\n        }\n    }\n\n    collect(): void {\n        if (!this._wasCalclulated) {\n            if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0) {\n                Platforms.Platforms.win(GameManager.baseResponse.currentWin);\n            }\n        }\n\n        super.collect();\n\n        ModuleManager.disableGamble();\n        this.disable();\n        this.playCollectSound();\n\n        this._controller.collect();\n\n        LimitDialog.closeDialog();\n        GameManager.collect(GameModules.Base);\n\n        if (!(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\n            DataManager.updateDataElement(\n                GameData.DataTotalWin,\n                !AppContext.gameDefinition.Gamble ? \"0\" : this._unColectedWin.toString(),\n            );\n        }\n        //this._unColectedWinDelay.start(75);\n    }\n\n    unColectedWinDelay(): void {\n        DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n    }\n\n    spin(): void {\n        this._machineStopped = false;\n\n        FreeRoundBonus.disableUi();\n        if (FreeRoundBonus.hasNewActiveOffer()) {\n            if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\n                this.changeWinBox(true);\n                this.collect();\n            } else {\n                FreeRoundBonus.enableUi();\n            }\n            return;\n        }\n\n        if (this.checkJackpotMiniGame()) {\n            return;\n        }\n\n        if (\n            ResponsibleDialog1.showResponsibleDialog1OnCollect &&\n            !(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")\n        ) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox(true);\n                this.collect();\n            } else {\n                GameManager.canExit();\n                this.changeWinBox();\n            }\n\n            return;\n        }\n\n        if (BetHigherThanMinDialog.canOpenDialog()) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox(true);\n                this.collect();\n            }\n            BetHigherThanMinDialog.openDialog();\n            return;\n        }\n\n        if (Paytable.shouldOpen(true, true)) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox(true);\n                this.collect();\n            } else {\n                Paytable.show();\n            }\n            return;\n        }\n\n        if (\n            !DataManager.Autoplay &&\n            !this._wasCalclulated &&\n            !DataManager.GameRoundClosed &&\n            AppContext.gameConfiguration.CollectOnUnCalculatedWin\n        ) {\n            this.changeWinBox(true);\n            this.collect();\n            return;\n        } else {\n            this.changeWinBox();\n            if (!this._wasCalclulated) {\n                if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0) {\n                    Platforms.Platforms.win(GameManager.baseResponse.currentWin);\n                }\n            }\n        }\n\n        if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\n            const balanceTotal = parseFloat(DataManager.getDataById(GameData.DataBalanceTotal));\n            const balanceAfter = parseFloat(NumberUtils.add(GameManager.gameResponse.totalWin, balanceTotal));\n            Platforms.Platforms.roundEnded({\n                id: GameManager.gameResponse.roundId,\n                win: GameManager.gameResponse.totalWin,\n                balanceAfter: balanceAfter,\n                inSpin: true,\n            });\n        }\n\n        if (!Platforms.Platforms.canSpinOnCollect) {\n            this.autoplayStop();\n            this.changeWinBox(true);\n            this.collect();\n            return;\n        }\n\n        if (!BalanceManager.hasCredit(false, true)) {\n            DataManager.Autoplay = false;\n            ModuleManager.disableGamble();\n            this.prepareNewGameRound();\n            return;\n        }\n\n        DataManager.Collectable = false;\n        ModuleManager.disableGamble();\n        this.actions.disableAllActions();\n\n        if (DataManager.Autoplay) {\n            if (\n                !DataManager.AutoplayStarted &&\n                GameManager.baseResponse != null &&\n                GameManager.baseResponse.totalWin != null &&\n                GameManager.baseResponse.totalWin > 0\n            ) {\n                DataManager.updateLossLimit(GameManager.baseResponse.totalWin);\n            }\n            DataManager.updateLossLimit();\n            this.actions.changeActionState(BaseActions.ActionAutoplayStop, DataManager.autoplayEnabled());\n        }\n        HtmlController.dispatchUiAction(\"\");\n        HtmlController.updateActionElements(this.getAllActions());\n        this.playCollectSound();\n\n        DataManager.updateTotalGain(true);\n        BalanceManager.fixBalance();\n        if (!DataManager.GameRoundClosed || (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\n            DataManager.updateDataElement(GameData.DataTotalWin);\n        }\n        this._controller.spin();\n\n        LimitDialog.closeDialog();\n\n        this._wasCalclulated = false;\n\n        Platforms.Platforms.roundStarted({\n            totalBet: BetManager.Bet,\n            freeRound: FreeRoundBonus.inFrb,\n            userAction: DataManager.getTrustedUserAction(BaseActions.ActionSpin),\n        });\n        Platforms.Platforms.spinStarted();\n        Platforms.Platforms.balanceUpdated({ amount: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)) });\n    }\n\n    stop(): void {\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n        HtmlController.updateActionElements(this.getAllActions());\n        HtmlController.dispatchUiAction(\"\");\n        DataManager.quickspinStopped();\n        this._controller.stop();\n    }\n\n    autoplayDelayed(): void {\n        this._autoplayDelay.stop();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        } else {\n            this.prepareNewGameRound();\n        }\n    }\n\n    autoplay(): void {\n        this._afterWinDelay.stop();\n\n        if (this.checkJackpotMiniGame()) {\n            return;\n        }\n\n        if (DataManager.AutoplayCount === \"∞\") {\n            DataManager.Autoplay = true;\n            DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n            this.spin();\n        } else {\n            DataManager.AutoplayCount = (parseInt(DataManager.AutoplayCount) - 1).toString();\n            if (parseInt(DataManager.AutoplayCount) >= 0) {\n                DataManager.Autoplay = true;\n                DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n                this.spin();\n            } else {\n                DataManager.Autoplay = false;\n                this.prepareNewGameRound();\n            }\n        }\n    }\n\n    autoplayStop(): void {\n        DataManager.Autoplay = false;\n\n        Platforms.Platforms.autoplayStop();\n\n        if (this._machineStopped) {\n            if (DataManager.GameRoundClosed) {\n                FreeRoundBonus.enableUi();\n                Platforms.Platforms.roundEnded();\n                if (FreeRoundBonus.isLastFrb) {\n                    FreeRoundBonus.endFreeRounds();\n                    ModuleManager.disableBase();\n                }\n            }\n        }\n\n        this.actions.changeActionState(BaseActions.ActionAutoplayStop, false);\n        HtmlController.updateActionElement(BaseActions.ActionAutoplayStop, false);\n    }\n\n    changeBet(decrease: boolean = false, max: boolean = false, cycle: boolean = false): void {\n        if (!DataManager.GameRoundClosed) {\n            this._unColectedWin = 0;\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            this.changeWinBox();\n            this.collect();\n        } else {\n            this._controller.collect();\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            DataManager.updateDataElement(GameData.DataBalanceBonus);\n            DataManager.updateDataElement(GameData.DataBalanceReal);\n            DataManager.updateDataElement(GameData.DataBalanceTotal);\n            LimitDialog.closeDialog();\n        }\n        BetManager.changeBet(decrease, max, cycle);\n        this._paytable.updateDataValues();\n\n        if (BetManager.minBet) {\n            this.actions.changeActionState(BaseActions.ActionBetMinus, false);\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, false);\n            this.actions.changeActionState(BaseActions.ActionBetPlus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, true);\n        } else if (BetManager.maxBet) {\n            this.actions.changeActionState(BaseActions.ActionBetPlus, false);\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, false);\n            this.actions.changeActionState(BaseActions.ActionBetMinus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, true);\n        } else {\n            this.actions.changeActionState(BaseActions.ActionBetPlus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, true);\n            this.actions.changeActionState(BaseActions.ActionBetMinus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, true);\n        }\n\n        if (AppContext.gameConfiguration.ShowMaxBetMessage && max) {\n            const message = AppContext.gameConfiguration.MaxButton\n                ? Languages.getRid(\"MAX_BET_MESSAGE_PL\")\n                : Languages.getRid(\"MAX_BET_MESSAGE\");\n            GameManager.openConfirmationDialog(Communication.Game.GameModules.Base, message);\n        }\n    }\n\n    machineStopped(isHighWin: boolean): void {\n        this._machineStopped = true;\n        Platforms.Platforms.spinEnded();\n\n        DataManager.stopAutoplayIfLossLimit();\n        DataManager.stopAutoplayIfWinLimit();\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin === 0) {\n            FreeRoundBonus.enableUi();\n            Platforms.Platforms.roundEnded({\n                id: GameManager.gameResponse.roundId,\n                win: GameManager.gameResponse.totalWin,\n                balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n            });\n            if (FreeRoundBonus.isLastFrb) {\n                FreeRoundBonus.endFreeRounds();\n                ModuleManager.disableBase();\n                return;\n            }\n        }\n\n        this._unColectedWinDelay.stop();\n        this._unColectedWin = GameManager.gameResponse.totalWin;\n\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (ModuleManager.pickEnabled()) {\n            FreeRoundBonus.disableUi();\n            this.disable();\n            return;\n        }\n\n        if (DataManager.Autoplay) {\n            if (DataManager.AutoplayCount === 0 + \"\") {\n                DataManager.Autoplay = false;\n            }\n        }\n\n        if (GameManager.baseResponse.totalWin === 0) {\n            this._wasCalclulated = true;\n            DataManager.Collectable = true;\n        } else {\n            this._wasCalclulated = false;\n        }\n\n        ModuleManager.enableGamble();\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n        this._afterWinDelay.stop();\n        if (isHighWin) {\n            this._afterWinDelay.start(80);\n        } else {\n            if (GameManager.baseResponse.totalWin > 0) {\n                this._afterWinDelay.start(30);\n            } else {\n                this.prepareNewGameRound();\n            }\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n\n        if (DataManager.Autoplay && GameManager.baseResponse.totalWin === 0) {\n            this._autoplayDelay.start(15);\n        }\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n            if (FreeRoundBonus.isLastFrb) {\n                this.disableAllActions();\n                return;\n            }\n        }\n\n        // Collect total win in last cumulative FRB round when GR isn't yet closed and there isn't current win\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\n            if (\n                !DataManager.GameRoundClosed &&\n                GameManager.baseResponse.totalWin > 0 &&\n                GameManager.baseResponse.currentWin === 0\n            ) {\n                this._controller.resetWinAnimator();\n                this.collect();\n                return;\n            }\n        }\n        //  Try to show RCI dialog by canExit() call when in FRB Cumulative and GameRound is closed\n        if (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\n            if (DataManager.GameRoundClosed) {\n                GameManager.canExit();\n            }\n        }\n    }\n\n    quickWinCalculationFinished(): void {\n        if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\n            Platforms.Platforms.win(GameManager.baseResponse.currentWin);\n        }\n\n        this._wasCalclulated = true;\n        DataManager.updateDataElement(GameData.DataTotalWin);\n    }\n\n    winCalculationFinished(): void {\n        if (DataManager.GameRoundClosed) {\n            Platforms.Platforms.roundEnded({\n                id: GameManager.gameResponse.roundId,\n                win: GameManager.gameResponse.totalWin,\n                balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n            });\n        }\n\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            DataManager.updateDataElement(GameData.DataTotalWin);\n            return;\n        }\n\n        if (ModuleManager.pickEnabled()) {\n            return;\n        }\n\n        this._afterWinDelay.stop();\n\n        DataManager.updateDataElement(GameData.DataTotalWin);\n        if (DataManager.GameRoundClosed && !(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\n            DataManager.updateDataElements();\n        }\n        ModuleManager.enableGamble();\n        DataManager.Collectable = true;\n        this.prepareNewGameRound();\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n            if (!ModuleManager.gambleEnabled()) {\n                FreeRoundBonus.enableUi();\n            }\n            if (FreeRoundBonus.isLastFrb) {\n                this.disableAllActions();\n                return;\n            }\n        } else {\n            FreeRoundBonus.enableFrbExpiration();\n        }\n    }\n\n    allWinsFinished(): void {\n        FreeRoundBonus.enableFrbExpiration();\n\n        if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\n            Platforms.Platforms.win(GameManager.baseResponse.currentWin);\n        }\n\n        this._wasCalclulated = true;\n\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            ModuleManager.enableFreespins();\n            return;\n        }\n\n        if (ModuleManager.pickEnabled()) {\n            ModuleManager.enablePick();\n            this.disable();\n            return;\n        }\n\n        this._afterWinDelay.stop();\n        this.prepareNewGameRound();\n        ModuleManager.enableGamble();\n        if (DataManager.Autoplay && this.actions.getActionState(BaseActions.ActionAutoplayStop)) {\n            this.autoplay();\n        }\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n            if (FreeRoundBonus.isLastFrb) {\n                this._controller.resetWinAnimator();\n                FreeRoundBonus.endFreeRounds();\n                ModuleManager.disableBase();\n                return;\n            }\n        }\n\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\n            if (!DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n                this._controller.resetWinAnimator();\n                this.collect();\n                return;\n            }\n        }\n    }\n\n    initIntro(): void {\n        super.initIntro();\n        this._controller.initIntro();\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            ModuleManager.enableFreespins();\n            this._controller.startConfigurator();\n            return;\n        }\n\n        if (ModuleManager.pickEnabled()) {\n            FreeRoundBonus.disableUi();\n            //this.disable();       // interrupts timer in WA\n            return;\n        }\n\n        this.prepareNewGameRound();\n        ModuleManager.enableGamble();\n        this._unColectedWin = GameManager.gameResponse.totalWin;\n\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\n            if (DataManager.GameRoundClosed) {\n                FreeRoundBonus.endFreeRounds();\n                ModuleManager.disableBase();\n            }\n            return;\n        }\n    }\n\n    intro(long: boolean = false): void {\n        this._wasCalclulated = true;\n\n        //if(long) {\n        this._unColectedWin = GameManager.gameResponse.totalWin;\n        //}\n\n        this.longIntro = long;\n\n        if (DataManager.GameRoundClosed) {\n            DataManager.updateDataElement(GameData.DataBalanceBonus);\n            DataManager.updateDataElement(GameData.DataBalanceReal);\n            DataManager.updateDataElement(GameData.DataBalanceTotal);\n\n            DataManager.Collectable = true;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            this._controller.startConfigurator();\n        } else {\n            this._controller.intro(long);\n        }\n\n        this._userControlsShowDelay.start(10);\n    }\n\n    introFinished(): void {\n        if (DataManager.GameRoundClosed) {\n            Platforms.Platforms.roundEnded();\n        }\n        if (!ResponsibleDialog1.opened) {\n            DataManager.Autoplay = DataManager.AutoplayAfterGamble;\n        }\n        ModuleManager.enableGamble();\n        this._prepareNewGameRound.start(30);\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        }\n\n        this._userControlsShowDelay.start(10);\n\n        if (\n            this.longIntro &&\n            DataManager.GameRoundClosed &&\n            (FreeRoundBonus.id != null || FreeRoundBonus.otherOfferes.length > 0)\n        ) {\n            FreeRoundBonus.enableUi();\n            this.longIntro = false;\n        }\n\n        if (FreeRoundBonus.isLastFrb && DataManager.GameRoundClosed) {\n            this._prepareNewGameRound.stop(); // custom for RP\n            FreeRoundBonus.endFreeRounds();\n            ModuleManager.disableBase();\n            return;\n        }\n\n        // Collect total win in last cumulative FRB round when GR isn't yet closed\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\n            if (!DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\n                this._prepareNewGameRound.stop(); // custom for RP\n                ModuleManager.collect(GameModules.Base);\n            }\n        }\n    }\n\n    outro(): void {\n        if (!this._wasCalclulated) {\n            if (GameManager.gameResponse != null && GameManager.gameResponse.totalWin > 0) {\n                Platforms.Platforms.win(GameManager.gameResponse.totalWin);\n            }\n        }\n\n        this._afterWinDelay.stop();\n        this._autoplayDelay.stop();\n        DataManager.AutoplayAfterGamble = DataManager.Autoplay;\n        DataManager.Autoplay = false;\n        if (ModuleManager.freespinsActive()) {\n            DataManager.AutoplayAfterGamble = false;\n            if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n                this._userControls.classList.add(HtmlController.DisabledClass);\n            }\n\n            if (\n                this._fsUserControls != null &&\n                !this._fsUserControls.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._fsUserControls.classList.add(HtmlController.DisabledClass);\n            }\n\n            if (\n                this._userControls_supreme != null &&\n                !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n            }\n        } else if (ModuleManager.introModule(GameModules.Pick)) {\n            ModuleManager.introModule(GameModules.Pick);\n        }\n\n        this._controller.outro();\n    }\n\n    setAutoplayAfterFeature(value: boolean) {\n        DataManager.AutoplayAfterGamble = value;\n    }\n\n    outroFinished(): void {\n        if (ModuleManager.freespinsActive()) {\n            if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n                this._userControls.classList.add(HtmlController.DisabledClass);\n            }\n\n            if (\n                this._userControls_supreme != null &&\n                !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n            }\n\n            ModuleManager.introModule(GameModules.Freespins);\n        } else if (ModuleManager.pickActive()) {\n            //ModuleManager.introModule(GameModules.Pick);\n        } else {\n            ModuleManager.introModule(GameModules.Gamble);\n        }\n    }\n\n    prepareNewGameRound(): void {\n        this._afterWinDelay.stop();\n\n        if (this.prepareJackpotMiniGame()) {\n            return;\n        }\n\n        if (ResponsibleDialog1.opened) {\n            return;\n        }\n\n        BetHigherThanMinDialog.openDialog();\n        Paytable.openAtStart(true);\n\n        if (BetHigherThanMinDialog.canOpenDialog() && FreeRoundBonusDialog.dialogActive()) {\n            return;\n        }\n\n        if (DataManager.GameLimit) {\n            DataManager.Autoplay = false;\n            this.limit();\n        } else {\n            if (!DataManager.Autoplay) {\n                this.actions.changeActionStates({\n                    [BaseActions.ActionAutoplay]:\n                        (DataManager.GameRoundClosed ||\n                            (FreeRoundBonus.inFrb &&\n                                FreeRoundBonus.winPayMethod === \"cumulative\" &&\n                                !FreeRoundBonus.isLastFrb)) &&\n                        DataManager.autoplayEnabled(),\n                    [BaseActions.ActionAutoplayStop]: false,\n                    [BaseActions.ActionBaseCollect]:\n                        FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\"\n                            ? false\n                            : !DataManager.GameRoundClosed,\n                    [BaseActions.ActionBetPlus]: !BetManager.maxBet,\n                    [BaseActions.ActionBetMinus]: !BetManager.minBet,\n                    [BaseActions.ActionMaxBet]:\n                        !ModuleManager.gambleEnabled() &&\n                        !FreeRoundBonus.inFrb &&\n                        AppContext.gameConfiguration.MaxBetEnabled,\n                    [BaseActions.ActionSpin]: !FreeRoundBonus.isLastFrb,\n                    [BaseActions.ActionSpinStop]: false,\n                });\n\n                if (DataManager.GameRoundClosed) {\n                    Platforms.Platforms.roundInit();\n                }\n            }\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    private prepareJackpotMiniGame(): boolean {\n        if (DataManager.GameRoundClosed && Jackpot.hasMiniGame() && !FreeRoundBonus.inFrb) {\n            if (Jackpot.hasInitializedGame() && this._wasCalclulated) {\n                DataManager.Autoplay = false;\n                this.resetWinAnimator();\n                this.disable();\n                FreeRoundBonus.disableUi();\n                Jackpot.startMiniGame();\n\n                return true;\n            } else {\n                const self = this;\n\n                //in nogamble we need to wait for winCalculated finish to not run minigame right after machinestopped\n                if (this._wasCalclulated) {\n                    Jackpot.initMiniGame(true, () => {\n                        self.resetWinAnimator();\n                        self.disable();\n                        DataManager.Autoplay = false;\n                        FreeRoundBonus.disableUi();\n                    });\n                }\n\n                //in case we have nogamble and pb within or after gr, check limit\n                if (DataManager.GameLimit) {\n                    DataManager.Autoplay = false;\n                    this.limit();\n                }\n\n                if (Jackpot.waitForMiniGameInitialization()) {\n                    //in case we have limit, disable all actions during animation and wait for minigame\n                    this.actions.disableAllActions();\n                    HtmlController.updateActionElements(this.getAllActions());\n\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    }\n\n    private checkJackpotMiniGame(): boolean {\n        if (!Jackpot.hasMiniGame() || FreeRoundBonus.inFrb) {\n            return false;\n        }\n\n        if (Jackpot.hasInitializedGame() || Jackpot.waitForMiniGameInitialization()) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox();\n                this._wasCalclulated = true;\n\n                if (!DataManager.GameRoundClosed) {\n                    this.collect(); //collect will call prepareNewGameRound\n                } else {\n                    //in nogamble gameround is closed, we need to update balance, if we have totalwin > 0\n                    this.playCollectSound();\n                    DataManager.updateDataElements();\n                    this.prepareNewGameRound();\n                }\n            } else {\n                this.prepareNewGameRound();\n            }\n\n            return true;\n        } else {\n            Jackpot.initMiniGame(false, null);\n            Jackpot.disableMiniGameAutostart(); //if init was called from preparenewgameround\n\n            return false;\n        }\n    }\n\n    limit(): void {\n        LimitDialog.openDialog();\n\n        if (DataManager.GameRoundClosed) {\n            this.actions.changeActionStates({\n                [BaseActions.ActionAutoplay]: DataManager.autoplayEnabled(),\n                [BaseActions.ActionAutoplayStop]: false,\n                [BaseActions.ActionBaseCollect]: false,\n                [BaseActions.ActionBetPlus]: !BetManager.maxBet,\n                [BaseActions.ActionBetMinus]: !BetManager.minBet,\n                [BaseActions.ActionMaxBet]: !FreeRoundBonus.inFrb && AppContext.gameConfiguration.MaxBetEnabled,\n                [BaseActions.ActionSpin]: true,\n                [BaseActions.ActionSpinStop]: false,\n            });\n        } else {\n            this.actions.changeActionStates({\n                [BaseActions.ActionAutoplay]: false,\n                [BaseActions.ActionAutoplayStop]: false,\n                [BaseActions.ActionBaseCollect]: true,\n                [BaseActions.ActionBetPlus]: false,\n                [BaseActions.ActionBetMinus]: false,\n                [BaseActions.ActionMaxBet]: false,\n                [BaseActions.ActionSpin]: false,\n                [BaseActions.ActionSpinStop]: false,\n            });\n        }\n    }\n\n    disable(): void {\n        this._afterWinDelay.stop();\n        this.actions.disableAllActions();\n        FreeRoundBonusIcon.disableActiveIcon();\n        HtmlController.updateActionElements(this.getAllActions());\n\n        this._controller.disableBase();\n    }\n\n    //disable base without reseting timer and win animations in winAnimator\n    //used in frb, to avoid not showing end message in last frb spin with win\n    private disableAllActions(): void {\n        this._afterWinDelay.stop();\n        this.actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    /**\n     *\n     * @param {number} id\n     */\n    setActiveSceneInBasegame(id: number): void {}\n\n    setSceneAnimations(sceneIndex: number): void {}\n\n    updatePaytable(): void {}\n\n    userControlsShowDelay(): void {\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    resetWinAnimator(): void {\n        this._controller.resetWinAnimator();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Desktop/DesktopBaseUserControls.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { BaseModel } from \"./BaseModel\";\nimport { BaseView } from \"./BaseView\";\nimport { Controller } from \"../Controller\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\n\n@engineComponent(ComponentTypes.Controller)\nexport class BaseController extends Controller {\n    public static readonly SpinReceived: string = \"eventSpinReceived\";\n    public static readonly MachineStopped: string = \"eventMachineStopped\";\n    public static readonly WinCalculationFinished: string = \"eventWinCalculationFinished\";\n    public static readonly AllWinsFinished: string = \"eventAllWinsFinished\";\n    public static readonly OutroFinished: string = \"eventOutroFinished\";\n    public static readonly StartReceived: string = \"eventStartReceived\";\n    public static readonly EndReceived: string = \"eventEndReceived\";\n    public static readonly IntroFinished: string = \"eventIntroFinished\";\n    public static readonly QuickWinCalculationFinished: string = \"eventQuickWinCalculationFinished\";\n    public static readonly ConfiguratorStart: string = \"eventConfiguratorStart\";\n    public static readonly ConfiguratorContinue: string = \"eventConfiguratorContinue\";\n\n    protected _view: BaseView;\n    protected _model: BaseModel;\n\n    startInitialization(view: any): void {\n        if (DEBUG) {\n            this.log(\"startInitialization\");\n        }\n\n        if (view instanceof BaseView) {\n            this._view = view;\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR view is not instance of BaseView\");\n            }\n        }\n\n        this._model = new BaseModel(this);\n    }\n\n    start(id?: number): void {\n        this._model.start(id);\n    }\n\n    disableLogo(): void {\n        this._view.disableLogo();\n    }\n\n    initReceived(): void {\n        this._view.initReceived(this);\n    }\n\n    initIntro(): void {\n        this._view.initIntro();\n    }\n\n    collect(): void {\n        this._view.collect();\n    }\n\n    spin(): void {\n        this._model.spin();\n        this._view.spin();\n    }\n\n    stop(): void {\n        this._view.stop();\n    }\n\n    end(): void {\n        this._model.end();\n    }\n\n    startReceived(): void {\n        this.emit(BaseController.StartReceived, this._view.startReceived());\n    }\n\n    endReceived(): void {\n        this._view.endReceived();\n        this.emit(BaseController.EndReceived);\n    }\n\n    spinReceived(): void {\n        this._view.spinReceived();\n        this.emit(BaseController.SpinReceived);\n    }\n\n    machineStopped(isHighWin: boolean): void {\n        this.emit(BaseController.MachineStopped, isHighWin);\n    }\n\n    quickWinCalculationFinished(): void {\n        this.emit(BaseController.QuickWinCalculationFinished);\n    }\n\n    winCalculationFinished(): void {\n        this.emit(BaseController.WinCalculationFinished);\n    }\n\n    allWinsFinished(): void {\n        this.emit(BaseController.AllWinsFinished);\n    }\n\n    resetWinAnimator(): void {\n        this._view.resetWinAnimator();\n    }\n\n    intro(long: boolean = false): void {\n        this._view.intro(long);\n    }\n\n    introFinished(): void {\n        this.emit(BaseController.IntroFinished);\n    }\n\n    outro(): void {\n        this._view.outro();\n    }\n\n    outroFinished(): void {\n        this.emit(BaseController.OutroFinished);\n    }\n\n    selectPayline(): void {\n        this._view.selectPayline();\n    }\n\n    enable(): void {\n        this._view.enable();\n    }\n\n    disable(): void {\n        this._view.disable();\n    }\n\n    startConfigurator(): void {\n        this._view.startConfigurator();\n        this.emit(BaseController.ConfiguratorStart);\n    }\n\n    disableBase(): void {\n        this._view.disableBase();\n    }\n\n    toggleSounds(enable: boolean): void {\n        this._view.toggleSounds(enable);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Base/BaseController.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { BaseController } from \"./BaseController\";\nimport { Paylines } from \"../Paylines\";\nimport { PaylinesSelector } from \"../PaylinesSelector\";\nimport { Symbols } from \"../Symbols\";\nimport { WinAnimator } from \"../WinAnimator\";\nimport { Machine } from \"../Machine\";\nimport { ContainerElement } from \"../../Components/Elements/Graphics/ContainerElement\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { WinAnimatorExtended } from \"../../CustomComponents/WinAnimatorExtended\";\nimport { MachineExtended } from \"../../CustomComponents/MachineExtended\";\nimport { Tweens } from \"../../Components/Effects/Tweens\";\nimport { MinigameElement } from \"../../CustomComponents/MinigameElement\";\nimport { TeasingBonus } from \"../../CustomComponents/TeasingBonus\";\nimport { SwitchElement } from \"../../Components/Elements/Graphics/SwitchElement\";\nimport { TeasingComponent } from \"../../CustomComponents/TeasingComponent\";\nimport { ShapeElement } from \"../../Components/Elements/Graphics/ShapeElement\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { AmbientBackground } from \"../../Utils/AmbientBackground\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class BaseView extends ContainerElement {\n    protected _controller: BaseController;\n\n    private _wasFinished: boolean = false;\n\n    private _outroDelay: FrameTimerEventEmitter;\n\n    private _paylines: Paylines;\n    private _paylinesSelector: PaylinesSelector;\n    private _symbols: Symbols;\n    private _machine: MachineExtended;\n    protected _winAnimator: WinAnimatorExtended;\n\n    protected _minigame: MinigameElement;\n\n    private transitionAlphaTween: Array<number>;\n    public transitionAlphaTweenEase: string;\n    public transitionAlphaTweenDelay: number;\n    public transitionAlphaTweenDuration: number;\n    private transitionAlphaTweenKeyTimes: Array<number>;\n\n    private _teasingBonus: TeasingBonus;\n    protected _transition: SwitchElement;\n\n    private _wildContainer: ContainerElement;\n\n    constructor() {\n        super();\n\n        this._outroDelay = CreateFrameTimer(\"outroDelay\");\n        this._outroDelay.on(FrameTimerEvents.Complete, this.outroFinished.bind(this));\n\n        this._teasingBonus = new TeasingBonus();\n    }\n\n    createByNode(node: Element): void {\n        super.createByNode(node);\n\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs[key] instanceof Paylines) {\n                    this._paylines = this.childs[key];\n                }\n\n                if (this.childs[key] instanceof PaylinesSelector) {\n                    this._paylinesSelector = this.childs[key];\n                }\n\n                if (this.childs[key] instanceof Symbols) {\n                    this._symbols = this.childs[key];\n                    this.removeChild(this._symbols);\n                }\n\n                if (this.childs[key] instanceof Machine) {\n                    this._machine = this.childs[key];\n                }\n\n                if (this.childs[key] instanceof WinAnimator) {\n                    this._winAnimator = this.childs[key];\n                }\n\n                if (this.childs[key] instanceof MinigameElement) {\n                    this._minigame = this.childs[key];\n                }\n\n                if (key === \"TeasingComponent\" && this.childs[key] instanceof TeasingComponent) {\n                    this._teasingBonus = this.childs[key];\n                }\n\n                if (key === \"TeasingFront\" && this.childs[key] instanceof SwitchElement) {\n                    if (this._teasingBonus != null) {\n                        this._teasingBonus.addElementInstance({ teasingFront: this.childs[key] });\n                    }\n                }\n\n                if (key === \"TeasingParticles\" && this.childs[key] instanceof SwitchElement) {\n                    if (this._teasingBonus != null) {\n                        this._teasingBonus.addElementInstance({ teasingParticles: this.childs[key] });\n                    }\n                }\n\n                if (key === \"Transition\" && this.childs[key] instanceof SwitchElement) {\n                    this._transition = this.childs[key];\n                }\n\n                if (key === \"WildContainer\" && this.childs[key] instanceof ContainerElement) {\n                    this._wildContainer = this.childs[key];\n                }\n            }\n\n            if (DEBUG) {\n                if (this._paylines == null) {\n                    this.log(\"WARNING no paylines\");\n                }\n\n                if (this._symbols == null) {\n                    this.log(\"ERROR no symbols\");\n                }\n\n                if (this._machine == null) {\n                    this.log(\"ERROR no machine\");\n                }\n\n                if (this._winAnimator == null) {\n                    this.log(\"WARNING no winAnimator\");\n                }\n            }\n        }\n    }\n\n    updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN)) {\n            this.transitionAlphaTween = node\n                .getAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN)\n                .split(\";\")\n                .map((value) => parseFloat(value));\n        }\n        if (node.hasAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_KEY_TIMES)) {\n            this.transitionAlphaTweenKeyTimes = node\n                .getAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_KEY_TIMES)\n                .split(\";\")\n                .map((value) => parseFloat(value));\n        }\n        if (node.hasAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_EASE)) {\n            this.transitionAlphaTweenEase = node.getAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_EASE);\n        }\n        if (node.hasAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_DELAY)) {\n            this.transitionAlphaTweenDelay = parseInt(\n                node.getAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_DELAY),\n            );\n        }\n        if (node.hasAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_DURATION)) {\n            this.transitionAlphaTweenDuration = parseInt(\n                node.getAttribute(BaseViewAttributes.TRANSITION_ALPHA_TWEEN_DURATION),\n            );\n        }\n    }\n\n    disableLogo(): void {\n        if (this.childs[\"Logo\"] != null) {\n            this.removeChild(this.childs[\"Logo\"]);\n        }\n    }\n\n    initReceived(controller: BaseController): void {\n        if (DEBUG) {\n            this.log(\"initReceived\");\n        }\n\n        this._controller = controller;\n\n        if (this._symbols != null) {\n            if (this._machine != null) {\n                if (GameManager.baseResponse != null) {\n                    if (GameManager.baseResponse.initData != null && GameManager.baseResponse.initData.reels != null) {\n                        this._machine.on(Machine.ReelStopped, this.onReelStopped.bind(this));\n                        this._machine.on(Machine.MachineStopped, this.machineStopped.bind(this));\n                        this._machine.initialize(this._symbols, GameManager.baseResponse.initData.reels);\n                        this._machine.addElementInstance({ teasing: [this._teasingBonus] });\n                    }\n\n                    if (\n                        GameManager.baseResponse.screen != null &&\n                        GameManager.baseResponse.screen.reels != null &&\n                        GameManager.baseResponse.screen.reels.length !== 0\n                    ) {\n                        if (this._winAnimator != null) {\n                            this._winAnimator.on(\n                                WinAnimator.FinishWinCalculation,\n                                this.finishWinCalculation.bind(this),\n                            );\n                            this._winAnimator.on(WinAnimator.FinishWinAnimator, this.finishWinAnimator.bind(this));\n                            this._winAnimator.on(\n                                WinAnimator.FinishQuickWinCalculation,\n                                this.finishQuickWinCalculation.bind(this),\n                            );\n                            this._winAnimator.initialize(\n                                this._symbols,\n                                this._paylines,\n                                this.childs[\"NoWinContainer\"],\n                                this.childs[\"WinContainer\"],\n                                this,\n                            );\n                            this._winAnimator.showSymbols(GameManager.baseResponse.screen.reels);\n                            this._winAnimator.addElementInstance({ teasing: [this._teasingBonus] });\n                            this._winAnimator.addElementInstance({ wildContainer: this._wildContainer });\n                        }\n\n                        this._machine.setStoppedSymbolsArray(GameManager.baseResponse.screen.reels);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"ERROR no reels in response\");\n                        }\n                    }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR no base reponse\");\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no machine\");\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no symbols\");\n            }\n        }\n\n        // this.toggleElements(false)\n    }\n\n    initIntro(): void {\n        if (GameManager.baseResponse.currentWin > 0 || ModuleManager.freespinsEnabled()) {\n            PlayList.stop(\"SND_BaseLoop\");\n            PlayList.loop(\"SND_CycleLoop\");\n        } else {\n            PlayList.stop(\"SND_CycleLoop\");\n            PlayList.loop(\"SND_BaseLoop\");\n        }\n\n        this._winAnimator.showInitWins(GameManager.baseResponse.wins, GameManager.baseResponse.currentWin);\n\n        AmbientBackground.changeAmbientBackground(\"base\", 20);\n\n        this.toggleElements(true);\n    }\n\n    collect(): void {\n        PlayList.stop(\"SND_FSEndLoop\");\n        PlayList.stop(\"SND_CycleLoop\");\n        PlayList.loop(\"SND_BaseLoop\");\n\n        if (this._paylinesSelector != null) {\n            this._paylinesSelector.reset();\n        }\n\n        this._winAnimator.reset(true);\n    }\n\n    spin(): void {\n        PlayList.stop(\"SND_FSConfiguratorLoop\");\n        PlayList.stop(\"SND_FSEndLoop\");\n        PlayList.stop(\"SND_CycleLoop\");\n        PlayList.stop(\"SND_FSLoop\");\n        PlayList.loop(\"SND_BaseLoop\");\n\n        if (this._paylinesSelector != null) {\n            this._paylinesSelector.reset();\n        }\n\n        this._machine.respin = null;\n        this._machine.spinStart(this._winAnimator.reset(false, true));\n    }\n\n    stop(): void {\n        this._machine.spinStop(null, true);\n    }\n\n    startReceived(): boolean {\n        return true;\n    }\n\n    enable(): void {\n        this.visible = true;\n        this._winAnimator.show();\n        this._winAnimator.showSymbols(GameManager.baseResponse.screen.reels);\n        this._controller.startConfigurator();\n        this.runTransitoinTweens();\n    }\n\n    disable(): void {\n        this._winAnimator.hide();\n        this._winAnimator.reset(false);\n        this.runTransitoinTweens(true);\n    }\n\n    public runTransitoinTweens(reverse: boolean = false): boolean {\n        if (!this.transitionAlphaTween) {\n            this.alpha = reverse ? 0 : 1;\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"alpha\");\n\n        const alphas: Array<number> = reverse\n            ? this.transitionAlphaTween.slice().reverse()\n            : this.transitionAlphaTween.slice();\n        const tweenEase: string = this.transitionAlphaTweenEase || \"linear\";\n        const tweenDuration: number = this.transitionAlphaTweenDuration || 120;\n        const tweenDelay: number = this.transitionAlphaTweenDelay || 0;\n        const tweenLoop: boolean = false;\n        const keyTimes: Array<number> = this.transitionAlphaTweenKeyTimes\n            ? this.transitionAlphaTweenKeyTimes.slice()\n            : null;\n\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    spinReceived(): void {\n        this._machine.setStoppedSymbolsArray(GameManager.baseResponse.screen.reels);\n        this._machine.spinStop(null, false, true);\n    }\n\n    onReelStopped(): void {\n        this._winAnimator.onReelStopped(\n            GameManager.baseResponse.screen.reels,\n            this._machine.actualReelStopped,\n            this._machine.forceStop,\n        );\n    }\n\n    machineStopped(): void {\n        this._wasFinished = false;\n\n        let isHighWin = this._winAnimator.isHighWin(GameManager.baseResponse.currentWin);\n\n        this._controller.machineStopped(isHighWin);\n\n        if (this._winAnimator.showWins(GameManager.baseResponse.wins, GameManager.baseResponse.currentWin)) {\n            PlayList.stop(\"SND_BaseLoop\");\n        }\n    }\n\n    private finishQuickWinCalculation(): void {\n        this._controller.quickWinCalculationFinished();\n    }\n\n    finishWinCalculation(): void {\n        this._wasFinished = true;\n\n        this._controller.winCalculationFinished();\n    }\n\n    finishWinAnimator(): void {\n        if (!DataManager.Autoplay) {\n            PlayList.stop(\"SND_BaseLoop\");\n            PlayList.loop(\"SND_CycleLoop\");\n        }\n\n        this._controller.allWinsFinished();\n    }\n\n    resetWinAnimator(): void {\n        this._winAnimator.reset(true);\n    }\n\n    intro(long: boolean = false): void {\n        this.toggleElements(true, false);\n        // PlayList.stop('SND_CycleLoop');\n        // PlayList.loop('SND_BaseLoop');\n        if (long) {\n            if (this._transition != null) {\n                this._transition.goToCase(\"OUTRO\");\n            }\n        }\n\n        this.introFinished();\n    }\n\n    introFinished(): void {\n        if (GameManager.gameResponse.totalWin > 0) {\n            PlayList.stop(\"SND_BaseLoop\");\n            if (!PlayList.isPlaying(\"SND_BaseRecaploop\")) {\n                PlayList.loop(\"SND_CycleLoop\");\n            }\n        } else {\n            PlayList.stop(\"SND_CycleLoop\");\n            PlayList.loop(\"SND_BaseLoop\");\n        }\n\n        AmbientBackground.changeAmbientBackground(\"base\", 20);\n\n        this._controller.introFinished();\n    }\n\n    outro(): void {\n        PlayList.stop(\"SND_BaseLoop\");\n        PlayList.stop(\"SND_CycleLoop\");\n\n        if (this._paylinesSelector != null) {\n            this._paylinesSelector.reset();\n        }\n\n        let inHighWins = this._winAnimator.reset(true);\n\n        if (this._wasFinished) {\n            this.outroFinished();\n        } else {\n            if (inHighWins) {\n                this._outroDelay.start(60);\n            } else {\n                this._outroDelay.start(30);\n            }\n        }\n    }\n\n    outroFinished(): void {\n        if (!ModuleManager.gambleActive()) {\n            this.toggleElements(false, false);\n        }\n\n        if (ModuleManager.freespinsActive()) {\n            AmbientBackground.changeAmbientBackground(\"color-1\", 100);\n        }\n\n        this._controller.outroFinished();\n    }\n\n    startConfigurator(): void {}\n\n    endReceived(): void {}\n\n    selectPayline(): void {\n        if (this._paylinesSelector != null) {\n            this._paylinesSelector.select();\n        }\n    }\n\n    disableBase(): void {\n        this._winAnimator.resetTimer();\n    }\n\n    /**\n     * Toggle all sounds used in base game (background, effects, .etc)\n     * @param enable\n     */\n    toggleSounds(enable: boolean): void {\n        PlayList.stop(\"SND_FSEnd\");\n        PlayList.stop(\"SND_FSMessage\");\n        if (enable) {\n            PlayList.loop(\"SND_BaseLoop\");\n        } else {\n            PlayList.stop(\"SND_BaseLoop\");\n            PlayList.stop(\"SND_CycleLoop\");\n            PlayList.stop(\"SND_BaseRecaploop\");\n        }\n    }\n\n    toggleElements(visible: boolean, long: boolean = false): void {\n        if (long) {\n            Tweens.removeTweens(this, \"all\");\n            Tweens.alphaTween(this, {\n                alphas: visible ? [0, 1] : [1, 0],\n                tweenDuration: 15,\n            });\n        } else {\n            this.alpha = visible ? 1 : 0;\n        }\n    }\n}\n\nconst BaseViewAttributes = {\n    TRANSITION_ALPHA_TWEEN: \"TransitionAlphaTween\",\n    TRANSITION_ALPHA_TWEEN_EASE: \"TransitionAlphaTweenEase\",\n    TRANSITION_ALPHA_TWEEN_DELAY: \"TransitionAlphaTweenDelay\",\n    TRANSITION_ALPHA_TWEEN_DURATION: \"TransitionAlphaTweenDuration\",\n    TRANSITION_ALPHA_TWEEN_KEY_TIMES: \"TransitionAlphaTweenKeyTimes\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Base/BaseView.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { PaylinesDefinitions } from \"./PaylinesDefinitions\";\nimport { Payline } from \"./Payline\";\nimport { Configuration } from \"../Components/Configuration\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\n\n/**\n * Paylines class is holder for all paylines.\n * Paylines define behaviour of paylines on screen.\n * @class Paylines\n * @extends ContainerElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Paylines extends ContainerElement {\n    paylineDefinition: string;\n\n    private _paylineIDs: Array<number>;\n    private _paylines: Array<Payline>;\n    private _specialContainer: ContainerElement;\n\n    constructor() {\n        super();\n\n        this._paylines = [];\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    createByNode(node: Element) {\n        super.createByNode(node);\n\n        /*\n         * Name of config for paylines.\n         * @property Configs\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Configs\")) {\n            var configs: Array<string> = node.getAttribute(\"Configs\").split(\";\");\n            for (var i: number = 0; i < configs.length; i++) {\n                var config: Element = Configuration.Configurations[configs[i]];\n                if (config != null) {\n                    this.configurate(config);\n                }\n            }\n        }\n\n        if (this.childs != null) {\n            for (var key in this.childs) {\n                if (this.childs[key] instanceof Payline) {\n                    this._paylines.push(this.childs[key]);\n                }\n            }\n\n            this.children.sort((a: any, b: any) => {\n                if (a.hasOwnProperty(\"zIndex\") && b.hasOwnProperty(\"zIndex\")) {\n                    a.zIndex = a.zIndex || 0;\n                    b.zIndex = b.zIndex || 0;\n\n                    return a.zIndex - b.zIndex;\n                }\n\n                return 0;\n            });\n        }\n    }\n\n    setSpecialContainer(container: ContainerElement): void {\n        this._specialContainer = container;\n    }\n\n    /**\n     * Get attributes from configuration and set up supported properties.\n     * @method configurate\n     * @param node is Element from xml\n     * @return void\n     */\n    configurate(node: Element): void {\n        /*\n         * PaylineIDs defines ids of payline used for game.\n         * @property PaylineIDs\n         * @type Array<number>\n         * @default null\n         */\n        if (node.hasAttribute(\"PaylineIDs\")) {\n            this._paylineIDs = ArrayUtils.numberArray(node.getAttribute(\"PaylineIDs\"));\n        }\n\n        /*\n         * Initialize paylines definitions for game.\n         * @property PaylineDefinition\n         * @type String\n         * @default null\n         */\n        if (node.hasAttribute(\"PaylineDefinition\")) {\n            this.paylineDefinition = node.getAttribute(\"PaylineDefinition\");\n            PaylinesDefinitions.initializePaylineDefinitions(node.getAttribute(\"PaylineDefinition\"));\n        }\n    }\n\n    showPaylinesLabel(): void {}\n\n    /**\n     * Set winning payline from response to case WIN.\n     * @method goToWin\n     * @param id number\n     * @return void\n     */\n    goToWin(id: number): void {\n        if (this._paylines[id - 1] != null) {\n            this.addChild(this._paylines[id - 1]);\n            this._paylines[id - 1].goToCase(Payline.CaseWin);\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no payline with id: \" + (id - 1));\n            }\n        }\n    }\n\n    /**\n     * Reset all paylines to case NORMAL.\n     * @method reset\n     * @return void\n     */\n    reset(): void {\n        for (var i: number = 0; i < this._paylines.length; i++) {\n            if (this._specialContainer != null) {\n                this._specialContainer.addChild(this._paylines[i]);\n            }\n            this._paylines[i].goToCase(Payline.CaseNormal);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  NEW USAGE\n    //******************************************************************************************************************\n\n    public goToCase(caseType: string): void;\n    public goToCase(caseType: string, id: number): void;\n\n    public goToCase(caseType: string, id?: number): void {\n        if (id) {\n            if (this._paylines[id - 1] != null) {\n                if (caseType === Payline.CaseWin) {\n                    this.addChild(this._paylines[id - 1]);\n                } else {\n                    if (this._specialContainer != null) {\n                        this._specialContainer.addChild(this._paylines[id - 1]);\n                    }\n                }\n\n                this._paylines[id - 1].goToCase(caseType);\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no payline with id: \" + (id - 1));\n                }\n            }\n        } else {\n            for (let i = 0; i < this._paylines.length; i++) {\n                if (caseType === Payline.CaseWin) {\n                    this.addChild(this._paylines[i]);\n                } else {\n                    if (this._specialContainer != null) {\n                        this._specialContainer.addChild(this._paylines[i]);\n                    }\n                }\n                this._paylines[i].goToCase(caseType);\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Paylines.ts\n **/","import { Logger } from \"neo-common\";\n\n/**\n * Definitions for payline for all kind of reels.\n * @class PaylinesDefinitions\n */\nexport class PaylinesDefinitions {\n    private static _paylineGroupsDefinitions: Object = {};\n\n    /**\n     * Initialize payline definiftion specific for game.\n     * @method initializePaylineDefinitions\n     * @param paylineGroupId string\n     * @return void\n     */\n    static initializePaylineDefinitions(paylineGroupId: string) {\n        var definition: Object = {};\n\n        switch (paylineGroupId) {\n            case \"5x3_15\":\n                definition[1] = [1, 1, 1, 1, 1];\n                definition[2] = [0, 0, 0, 0, 0];\n                definition[3] = [2, 2, 2, 2, 2];\n                definition[4] = [0, 1, 2, 1, 0];\n                definition[5] = [2, 1, 0, 1, 2];\n                definition[6] = [0, 0, 1, 2, 2];\n                definition[7] = [2, 2, 1, 0, 0];\n                definition[8] = [1, 2, 2, 2, 1];\n                definition[9] = [1, 0, 0, 0, 1];\n                definition[10] = [0, 1, 1, 1, 0];\n                definition[11] = [2, 1, 1, 1, 2];\n                definition[12] = [1, 2, 1, 0, 1];\n                definition[13] = [1, 0, 1, 2, 1];\n                definition[14] = [0, 1, 0, 1, 0];\n                definition[15] = [2, 1, 2, 1, 2];\n                break;\n            case \"5x3\":\n                definition[1] = [1, 1, 1, 1, 1];\n                definition[2] = [0, 0, 0, 0, 0];\n                definition[3] = [2, 2, 2, 2, 2];\n                definition[4] = [0, 1, 2, 1, 0];\n                definition[5] = [2, 1, 0, 1, 2];\n                definition[6] = [1, 2, 2, 2, 1];\n                definition[7] = [1, 0, 0, 0, 1];\n                definition[8] = [2, 2, 1, 0, 0];\n                definition[9] = [0, 0, 1, 2, 2];\n                definition[10] = [2, 1, 1, 1, 0];\n                break;\n            case \"3x3_5\":\n                definition[1] = [1, 1, 1];\n                definition[2] = [0, 0, 0];\n                definition[3] = [2, 2, 2];\n                definition[4] = [0, 1, 2];\n                definition[5] = [2, 1, 0];\n                break;\n            case \"3x3\":\n                definition[1] = [0, 0, 0];\n                definition[2] = [0, 0, 1];\n                definition[3] = [0, 0, 2];\n                definition[4] = [0, 1, 0];\n                definition[5] = [0, 1, 1];\n                definition[6] = [0, 1, 2];\n                definition[7] = [0, 2, 0];\n                definition[8] = [0, 2, 1];\n                definition[9] = [0, 2, 2];\n                definition[10] = [1, 0, 0];\n                definition[11] = [1, 0, 1];\n                definition[12] = [1, 0, 2];\n                definition[13] = [1, 1, 0];\n                definition[14] = [1, 1, 1];\n                definition[15] = [1, 1, 2];\n                definition[16] = [1, 2, 0];\n                definition[17] = [1, 2, 1];\n                definition[18] = [1, 2, 2];\n                definition[19] = [2, 0, 0];\n                definition[20] = [2, 0, 1];\n                definition[21] = [2, 0, 2];\n                definition[22] = [2, 1, 0];\n                definition[23] = [2, 1, 1];\n                definition[24] = [2, 1, 2];\n                definition[25] = [2, 2, 0];\n                definition[26] = [2, 2, 1];\n                definition[27] = [2, 2, 2];\n                break;\n            case \"5x4\":\n                definition[1] = [1, 1, 1, 1, 1];\n                definition[2] = [2, 2, 2, 2, 2];\n                definition[3] = [0, 0, 0, 0, 0];\n                definition[4] = [3, 3, 3, 3, 3];\n                definition[5] = [1, 2, 3, 2, 1];\n                definition[6] = [2, 1, 0, 1, 2];\n                definition[7] = [0, 0, 1, 2, 3];\n                definition[8] = [3, 3, 2, 1, 0];\n                definition[9] = [1, 0, 0, 0, 1];\n                definition[10] = [2, 3, 3, 3, 2];\n                definition[11] = [0, 1, 2, 3, 3];\n                definition[12] = [3, 2, 1, 0, 0];\n                definition[13] = [1, 0, 1, 2, 1];\n                definition[14] = [2, 3, 2, 1, 2];\n                definition[15] = [0, 1, 0, 1, 0];\n                definition[16] = [3, 2, 3, 2, 3];\n                definition[17] = [1, 2, 1, 0, 1];\n                definition[18] = [2, 1, 2, 3, 2];\n                definition[19] = [0, 1, 1, 1, 0];\n                definition[20] = [3, 2, 2, 2, 3];\n                definition[21] = [1, 1, 2, 3, 3];\n                definition[22] = [2, 2, 1, 0, 0];\n                definition[23] = [1, 1, 0, 1, 1];\n                definition[24] = [2, 2, 3, 2, 2];\n                definition[25] = [1, 2, 2, 2, 3];\n                definition[26] = [2, 1, 1, 1, 0];\n                definition[27] = [0, 0, 1, 0, 0];\n                definition[28] = [3, 3, 2, 3, 3];\n                definition[29] = [0, 1, 2, 2, 3];\n                definition[30] = [3, 2, 1, 1, 0];\n                definition[31] = [0, 0, 0, 1, 2];\n                definition[32] = [3, 3, 3, 2, 1];\n                definition[33] = [1, 0, 0, 1, 2];\n                definition[34] = [2, 3, 3, 2, 1];\n                definition[35] = [0, 1, 1, 2, 3];\n                definition[36] = [3, 2, 2, 1, 0];\n                definition[37] = [1, 0, 1, 2, 3];\n                definition[38] = [2, 3, 2, 1, 0];\n                definition[39] = [0, 1, 2, 3, 2];\n                definition[40] = [3, 2, 1, 0, 1];\n                break;\n            case \"4x3\":\n                definition[1] = [0, 0, 0, 0];\n                definition[2] = [0, 0, 0, 1];\n                definition[3] = [0, 0, 0, 2];\n                definition[4] = [0, 0, 1, 0];\n                definition[5] = [0, 0, 1, 1];\n                definition[6] = [0, 0, 1, 2];\n                definition[7] = [0, 0, 2, 0];\n                definition[8] = [0, 0, 2, 1];\n                definition[9] = [0, 0, 2, 2];\n                definition[10] = [0, 1, 0, 0];\n                definition[11] = [0, 1, 0, 1];\n                definition[12] = [0, 1, 0, 2];\n                definition[13] = [0, 1, 1, 0];\n                definition[14] = [0, 1, 1, 1];\n                definition[15] = [0, 1, 1, 2];\n                definition[16] = [0, 1, 2, 0];\n                definition[17] = [0, 1, 2, 1];\n                definition[18] = [0, 1, 2, 2];\n                definition[19] = [0, 2, 0, 0];\n                definition[20] = [0, 2, 0, 1];\n                definition[21] = [0, 2, 0, 2];\n                definition[22] = [0, 2, 1, 0];\n                definition[23] = [0, 2, 1, 1];\n                definition[24] = [0, 2, 1, 2];\n                definition[25] = [0, 2, 2, 0];\n                definition[26] = [0, 2, 2, 1];\n                definition[27] = [0, 2, 2, 2];\n                definition[28] = [1, 0, 0, 0];\n                definition[29] = [1, 0, 0, 1];\n                definition[30] = [1, 0, 0, 2];\n                definition[31] = [1, 0, 1, 0];\n                definition[32] = [1, 0, 1, 1];\n                definition[33] = [1, 0, 1, 2];\n                definition[34] = [1, 0, 2, 0];\n                definition[35] = [1, 0, 2, 1];\n                definition[36] = [1, 0, 2, 2];\n                definition[37] = [1, 1, 0, 0];\n                definition[38] = [1, 1, 0, 1];\n                definition[39] = [1, 1, 0, 2];\n                definition[40] = [1, 1, 1, 0];\n                definition[41] = [1, 1, 1, 1];\n                definition[42] = [1, 1, 1, 2];\n                definition[43] = [1, 1, 2, 0];\n                definition[44] = [1, 1, 2, 1];\n                definition[45] = [1, 1, 2, 2];\n                definition[46] = [1, 2, 0, 0];\n                definition[47] = [1, 2, 0, 1];\n                definition[48] = [1, 2, 0, 2];\n                definition[49] = [1, 2, 1, 0];\n                definition[50] = [1, 2, 1, 1];\n                definition[51] = [1, 2, 1, 2];\n                definition[52] = [1, 2, 2, 0];\n                definition[53] = [1, 2, 2, 1];\n                definition[54] = [1, 2, 2, 2];\n                definition[55] = [2, 0, 0, 0];\n                definition[56] = [2, 0, 0, 1];\n                definition[57] = [2, 0, 0, 2];\n                definition[58] = [2, 0, 1, 0];\n                definition[59] = [2, 0, 1, 1];\n                definition[60] = [2, 0, 1, 2];\n                definition[61] = [2, 0, 2, 0];\n                definition[62] = [2, 0, 2, 1];\n                definition[63] = [2, 0, 2, 2];\n                definition[64] = [2, 1, 0, 0];\n                definition[65] = [2, 1, 0, 1];\n                definition[66] = [2, 1, 0, 2];\n                definition[67] = [2, 1, 1, 0];\n                definition[68] = [2, 1, 1, 1];\n                definition[69] = [2, 1, 1, 2];\n                definition[70] = [2, 1, 2, 0];\n                definition[71] = [2, 1, 2, 1];\n                definition[72] = [2, 1, 2, 2];\n                definition[73] = [2, 2, 0, 0];\n                definition[74] = [2, 2, 0, 1];\n                definition[75] = [2, 2, 0, 2];\n                definition[76] = [2, 2, 1, 0];\n                definition[77] = [2, 2, 1, 1];\n                definition[78] = [2, 2, 1, 2];\n                definition[79] = [2, 2, 2, 0];\n                definition[80] = [2, 2, 2, 1];\n                definition[81] = [2, 2, 2, 2];\n\n                break;\n            default:\n                if (DEBUG) {\n                    this.log(\"ERROR no definition for \" + paylineGroupId);\n                }\n                return;\n        }\n\n        this._paylineGroupsDefinitions[paylineGroupId] = definition;\n    }\n\n    /**\n     * Get payline by id and group id.\n     * @method getPaylineDefinitionsById\n     * @param paylineId string\n     * @param paylineGroupId string\n     * @return void\n     */\n    static getPaylineDefinitionsById(paylineId: number, paylineGroupId: string): Array<number> {\n        if (this._paylineGroupsDefinitions != null) {\n            if (this._paylineGroupsDefinitions[paylineGroupId] != null) {\n                if (this._paylineGroupsDefinitions[paylineGroupId][paylineId] != null) {\n                    return this._paylineGroupsDefinitions[paylineGroupId][paylineId];\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR no paylineId: \" + paylineId + \" in \" + paylineGroupId);\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no definition for \" + paylineGroupId);\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no paylines definitions\");\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    private static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"PaylineDefinitions\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/PaylinesDefinitions.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Attributes } from \"../Utils/Attributes\";\n\n/**\n * The payline element is used for hold payline special cases and handle payline behaviour on screen.\n * @class Symbol\n * @extends SwitchElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Payline extends SwitchElement {\n    //base payline cases\n    static CaseSelect: string = \"SELECT\";\n\n    static CaseNormal: string = \"NORMAL\";\n    static CaseNowin: string = \"NOWIN\";\n    static CaseWin: string = \"WIN\";\n    static CaseSingleCycle: string = \"SINGLE_CYCLE\";\n    static CaseCycle: string = \"CYCLE\";\n\n    //special payline cases\n    static CaseCycleNonActive: string = \"CYCLE_NON_ACTIVE\";\n\n    zIndex: number = 0;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    createByNode(node: Element): void {\n        super.createByNode(node);\n\n        this.zIndex = Attributes.assignFloatAttribute(node, PaylineAttributes.Z_INDEX, this.zIndex);\n    }\n}\n\nexport const PaylineAttributes = {\n    /**\n     * Z-index of symbol on screen\n     * @property Zindex\n     * @default 0\n     */\n    Z_INDEX: \"Zindex\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Payline.ts\n **/","import { engineComponent, ArrayUtils, StringUtils } from \"neo-common\";\nimport { BaseElement } from \"./BaseElement\";\nimport { ContainerElement } from \"./ContainerElement\";\nimport { SwitchStyle, SwitchStyleCaseAttributes } from \"../Styles/SwitchStyle\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { AnimationElement } from \"./AnimationElement\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { ParticleElement } from \"./ParticleElement\";\n\n/**\n * SwitchElement class is class which creates holder for other elements and holds cases which can change children by switching cases.\n * Can be defined only with SwitchStyle (See SwitchStyle class).\n * Default case is NONE.\n * Example 1:\n *   <SwitchElement Class=\"SwitchElement\" Style=\"SwitchStyle\" />\n *\n * @class SwitchElement\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class SwitchElement extends BaseElement {\n    // event for dispatch end of movie clip\n    static AnimationComplete: string = \"animationComplete\";\n    static FinishAnimation: string = \"finishAnimation\";\n\n    // style is mandatory in this element\n    protected style: SwitchStyle;\n    protected case: string;\n\n    protected elements: ContainerElement;\n\n    protected timer: FrameTimerEventEmitter;\n\n    // TODO clean\n    center: boolean;\n    // symbol width without offsetX\n    private _symbolWidth: number;\n    // symbol height without offsetY\n    private _symbolHeight: number;\n\n    constructor() {\n        super();\n\n        // default case\n        this.case = \"NONE\";\n        this.center = false;\n\n        this.timer = CreateFrameTimer(\"timer\");\n    }\n\n    public get symbolWidth(): number {\n        return this._symbolWidth;\n    }\n\n    public get symbolHeight(): number {\n        return this._symbolHeight;\n    }\n\n    public set symbolWidth(value: number) {\n        this._symbolWidth = value;\n    }\n\n    public set symbolHeight(value: number) {\n        this._symbolHeight = value;\n    }\n\n    public get hasElements(): boolean {\n        return this.elements != null && this.elements.childs != null;\n    }\n\n    public getChildElementByName(name: string): Object {\n        if (this.hasElements) {\n            return this.elements.childs[name];\n        }\n\n        return null;\n    }\n\n    public getChildElements(): Object {\n        return this.elements.childs;\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    createByNode(node: Element) {\n        super.createByNode(node);\n\n        if (node.hasAttribute(SwitchElementAttributes.STYLE)) {\n            this.style = <SwitchStyle>StyleManager.Styles[node.getAttribute(SwitchElementAttributes.STYLE)];\n            if (this.style != null) {\n                // get all elements and add them to this display list\n                if (this.style.container != null) {\n                    if (\n                        node.hasAttribute(SwitchElementAttributes.CLONE) &&\n                        StringUtils.parseBoolean(node.getAttribute(SwitchElementAttributes.CLONE))\n                    ) {\n                        this.elements = this.style.container.clone();\n                    } else {\n                        this.elements = this.style.container;\n                    }\n                    this.addChild(this.elements);\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no style with name: \" + node.getAttribute(SwitchElementAttributes.STYLE));\n                }\n            }\n        }\n\n        if (node.hasAttribute(SwitchElementAttributes.CASE)) {\n            this.goToCase(node.getAttribute(SwitchElementAttributes.CASE));\n        }\n    }\n\n    updateByNode(node: Element) {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(SwitchElementAttributes.CASE)) {\n            this.goToCase(node.getAttribute(SwitchElementAttributes.CASE));\n        }\n    }\n\n    /**\n     * Find out if this element has case s.\n     * @method hasCase\n     * @param s name of case\n     * @return Boolean\n     */\n    hasCase(s: string): Boolean {\n        return this.style != null && this.style.cases != null && this.style.cases[s];\n    }\n\n    /**\n     * Returns xml element of case s.\n     * @method getCase\n     * @param s name of case\n     * @return Element\n     */\n    getCase(s: string): Element {\n        if (this.style != null && this.style.cases != null && this.style.cases[s]) {\n            return this.style.cases[s];\n        }\n        return null;\n    }\n\n    public getCurrentCase(): string {\n        return this.case;\n    }\n\n    /**\n     * Switch this elemenet to case s.\n     * @method goToCase\n     * @param s name of case\n     * @param emitEvent boolean\n     * @return void\n     */\n    goToCase(s: string, emitEvent: boolean = false, delay?: number): void {\n        if (emitEvent) {\n            this.animationComplete();\n        }\n\n        if (this.style != null && this.style.cases != null && this.case !== s) {\n            if (this.timer != null) {\n                this.timer.removeAllListeners(FrameTimerEvents.Complete);\n                this.timer.stop();\n            }\n\n            if (this.hasCase(s)) {\n                let node: Element = this.style.cases[s];\n                if (node != null) {\n                    if (DEBUG) {\n                        if (node.hasAttribute(\"Debug\") && node.getAttribute(\"Debug\") === \"true\") {\n                            debugger;\n                        }\n                    }\n\n                    if (node.hasAttribute(\"FinishHandler\")) {\n                        this.emit(SwitchElement.FinishAnimation);\n                    }\n\n                    if (delay > 0) {\n                        this.timer.on(FrameTimerEvents.Complete, this.goToCase.bind(this, s, emitEvent));\n                        this.timer.start(delay);\n                        return;\n                    }\n\n                    let element: any;\n                    this.case = s;\n                    let next: Element = node.firstElementChild;\n                    let arr: Array<string> = [];\n                    while (next != null) {\n                        arr.push(next.nodeName);\n                        element = this.elements.childs[next.nodeName];\n                        if (element != null) {\n                            element.visible = true;\n                            // send new node to element and set / change new attributes\n\n                            /*if(this.center) {\n                                if (this._symbolWidth != null) {\n                                    element.pivot.x = this._symbolWidth / 2;\n                                }\n                                if (this._symbolHeight != null) {\n                                    element.pivot.y = this._symbolHeight / 2;\n                                }\n                            }*/\n                            element.updateByNode(next);\n                        } else {\n                            if (DEBUG) {\n                                this.log(\n                                    \"WARNING no element child with name: \" +\n                                        next.nodeName +\n                                        \" in case: \" +\n                                        s +\n                                        \" in style: \" +\n                                        this.style.name,\n                                );\n                            }\n                        }\n                        next = next.nextElementSibling;\n                    }\n\n                    for (let key in this.elements.childs) {\n                        this.elements.childs[key].removeAllListeners();\n\n                        let found: boolean = false;\n                        for (let i: number = 0; i < arr.length; i++) {\n                            if (key === arr[i]) {\n                                found = true;\n                            }\n                        }\n                        if (!found) {\n                            if (this.elements.childs[key] instanceof ParticleElement) {\n                                (this.elements.childs[key] as any as ParticleElement).stop();\n                            } else if (this.elements.childs[key] instanceof PIXI.DisplayObject) {\n                                this.elements.childs[key].visible = false;\n                            }\n                        }\n                    }\n                    if (\n                        node.hasAttribute(SwitchStyleCaseAttributes.NEXT_CASE) &&\n                        this.hasCase(node.getAttribute(SwitchStyleCaseAttributes.NEXT_CASE))\n                    ) {\n                        if (node.hasAttribute(SwitchStyleCaseAttributes.TIMER)) {\n                            let random: number = this.getRandomDurationMultiplier(node);\n\n                            this.timer.on(\n                                FrameTimerEvents.Complete,\n                                this.goToCase.bind(this, node.getAttribute(SwitchStyleCaseAttributes.NEXT_CASE)),\n                            );\n                            this.timer.start(parseInt(node.getAttribute(SwitchStyleCaseAttributes.TIMER)) * random);\n                        } else if (node.hasAttribute(SwitchStyleCaseAttributes.HANDLER)) {\n                            element = this.elements.childs[node.getAttribute(SwitchStyleCaseAttributes.HANDLER)];\n                            if (element) {\n                                element.on(\n                                    AnimationElement.AnimationComplete,\n                                    this.goToCase.bind(\n                                        this,\n                                        node.getAttribute(SwitchStyleCaseAttributes.NEXT_CASE),\n                                        true,\n                                    ),\n                                );\n                            }\n                        } else {\n                            this.goToCase(node.getAttribute(SwitchStyleCaseAttributes.NEXT_CASE));\n                        }\n                    } else {\n                        if (node.hasAttribute(SwitchStyleCaseAttributes.TIMER)) {\n                            let random: number = this.getRandomDurationMultiplier(node);\n\n                            //this.timer.on(FrameTimerEvents.Complete, this.goToCase.bind(this, this.animationComplete.bind(this)));\n                            this.timer.on(FrameTimerEvents.Complete, this.animationComplete.bind(this));\n                            this.timer.start(parseInt(node.getAttribute(SwitchStyleCaseAttributes.TIMER)) * random);\n                        } else if (node.hasAttribute(SwitchStyleCaseAttributes.HANDLER)) {\n                            element = this.elements.childs[node.getAttribute(SwitchStyleCaseAttributes.HANDLER)];\n                            if (element) {\n                                element.on(AnimationElement.AnimationComplete, this.animationComplete.bind(this));\n                            }\n                        }\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no case: \" + s + \" for \" + this.name);\n                }\n            }\n        }\n\n        if (emitEvent) {\n            this.animationComplete();\n        }\n    }\n\n    private getRandomDurationMultiplier(node: Element): number {\n        let result: number = 1;\n        if (node.hasAttribute(SwitchElementAttributes.RANDOM)) {\n            let dataArray = ArrayUtils.numberArray(node.getAttribute(SwitchElementAttributes.RANDOM));\n            if (dataArray.length > 0) {\n                let max: number = dataArray[0];\n                let min: number = 1;\n\n                if (dataArray.length == 2) {\n                    min = dataArray[0];\n                    max = min > dataArray[1] ? min : dataArray[1];\n                }\n\n                result = Math.round(SwitchElement.getRandom(min, max));\n            }\n        }\n\n        return result;\n    }\n\n    private static getRandom(min: number, max: number): number {\n        return Math.random() * (max - min) + min;\n    }\n\n    /**\n     * Emit complete event when finish changing state.\n     * @method animationComplete\n     * @return void\n     */\n    animationComplete(): void {\n        this.emit(SwitchElement.AnimationComplete);\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return SwitchElement\n     */\n    clone(): SwitchElement {\n        const element: SwitchElement = new SwitchElement();\n\n        element.style = this.style;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.visible = this.visible;\n\n        element.elements = this.elements.clone();\n        element.addChild(element.elements);\n\n        element.case = this.case;\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\n/**\n * XML has attributes SwitchElementAttributes, BaseElementAttributes\n * @type {{STYLE: string; CASE: string}}\n */\nexport const SwitchElementAttributes = {\n    /*\n     * Property case is used for set element to some case\n     * @property Case\n     * @type string\n     * @default null\n     */\n    CASE: \"Case\",\n    CLONE: \"Clone\",\n    DEBUG_INFO: \"DebugInfo\",\n    DEBUG: \"Debug\",\n    /*\n     * Style holds elements as ContainerElement and also holds cases as xml nodes.\n     * Style for switch element has to be instance of SwitchStyle.\n     * @property Style\n     * @type string\n     * @default null\n     */\n    STYLE: \"Style\",\n    /*\n     * Multiplies timer with random number between min and max\n     * @property Random\n     * @type string\n     * @default 1\n     */\n    RANDOM: \"Random\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/SwitchElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ContainerElement } from \"../Graphics/ContainerElement\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n/**\n * SwitchStyle create container from child <elements> and holds xml nodes of cases for this switch elements.\n * Example:\n *   <SwitchStyle Class=\"SwitchStyle\">\n *      <Elements>\n *           <Child1 />\n *           <Child2 X=\"0\" />\n *           ...\n *      </Elements>\n *      <Cases>\n *          <Case Case=\"CASE1\">\n *              <Child2 X=\"50\" />\n *          </Case>\n *          <Case Case=\"CASE2\">\n *              <Child1 X=\"200\" />\n *          </Case>\n *      </Cases>\n *   </SwitchStyle>\n * @class SwitchStyle\n * @extends Style\n */\n@engineComponent(ComponentTypes.Style)\nexport class SwitchStyle extends Style {\n    // container for childs of switch element\n    container: ContainerElement;\n\n    // xml nodes added to object by case name\n    cases: Object;\n\n    constructor() {\n        super();\n\n        this.cases = {};\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return  void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            switch (next.nodeName) {\n                case \"Elements\":\n                    this.container = new ContainerElement();\n                    this.container.create(next);\n                    break;\n                case \"Cases\":\n                    let nextCase: Element = next.firstElementChild;\n                    while (nextCase != null) {\n                        if (nextCase.hasAttribute(SwitchStyleCaseAttributes.CASE)) {\n                            if (this.cases[nextCase.getAttribute(SwitchStyleCaseAttributes.CASE)] !== null) {\n                                this.cases[nextCase.getAttribute(SwitchStyleCaseAttributes.CASE)] = nextCase;\n                            } else {\n                                if (DEBUG) {\n                                    this.log(\n                                        \"ERROR case \" +\n                                            nextCase.getAttribute(\"Case\") +\n                                            \" already exist in switchStyle \" +\n                                            node.nodeName,\n                                    );\n                                }\n                            }\n                        }\n                        nextCase = nextCase.nextElementSibling;\n                    }\n                    break;\n            }\n            next = next.nextElementSibling;\n        }\n    }\n}\n\nconst SwitchStyleAttributes = {};\n\nexport const SwitchStyleCaseAttributes = {\n    CASE: \"Case\",\n    HANDLER: \"Handler\",\n    NEXT_CASE: \"NextCase\",\n    TIMER: \"Timer\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/SwitchStyle.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n/**\n * Style holds basic properties for all kind of styles.\n * @class Style\n */\n@engineComponent(ComponentTypes.Style)\nexport class Style {\n    name: string;\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        if (this.name == null) {\n            this.name = node.nodeName;\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/Style.ts\n **/","import { Utils, StringUtils, ArrayUtils, Logger, engineComponent } from \"neo-common\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { AnimationStyle } from \"../Styles/AnimationStyle\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { ShapeElement } from \"./ShapeElement\";\nimport { Tweens, ITweenable } from \"../../Effects/Tweens\";\nimport { StageController } from \"../../StageController\";\nimport { TextElement } from \"../Texts/TextElement\";\nimport { IElement } from \"../Interfaces/IElement\";\nimport { Attributes } from \"../../../Utils/Attributes\";\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\n\n/**\n * AnimationElement can play animations from spritesheets.\n * AnimationElement uses spritesheets generated from editor (Adobe Animate) with json definition.\n * This element doesnt work without style. Style for this class is AnimationStyle.\n * Example:\n *   <AnimationElement Class=\"AnimationElement\" Style=\"AnimationStyle\" X=\"0\" Y=\"0\" />\n * @class AnimationElement\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class AnimationElement extends PIXI.extras.AnimatedSprite implements IElement, ITweenable {\n    // event for dispatch end of movie clip\n    static AnimationComplete: string = \"animationComplete\";\n\n    static DynamicTint: string = \"ff0000\";\n\n    private _uid: string;\n    private _cloned: boolean;\n    private __destroyed: boolean;\n\n    // style is mandatory in this element\n    protected _style: AnimationStyle;\n    // animation settings for movie clip\n    private _startFrame: number;\n    private _endFrame: number;\n    private _stop: boolean;\n    private _randomStartFrame: boolean;\n    private _reverse: boolean;\n    private _continue: boolean;\n\n    private _tweenEngine: string;\n\n    private _delay: number;\n    private _timerDelay: FrameTimerEventEmitter;\n\n    public usedInPool: boolean;\n\n    maskSprite: PIXI.Sprite;\n\n    static _destroyOptions: PIXI.DestroyOptions = {\n        children: true,\n    };\n\n    get tweenEngine(): string {\n        return this._tweenEngine;\n    }\n\n    /**\n     * Let's create animation with empty texture\n     */\n    constructor() {\n        let textureArray: Array<PIXI.Texture> = [PIXI.Texture.EMPTY];\n\n        super(textureArray, false);\n        PIXI.ticker.shared.add(this.update, this, PIXI.UPDATE_PRIORITY.HIGH);\n\n        // default values\n        this._startFrame = 0;\n        this._randomStartFrame = false;\n\n        this._cloned = false;\n        this.__destroyed = false;\n\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\n\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                this._uid = PerfDebug.generateElementUID(this);\n                PerfDebug.newElement(this, this.getDebugInfo());\n            }\n        }\n\n        this._delay = 0;\n        this._timerDelay = CreateFrameTimer(\"timer\");\n        this._timerDelay.on(FrameTimerEvents.Complete, this.animationDelay.bind(this));\n    }\n\n    public update(deltaTime: number): void {\n        if (this.playing) {\n            super.update(deltaTime);\n        }\n    }\n\n    public create(node: Element): void {\n        this._create(node);\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method _create\n     * @param node is Element from xml\n     * @return void\n     */\n    private _create(node: Element): void {\n        this.assertDestroyed(\"_create()\");\n\n        if (DEBUG) {\n            if (\n                node.hasAttribute(AnimationElementAttributes.DEBUG) &&\n                node.getAttribute(AnimationElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        Tweens.removeTweens(this, \"alpha\");\n        Tweens.removeTweens(this, \"position\");\n        Tweens.removeTweens(this, \"rotation\");\n        Tweens.removeTweens(this, \"scale\");\n\n        if (this.name == null) {\n            this.name = node.nodeName;\n        }\n\n        /*\n         * Style define animation. You can use one style on more than one elements.\n         * Style for AnimationElement has to be instance of AnimationStyle.\n         * @property Style\n         * @type string\n         */\n        if (\n            node.hasAttribute(AnimationElementAttributes.STYLE) ||\n            node.hasAttribute(AnimationElementAttributes.STYLE2)\n        ) {\n            if (node.hasAttribute(AnimationElementAttributes.STYLE)) {\n                this._style = <AnimationStyle>StyleManager.Styles[node.getAttribute(AnimationElementAttributes.STYLE)];\n            } else if (node.hasAttribute(AnimationElementAttributes.STYLE2)) {\n                this._style = <AnimationStyle>StyleManager.Styles[node.getAttribute(AnimationElementAttributes.STYLE2)];\n            }\n\n            if (this._style != null) {\n                if (this._style.startFrame != null) {\n                    this._startFrame = this._style.startFrame;\n                } else {\n                    this._startFrame = null;\n                }\n\n                if (this._style.endFrame != null) {\n                    this._endFrame = this._style.endFrame;\n                } else {\n                    this._endFrame = null;\n                }\n\n                if (this._style.stop != null) {\n                    this._stop = this._style.stop;\n                }\n\n                if (this._style.frames) {\n                    let texture: PIXI.Texture;\n                    let textures: PIXI.Texture[] = [];\n                    this._style.frames.forEach((frameName, i) => {\n                        texture = PIXI.utils.TextureCache[frameName];\n                        if (texture != null) {\n                            if (i == 0) {\n                                this.texture = texture;\n                            }\n\n                            textures.push(texture);\n                        } else {\n                            if (DEBUG) {\n                                this.log(\"WARNING: No texture\" + frameName + \" in TextureCache of AnimationElement!\");\n                            }\n                        }\n                    });\n\n                    this.textures = textures;\n                    if (this.textures.length > 0) {\n                        this.onComplete = this._movieClipComplete.bind(this);\n\n                        this.loop = false;\n                        this.animationSpeed = 1;\n                        this.tint = 0xffffff;\n                        this.blendMode = PIXI.BLEND_MODES.NORMAL;\n                        this.alpha = 1;\n                        this._reverse = false;\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"ERROR no frames in \" + this._style.animation);\n                        }\n                    }\n                } else if (this._style.animation !== \"\") {\n                    let texture: PIXI.Texture;\n                    let textures: PIXI.Texture[] = [];\n                    if (this._endFrame != null) {\n                        for (let i = this._startFrame; i <= this._endFrame; i++) {\n                            let val = this.zerosPad(i, 4);\n                            texture = PIXI.utils.TextureCache[this._style.animation + val];\n                            if (texture != null) {\n                                if (i == this._startFrame) {\n                                    this.texture = texture;\n                                }\n\n                                textures.push(texture);\n                            } else {\n                                if (DEBUG) {\n                                    this.log(\n                                        \"WARNING: No texture\" +\n                                            this._style.animation +\n                                            val +\n                                            \" in TextureCache of AnimationElement!\",\n                                    );\n                                }\n                            }\n                        }\n                    } else {\n                        if (DEBUG) {\n                            this.log(\n                                \"WARNING: animation has no endframe number. Use ImageElement with attribute Animation instead AnimationElement!\",\n                            );\n                        }\n\n                        //  todo Disallow animations without endFrame\n                        let frame = this.zerosPad(this._startFrame, 4);\n                        texture = PIXI.utils.TextureCache[this._style.animation + frame];\n                        if (texture != null) {\n                            this.texture = texture;\n                            textures.push(texture);\n                        }\n                    }\n\n                    this.textures = textures;\n                    if (this.textures.length > 0) {\n                        this.onComplete = this._movieClipComplete.bind(this);\n\n                        this.loop = false;\n                        this.animationSpeed = 1;\n                        this.tint = 0xffffff;\n                        this.blendMode = PIXI.BLEND_MODES.NORMAL;\n                        this.alpha = 1;\n                        this._reverse = false;\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"ERROR no frames in \" + this._style.animation);\n                        }\n                    }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR animation in style is not defined\");\n                    }\n                }\n\n                if (this._style.loop != null) {\n                    this.loop = this._style.loop;\n                }\n\n                if (this._style.speed != null) {\n                    this.animationSpeed = this._style.speed * (this._style.reverse ? -1 : 1);\n                }\n\n                if (this._style.tint != null) {\n                    this.tint = this._style.tint;\n                }\n\n                if (this._style.blendMode != null) {\n                    this.blendMode = CustomUtils.getBlendMode(this._style.blendMode);\n                }\n\n                if (this._style.alpha != null) {\n                    this.alpha = this._style.alpha;\n                }\n\n                if (this._style.reverse != null) {\n                    this._reverse = this._style.reverse;\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR missing style: \" + node.getAttribute(AnimationElementAttributes.STYLE));\n                }\n            }\n        }\n\n        this._randomStartFrame = Attributes.assignBooleanAttribute(\n            node,\n            AnimationElementAttributes.RANDOM_START_FRAME,\n            this._randomStartFrame,\n        );\n\n        if (node.hasAttribute(AnimationElementAttributes.MASK)) {\n            let next: Element = node.parentElement.firstElementChild;\n            while (next != null) {\n                if (next.nodeName === node.getAttribute(AnimationElementAttributes.MASK)) {\n                    let shapeElement: ShapeElement = new ShapeElement();\n                    shapeElement.create(next);\n                    this.mask = shapeElement;\n                }\n                next = next.nextElementSibling;\n            }\n\n            if (this.mask == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(AnimationElementAttributes.MASK));\n                }\n            }\n        }\n\n        /**\n         * todo Replace by AnimationElementAttributes\n         */\n        if (node.hasAttribute(AnimationElementAttributes.BITMAP_MASK)) {\n            let image = StageController.getTextureByResourceId(\n                node.getAttribute(AnimationElementAttributes.BITMAP_MASK),\n            );\n\n            if (image != null) {\n                this.maskSprite = new PIXI.Sprite(image);\n                if (node.hasAttribute(AnimationElementAttributes.BITMAP_MASK_X)) {\n                    this.maskSprite.position.x = parseFloat(\n                        node.getAttribute(AnimationElementAttributes.BITMAP_MASK_X),\n                    );\n                }\n                if (node.hasAttribute(AnimationElementAttributes.BITMAP_MASK_Y)) {\n                    this.maskSprite.position.y = parseFloat(\n                        node.getAttribute(AnimationElementAttributes.BITMAP_MASK_Y),\n                    );\n                }\n                if (!node.hasAttribute(AnimationElementAttributes.BITMAP_MASK_SHOW)) {\n                    this.addChild(this.maskSprite);\n                    this.mask = this.maskSprite;\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\n                        \"ERROR\" +\n                            this.componentName +\n                            \" no image with name for mask: \" +\n                            node.getAttribute(AnimationElementAttributes.BITMAP_MASK),\n                    );\n                }\n            }\n        }\n\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.createElement(this, this.getDebugInfo());\n            }\n        }\n\n        this.updateByNode(node);\n    }\n\n    /**\n     * @todo Najst miesta, kde sa vola metoda create(). Ak by bolo vhodne, aby sa tam volala metoda update(), treba volat ju. Tomu treba prisposobit aj obsah metody.\n     *\n     * @param node\n     */\n    public updateByNode(node: Element): void {\n        if (DEBUG) {\n            if (\n                node.hasAttribute(AnimationElementAttributes.DEBUG) &&\n                node.getAttribute(AnimationElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        if (!node) {\n            this.logError(\"No node specified for element update!\");\n            return;\n        }\n\n        if (node.hasAttribute(AnimationElementAttributes.TINT)) {\n            if (node.getAttribute(AnimationElementAttributes.TINT) === \"0\") {\n                this.tint = null;\n            } else if (node.getAttribute(AnimationElementAttributes.TINT) === \"dynamic\") {\n                this.tint = parseInt(AnimationElement.DynamicTint, 16);\n            } else {\n                this.tint = parseInt(node.getAttribute(AnimationElementAttributes.TINT), 16);\n            }\n        } else {\n            this.tint = 0xffffff;\n        }\n\n        this.alpha = Attributes.assignFloatAttribute(node, AnimationElementAttributes.ALPHA, this.alpha);\n\n        if (node.hasAttribute(AnimationElementAttributes.ANCHOR)) {\n            this.anchor.x = parseFloat(node.getAttribute(AnimationElementAttributes.ANCHOR));\n            this.anchor.y = parseFloat(node.getAttribute(AnimationElementAttributes.ANCHOR));\n        }\n\n        let rotation = Attributes.assignIntAttribute(node, AnimationElementAttributes.ROTATION, this.rotation);\n        this.rotation = this.degrees2radians(rotation);\n\n        /**\n         * todo Replace by AnimationElementAttributes\n         */\n        if (node.hasAttribute(AnimationElementAttributes.START_ROTATION)) {\n            if (\n                node.getAttribute(AnimationElementAttributes.START_ROTATION) ===\n                AnimationElementAttributes.START_ROTATION\n            ) {\n                this.rotation = Math.floor(Math.random() * 360) / 100;\n            }\n        }\n\n        this.scale.x = Attributes.assignFloatAttribute(node, AnimationElementAttributes.SCALE_X, this.scale.x);\n        this.scale.y = Attributes.assignFloatAttribute(node, AnimationElementAttributes.SCALE_Y, this.scale.y);\n\n        if (node.hasAttribute(AnimationElementAttributes.SCALE)) {\n            this.scale.x = parseFloat(node.getAttribute(AnimationElementAttributes.SCALE));\n            this.scale.y = parseFloat(node.getAttribute(AnimationElementAttributes.SCALE));\n        }\n\n        this.position.x = Attributes.assignIntAttribute(node, AnimationElementAttributes.X, this.position.x);\n        this.position.y = Attributes.assignIntAttribute(node, AnimationElementAttributes.Y, this.position.y);\n        this.pivot.x = Attributes.assignIntAttribute(node, AnimationElementAttributes.PIVOT_X, this.pivot.x);\n        this.pivot.y = Attributes.assignIntAttribute(node, AnimationElementAttributes.PIVOT_Y, this.pivot.y);\n        this.visible = Attributes.assignBooleanAttribute(node, AnimationElementAttributes.VISIBLE, this.visible);\n\n        if (\n            node.hasAttribute(AnimationElementAttributes.CONTINUE) &&\n            StringUtils.parseBoolean(node.getAttribute(AnimationElementAttributes.CONTINUE))\n        ) {\n            this._continue = true;\n            this.playMe();\n        } else {\n            this._continue = false;\n        }\n\n        if (\n            node.hasAttribute(AnimationElementAttributes.PLAY) &&\n            StringUtils.parseBoolean(node.getAttribute(AnimationElementAttributes.PLAY))\n        ) {\n            this._stop = false;\n            this._reverse = false;\n            if (\n                node.hasAttribute(AnimationElementAttributes.REVERSE) &&\n                StringUtils.parseBoolean(node.getAttribute(AnimationElementAttributes.REVERSE))\n            ) {\n                this._reverse = StringUtils.parseBoolean(node.getAttribute(AnimationElementAttributes.REVERSE));\n                this.animationSpeed = this.animationSpeed * (this._reverse ? -1 : 1);\n            }\n\n            if (node.hasAttribute(AnimationElementAttributes.SPEED)) {\n                this.animationSpeed =\n                    parseFloat(node.getAttribute(AnimationElementAttributes.SPEED)) * (this._reverse ? -1 : 1);\n            }\n\n            if (node.hasAttribute(AnimationElementAttributes.DELAY)) {\n                let range = node\n                    .getAttribute(AnimationElementAttributes.DELAY)\n                    .split(\";\")\n                    .map((value) => parseInt(value));\n                if (range.length > 1 && !isNaN(range[0]) && !isNaN(range[1])) {\n                    this._delay = range[0] + Math.random() * (range[1] - range[0]);\n                    if (this._delay < 0) {\n                        this._delay = 0;\n                    }\n                } else {\n                    if (!isNaN(range[0])) {\n                        this._delay = range[0];\n                    }\n                }\n            }\n\n            // this.animationSpeed = this._style.speed * ((this._reverse) ? -1 : 1);\n\n            if (this._delay > 0) {\n                this._timerDelay.stop();\n                this._timerDelay.start(this._delay);\n            } else {\n                this.playMe();\n            }\n        } else if (this._startFrame != null && this._endFrame == null) {\n            this._stop = false;\n\n            if (\n                node.hasAttribute(AnimationElementAttributes.DELAY) &&\n                parseInt(node.getAttribute(AnimationElementAttributes.DELAY))\n            ) {\n                this._delay = parseInt(node.getAttribute(AnimationElementAttributes.DELAY));\n            }\n\n            if (this._delay > 0) {\n                this._timerDelay.stop();\n                this._timerDelay.start(this._delay);\n            } else {\n                this.playMe();\n            }\n            // this.playMe();\n        }\n\n        if (node.hasAttribute(AnimationElementAttributes.STOP)) {\n            this._timerDelay.stop();\n            this._stop = true;\n            if (this.playing) {\n                let endFrame = parseInt(node.getAttribute(AnimationElementAttributes.STOP));\n                this.playMe(isNaN(endFrame) ? -1 : endFrame);\n            }\n        }\n\n        this.runPositionTween(node);\n        this.runScaleTween(node);\n        this.runRotationTween(node);\n        this.runAlphaTween(node);\n\n        if (DEBUG) {\n            /*this._printDebugInfo({\n             'element': 'Animation',\n             'style': this._style.node.nodeName,\n             'currentFrame': this.currentFrame,\n             'currentTime': this._currentTime,\n             'start': this._startFrame,\n             'end': this._endFrame,\n             'x': this.position.x,\n             'y': this.position.y\n             }, node);*/\n        }\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    private animationDelay(): void {\n        this.playMe();\n    }\n\n    /**\n     * Play movie clip set up for this class.\n     * If animation has Loop property set to true play will loop throught the movie clip.\n     * If animation has Stop property set to true play will loop only single frame on start frame position.\n     * If animation has Reverse property set to true play will start from frame on end frame position.\n     *\n     * @method play\n     * @return void\n     */\n    playMe(frame: number = -1): void {\n        if (!this._continue || !this.playing) {\n            if (this._stop) {\n                if (this._reverse) {\n                    this.gotoAndStop(this._endFrame);\n                } else {\n                    if (frame !== -1) {\n                        this.gotoAndStop(frame);\n                    } else {\n                        this.gotoAndStop(this._startFrame);\n                    }\n                }\n            } else {\n                if (this._randomStartFrame && this._startFrame === 0 && this._endFrame != null) {\n                    this._startFrame = Math.floor(Math.random() * this._endFrame);\n                }\n\n                if (this._reverse) {\n                    this.gotoAndPlay(this._endFrame);\n                } else {\n                    this.gotoAndPlay(this._startFrame);\n                }\n            }\n        }\n    }\n\n    /**\n     * Return movie clip.\n     * @method getMovieClip\n     * @return PIXI.extras.AnimatedSprite\n     *\n     * @deprecated - use only \"object\" instead \"object.getMovieClip()\"\n     */\n    getMovieClip(): PIXI.extras.AnimatedSprite {\n        return this;\n    }\n\n    /**\n     * Dispatch event complete when movie clip goto last frame.\n     * @method movieClipComplete\n     * @return void\n     */\n    private _movieClipComplete(): void {\n        this.emit(AnimationElement.AnimationComplete);\n    }\n\n    /**\n     * Runs the position tween\n     * @method runPositionTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runPositionTween(node: Element): boolean {\n        if (\n            !node.hasAttribute(AnimationElementAttributes.POSITION_TWEEN_X) ||\n            !node.hasAttribute(AnimationElementAttributes.POSITION_TWEEN_Y)\n        ) {\n            return false;\n        }\n\n        let positionTweenX: Array<number>;\n        let positionTweenY: Array<number>;\n\n        let positionTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            AnimationElementAttributes.POSITION_TWEEN_POSITION,\n            null,\n        );\n        if (positionTweenPosition == AnimationElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_X)).map(\n                (value) => value + this.position.x,\n            );\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_Y)).map(\n                (value) => value + this.position.y,\n            );\n        } else if (positionTweenPosition == AnimationElementAttributes.POSITION_TWEEN_POSITION_VALUE.SMOOTH) {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_X));\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_Y));\n            if (positionTweenX.length) {\n                positionTweenX[0] = this.position.x;\n            }\n            if (positionTweenY.length) {\n                positionTweenY[0] = this.position.y;\n            }\n        } else {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_X));\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_Y));\n        }\n\n        const tweenX: Array<number> = positionTweenX || [];\n        const tweenY: Array<number> = positionTweenY || [];\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            AnimationElementAttributes.POSITION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            AnimationElementAttributes.POSITION_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(AnimationElementAttributes.POSITION_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(AnimationElementAttributes.POSITION_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            AnimationElementAttributes.POSITION_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(AnimationElementAttributes.POSITION_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.positionTween(this, { tweenX, tweenY, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    /**\n     * Runs the scale tween\n     *\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runScaleTween(node: Element): boolean {\n        let scaleTweenX: Array<number>;\n        let scaleTweenY: Array<number>;\n        let scaleTween: Array<PIXI.Point>;\n        let tweenValues: Array<PIXI.Point> = [];\n\n        if (node.hasAttribute(AnimationElementAttributes.SCALE_TWEEN_X)) {\n            scaleTweenX = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.SCALE_TWEEN_X));\n        }\n\n        if (node.hasAttribute(AnimationElementAttributes.SCALE_TWEEN_Y)) {\n            scaleTweenY = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.SCALE_TWEEN_Y));\n        }\n\n        if (node.hasAttribute(AnimationElementAttributes.SCALE_TWEEN)) {\n            scaleTween = AnimationElement._getPointsFromPointsAttribute(\n                node.getAttribute(AnimationElementAttributes.SCALE_TWEEN),\n            ) as Array<PIXI.Point>;\n        }\n\n        let scaleTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            AnimationElementAttributes.SCALE_TWEEN_POSITION,\n            null,\n        );\n\n        if (scaleTween && scaleTween.length) {\n            if (scaleTweenPosition == AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                tweenValues = scaleTween.map((value: PIXI.Point) => {\n                    return {\n                        x: value.x + this.scale.x,\n                        y: value.y + this.scale.y,\n                    } as PIXI.Point;\n                });\n            } else if (scaleTweenPosition == AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                tweenValues = scaleTween;\n                if (tweenValues.length) {\n                    tweenValues[0].x = this.scale.x;\n                    tweenValues[0].y = this.scale.y;\n                }\n            } else {\n                tweenValues = scaleTween;\n            }\n        } else if (scaleTweenX && scaleTweenY) {\n            if (scaleTweenX.length === scaleTweenY.length) {\n                if (scaleTweenPosition == AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                    tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                        return {\n                            x: scaleXValue + this.scale.x,\n                            y: scaleTweenY[i] + this.scale.y,\n                        } as PIXI.Point;\n                    });\n                } else if (scaleTweenPosition == AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                    tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                        return {\n                            x: scaleXValue,\n                            y: scaleTweenY[i],\n                        } as PIXI.Point;\n                    });\n                    if (tweenValues.length) {\n                        tweenValues[0].x = this.scale.x;\n                        tweenValues[0].y = this.scale.y;\n                    }\n                } else {\n                    tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                        return {\n                            x: scaleXValue,\n                            y: scaleTweenY[i],\n                        } as PIXI.Point;\n                    });\n                }\n            }\n        } else if (scaleTweenX) {\n            if (scaleTweenPosition == AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue + this.scale.x,\n                        y: this.scale.y,\n                    } as PIXI.Point;\n                });\n            } else if (scaleTweenPosition == AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue,\n                        y: this.scale.y,\n                    } as PIXI.Point;\n                });\n                if (tweenValues.length) {\n                    tweenValues[0].x = this.scale.x;\n                }\n            } else {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue,\n                        y: this.scale.y,\n                    } as PIXI.Point;\n                });\n            }\n        } else if (scaleTweenY) {\n            if (scaleTweenPosition == AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                    return {\n                        x: this.scale.x,\n                        y: scaleYValue + this.scale.y,\n                    } as PIXI.Point;\n                });\n            } else if (scaleTweenPosition == AnimationElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                    return {\n                        x: this.scale.x,\n                        y: scaleYValue,\n                    } as PIXI.Point;\n                });\n                if (tweenValues.length) {\n                    tweenValues[0].y = this.scale.y;\n                }\n            } else {\n                tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                    return {\n                        x: this.scale.x,\n                        y: scaleYValue,\n                    } as PIXI.Point;\n                });\n            }\n        } else {\n            return false;\n        }\n\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            AnimationElementAttributes.SCALE_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            AnimationElementAttributes.SCALE_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(AnimationElementAttributes.SCALE_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(AnimationElementAttributes.SCALE_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            AnimationElementAttributes.SCALE_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(AnimationElementAttributes.SCALE_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.SCALE_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    /**\n     * Runs the rotation tween\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runRotationTween(node: Element): boolean {\n        if (!node.hasAttribute(AnimationElementAttributes.ROTATION_TWEEN)) {\n            return false;\n        }\n\n        let rotationTween: Array<number>;\n\n        let rotationTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            AnimationElementAttributes.ROTATION_TWEEN_POSITION,\n            null,\n        );\n        if (rotationTweenPosition == AnimationElementAttributes.ROTATION_TWEEN_POSITION_VALUE.RELATIVE) {\n            rotationTween = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.ROTATION_TWEEN)).map(\n                (value) => value + Tweens.radians2degrees(this.rotation),\n            );\n        } else if (rotationTweenPosition == AnimationElementAttributes.ROTATION_TWEEN_POSITION_VALUE.SMOOTH) {\n            rotationTween = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.ROTATION_TWEEN));\n            if (rotationTween.length) {\n                rotationTween[0] = Tweens.radians2degrees(this.rotation);\n            }\n        } else {\n            rotationTween = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.ROTATION_TWEEN));\n        }\n\n        const degrees: Array<number> = rotationTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            AnimationElementAttributes.ROTATION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            AnimationElementAttributes.ROTATION_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(AnimationElementAttributes.ROTATION_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(AnimationElementAttributes.ROTATION_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            AnimationElementAttributes.ROTATION_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(AnimationElementAttributes.ROTATION_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.ROTATION_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    /**\n     * Runs the alpha tween\n     * @method runAlphaTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runAlphaTween(node: Element): boolean {\n        if (!node.hasAttribute(AnimationElementAttributes.ALPHA_TWEEN)) {\n            return false;\n        }\n\n        let alphaTween: Array<number>;\n\n        let alphaTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            AnimationElementAttributes.ALPHA_TWEEN_POSITION,\n            null,\n        );\n        if (alphaTweenPosition == AnimationElementAttributes.ALPHA_TWEEN_POSITION_VALUE.RELATIVE) {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.ALPHA_TWEEN)).map(\n                (value) => value + this.alpha,\n            );\n        } else if (alphaTweenPosition == AnimationElementAttributes.ALPHA_TWEEN_POSITION_VALUE.SMOOTH) {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.ALPHA_TWEEN));\n            if (alphaTween.length) {\n                alphaTween[0] = this.alpha;\n            }\n        } else {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.ALPHA_TWEEN));\n        }\n\n        const alphas: Array<number> = alphaTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            AnimationElementAttributes.ALPHA_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            AnimationElementAttributes.ALPHA_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(AnimationElementAttributes.ALPHA_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(AnimationElementAttributes.ALPHA_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            AnimationElementAttributes.ALPHA_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(AnimationElementAttributes.ALPHA_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.ALPHA_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    /**\n     * Converts string from \"points attribute\" into array of points. E.g. \"(1,6);(5,2);2;(2,4)\". Point can be specified as single value for both axex.\n     * @method _getPointsFromPointsAttribute\n     * @return Array<PIXI.Points>\n     */\n    private static _getPointsFromPointsAttribute(pointsString: string): any {\n        return pointsString\n            .replace(/\\s/g, \"\")\n            .split(\";\")\n            .map((valuesPair: string) => {\n                return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\n            })\n            .map((valuesPair: Array<string>) => {\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\n            });\n    }\n\n    /**\n     * Add zero padding\n     * @param {number} num\n     * @param {number} size\n     * @returns {string}\n     */\n    private zerosPad(num: number, size: number): string {\n        let s = num + \"\";\n        while (s.length < size) s = \"0\" + s;\n        return s;\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return AnimationElement\n     */\n    clone(): AnimationElement {\n        let element: AnimationElement = new AnimationElement();\n\n        element._style = this._style;\n        element._startFrame = this._startFrame;\n        element._endFrame = this._endFrame;\n        element._stop = this._stop;\n        element._randomStartFrame = this._randomStartFrame;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.rotation = this.rotation;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.visible = this.visible;\n        element.blendMode = this.blendMode;\n        element.tint = this.tint;\n        element.name = this.name;\n\n        if (this.textures != null && this.textures.length > 0) {\n            element.texture = this.texture;\n            element.textures = this.textures;\n            element.onComplete = element._movieClipComplete.bind(element);\n            if (this._style != null && this._style.loop != null) {\n                element.loop = this._style.loop;\n            }\n            if (this.animationSpeed) {\n                element.animationSpeed = this.animationSpeed;\n            }\n\n            //element.removeChildren();\n            /* todo Potrebujeme ? */\n        }\n\n        element.playMe = this.playMe.bind(element);\n        element.stop = this.stop.bind(element);\n        //element.getMovieClip = this.getMovieClip.bind(element);\n\n        element.markAsCloned(); // must be called last before return!\n\n        return element;\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    protected markAsCloned(): void {\n        this._markAsCloned();\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    _markAsCloned(): void {\n        this.assertDestroyed(\"_markAsCloned()\");\n        this._cloned = true;\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.clone(this);\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    protected removeAndDestroyChildren(): void {\n        this._removeAndDestroyChildren();\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    _removeAndDestroyChildren(): void {\n        this.assertDestroyed(\"_removeAndDestroyChildren\");\n\n        let destroyOptions: PIXI.DestroyOptions = {\n            children: true,\n        };\n\n        if (this.children != null && this.children.length > 0) {\n            for (let i = this.children.length - 1; i >= 0; i--) {\n                if (this.children[i] != null) {\n                    (this.children[i] as any).destroy(destroyOptions);\n                }\n            }\n        }\n\n        this.removeChildren();\n    }\n\n    /**\n     *\n     * @param method\n     */\n    protected assertDestroyed(method: string): void {\n        if (DEBUG) {\n            if (this.__destroyed) {\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\n            }\n        }\n    }\n\n    /**\n     *\n     * @param method\n     * @private\n     */\n    /*    protected _assertDestroyed(method: string): void\n     {\n     if (DEBUG) {\n     if (this.__destroyed) {\n     throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\n     }\n     }\n     }*/\n\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\n        this.assertDestroyed(\"destroy\");\n\n        if (Utils.isNullOrUndefined(options)) {\n            options = AnimationElement._destroyOptions;\n        }\n\n        this.internalDestroy(options);\n\n        if (!Utils.isNullOrUndefined(this.children)) {\n            super.destroy();\n        }\n\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.destroy(this);\n            }\n        }\n\n        this.__destroyed = true;\n    }\n\n    /**\n     * @method internalDestroy - cleanup resources\n     * @param options\n     */\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        this.onComplete = null;\n        this.textures = [PIXI.Texture.EMPTY];\n\n        Tweens.removeTweens(this, \"alpha\");\n        Tweens.removeTweens(this, \"position\");\n        Tweens.removeTweens(this, \"rotation\");\n        Tweens.removeTweens(this, \"scale\");\n    }\n\n    /**\n     *\n     *\n     * @returns {any}\n     */\n    getDebugInfo(): string {\n        if (DEBUG) {\n            let debugInfoFn = this.debugInfo;\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\n        }\n\n        return \"\";\n    }\n\n    /**\n     *\n     * @returns {any}\n     */\n    debugInfo(): string {\n        if (DEBUG) {\n            let result = `${this.uid}\\nName: [${this.name}]`;\n            let animation = this._style ? this._style.animation : \"\";\n            if (!StringUtils.isNullOrEmpty(animation)) {\n                result += \"\\nAnimation: \" + animation;\n            }\n\n            return result;\n        }\n\n        return \"\";\n    }\n\n    /**\n     * @property cloned - indicates if element was cloned or not.\n     * @returns {boolean}\n     */\n    public get cloned(): boolean {\n        return this._cloned;\n    }\n\n    public get destroyed(): boolean {\n        return this.__destroyed;\n    }\n\n    /**\n     * @property uid - unique identifier of element.\n     * @returns {string}\n     */\n    public get uid(): string {\n        return this._uid;\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public get componentName(): string {\n        return (this as any).__componentName__;\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    public degrees2radians(degrees: number): number {\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     *\n     * @param speed\n     */\n    public changeAnimationSpeed(speed: number): void {\n        this.animationSpeed = speed;\n    }\n\n    /**\n     * Prints output on screen inside element with specified debug content\n     */\n    protected _printDebugInfo(text: any, node?: Element) {\n        if (DEBUG) {\n            if (this.getChildByName(AnimationElementAttributes.DEBUG_INFO) != null) {\n                //this.getChildByName(AnimationElementAttributes.DEBUG_INFO).destroy();\n                this.removeChild(this.getChildByName(AnimationElementAttributes.DEBUG_INFO));\n            }\n            if (\n                node == undefined ||\n                (node.hasAttribute(AnimationElementAttributes.DEBUG_INFO) &&\n                    node.getAttribute(AnimationElementAttributes.DEBUG_INFO) === \"true\")\n            ) {\n                // test\n                /*let border = new ShapeElement();\n                 border.beginFill(0xFFFFFF, 0);\n                 border.lineStyle(2, 0xff0000);\n                 border.drawRect(0, 0, this._textures[0].width, this._textures[0].height);\n                 this.addChild(border);*/\n\n                let textInfo = new TextElement();\n                textInfo.name = AnimationElementAttributes.DEBUG_INFO;\n                textInfo.x = textInfo.y = 0;\n                textInfo.style.fill = 0xffffff;\n                textInfo.style.fontSize = 12;\n                textInfo.text = JSON.stringify(text, null, 4);\n\n                this.addChild(textInfo);\n            }\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    /**\n     * Log error into console\n     * @param s\n     */\n    protected logError(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.errorGroup(compName, s);\n        }\n    }\n}\n\nexport const AnimationElementAttributes = {\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n    /* Array of offsets of individual tween values relative to total duration\n     * e.g. 0;0.25;1 with duration 100 meaning first value at T=0, second at T=25, last at T=100\n     */\n    ALPHA_TWEEN_KEY_TIMES: \"AlphaTweenKeyTimes\",\n    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\n    ALPHA_TWEEN_POSITION: \"AlphaTweenPosition\",\n    ALPHA_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\" /* values are taken as they are */,\n        RELATIVE: \"relative\" /* values are offset by initial value */,\n        SMOOTH: \"smooth\" /* first value is replaced with initial value */,\n    },\n    ANCHOR: \"Anchor\",\n    /*\n     * A ImageElement instance that defines a mask for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property BitmapMask\n     * @type string\n     * @default null\n     */\n    BITMAP_MASK: \"BitmapMask\",\n    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\n    BITMAP_MASK_X: \"BitmapMaskX\",\n    BITMAP_MASK_Y: \"BitmapMaskY\",\n    /**\n     * If Continue is true animation is not restarted.\n     * @property Continue\n     * @type boolean\n     */\n    CONTINUE: \"Continue\",\n    DEBUG_INFO: \"DebugInfo\",\n    DEBUG: \"Debug\",\n    /*\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property Mask\n     * @type ShapeElement\n     * @default null\n     */\n    MASK: \"Mask\",\n    /*\n     * X pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotX\n     * @type number\n     * @default null\n     */\n    PIVOT_X: \"PivotX\",\n    /*\n     * Y pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotY\n     * @type number\n     * @default null\n     */\n    PIVOT_Y: \"PivotY\",\n    /*\n     * Start playing animation.\n     * @property Play\n     * @type boolean\n     */\n    PLAY: \"Play\",\n    DELAY: \"Delay\",\n    POSITION_TWEEN_X: \"PositionTweenX\",\n    POSITION_TWEEN_Y: \"PositionTweenY\",\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\n    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\n    POSITION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n        SMOOTH: \"smooth\",\n    },\n    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\n    /* Array of offsets of individual tween values relative to total duration\n     * e.g. 0;0.25;1 with duration 100 meaning first value at T=0, second at T=25, last at T=100\n     */\n    POSITION_TWEEN_KEY_TIMES: \"PositionTweenKeyTimes\",\n    /*\n     *\n     */\n    RANDOM_START_FRAME: \"RandomStartFrame\",\n    /*\n     * Indicates if animation should animate reverse.\n     * @property Reverse\n     * @type boolean\n     * @default false\n     */\n    REVERSE: \"Reverse\",\n    /*\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    /*\n     * Tween rotation of this display object with children.\n     * For duration use RotateTweenDuration (number - frames).\n     * For tweenEase use RotateTweenEase (string - name of easeing function).\n     * @property RotateTweenDegrees\n     * @type Array<numbers> - consist of two values (start degrees; end degrees) or three values (start degrees, middle degrees, end degrees)\n     * @default null\n     */\n    ROTATION_TWEEN: \"RotationTween\",\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\n    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\n    /* Array of offsets of individual tween values relative to total duration\n     * e.g. 0;0.25;1 with duration 100 meaning first value at T=0, second at T=25, last at T=100\n     */\n    ROTATION_TWEEN_KEY_TIMES: \"RotationTweenKeyTimes\",\n    ROTATION_TWEEN_POSITION: \"RotationTweenPosition\",\n    ROTATION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\" /* values are taken as they are */,\n        RELATIVE: \"relative\" /* values are offset by initial value */,\n        SMOOTH: \"smooth\" /* first value is replaced with initial value */,\n    },\n    /*\n     * Tween scale of this display object with children.\n     * For ease use ScaleTweenEase (string - name of easeing function).\n     * For scaling X use ScaleTweenX (consist of two values (start scaleX; end scaleX) or three values (start scaleX; middle scaleX, end scaleX)).\n     * For scaling Y use ScaleTweenY (consist of two values (start scaleY; end scaleY) or three values (start scaleY; middle scaleY, end scaleY)).\n     * @property ScaleTweenDuration\n     * @type number - frames\n     * @default null\n     */\n    SCALE_TWEEN: \"ScaleTween\",\n    SCALE_TWEEN_X: \"ScaleTweenX\",\n    SCALE_TWEEN_Y: \"ScaleTweenY\",\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\n    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\n    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\n    /* Array of offsets of individual tween values relative to total duration\n     * e.g. 0;0.25;1 with duration 100 meaning first value at T=0, second at T=25, last at T=100\n     */\n    SCALE_TWEEN_KEY_TIMES: \"ScaleTweenKeyTimes\",\n    SCALE_TWEEN_POSITION: \"ScaleTweenPosition\",\n    SCALE_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\" /* values are taken as they are */,\n        RELATIVE: \"relative\" /* values are offset by initial value */,\n        SMOOTH: \"smooth\" /* first value is replaced with initial value */,\n    },\n    /*\n     * The factor to stretch this display object horizontally.\n     * For example, setting scaleX to 2 will stretch the display object to twice its nominal width. To horizontally flip an object, set the scale to a negative number.\n     * @property ScaleX\n     * @type Number\n     * @default 1\n     */\n    SCALE_X: \"ScaleX\",\n    /*\n     * The factor to stretch this display object vertically.\n     * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n     * @property ScaleY\n     * @type Number\n     * @default 1\n     */\n    SCALE_Y: \"ScaleY\",\n    /*\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n     * @property Scale\n     * @type Number\n     * @default 1\n     */\n    SCALE: \"Scale\",\n    /*\n     * Random rotation in degrees for this display object.\n     * @property StartRotation\n     * @type Number\n     * @default null\n     */\n    START_ROTATION: \"StartRotation\",\n\n    SPEED: \"Speed\",\n\n    /*\n     *\n     * @property Stop\n     * @type Number\n     */\n    STOP: \"Stop\",\n    STYLE: \"Style\",\n    STYLE2: \"Style2\",\n    /*\n     * Tint of animation. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n    /*\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\n     * @property Visible\n     * @type Boolean\n     * @default true\n     */\n    VISIBLE: \"Visible\",\n    /*\n     * X (horizontal) position of the display object, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /*\n     * Y (vertical) position of the display object, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/AnimationElement.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { TextElementAttributes } from \"../../ComponentAttributes\";\n\n/**\n * The image text element render bitmap font to text.\n * Example:\n *   <TextElement Class=\"TextElement\" Font=\"fontName\" Text=\"09123456789.,+\" X=\"960\" Y=\"540\" TextAlign=\"center\" TextBaseline=\"middle\" />\n *\n * @class TextElement\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class TextElement extends PIXI.Text {\n    private _uid: string;\n    private _cloned: boolean;\n    private __destroyed: boolean;\n\n    constructor() {\n        super();\n\n        this.text = \"\";\n\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                this._uid = PerfDebug.generateElementUID(this);\n                PerfDebug.newElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element) {\n        if (this.name == null) {\n            this.name = node.nodeName;\n        }\n\n        if (node.hasAttribute(TextElementAttributes.FONT)) {\n            this.style.fontFamily = node.getAttribute(TextElementAttributes.FONT);\n        }\n\n        this.updateByNode(node);\n    }\n\n    /**\n     * @todo Najst miesta, kde sa vola metoda create(). Ak by bolo vhodne, aby sa tam volala metoda update(), treba volat ju. Tomu treba prisposobit aj obsah metody.\n     *\n     * @param node\n     */\n    public updateByNode(node: Element): void {\n        if (node.hasAttribute(TextElementAttributes.TEXT)) {\n            this.text = node.getAttribute(TextElementAttributes.TEXT);\n        }\n\n        if (node.hasAttribute(TextElementAttributes.TEXT_ALIGN)) {\n            //this.style.align = node.getAttribute(TextElementAttributes.TEXT_ALIGN);\n        }\n\n        if (node.hasAttribute(TextElementAttributes.TEXT_BASELINE)) {\n            //this.textBaseline = node.getAttribute(TextElementAttributes.TEXT_BASELINE);\n            /*switch (node.getAttribute(TextElementAttributes.TEXT_BASELINE)) {\n                case TextElementAttributes.TEXT_BASELINE_VALUE.MIDDLE:\n                    this.position.y = this.position.y - this.parent.height / 2;\n                    break;\n                case TextElementAttributes.TEXT_BASELINE_VALUE.BOTTOM:\n                    this.position.y = -this.parent.height;\n                    break;\n            }*/\n        }\n\n        if (node.hasAttribute(TextElementAttributes.SIZE)) {\n            this.style.fontSize = parseInt(node.getAttribute(TextElementAttributes.SIZE));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.ALPHA)) {\n            this.alpha = parseFloat(node.getAttribute(TextElementAttributes.ALPHA));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.ROTATION)) {\n            this.rotation = parseInt(node.getAttribute(TextElementAttributes.ROTATION));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.START_ROTATION)) {\n            if (node.getAttribute(TextElementAttributes.START_ROTATION) === TextElementAttributes.START_ROTATION) {\n                this.rotation = Math.floor(Math.random() * 360) / 100;\n            }\n        }\n\n        if (node.hasAttribute(TextElementAttributes.SCALE_X)) {\n            this.scale.x = parseFloat(node.getAttribute(TextElementAttributes.SCALE_X));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.SCALE_Y)) {\n            this.scale.y = parseFloat(node.getAttribute(TextElementAttributes.SCALE_Y));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.SCALE)) {\n            this.scale.x = parseFloat(node.getAttribute(TextElementAttributes.SCALE));\n            this.scale.y = parseFloat(node.getAttribute(TextElementAttributes.SCALE));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.X)) {\n            this.position.x = parseInt(node.getAttribute(TextElementAttributes.X));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.Y)) {\n            this.position.y = parseInt(node.getAttribute(TextElementAttributes.Y));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.PIVOT_X)) {\n            this.pivot.x = parseInt(node.getAttribute(TextElementAttributes.PIVOT_X));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.PIVOT_Y)) {\n            this.pivot.y = parseInt(node.getAttribute(TextElementAttributes.PIVOT_Y));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.VISIBLE)) {\n            this.visible = StringUtils.parseBoolean(node.getAttribute(TextElementAttributes.VISIBLE));\n        }\n\n        if (node.hasAttribute(TextElementAttributes.TINT)) {\n            if (node.getAttribute(TextElementAttributes.TINT) === \"0\") {\n                this.style.fill = null;\n            } else {\n                this.style.fill = parseInt(node.getAttribute(TextElementAttributes.TINT), 16);\n            }\n        }\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    markAsCloned(): void {\n        this._markAsCloned();\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    protected _markAsCloned(): void {\n        this.assertDestroyed(\"markAsCloned()\");\n        this._cloned = true;\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.clone(this);\n\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    protected assertDestroyed(method: string): void {\n        if (DEBUG) {\n            if (this.__destroyed) {\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\n            }\n        }\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public get componentName(): string {\n        return (this as any).__componentName__;\n    }\n\n    /**\n     * @property uid - unique identifier of element.\n     * @returns {string}\n     */\n    public get uid(): string {\n        return this._uid;\n    }\n\n    getDebugInfo(): string {\n        if (DEBUG) {\n            let debugInfoFn = (this as any).debugInfo;\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\n        }\n        return \"\";\n    }\n\n    debugInfo(): string {\n        if (DEBUG) {\n            let result = `${this.uid}\\nName: [${this.name}]`;\n\n            return result;\n        }\n        return \"\";\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Texts/TextElement.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { ImageElement } from \"./ImageElement\";\nimport { StageController } from \"../../StageController\";\nimport { BaseElement } from \"./BaseElement\";\nimport { Tweens } from \"../../Effects/Tweens\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { ParticleStyle } from \"../Styles/ParticleStyle\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\nimport { AnimationElement } from \"./AnimationElement\";\n\n// TODO add comments\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ParticleElement extends BaseElement {\n    // handle definition for particles\n    private _style: ParticleStyle;\n    private _styleName: string;\n\n    //  holds particles in pool and reused them\n    private _pool: Array<ImageElement | AnimationElement>;\n\n    // container of whole particle element\n    private _target: BaseElement;\n    // timer for add particles\n    private _timer: FrameTimerEventEmitter;\n\n    private _stopping: boolean;\n    private _stop: boolean;\n    private _emitOnce: boolean;\n    private _preGenerate: boolean;\n    private _startType: string;\n    private _randomStartFrame: boolean;\n    private _maxEmit: number;\n\n    private _blendMode: number;\n    private _created: boolean;\n\n    constructor() {\n        super();\n\n        this._pool = [];\n\n        this._timer = CreateFrameTimer(\"particleTimer\");\n        this._timer.on(FrameTimerEvents.Complete, this.addParticles.bind(this));\n\n        this._blendMode = 0;\n        this._created = false;\n        this._stopping = false;\n        this._stop = true;\n        this._emitOnce = false;\n        this._preGenerate = false;\n        this._startType = \"\";\n        this._randomStartFrame = false;\n        this._maxEmit = 1;\n        this.visible = false;\n        this._target = this;\n    }\n\n    //******************************************************************************************************************\n    //  INITIALIZATION\n    //******************************************************************************************************************\n\n    createByNode(node: Element): void {\n        if (!this._created) {\n            super.createByNode(node);\n\n            //prevent generating wasted amount of particles, emit once can be setup only on create\n            if (node.hasAttribute(ParticleElementAttributes.EMIT_ONCE)) {\n                this._emitOnce = StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.EMIT_ONCE));\n            }\n\n            if (node.hasAttribute(ParticleElementAttributes.PRE_GENERATE)) {\n                this._preGenerate = StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.PRE_GENERATE));\n            }\n\n            if (node.hasAttribute(ParticleElementAttributes.BLEND_MODE)) {\n                this._blendMode = parseInt(node.getAttribute(ParticleElementAttributes.BLEND_MODE));\n            }\n\n            if (node.hasAttribute(ParticleElementAttributes.RANDOM_START_FRAME)) {\n                this._randomStartFrame = StringUtils.parseBoolean(\n                    node.getAttribute(ParticleElementAttributes.RANDOM_START_FRAME),\n                );\n            }\n\n            if (\n                node.hasAttribute(ParticleElementAttributes.STYLE) ||\n                node.hasAttribute(ParticleElementAttributes.STYLE2)\n            ) {\n                if (node.hasAttribute(ParticleElementAttributes.STYLE)) {\n                    this._style = <ParticleStyle>(\n                        StyleManager.Styles[node.getAttribute(ParticleElementAttributes.STYLE)]\n                    );\n                } else {\n                    this._style = <ParticleStyle>(\n                        StyleManager.Styles[node.getAttribute(ParticleElementAttributes.STYLE2)]\n                    );\n                }\n\n                this._styleName = this._style.name;\n            }\n\n            //if is subParticle, create image representation of particle, otherwise create just child particles\n            this.createParticles();\n            this._created = true;\n        }\n    }\n\n    updateByNode(node: Element): void {\n        if (DEBUG) {\n            if (\n                node.hasAttribute(ParticleElementAttributes.DEBUG) &&\n                node.getAttribute(ParticleElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        super.updateByNode(node);\n\n        if (node.hasAttribute(ParticleElementAttributes.MAX_EMIT)) {\n            this._maxEmit = parseInt(node.getAttribute(ParticleElementAttributes.MAX_EMIT));\n            this._maxEmit = this._maxEmit * 0.01;\n\n            if (this._maxEmit > 1) {\n                this._maxEmit = 1;\n            }\n        }\n\n        if (node.hasAttribute(ParticleElementAttributes.START_TYPE)) {\n            this._startType = node.getAttribute(ParticleElementAttributes.START_TYPE);\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.START) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.START))\n        ) {\n            this.start(this._emitOnce, this._startType);\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.STOPPING) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOPPING))\n        ) {\n            this.stopping();\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.STOP) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOP))\n        ) {\n            this.stop();\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.RESET) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.RESET))\n        ) {\n            this.reset();\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.CLEAR) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.CLEAR))\n        ) {\n            this.clear();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CREATING PARTICLES\n    //******************************************************************************************************************\n\n    public createParticles(): void {\n        if (this._style != null) {\n            if (this._style.images != null && this._style.images.length > 0) {\n                let count: number = this._emitOnce ? this._style.count : this._style.calculateElements();\n\n                for (let i: number = 0; i < count; i++) {\n                    let particle: ImageElement | AnimationElement = this.createParticle();\n\n                    this._pool.push(particle);\n                }\n            }\n        }\n    }\n\n    private createParticle(): ImageElement | AnimationElement {\n        let particle: ImageElement | AnimationElement;\n        particle = this.createParticleResource();\n\n        this.setupParticle(particle);\n\n        if (this._preGenerate) {\n            this.setupPosition(particle);\n            this.addBehaviour(particle);\n        }\n\n        this.addChild(particle);\n        return particle;\n    }\n\n    private createParticleResource(): ImageElement | AnimationElement {\n        if (this._style != null) {\n            let resource: ImageElement | AnimationElement = null;\n            let resourceId = this.getRandomResource();\n\n            if (resourceId.indexOf(\"GFX_\") > -1) {\n                resource = new ImageElement(StageController.getTextureByResourceId(resourceId));\n                resource.blendMode = CustomUtils.getBlendMode(this._blendMode);\n            } else if (resourceId.indexOf(\"ANI_\") > -1) {\n                let node: Element = document.createElement(\"Animation\");\n                node.setAttribute(\"Style2\", resourceId);\n                node.setAttribute(\"RandomStartFrame\", this._randomStartFrame.toString());\n                resource = new AnimationElement();\n                resource.create(node);\n            }\n\n            let localBounds = resource.getLocalBounds();\n            resource.pivot.set(localBounds.width / 2, localBounds.height / 2);\n            return resource;\n        }\n\n        return null;\n    }\n\n    private getRandomResource(): string {\n        return this._style.images[Math.floor(Math.random() * this._style.images.length)];\n    }\n\n    //******************************************************************************************************************\n    //  INITIAL SETUP\n    //******************************************************************************************************************\n\n    private setupParticle(particle: ImageElement | AnimationElement) {\n        this.setVisibility(particle, false);\n        particle.usedInPool = false;\n\n        return particle;\n    }\n\n    private setVisibility(particle: ImageElement | AnimationElement, visible: boolean): void {\n        particle.visible = visible;\n\n        if (particle instanceof AnimationElement) {\n            if (visible) {\n                particle.playMe();\n            } else {\n                particle.stop();\n            }\n        }\n    }\n\n    private setupPosition(particle: ImageElement | AnimationElement): void {\n        let startX = 0;\n        let startY = 0;\n\n        switch (this._style.positionZone.type) {\n            case ParticleStyle.ZoneRectangle:\n                startX = this._style.positionZone.x + Math.random() * this._style.positionZone.width;\n                startY = this._style.positionZone.y + Math.random() * this._style.positionZone.height;\n\n                if (this._style.positionZone.innerWidth != -1 && this._style.positionZone.innerHeight != -1) {\n                    let centerX = this._style.positionZone.x + this._style.positionZone.width / 2;\n                    let centerY = this._style.positionZone.y + this._style.positionZone.height / 2;\n                    let innerCenterX = this._style.positionZone.innerX + this._style.positionZone.innerWidth / 2;\n                    let innerCenterY = this._style.positionZone.innerY + this._style.positionZone.innerHeight / 2;\n                    let correctX = Math.random() > 0.5;\n\n                    if (correctX) {\n                        if (startX > centerX) {\n                            startX = this.getRandom(\n                                innerCenterX + this._style.positionZone.innerWidth * 0.5,\n                                centerX + this._style.positionZone.width * 0.5,\n                            );\n                        } else {\n                            startX = this.getRandom(0, innerCenterX - this._style.positionZone.innerWidth * 0.5);\n                        }\n                    } else {\n                        if (startY > centerY) {\n                            startY = this.getRandom(\n                                innerCenterY + this._style.positionZone.innerHeight * 0.5,\n                                centerY + this._style.positionZone.height * 0.5,\n                            );\n                        } else {\n                            startY = this.getRandom(0, innerCenterY - this._style.positionZone.innerHeight * 0.5);\n                        }\n                    }\n                }\n\n                particle.x = startX;\n                particle.y = startY;\n\n                break;\n            case ParticleStyle.ZoneTarget:\n                startX =\n                    this._target.x +\n                    Math.random() * this._style.positionZone.width -\n                    this._style.positionZone.width / 2;\n                startY =\n                    this._target.y +\n                    Math.random() * this._style.positionZone.height -\n                    this._style.positionZone.height / 2;\n\n                particle.x = startX;\n                particle.y = startY;\n                break;\n            case ParticleStyle.ZoneLine:\n                // TODO\n                break;\n            case ParticleStyle.ZoneEllipse:\n                startX = this._style.positionZone.x;\n                startY = this._style.positionZone.y;\n                let radianDegrees = Math.floor(\n                    this.getRandom(this._style.positionZone.startAngle, this._style.positionZone.angle),\n                );\n                let radian = this.degrees2radians(radianDegrees);\n\n                //start is not from origin but from another, inner circle\n                if (this._style.positionZone.innerRadius > 0) {\n                    let radius = this.getRandom(\n                        this._style.positionZone.minInnerRadius,\n                        this._style.positionZone.innerRadius,\n                    );\n                    let radiusB = this.getRandom(\n                        this._style.positionZone.minInnerRadiusB,\n                        this._style.positionZone.innerRadiusB,\n                    );\n\n                    startX = Math.floor(this._style.positionZone.innerX + radius * Math.cos(radian));\n                    startY = Math.floor(this._style.positionZone.innerY + radiusB * Math.sin(radian));\n                }\n\n                particle.x = startX;\n                particle.y = startY;\n                particle.rotation = radian;\n\n                break;\n        }\n    }\n\n    public setTargetElement(element: BaseElement): void {\n        this._target = element;\n    }\n\n    //******************************************************************************************************************\n    //  BEHAVIOUR\n    //******************************************************************************************************************\n\n    private addBehaviour(particle: ImageElement | AnimationElement): void {\n        let particleLife: number =\n            Math.floor(Math.random() * (this._style.maxLife - this._style.minLife)) + this._style.minLife;\n\n        this.addPathBehaviour(particle, particleLife);\n        this.addScaleBehaviour(particle, particleLife);\n        this.addRotationBehaviour(particle, particleLife);\n        this.addAlphaBehaviour(particle, particleLife);\n    }\n\n    private addPathBehaviour(particle: ImageElement | AnimationElement, life: number): void {\n        switch (this._style.positionZone.type) {\n            case ParticleStyle.ZoneRectangle:\n            case ParticleStyle.ZoneTarget:\n                this.addRectanglePathBehavior(particle, life);\n                break;\n            case ParticleStyle.ZoneEllipse:\n                this.addEllipsePathBehavior(particle, life);\n                break;\n        }\n    }\n\n    private addRectanglePathBehavior(particle: ImageElement | AnimationElement, life: number): void {\n        if (this._style.pathValues != null) {\n            let pointsX: Array<number> = [];\n            let pointsY: Array<number> = [];\n            for (let i: number = 0; i < this._style.pathValues.length; i++) {\n                if (\n                    this._style.pathValues[i] != null &&\n                    this._style.pathValues[i].x != null &&\n                    this._style.pathValues[i].y != null\n                ) {\n                    let valueX: number = this._style.pathValues[i].x;\n                    let valueY: number = this._style.pathValues[i].y;\n                    if (this._style.pathValues[i].randomX != null) {\n                        valueX += Math.floor((Math.random() - 0.5) * this._style.pathValues[i].randomX);\n                    }\n                    if (this._style.pathValues[i].relative && pointsX.length > 0) {\n                        valueX += pointsX[pointsX.length - 1];\n                    }\n                    if (this._style.pathValues[i].randomY != null) {\n                        valueY += Math.floor((Math.random() - 0.5) * this._style.pathValues[i].randomY);\n                    }\n                    if (this._style.pathValues[i].relative && pointsY.length > 0) {\n                        valueY += pointsY[pointsY.length - 1];\n                    }\n                    pointsX.push(particle.x + valueX);\n                    pointsY.push(particle.y + valueY);\n                }\n            }\n            if (pointsX.length >= 2) {\n                Tweens.positionTween(particle, {\n                    tweenEase: this._style.pathEase,\n                    tweenX: pointsX,\n                    tweenY: pointsY,\n                    tweenDuration: life,\n                    keyTimes: this._style.pathKeyTimes,\n                    paused: false,\n                    callbackFunction: this.removeFromPool,\n                    callbackParams: [particle],\n                    callbackScope: null,\n                });\n            }\n        }\n    }\n\n    private addEllipsePathBehavior(particle: ImageElement | AnimationElement, life: number): void {\n        let radius = this.getRandom(this._style.positionZone.minRadius, this._style.positionZone.radius);\n        let radiusB = this.getRandom(this._style.positionZone.minRadiusB, this._style.positionZone.radiusB);\n        let finalX = Math.floor(this._style.positionZone.x + radius * Math.cos(particle.rotation));\n        let finalY = Math.floor(this._style.positionZone.y + radiusB * Math.sin(particle.rotation));\n\n        /* Path x/y/randomX/randomY values are taken as relative offset to natural position of particle */\n        if (this._style.pathValues != null && this._style.pathValues.length > 0) {\n            let pointsX: Array<number> = [];\n            let pointsY: Array<number> = [];\n\n            if (this._style.pathValues.length == 1) {\n                this._style.pathValues[1] = this._style.pathValues[0];\n            }\n\n            for (let i: number = 0; i < this._style.pathValues.length; i++) {\n                if (\n                    this._style.pathValues[i] != null &&\n                    this._style.pathValues[i].x != null &&\n                    this._style.pathValues[i].y != null\n                ) {\n                    let valueX: number = this._style.pathValues[i].x;\n                    let valueY: number = this._style.pathValues[i].y;\n                    let ratio: number = i / (this._style.pathValues.length - 1);\n                    if (this._style.pathValues[i].randomX != null) {\n                        valueX += Math.floor((Math.random() - 0.5) * this._style.pathValues[i].randomX);\n                    }\n                    if (this._style.pathValues[i].relative && pointsX.length > 0) {\n                        valueX += pointsX[pointsX.length - 1];\n                    }\n                    if (this._style.pathValues[i].randomY != null) {\n                        valueY += Math.floor((Math.random() - 0.5) * this._style.pathValues[i].randomY);\n                    }\n                    if (this._style.pathValues[i].relative && pointsY.length > 0) {\n                        valueY += pointsY[pointsY.length - 1];\n                    }\n                    let adjustedX = particle.x + (finalX - particle.x) * ratio + valueX;\n                    let adjustedY = particle.y + (finalY - particle.y) * ratio + valueY;\n                    pointsX.push(adjustedX);\n                    pointsY.push(adjustedY);\n                }\n            }\n\n            if (pointsX.length > 1) {\n                Tweens.positionTween(particle, {\n                    tweenX: pointsX,\n                    tweenY: pointsY,\n                    tweenEase: this._style.pathEase,\n                    tweenDuration: life,\n                    keyTimes: this._style.pathKeyTimes,\n                    paused: false,\n                    callbackFunction: this.removeFromPool,\n                    callbackParams: [particle],\n                    callbackScope: null,\n                });\n            } else if (pointsX.length === 1) {\n                Tweens.positionTween(particle, {\n                    tweenX: [particle.x, pointsX[0]],\n                    tweenY: [particle.y, pointsY[0]],\n                    tweenEase: this._style.pathEase,\n                    tweenDuration: life,\n                    keyTimes: this._style.pathKeyTimes,\n                    paused: false,\n                    callbackFunction: this.removeFromPool,\n                    callbackParams: [particle],\n                    callbackScope: null,\n                });\n            } else if (pointsX.length === 0) {\n                Tweens.positionTween(particle, {\n                    tweenX: [particle.x, finalX],\n                    tweenY: [particle.y, finalY],\n                    tweenEase: this._style.pathEase,\n                    tweenDuration: life,\n                    keyTimes: this._style.pathKeyTimes,\n                    paused: false,\n                    callbackFunction: this.removeFromPool,\n                    callbackParams: [particle],\n                    callbackScope: null,\n                });\n            }\n        } else {\n            Tweens.positionTween(particle, {\n                tweenX: [particle.x, finalX],\n                tweenY: [particle.y, finalY],\n                tweenEase: this._style.pathEase,\n                tweenDuration: life,\n                keyTimes: this._style.pathKeyTimes,\n                paused: false,\n                callbackFunction: this.removeFromPool,\n                callbackParams: [particle],\n                callbackScope: null,\n            });\n        }\n    }\n\n    private addScaleBehaviour(particle: ImageElement | AnimationElement, life: number): void {\n        if (this._style.scaleValues != null) {\n            let scalePoints: Array<PIXI.Point> = [];\n            for (let i: number = 0; i < this._style.scaleValues.length; i++) {\n                let valueX: number = this._style.scaleValues[i].x;\n                let valueY: number = this._style.scaleValues[i].y;\n                if (this._style.scaleValues[i].randomX != null) {\n                    valueX += (Math.random() - 0.5) * this._style.scaleValues[i].randomX;\n                }\n                if (this._style.scaleValues[i].relative && scalePoints.length > 0) {\n                    valueX += scalePoints[scalePoints.length - 1].x;\n                }\n                if (this._style.scaleValues[i].y === null) {\n                    valueY = valueX;\n                } else {\n                    if (this._style.scaleValues[i].randomY != null) {\n                        valueY += (Math.random() - 0.5) * this._style.scaleValues[i].randomY;\n                    }\n                    if (this._style.scaleValues[i].relative && scalePoints.length > 0) {\n                        valueY += scalePoints[scalePoints.length - 1].y;\n                    }\n                }\n\n                scalePoints.push(new PIXI.Point(valueX, valueY));\n            }\n\n            if (scalePoints.length === 1) {\n                particle.scale.x = scalePoints[0].x;\n                particle.scale.y = scalePoints[0].y;\n            } else if (scalePoints.length > 1) {\n                Tweens.scaleTween(particle, {\n                    tweenValues: scalePoints,\n                    tweenEase: this._style.scaleEase,\n                    tweenDuration: life,\n                    keyTimes: this._style.scaleKeyTimes,\n                    paused: false,\n                });\n            }\n        }\n    }\n\n    private addRotationBehaviour(particle: ImageElement | AnimationElement, life: number): void {\n        if (this._style.rotationValues != null && this._style.rotationValues.length > 1) {\n            let points: Array<number> = [];\n            for (let i: number = 0; i < this._style.rotationValues.length; i++) {\n                if (this._style.rotationValues[i] != null && this._style.rotationValues[i].value != null) {\n                    let value: number = this._style.rotationValues[i].value;\n                    if (this._style.rotationValues[i].randomValue != null) {\n                        value += Math.floor((Math.random() - 0.5) * this._style.rotationValues[i].randomValue);\n                    }\n                    if (this._style.rotationValues[i].relative && points.length > 0) {\n                        value += points[points.length - 1];\n                    }\n                    points.push(value);\n                }\n            }\n\n            Tweens.rotationTween(particle, {\n                degrees: points,\n                tweenDuration: life,\n                tweenEase: this._style.rotationEase,\n                keyTimes: this._style.rotationKeyTimes,\n                paused: false,\n            });\n        }\n    }\n\n    private addAlphaBehaviour(particle: ImageElement | AnimationElement, life: number): void {\n        if (this._style.alphaValues != null) {\n            let alphas: Array<number> = [];\n            for (let i: number = 0; i < this._style.alphaValues.length; i++) {\n                if (this._style.alphaValues[i] != null && this._style.alphaValues[i].value != null) {\n                    let value: number = this._style.alphaValues[i].value;\n                    if (this._style.alphaValues[i].randomValue != null) {\n                        value += Math.floor((Math.random() - 0.5) * this._style.alphaValues[i].randomValue);\n                    }\n                    if (this._style.alphaValues[i].relative && alphas.length > 0) {\n                        value += alphas[alphas.length - 1];\n                    }\n                    alphas.push(value);\n                }\n            }\n            Tweens.alphaTween(particle, {\n                alphas: alphas,\n                tweenDuration: life,\n                tweenEase: this._style.alphaEase,\n                keyTimes: this._style.alphaKeyTimes,\n                paused: false,\n            });\n        }\n    }\n\n    //******************************************************************************************************************\n    //  GETTING PARTICLES\n    //******************************************************************************************************************\n\n    private addParticles(): void {\n        if (!this._stop) {\n            let tabActive = true;\n            if (document.visibilityState != null && document.visibilityState === \"hidden\") {\n                tabActive = false;\n            }\n\n            if (tabActive) {\n                this.getFromPool();\n            }\n\n            if (!this._stopping) {\n                this._timer.start(this._style.time);\n            }\n        }\n    }\n\n    private getFreeParticleIndex(): number {\n        for (let i: number = 0; i < this._pool.length; i++) {\n            if (!this._pool[i].usedInPool) {\n                return i;\n            }\n        }\n\n        return -1;\n    }\n\n    private getFromPool(): void {\n        let count = Math.floor(this._style.count * this._maxEmit);\n\n        for (let i: number = 0; i < count; i++) {\n            let particle: ImageElement | AnimationElement;\n            let index: number = this.getFreeParticleIndex();\n\n            // to keep pool ordered by usedInPool check if first element is usedInPool\n            // if yes, create new and push to pool\n            // if not, shift element, set usedInPool and push to pool\n            if (index == -1) {\n                particle = this.createParticle();\n\n                this._pool.push(particle);\n            } else {\n                particle = this._pool[index];\n            }\n\n            if (particle != null) {\n                particle.usedInPool = true;\n                this.setVisibility(particle, true);\n\n                if (this._preGenerate) {\n                    Tweens.restartTweens(particle.uid);\n                } else {\n                    Tweens.removeTweens(particle);\n                    this.setupPosition(particle);\n                    this.addBehaviour(particle);\n                }\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CONTROLS\n    //******************************************************************************************************************\n\n    start(emitOnce: boolean = false, startType: string = \"\"): void {\n        this.visible = true;\n\n        //if there is no style, there is no particles to emit\n        if (this._style != null) {\n            this._timer.stop();\n            this._emitOnce = emitOnce;\n            this._startType = startType;\n            this._stopping = emitOnce;\n            this._stop = false;\n            if (!this._emitOnce) {\n                this._timer.start(this._style.time);\n                if (this._startType === \"now\") {\n                    this.addParticles();\n                }\n            } else {\n                if (this._startType === \"now\") {\n                    this.addParticles();\n                } else {\n                    this._timer.start(this._style.time);\n                }\n            }\n        }\n    }\n\n    stopping(): void {\n        this._stopping = true;\n    }\n\n    stop(): void {\n        this._stopping = false;\n        this._stop = true;\n        this._timer.stop();\n        this.visible = false;\n    }\n\n    reset(): void {\n        for (let i: number = 0; i < this._pool.length; i++) {\n            this.setupPosition(this._pool[i]);\n            this.setVisibility(this._pool[i], false);\n        }\n    }\n\n    clear(): void {\n        this._stopping = false;\n        this._stop = true;\n        this._timer.stop();\n        this.visible = false;\n        this.removeAllFromPool();\n    }\n\n    //******************************************************************************************************************\n    //  REMOVING\n    //******************************************************************************************************************\n\n    private removeFromPool(particle: ImageElement | AnimationElement): void {\n        // this.setVisibility(particle, false);\n        particle.visible = false;\n        if (particle instanceof AnimationElement) {\n            particle.stop();\n        }\n        particle.usedInPool = false;\n    }\n\n    private removeAllFromPool(): void {\n        for (let i: number = 0; i < this._pool.length; i++) {\n            this.setVisibility(this._pool[i], false);\n            Tweens.removeTweens(this._pool[i]);\n            this._pool[i].usedInPool = false;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  HELPER\n    //******************************************************************************************************************\n\n    private getRandom(min: number, max: number): number {\n        return Math.random() * (max - min) + min;\n    }\n\n    //******************************************************************************************************************\n    //  CLONE\n    //******************************************************************************************************************\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return ParticleElement\n     */\n    clone(): ParticleElement {\n        let element: ParticleElement = new ParticleElement();\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n        element.visible = this.visible;\n        element._target = this._target;\n        element._blendMode = this._blendMode;\n        element._emitOnce = this._emitOnce;\n        element._preGenerate = this._preGenerate;\n        let node: Element = document.createElement(this.name);\n        node.setAttribute(\"Style2\", this._styleName);\n        element.create(node);\n        element._markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\nexport const ParticleElementAttributes = {\n    /**\n     * Blend mode for animation.\n     * Bleding modes:\n     *   0 = NORMAL;\n     *   1 = ADD;\n     *   2 = MULTIPLY;\n     *   3 = SCREEN;\n     *   4 = OVERLAY;\n     *   5 = DARKEN;\n     *   6 = LIGHTEN;\n     *   7 = COLOR_DODGE;\n     *   8 = COLOR_BURN;\n     *   9 = HARD_LIGHT;\n     *   10 = SOFT_LIGHT;\n     *   11 = DIFFERENCE;\n     *   12 = EXCLUSION;\n     *   13 = HUE;\n     *   14 = SATURATION;\n     *   15 = COLOR;\n     *   16 = LUMINOSITY;\n     * @property BlendMode\n     * @type number\n     * @default null\n     */\n    BLEND_MODE: \"BlendMode\",\n    DEBUG: \"Debug\",\n    /**\n     * Random start frame, when animation particles are used\n     */\n    RANDOM_START_FRAME: \"RandomStartFrame\",\n    SPEED: \"Speed\",\n    EMIT_ONCE: \"EmitOnce\",\n    START_TYPE: \"StartType\",\n    /**\n     * Setup particle position and tween after create, so Start function just restart already created tween\n     */\n    PRE_GENERATE: \"PreGenerate\",\n    /**\n     * How many particles in one fire will be used in percentage. Max 100%\n     */\n    MAX_EMIT: \"MaxEmit\",\n    // Tweens used in BaseElementParticle\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n\n    ROTATION_TWEEN: \"RotationTween\",\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\n\n    SCALE_TWEEN: \"ScaleTween\",\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\n    /**\n     * Style define animation. You can use one style on more than one place.\n     * Style for ParticleElement has to be instance of ParticleStyle.\n     * @property Style\n     * @type string\n     * @default null\n     */\n    STYLE: \"Style\",\n    STYLE2: \"Style2\",\n    EXTEND_STYLE: \"ExtendStyle\",\n    START: \"Start\",\n    STOPPING: \"Stopping\",\n    STOP: \"Stop\",\n    RESET: \"Reset\",\n    CLEAR: \"Clear\",\n    IMAGE: \"Image\",\n    /**\n     * Tint of animation. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n    ATTR_COUNT: \"Count\",\n    ATTR_TIME: \"Time\",\n    ATTR_MIN: \"Min\",\n    ATTR_MAX: \"Max\",\n    ATTR_FROM_FRAME: \"FromFrame\",\n    ATTR_IMAGES: \"Images\",\n    ATTR_TYPE: \"Type\",\n    ATTR_X: \"X\",\n    ATTR_Y: \"Y\",\n    ATTR_RANDOM_X: \"RandomX\",\n    ATTR_RANDOM_Y: \"RandomY\",\n    ATTR_WIDTH: \"Width\",\n    ATTR_HEIGHT: \"Height\",\n    ATTR_RADIUS: \"Radius\",\n    ATTR_POSITION_RADIUS: \"PositionRadius\",\n    ATTR_RANDOM_POSITION_ANGLE: \"RandomPositionAngle\",\n    ATTR_MIN_RADIUS: \"MinRadius\",\n    ATTR_INNER_RADIUS: \"InnerRadius\",\n    ATTR_ANGLE: \"Angle\",\n    ATTR_SHOW_ANGLE: \"ShowAngle\",\n    ATTR_VALUES: \"Values\",\n    ATTR_VALUE: \"Value\",\n    IMAGE_MASK: \"ImageMask\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ParticleElement.ts\n **/","import { Utils, StringUtils, ArrayUtils, Logger, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { StageController } from \"../../StageController\";\nimport { Tweens, ITweenable, TweensAttributes } from \"../../Effects/Tweens\";\nimport { IElement } from \"../Interfaces/IElement\";\nimport { ShapeElement } from \"./ShapeElement\";\nimport { Attributes } from \"../../../Utils/Attributes\";\nimport { TextElement } from \"../Texts/TextElement\";\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\n\n/**\n * ImageElement class is class which creates holder for image from resources. This image will be rendered to canvas.\n * Example:\n *   <ImageElement Class=\"ImageElement\" Image=\"[imageId]\" X=\"0\" Y=\"0\" />\n * @class ImageElement\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ImageElement extends PIXI.Sprite implements IElement, ITweenable {\n    static DynamicTint: string = \"ff0000\";\n\n    private _uid: string;\n    private _cache: boolean;\n    private _cloned: boolean;\n    private __destroyed: boolean;\n    private _tweenEngine: string;\n\n    private maskImage: ImageElement;\n    private maskImageName: string;\n    maskSprite: PIXI.Sprite;\n\n    usedInPool: boolean;\n\n    static _destroyOptions: PIXI.DestroyOptions = {\n        children: true,\n    };\n\n    zIndex: number = 0;\n\n    constructor(texture?: PIXI.Texture) {\n        super(texture);\n        this._cache = false;\n        this.usedInPool = false;\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\n\n        this.tint = 0xffffff;\n\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                this._uid = PerfDebug.generateElementUID(this);\n                PerfDebug.newElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    get tweenEngine(): string {\n        return this._tweenEngine;\n    }\n\n    set tweenEngine(engine: string) {\n        this._tweenEngine = engine;\n    }\n\n    public create(node: Element): void {\n        this.createByNode(node);\n        this.updateByNode(node);\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    createByNode(node: Element): void {\n        if (DEBUG) {\n            if (\n                node.hasAttribute(ImageElementAttributes.DEBUG) &&\n                node.getAttribute(ImageElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        // TODO only when creating new\n        // Tweens.removeTweens(this);\n        Tweens.removeTweens(this, \"alpha\");\n        Tweens.removeTweens(this, \"position\");\n        Tweens.removeTweens(this, \"rotation\");\n        Tweens.removeTweens(this, \"scale\");\n        Tweens.removeTweens(this, \"skew\");\n\n        if (this.name == null) {\n            this.name = node.nodeName;\n        }\n        //this.cacheAsBitmap = false;\n\n        if (node.hasAttribute(ImageElementAttributes.IMAGE)) {\n            // get loaded image from resources\n            this.texture = StageController.getTextureByResourceId(node.getAttribute(ImageElementAttributes.IMAGE));\n        } else if (node.hasAttribute(ImageElementAttributes.FROM_FRAME)) {\n            if (node.hasAttribute(ImageElementAttributes.FRAME)) {\n                let frame = parseInt(node.getAttribute(ImageElementAttributes.FRAME));\n                let frameStr = frame < 10 ? \"0\" + frame : frame;\n                this.texture = StageController.getTextureByResourceId(\n                    node.getAttribute(ImageElementAttributes.FROM_FRAME) + \"00\" + frameStr,\n                );\n            } else {\n                this.texture = StageController.getTextureByResourceId(\n                    node.getAttribute(ImageElementAttributes.FROM_FRAME),\n                );\n            }\n        } else if (node.hasAttribute(ImageElementAttributes.ANIMATION)) {\n            let frame: number = 0;\n            if (node.hasAttribute(ImageElementAttributes.FRAME)) {\n                frame = parseInt(node.getAttribute(ImageElementAttributes.FRAME));\n            }\n            let frameStr = frame < 10 ? \"0\" + frame : frame;\n\n            this.texture = StageController.getTextureByResourceId(\n                node.getAttribute(ImageElementAttributes.ANIMATION) + \"00\" + frameStr,\n            );\n        }\n\n        if (this.texture) {\n            if (node.hasAttribute(ImageElementAttributes.ANCHOR)) {\n                let anchorPoints = node.getAttribute(ImageElementAttributes.ANCHOR).split(\";\");\n\n                if (anchorPoints.length === 1) {\n                    this.anchor.x = parseFloat(anchorPoints[0]);\n                    this.anchor.y = parseFloat(anchorPoints[0]);\n                } else if (anchorPoints.length === 2) {\n                    this.anchor.x = parseFloat(anchorPoints[0]);\n                    this.anchor.y = parseFloat(anchorPoints[1]);\n                }\n            }\n        } else {\n            if (DEBUG) {\n                if (!(this.texture && this.texture.baseTexture)) {\n                    //this.log('ERROR no Image with name: ' + node.getAttribute(ImageElementAttributes.IMAGE));\n                    this.log(\"ERROR Image has no texture\");\n                }\n            }\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.TWEEN_ENGINE)) {\n            this._tweenEngine = node.getAttribute(ImageElementAttributes.TWEEN_ENGINE);\n        }\n\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.createElement(this, this.getDebugInfo());\n            }\n        }\n\n        this.updateByNode(node);\n    }\n\n    /**\n     * @param node\n     */\n    public updateByNode(node: Element): ImageElement {\n        if (!node) {\n            this.logError(\"No node specified for element update!\");\n            return;\n        }\n\n        if (DEBUG) {\n            if (\n                node.hasAttribute(ImageElementAttributes.DEBUG) &&\n                node.getAttribute(ImageElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        if (\n            !node.hasAttribute(ImageElementAttributes.TWEEN_PERSISTENT) ||\n            StringUtils.parseBoolean(node.getAttribute(ImageElementAttributes.TWEEN_PERSISTENT)) != true\n        ) {\n            Tweens.removeTweens(this);\n        }\n\n        this._cache = Attributes.assignBooleanAttribute(node, ImageElementAttributes.CACHE, this._cache);\n        this.visible = Attributes.assignBooleanAttribute(node, ImageElementAttributes.VISIBLE, this.visible);\n        this.alpha = Attributes.assignFloatAttribute(node, ImageElementAttributes.ALPHA, this.alpha);\n        this.blendMode = CustomUtils.getBlendMode(\n            this.getBlendModeByString(\n                Attributes.assignStringAttribute(node, ImageElementAttributes.BLEND_MODE, this.blendMode),\n            ),\n        );\n        this.pivot.x = Attributes.assignIntAttribute(node, ImageElementAttributes.PIVOT_X, this.pivot.x);\n        this.pivot.y = Attributes.assignIntAttribute(node, ImageElementAttributes.PIVOT_Y, this.pivot.y);\n\n        if (node.hasAttribute(ImageElementAttributes.ROTATION)) {\n            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(ImageElementAttributes.ROTATION)));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.START_ROTATION)) {\n            if (node.getAttribute(ImageElementAttributes.START_ROTATION) === ImageElementAttributes.START_ROTATION) {\n                this.rotation = Math.floor(Math.random() * 360) / 100;\n            }\n        }\n\n        this.position.x = Attributes.assignIntAttribute(node, ImageElementAttributes.X, this.position.x);\n        this.position.y = Attributes.assignIntAttribute(node, ImageElementAttributes.Y, this.position.y);\n\n        if (node.hasAttribute(ImageElementAttributes.SCALE_X)) {\n            this.scale.x = parseFloat(node.getAttribute(ImageElementAttributes.SCALE_X));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.SCALE_Y)) {\n            this.scale.y = parseFloat(node.getAttribute(ImageElementAttributes.SCALE_Y));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.SKEW_X)) {\n            this.skew.x = this.degrees2radians(parseFloat(node.getAttribute(ImageElementAttributes.SKEW_X)));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.SKEW_Y)) {\n            this.skew.y = this.degrees2radians(parseFloat(node.getAttribute(ImageElementAttributes.SKEW_Y)));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.SCALE)) {\n            this.scale.x = parseFloat(node.getAttribute(ImageElementAttributes.SCALE));\n            this.scale.y = parseFloat(node.getAttribute(ImageElementAttributes.SCALE));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.CLEAR_MASK)) {\n            if (this.maskSprite) {\n                this.removeChild(this.maskSprite);\n                this.maskSprite = null;\n            }\n            if (this.maskImage) {\n                this.removeChild(this.maskImage);\n                this.maskImage = null;\n            }\n            if (this.mask) {\n                this.mask = null;\n            }\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.MASK)) {\n            let next: Element = node.parentElement.firstElementChild;\n            while (next != null) {\n                if (next.nodeName === node.getAttribute(ImageElementAttributes.MASK)) {\n                    let doNotHide: boolean = next.getAttribute(ImageElementAttributes.SHOW_MASK) == \"true\";\n                    if (this.mask && this.maskImage) {\n                        next.setAttribute(\"Visible\", \"true\");\n                        this.maskImage.updateByNode(next);\n                        if (!doNotHide) {\n                            next.setAttribute(\"Visible\", \"false\");\n                        }\n                    } else {\n                        switch (next.getAttribute(\"Class\")) {\n                            case \"ImageElement\":\n                                this.maskImage = new ImageElement();\n                                next.setAttribute(\"Visible\", \"true\");\n                                this.maskImage.create(next);\n                                if (!doNotHide) {\n                                    next.setAttribute(\"Visible\", \"false\");\n                                }\n                                this.addChild(this.maskImage);\n                                this.mask = this.maskImage;\n                                break;\n                            default:\n                                let shapeElement: ShapeElement = new ShapeElement();\n                                shapeElement.create(next);\n                                this.mask = shapeElement;\n                                break;\n                        }\n                    }\n                }\n                next = next.nextElementSibling;\n            }\n\n            if (this.mask == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(ImageElementAttributes.MASK));\n                }\n            }\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.BITMAP_MASK)) {\n            let image = StageController.getTextureByResourceId(node.getAttribute(ImageElementAttributes.BITMAP_MASK));\n\n            if (image != null) {\n                this.maskSprite = new PIXI.Sprite(image);\n                if (node.hasAttribute(ImageElementAttributes.BITMAP_MASK_X)) {\n                    this.maskSprite.position.x = parseFloat(node.getAttribute(ImageElementAttributes.BITMAP_MASK_X));\n                }\n                if (node.hasAttribute(ImageElementAttributes.BITMAP_MASK_Y)) {\n                    this.maskSprite.position.y = parseFloat(node.getAttribute(ImageElementAttributes.BITMAP_MASK_Y));\n                }\n                if (!node.hasAttribute(ImageElementAttributes.BITMAP_MASK_SHOW)) {\n                    this.addChild(this.maskSprite);\n                    this.mask = this.maskSprite;\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\n                        \"ERROR\" +\n                            this.componentName +\n                            \" no image with name for mask: \" +\n                            node.getAttribute(ImageElementAttributes.BITMAP_MASK),\n                    );\n                }\n            }\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.TINT)) {\n            let spr: PIXI.Sprite;\n            if (node.getAttribute(ImageElementAttributes.TINT) === \"0\") {\n                this.tint = null;\n            } else if (node.getAttribute(ImageElementAttributes.TINT) === \"dynamic\") {\n                this.tint = parseInt(ImageElement.DynamicTint, 16);\n            } else {\n                this.tint = parseInt(node.getAttribute(ImageElementAttributes.TINT), 16);\n                if (this.children != null && this.children[0] != null && this.children[0] instanceof PIXI.Sprite) {\n                    spr = <PIXI.Sprite>this.children[0];\n                    spr.tint = this.tint;\n                }\n            }\n        } else {\n            //this.tint = 0xFFFFFF;\n        }\n\n        this.runPositionTween(node);\n        this.runScaleTween(node);\n        this.runRotationTween(node);\n        this.runAlphaTween(node);\n        this.runSkewTween(node);\n        this.runTintTween(node);\n        this.runTween(node);\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n\n        return this;\n    }\n\n    /**\n     * Runs the alpha tween\n     * @method runAlphaTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runAlphaTween(node: Element): boolean {\n        if (!node.hasAttribute(ImageElementAttributes.ALPHA_TWEEN)) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"alpha\");\n\n        let alphaTween: Array<number>;\n\n        let alphaTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            ImageElementAttributes.ALPHA_TWEEN_POSITION,\n            null,\n        );\n\n        if (alphaTweenPosition == ImageElementAttributes.ALPHA_TWEEN_POSITION_VALUE.RELATIVE) {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.ALPHA_TWEEN)).map(\n                (value) => value + this.alpha,\n            );\n        } else if (alphaTweenPosition == ImageElementAttributes.ALPHA_TWEEN_POSITION_VALUE.SMOOTH) {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.ALPHA_TWEEN));\n            if (alphaTween.length) {\n                alphaTween[0] = this.alpha;\n            }\n        } else {\n            alphaTween = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.ALPHA_TWEEN));\n        }\n\n        const alphas: Array<number> = alphaTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(node, ImageElementAttributes.ALPHA_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ImageElementAttributes.ALPHA_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(ImageElementAttributes.ALPHA_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(ImageElementAttributes.ALPHA_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ImageElementAttributes.ALPHA_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(ImageElementAttributes.ALPHA_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.ALPHA_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    /**\n     * Runs the position tween\n     * @method runPositionTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runPositionTween(node: Element): boolean {\n        if (\n            !node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_X) ||\n            !node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_Y)\n        ) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"position\");\n\n        let positionTweenX: Array<number>;\n        let positionTweenY: Array<number>;\n\n        let positionTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            ImageElementAttributes.POSITION_TWEEN_POSITION,\n            null,\n        );\n        if (positionTweenPosition === ImageElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_X)).map(\n                (value) => value + this.position.x,\n            );\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_Y)).map(\n                (value) => value + this.position.y,\n            );\n        } else if (positionTweenPosition == ImageElementAttributes.POSITION_TWEEN_POSITION_VALUE.SMOOTH) {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_X));\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_Y));\n            if (positionTweenX.length) {\n                positionTweenX[0] = this.position.x;\n            }\n            if (positionTweenY.length) {\n                positionTweenY[0] = this.position.y;\n            }\n        } else {\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_X));\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_Y));\n        }\n\n        const tweenX: Array<number> = positionTweenX || [];\n        const tweenY: Array<number> = positionTweenY || [];\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            ImageElementAttributes.POSITION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ImageElementAttributes.POSITION_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(ImageElementAttributes.POSITION_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ImageElementAttributes.POSITION_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_KEY_TIMES))\n            : null;\n\n        let bezierType: string;\n        let bezierCurviness: number;\n        let bezierPoints: Object;\n        let bezierObject: Object;\n\n        if (node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_BEZIER_POINTS)) {\n            bezierType = Attributes.assignStringAttribute(\n                node,\n                ImageElementAttributes.POSITION_TWEEN_BEZIER_TYPE,\n                \"thru\",\n            );\n            bezierCurviness = Attributes.assignIntAttribute(\n                node,\n                ImageElementAttributes.POSITION_TWEEN_BEZIER_CURVINESS,\n                1.0,\n            );\n            bezierPoints = this.formatPoints(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_BEZIER_POINTS));\n\n            if (bezierType && bezierCurviness && bezierPoints) {\n                bezierObject = { type: bezierType, curviness: bezierCurviness, values: bezierPoints };\n            }\n        }\n\n        Tweens.positionTween(this, {\n            bezier: bezierObject,\n            tweenX,\n            tweenY,\n            tweenEase,\n            tweenDuration,\n            tweenDelay,\n            tweenLoop,\n            keyTimes,\n        });\n    }\n\n    public runSkewTween(node: Element): boolean {\n        if (\n            !node.hasAttribute(ImageElementAttributes.SKEW_TWEEN_X) &&\n            !node.hasAttribute(ImageElementAttributes.SKEW_TWEEN_Y)\n        ) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"skew\");\n\n        let skewTweenX: Array<number>;\n        let skewTweenY: Array<number>;\n\n        let skewTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            ImageElementAttributes.SKEW_TWEEN_POSITION,\n            null,\n        );\n        if (skewTweenPosition === ImageElementAttributes.SKEW_TWEEN_POSITION_VALUE.RELATIVE) {\n            skewTweenX = node.hasAttribute(ImageElementAttributes.SKEW_TWEEN_X)\n                ? ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.SKEW_TWEEN_X)).map(\n                      (value) => Tweens.degrees2radians(value) + this.skew.x,\n                  )\n                : null;\n            skewTweenY = node.hasAttribute(ImageElementAttributes.SKEW_TWEEN_Y)\n                ? ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.SKEW_TWEEN_Y)).map(\n                      (value) => Tweens.degrees2radians(value) + this.skew.y,\n                  )\n                : null;\n        } else if (skewTweenPosition == ImageElementAttributes.SKEW_TWEEN_POSITION_VALUE.SMOOTH) {\n            skewTweenX = node.hasAttribute(ImageElementAttributes.SKEW_TWEEN_X)\n                ? ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.SKEW_TWEEN_X)).map((value) =>\n                      Tweens.degrees2radians(value),\n                  )\n                : null;\n            skewTweenY = node.hasAttribute(ImageElementAttributes.SKEW_TWEEN_Y)\n                ? ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.SKEW_TWEEN_Y)).map((value) =>\n                      Tweens.degrees2radians(value),\n                  )\n                : null;\n            if (skewTweenX && skewTweenX.length) {\n                skewTweenX[0] = this.skew.x;\n            }\n            if (skewTweenY && skewTweenY.length) {\n                skewTweenY[0] = this.skew.y;\n            }\n        } else {\n            skewTweenX = node.hasAttribute(ImageElementAttributes.SKEW_TWEEN_X)\n                ? ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.SKEW_TWEEN_X)).map((value) =>\n                      Tweens.degrees2radians(value),\n                  )\n                : null;\n            skewTweenY = node.hasAttribute(ImageElementAttributes.SKEW_TWEEN_Y)\n                ? ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.SKEW_TWEEN_Y)).map((value) =>\n                      Tweens.degrees2radians(value),\n                  )\n                : null;\n        }\n\n        const tweenX: Array<number> = skewTweenX || [];\n        const tweenY: Array<number> = skewTweenY || [];\n        const tweenEase: string = Attributes.assignStringAttribute(node, ImageElementAttributes.SKEW_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ImageElementAttributes.SKEW_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(ImageElementAttributes.SKEW_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(ImageElementAttributes.SKEW_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ImageElementAttributes.SKEW_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(ImageElementAttributes.SKEW_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.SKEW_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.skewTween(this, { tweenX, tweenY, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    /**\n     * Runs the rotation tween\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runRotationTween(node: Element): boolean {\n        if (!node.hasAttribute(ImageElementAttributes.ROTATION_TWEEN)) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"rotation\");\n\n        let rotationTween: Array<number>;\n\n        let rotationTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            ImageElementAttributes.ROTATION_TWEEN_POSITION,\n            null,\n        );\n        if (rotationTweenPosition == ImageElementAttributes.ROTATION_TWEEN_POSITION_VALUE.RELATIVE) {\n            rotationTween = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.ROTATION_TWEEN)).map(\n                (value) => value + Tweens.radians2degrees(this.rotation),\n            );\n        } else if (rotationTweenPosition == ImageElementAttributes.ROTATION_TWEEN_POSITION_VALUE.SMOOTH) {\n            rotationTween = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.ROTATION_TWEEN));\n            if (rotationTween.length) {\n                rotationTween[0] = Tweens.radians2degrees(this.rotation);\n            }\n        } else {\n            rotationTween = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.ROTATION_TWEEN));\n        }\n\n        const degrees: Array<number> = rotationTween || [];\n\n        const tweenEase: string = Attributes.assignStringAttribute(\n            node,\n            ImageElementAttributes.ROTATION_TWEEN_EASE,\n            null,\n        );\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ImageElementAttributes.ROTATION_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(ImageElementAttributes.ROTATION_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(ImageElementAttributes.ROTATION_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ImageElementAttributes.ROTATION_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(ImageElementAttributes.ROTATION_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.ROTATION_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    public runTintTween(node: Element): boolean {\n        if (!node.hasAttribute(ImageElementAttributes.TINT_TWEEN)) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"tint\");\n\n        let tintTween: Array<number>;\n\n        let tintTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            ImageElementAttributes.TINT_TWEEN_POSITION,\n            null,\n        );\n        if (tintTweenPosition == ImageElementAttributes.TINT_TWEEN_POSITION_VALUE.SMOOTH) {\n            tintTween = node\n                .getAttribute(ImageElementAttributes.TINT_TWEEN)\n                .split(\";\")\n                .map((value) => parseInt(value, 16));\n            if (tintTween.length) {\n                tintTween[0] = this.tint;\n            }\n        } else {\n            tintTween = node\n                .getAttribute(ImageElementAttributes.TINT_TWEEN)\n                .split(\";\")\n                .map((value) => parseInt(value, 16));\n        }\n\n        const tweenValues: Array<number> = tintTween || [];\n\n        const tween: string = \"tint\";\n        const tweenEase: string = Attributes.assignStringAttribute(node, ImageElementAttributes.TINT_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ImageElementAttributes.TINT_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(ImageElementAttributes.TINT_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(ImageElementAttributes.TINT_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ImageElementAttributes.TINT_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(ImageElementAttributes.TINT_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.TINT_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.colorTween(this, { tween, tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    /**\n     * Runs the scale tween\n     *\n     * @method runScaleTween\n     * @param node\n     * @returns {boolean}\n     */\n    public runScaleTween(node: Element): boolean {\n        if (\n            !node.hasAttribute(ImageElementAttributes.SCALE_TWEEN_X) &&\n            !node.hasAttribute(ImageElementAttributes.SCALE_TWEEN_Y) &&\n            !node.hasAttribute(ImageElementAttributes.SCALE_TWEEN)\n        ) {\n            return false;\n        }\n\n        Tweens.removeTweens(this, \"scale\");\n\n        let scaleTweenX: Array<number>;\n        let scaleTweenY: Array<number>;\n        let scaleTween: Array<PIXI.Point>;\n        let tweenValues: Array<PIXI.Point> = [];\n\n        if (node.hasAttribute(ImageElementAttributes.SCALE_TWEEN_X)) {\n            scaleTweenX = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.SCALE_TWEEN_X));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.SCALE_TWEEN_Y)) {\n            scaleTweenY = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.SCALE_TWEEN_Y));\n        }\n\n        if (node.hasAttribute(ImageElementAttributes.SCALE_TWEEN)) {\n            scaleTween = ImageElement._getPointsFromPointsAttribute(\n                node.getAttribute(ImageElementAttributes.SCALE_TWEEN),\n            ) as Array<PIXI.Point>;\n        }\n\n        let scaleTweenPosition: string = Attributes.assignStringAttribute(\n            node,\n            ImageElementAttributes.SCALE_TWEEN_POSITION,\n            null,\n        );\n\n        if (scaleTween && scaleTween.length) {\n            if (scaleTweenPosition == ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                tweenValues = scaleTween.map((value: PIXI.Point) => {\n                    return {\n                        x: value.x + this.scale.x,\n                        y: value.y + this.scale.y,\n                    } as PIXI.Point;\n                });\n            } else if (scaleTweenPosition == ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                tweenValues = scaleTween;\n                if (tweenValues.length) {\n                    tweenValues[0].x = this.scale.x;\n                    tweenValues[0].y = this.scale.y;\n                }\n            } else {\n                tweenValues = scaleTween;\n            }\n        } else if (scaleTweenX && scaleTweenY) {\n            if (scaleTweenX.length === scaleTweenY.length) {\n                if (scaleTweenPosition == ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                    tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                        return {\n                            x: scaleXValue + this.scale.x,\n                            y: scaleTweenY[i] + this.scale.y,\n                        } as PIXI.Point;\n                    });\n                } else if (scaleTweenPosition == ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                    tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                        return {\n                            x: scaleXValue,\n                            y: scaleTweenY[i],\n                        } as PIXI.Point;\n                    });\n                    if (tweenValues.length) {\n                        tweenValues[0].x = this.scale.x;\n                        tweenValues[0].y = this.scale.y;\n                    }\n                } else {\n                    tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                        return {\n                            x: scaleXValue,\n                            y: scaleTweenY[i],\n                        } as PIXI.Point;\n                    });\n                }\n            }\n        } else if (scaleTweenX) {\n            if (scaleTweenPosition == ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue + this.scale.x,\n                        y: this.scale.y,\n                    } as PIXI.Point;\n                });\n            } else if (scaleTweenPosition == ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue,\n                        y: this.scale.y,\n                    } as PIXI.Point;\n                });\n                if (tweenValues.length) {\n                    tweenValues[0].x = this.scale.x;\n                }\n            } else {\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\n                    return {\n                        x: scaleXValue,\n                        y: this.scale.y,\n                    } as PIXI.Point;\n                });\n            }\n        } else if (scaleTweenY) {\n            if (scaleTweenPosition == ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.RELATIVE) {\n                tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                    return {\n                        x: this.scale.x,\n                        y: scaleYValue + this.scale.y,\n                    } as PIXI.Point;\n                });\n            } else if (scaleTweenPosition == ImageElementAttributes.SCALE_TWEEN_POSITION_VALUE.SMOOTH) {\n                tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                    return {\n                        x: this.scale.x,\n                        y: scaleYValue,\n                    } as PIXI.Point;\n                });\n                if (tweenValues.length) {\n                    tweenValues[0].y = this.scale.y;\n                }\n            } else {\n                tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\n                    return {\n                        x: this.scale.x,\n                        y: scaleYValue,\n                    } as PIXI.Point;\n                });\n            }\n        } else {\n            return false;\n        }\n\n        const tweenEase: string = Attributes.assignStringAttribute(node, ImageElementAttributes.SCALE_TWEEN_EASE, null);\n        const tweenDuration: number = Attributes.assignIntAttribute(\n            node,\n            ImageElementAttributes.SCALE_TWEEN_DURATION,\n            120,\n        );\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(ImageElementAttributes.SCALE_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(ImageElementAttributes.SCALE_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n            node,\n            ImageElementAttributes.SCALE_TWEEN_LOOP,\n            null,\n        );\n        const keyTimes: Array<number> = node.hasAttribute(ImageElementAttributes.SCALE_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.SCALE_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    public runTween(node: Element): boolean {\n        if (node.hasAttribute(TweensAttributes.TWEEN)) {\n            let tweens: Array<string> = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN));\n\n            for (let i: number = 0; i < tweens.length; i++) {\n                //return if there are no values to tween\n                if (!node.hasAttribute(TweensAttributes.TWEEN_VALUES + i)) {\n                    return false;\n                }\n\n                const tweenValues: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_VALUES + i),\n                );\n                const tweenDuration: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_DURATION + i) || \"120\",\n                );\n                const tweenEase: Array<string> = ArrayUtils.stringArray(\n                    node.getAttribute(TweensAttributes.TWEEN_EASE + i) || \"linear\",\n                );\n                const tweenDelay: Array<number> = ArrayUtils.numberArray(\n                    node.getAttribute(TweensAttributes.TWEEN_DELAY + i) || \"0\",\n                );\n                const tweenLoop: boolean = Attributes.assignBooleanAttribute(\n                    node,\n                    TweensAttributes.TWEEN_LOOP + i,\n                    null,\n                );\n\n                let tween: string = tweens[i];\n\n                Tweens.removeTweens(this, tween);\n\n                if (tween == \"scale\") {\n                    tween = \"scale.x\";\n                    tweens[i] = \"scale.y\";\n                    i--;\n                }\n\n                Tweens.customTween(this, { tween, tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return ImageElement\n     */\n    clone(): ImageElement {\n        let element: ImageElement = new ImageElement();\n        element.removeChildren();\n\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.anchor = this.anchor;\n        element.tint = this.tint;\n        element.blendMode = this.blendMode;\n        element.name = this.name;\n        element._cache = this._cache;\n        element._tweenEngine = this._tweenEngine;\n\n        if (this.texture != null) {\n            element.texture = this.texture;\n        }\n\n        if (element._cache) {\n            //element.cacheAsBitmap = true;\n        } else {\n            //element.cacheAsBitmap = false;\n        }\n\n        if (this.maskSprite != null) {\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\n            elementMask.position.x = this.maskSprite.position.x;\n            elementMask.position.y = this.maskSprite.position.y;\n\n            element.maskSprite = elementMask;\n            element.addChild(elementMask);\n            element.mask = elementMask;\n        }\n        if (this.maskImage != null) {\n            element.maskImage = this.maskImage.clone();\n            element.addChild(element.maskImage);\n            element.mask = element.maskImage;\n        }\n\n        element.markAsCloned(); // must be called last before return!\n\n        return element;\n    }\n\n    /**\n     *\n     * @param options\n     */\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        Tweens.removeTweens(this, \"alpha\");\n        Tweens.removeTweens(this, \"position\");\n        Tweens.removeTweens(this, \"rotation\");\n        Tweens.removeTweens(this, \"scale\");\n        Tweens.removeTweens(this, \"skew\");\n\n        this.texture = null;\n    }\n\n    getDebugInfo(): string {\n        if (DEBUG) {\n            let debugInfoFn = this.debugInfo;\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\n        }\n        return \"\";\n    }\n\n    debugInfo(): string {\n        if (DEBUG) {\n            let result = `${this.uid}\\nName: [${this.name}]`;\n            let imgurl = this.texture && this.texture.baseTexture ? this.texture.baseTexture.imageUrl : \"\";\n            if (!StringUtils.isNullOrEmpty(imgurl)) {\n                result += \"\\nUrl: \" + imgurl;\n            }\n            return result;\n        }\n        return \"\";\n    }\n\n    /**\n     * @property cloned - indicates if element was cloned or not.\n     * @returns {boolean}\n     */\n    public get cloned(): boolean {\n        return this._cloned;\n    }\n\n    public get destroyed(): boolean {\n        return this.__destroyed;\n    }\n\n    /**\n     * @property uid - unique identifier of element.\n     * @returns {string}\n     */\n    public get uid(): string {\n        return this._uid;\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public get componentName(): string {\n        return (this as any).__componentName__;\n    }\n\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\n        this.assertDestroyed(\"destroy\");\n\n        if (Utils.isNullOrUndefined(options)) {\n            options = ImageElement._destroyOptions;\n        }\n\n        this.internalDestroy(options);\n\n        if (!Utils.isNullOrUndefined(this.children)) {\n            super.destroy(options);\n        }\n\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.destroy(this);\n            }\n        }\n\n        this.__destroyed = true;\n    }\n\n    protected assertDestroyed(method: string): void {\n        if (DEBUG) {\n            if (this.__destroyed) {\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\n            }\n        }\n    }\n\n    /**\n     * Converts string from \"points attribute\" into array of points. E.g. \"(1,6);(5,2);2;(2,4)\". Point can be specified as single value for both axex.\n     * @method _getPointsFromPointsAttribute\n     * @return Array<PIXI.Points>\n     */\n    private static _getPointsFromPointsAttribute(pointsString: string): Array<{ x: number; y: number }> {\n        if (!pointsString) {\n            return [];\n        }\n\n        return pointsString\n            .replace(/\\s/g, \"\")\n            .split(\";\")\n            .map((valuesPair: string) =>\n                /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair],\n            )\n            .map((valuesPair: Array<string>) => {\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\n            });\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    protected _markAsCloned(): void {\n        this.markAsCloned();\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    markAsCloned(): void {\n        this._assertDestroyed(\"markAsCloned()\");\n        this._cloned = true;\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.clone(this);\n\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     *\n     * @param method\n     * @private\n     */\n    protected _assertDestroyed(method: string): void {\n        if (DEBUG) {\n            if (this.__destroyed) {\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\n            }\n        }\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    removeAndDestroyChildren(): void {\n        this._removeAndDestroyChildren();\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    protected _removeAndDestroyChildren(): void {\n        this._assertDestroyed(\"_removeAndDestroyChildren\");\n\n        let destroyOptions: PIXI.DestroyOptions = {\n            children: true,\n        };\n\n        if (this.children != null && this.children.length > 0) {\n            for (let i = this.children.length - 1; i >= 0; i--) {\n                if (this.children[i] != null) {\n                    (this.children[i] as any).destroy(destroyOptions);\n                }\n            }\n        }\n\n        this.removeChildren();\n    }\n\n    /**\n     *\n     * @param degrees\n     * @returns {number}\n     */\n    public degrees2radians(degrees: number): number {\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     * Important! The WebGL renderer only supports the NORMAL, ADD, MULTIPLY and SCREEN blend modes.\n     * Anything else will silently act like NORMAL.\n     *\n     * @param mode\n     * @returns {number}\n     */\n    public getBlendModeByString(mode: string): number {\n        mode = mode.toString();\n        switch (mode) {\n            case \"0\":\n            case \"normal\":\n                return PIXI.BLEND_MODES.NORMAL;\n            case \"1\":\n            case \"add\":\n                return PIXI.BLEND_MODES.ADD;\n            case \"2\":\n            case \"multiply\":\n                return PIXI.BLEND_MODES.MULTIPLY;\n            case \"3\":\n            case \"screen\":\n                return PIXI.BLEND_MODES.SCREEN;\n            case \"4\":\n            case \"overlay\":\n                return PIXI.BLEND_MODES.OVERLAY;\n            case \"5\":\n            case \"darken\":\n                return PIXI.BLEND_MODES.DARKEN;\n            case \"6\":\n            case \"lighten\":\n                return PIXI.BLEND_MODES.LIGHTEN;\n            case \"7\":\n            case \"color_dodge\":\n                return PIXI.BLEND_MODES.COLOR_DODGE;\n            case \"8\":\n            case \"color_burn\":\n                return PIXI.BLEND_MODES.COLOR_BURN;\n            case \"9\":\n            case \"hard_light\":\n                return PIXI.BLEND_MODES.HARD_LIGHT;\n            case \"10\":\n            case \"soft_light\":\n                return PIXI.BLEND_MODES.SOFT_LIGHT;\n            case \"11\":\n            case \"difference\":\n                return PIXI.BLEND_MODES.DIFFERENCE;\n            case \"12\":\n            case \"exclusion\":\n                return PIXI.BLEND_MODES.EXCLUSION;\n            case \"13\":\n            case \"hue\":\n                return PIXI.BLEND_MODES.HUE;\n            case \"14\":\n            case \"saturation\":\n                return PIXI.BLEND_MODES.SATURATION;\n            case \"15\":\n            case \"color\":\n                return PIXI.BLEND_MODES.COLOR;\n            case \"16\":\n            case \"luminosity\":\n                return PIXI.BLEND_MODES.LUMINOSITY;\n            default:\n                if (DEBUG) {\n                    this.log(\"ERROR Unknown blending mode \" + mode + \". Used default mode NORMAL.\");\n                }\n                return PIXI.BLEND_MODES.NORMAL;\n        }\n    }\n\n    /**\n     * Prints output on screen inside element with specified debug content\n     */\n    protected _printDebugInfo(text: any, node?: Element) {\n        if (DEBUG) {\n            if (this.getChildByName(ImageElementAttributes.DEBUG_INFO) != null) {\n                this.removeChild(this.getChildByName(ImageElementAttributes.DEBUG_INFO));\n            }\n            if (\n                node == undefined ||\n                (node.hasAttribute(ImageElementAttributes.DEBUG_INFO) &&\n                    node.getAttribute(ImageElementAttributes.DEBUG_INFO) === \"true\")\n            ) {\n                // test\n                /*let border = new ShapeElement();\n                 border.beginFill(0xFFFFFF, 0);\n                 border.lineStyle(2, 0xff0000);\n                 border.drawRect(0, 0, this._textures[0].width, this._textures[0].height);\n                 this.addChild(border);*/\n\n                let textInfo = new TextElement();\n                textInfo.name = ImageElementAttributes.DEBUG_INFO;\n                textInfo.x = textInfo.y = 0;\n                textInfo.style.fill = 0xff0000;\n                textInfo.style.fontSize = 10;\n                textInfo.text = JSON.stringify(text, null, 4);\n\n                this.addChild(textInfo);\n            }\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    /**\n     * Log error into console\n     * @param s\n     */\n    protected logError(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.errorGroup(compName, s);\n        }\n    }\n\n    /**\n     *\n     * @param {string} value\n     * @param {string} id\n     * @param {boolean} useGlobal\n     * @returns {number}\n     */\n    private formatPoint(value: string, id: string, useGlobal: boolean = false): number {\n        let result: number;\n        if (value == \"c\") {\n            result = this[id];\n        } else {\n            if (useGlobal) {\n                result = this[id] + (parseInt(value) - this.getGlobalPosition()[id]);\n            } else {\n                result = parseInt(value);\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     *\n     * @param {string} points\n     * @param {boolean} useGlobal\n     * @returns {Array<PIXI.Point>}\n     */\n    private formatPoints(points: string, useGlobal: boolean = false): Array<Object> {\n        let result: Array<Object> = [];\n        let regex = /\\[(.*?)\\]/g;\n        let data = points.match(regex);\n\n        for (let i: number = 0; i < data.length; i++) {\n            let pointArray = data[i].substring(1, data[i].length - 1).split(\",\");\n\n            if (pointArray.length == 2) {\n                let x = this.formatPoint(pointArray[0], \"x\", useGlobal);\n                let y = this.formatPoint(pointArray[1], \"y\", useGlobal);\n\n                //let point: PIXI.Point = new PIXI.Point(x, y);\n                let objectPoint: Object = { x: x, y: y };\n                result.push(objectPoint);\n            }\n        }\n\n        return result;\n    }\n}\n\nexport const ImageElementAttributes = {\n    /*\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n     * @property Alpha\n     * @type Number\n     * @default 1\n     */\n    ALPHA: \"Alpha\",\n    ALPHA_TWEEN: \"AlphaTween\",\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\n    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\n    /* Array of offsets of individual tween values relative to total duration\n     * e.g. 0;0.25;1 with duration 100 meaning first value at T=0, second at T=25, last at T=100\n     */\n    ALPHA_TWEEN_KEY_TIMES: \"AlphaTweenKeyTimes\",\n    ALPHA_TWEEN_POSITION: \"AlphaTweenPosition\",\n    ALPHA_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\" /* values are taken as they are */,\n        RELATIVE: \"relative\" /* values are offset by initial value */,\n        SMOOTH: \"smooth\" /* first value is replaced with initial value */,\n    },\n    ANCHOR: \"Anchor\",\n    /**\n     * Target animation from where is specific frame selected. Attribute Frame=\"?\" needed.\n     */\n    ANIMATION: \"Animation\",\n    /**\n     * A ImageElement instance that defines a mask for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property BitmapMask\n     * @type string\n     * @default null\n     */\n    BITMAP_MASK: \"BitmapMask\",\n    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\n    BITMAP_MASK_X: \"BitmapMaskX\",\n    BITMAP_MASK_Y: \"BitmapMaskY\",\n    /*\n     * Blend mode for animation.\n     * Bleding modes:\n     *   0 = NORMAL;\n     *   1 = ADD;\n     *   2 = MULTIPLY;\n     *   3 = SCREEN;\n     *   4 = OVERLAY;\n     *   5 = DARKEN;\n     *   6 = LIGHTEN;\n     *   7 = COLOR_DODGE;\n     *   8 = COLOR_BURN;\n     *   9 = HARD_LIGHT;\n     *   10 = SOFT_LIGHT;\n     *   11 = DIFFERENCE;\n     *   12 = EXCLUSION;\n     *   13 = HUE;\n     *   14 = SATURATION;\n     *   15 = COLOR;\n     *   16 = LUMINOSITY;\n     * @property BlendMode\n     * @type number\n     * @default null\n     */\n    BLEND_MODE: \"BlendMode\",\n    /*\n     * If true cache image as bitmap.\n     * @property Cache\n     * @type boolean\n     * @default null\n     */\n    CACHE: \"Cache\",\n    DEBUG_INFO: \"DebugInfo\",\n    DEBUG: \"Debug\",\n\n    FRAME: \"Frame\",\n\n    FROM_FRAME: \"FromFrame\",\n    /**\n     * Reference to image from resources.\n     * @property Image\n     * @type string\n     * @default 0\n     */\n    IMAGE: \"Image\",\n    /*\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\n     * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n     * @property Mask\n     * @type ShapeElement\n     * @default null\n     */\n    MASK: \"Mask\",\n\n    CLEAR_MASK: \"ClearMask\",\n    SHOW_MASK: \"ShowMask\",\n    /*\n     * X pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotX\n     * @type number\n     * @default null\n     */\n    PIVOT_X: \"PivotX\",\n    /*\n     * Y pivot for container. Used mainly for scale tweening and rotation.\n     * @property PivotY\n     * @type number\n     * @default null\n     */\n    PIVOT_Y: \"PivotY\",\n    POSITION_TWEEN_X: \"PositionTweenX\",\n    POSITION_TWEEN_Y: \"PositionTweenY\",\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\n    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\n    POSITION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n        SMOOTH: \"smooth\",\n    },\n    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\n    /* Array of offsets of individual tween values relative to total duration\n     * e.g. 0;0.25;1 with duration 100 meaning first value at T=0, second at T=25, last at T=100\n     */\n    POSITION_TWEEN_KEY_TIMES: \"PositionTweenKeyTimes\",\n    /**\n     * Bezier's \"type\" of curve\n     * VALUES:\n     *      thru\n     *      soft\n     *      quadratic\n     *      cubic\n     * EXAMPLE:\n     *      PositionTweenBezierType=\"thru\"\n     * WARNING:\n     *      it is necessary to have 2 \"X\" position values and 1 \"Y\" for correct Bezier function\n     *      for example, ' PositionTweenX=\"960;960\"  PositionTweenY=\"540\" '\n     * @property PositionTweenBezierType\n     * @default thru\n     */\n    POSITION_TWEEN_BEZIER_TYPE: \"PositionTweenBezierType\",\n    /**\n     * the tension on the Bezier\n     * VALUES:\n     *      0 has no curviness (straight lines),\n     *      1 is normal curviness,\n     *      2 is twice the normal curviness,\n     *      etc. Use any number, not just integers\n     * EXAMPLE:\n     *      PositionTweenBezierCurviness=\"1.25\"\n     * WARNING:\n     *      it is necessary to have 2 \"X\" position values and 1 \"Y\" for correct Bezier function\n     *      for example, ' PositionTweenX=\"960;960\"  PositionTweenY=\"540\" '\n     * @property PositionTweenBezierCurviness\n     * @default 1.0\n     */\n    POSITION_TWEEN_BEZIER_CURVINESS: \"PositionTweenBezierCurviness\",\n    /**\n     * Array points, pairs of X,Y coords for movement along the bezier curve\n     * EXAMPLE:\n     *                                   x   y     x  y    x   y\n     *      PositionTweenBezierPoints=\"[100,250];[300,0];[500,400]\"\n     * WARNING:\n     *      it is necessary to have 2 \"X\" position values and 1 \"Y\" for correct Bezier function\n     *      for example, ' PositionTweenX=\"960;960\"  PositionTweenY=\"540\" '\n     * @property PositionTweenBezierPoints\n     * @default null\n     */\n    POSITION_TWEEN_BEZIER_POINTS: \"PositionTweenBezierPoints\",\n    /*\n     * Rotation in degrees for this display object.\n     * @property Rotation\n     * @type Number\n     * @default 0\n     */\n    ROTATION: \"Rotation\",\n    ROTATION_TWEEN: \"RotationTween\",\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\n    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\n    /* Array of offsets of individual tween values relative to total duration\n     * e.g. 0;0.25;1 with duration 100 meaning first value at T=0, second at T=25, last at T=100\n     */\n    ROTATION_TWEEN_KEY_TIMES: \"RotationTweenKeyTimes\",\n    ROTATION_TWEEN_POSITION: \"RotationTweenPosition\",\n    ROTATION_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\" /* values are taken as they are */,\n        RELATIVE: \"relative\" /* values are offset by initial value */,\n        SMOOTH: \"smooth\" /* first value is replaced with initial value */,\n    },\n    /**\n     *\n     */\n    SCALE_TWEEN: \"ScaleTween\",\n    SCALE_TWEEN_X: \"ScaleTweenX\",\n    SCALE_TWEEN_Y: \"ScaleTweenY\",\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\n    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\n    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\n    /* Array of offsets of individual tween values relative to total duration\n     * e.g. 0;0.25;1 with duration 100 meaning first value at T=0, second at T=25, last at T=100\n     */\n    SCALE_TWEEN_KEY_TIMES: \"ScaleTweenKeyTimes\",\n    SCALE_TWEEN_POSITION: \"ScaleTweenPosition\",\n    SCALE_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\" /* values are taken as they are */,\n        RELATIVE: \"relative\" /* values are offset by initial value */,\n        SMOOTH: \"smooth\" /* first value is replaced with initial value */,\n    },\n    /*\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n     * @property Scale\n     * @type Number\n     * @default 1\n     */\n    SCALE: \"Scale\",\n    SCALE_X: \"ScaleX\",\n    /*\n     * The factor to stretch this display object vertically.\n     * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n     * @property ScaleY\n     * @type Number\n     * @default 1\n     */\n    SCALE_Y: \"ScaleY\",\n\n    SKEW_X: \"SkewX\",\n    SKEW_Y: \"SkewY\",\n\n    SKEW_TWEEN_X: \"SkewTweenX\",\n    SKEW_TWEEN_Y: \"SkewTweenY\",\n    SKEW_TWEEN_EASE: \"SkewTweenEase\",\n    SKEW_TWEEN_DURATION: \"SkewTweenDuration\",\n    SKEW_TWEEN_DELAY: \"SkewTweenDelay\",\n    SKEW_TWEEN_POSITION: \"SkewTweenPosition\",\n    SKEW_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        RELATIVE: \"relative\",\n        SMOOTH: \"smooth\",\n    },\n    SKEW_TWEEN_LOOP: \"SkewTweenLoop\",\n    SKEW_TWEEN_KEY_TIMES: \"SkewTweenKeyTimes\",\n\n    /*\n     * Random rotation in degrees for this display object.\n     * @property StartRotation\n     * @type Number\n     * @default null\n     */\n    START_ROTATION: \"StartRotation\",\n    /*\n     * Tint of image. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n\n    TINT_TWEEN: \"TintTween\",\n    TINT_TWEEN_EASE: \"TintTweenTease\",\n    TINT_TWEEN_DURATION: \"TintTweenDuration\",\n    TINT_TWEEN_DELAY: \"TintTweenDelay\",\n    TINT_TWEEN_POSITION: \"TintTweenPosition\",\n    TINT_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        SMOOTH: \"smooth\",\n    },\n    TINT_TWEEN_LOOP: \"TintTweenLoop\",\n    TINT_TWEEN_KEY_TIMES: \"TintTweenKeyTimes\",\n\n    TWEEN_ENGINE: \"TweenEngine\",\n    /*\n     * Indicates currently running tweens should not be interrupted during updateByNode call\n     * @property TweenPersistent\n     * @type Boolean\n     * @default false\n     */\n    TWEEN_PERSISTENT: \"TweenPersistent\",\n    VISIBLE: \"Visible\",\n    /*\n     * X (horizontal) position of the display object, relative to its parent.\n     * @property X\n     * @type Number\n     * @default 0\n     */\n    X: \"X\",\n    /*\n     * Y (vertical) position of the display object, relative to its parent.\n     * @property Y\n     * @type Number\n     * @default 0\n     */\n    Y: \"Y\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ImageElement.ts\n **/","import { ArrayUtils, engineComponent, StringUtils } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { StageController } from \"../../StageController\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { ParticleElementAttributes } from \"../Graphics/ParticleElement\";\n\nexport interface IZoneOptions {\n    type: string;\n    x?: number;\n    y?: number;\n    width?: number;\n    height?: number;\n    innerWidth?: number;\n    innerHeight?: number;\n    radius?: number;\n    minRadius?: number;\n    radiusB?: number;\n    minRadiusB?: number;\n    innerRadius?: number;\n    minInnerRadius?: number;\n    innerRadiusB?: number;\n    minInnerRadiusB?: number;\n    innerX?: number;\n    innerY?: number;\n    angle?: number;\n    startAngle?: number;\n}\n\nexport interface ICoordinateOptions1D {\n    value?: number;\n    randomValue?: number;\n    relative?: boolean;\n}\n\nexport interface ICoordinateOptions2D {\n    x?: number;\n    y?: number;\n    randomX?: number;\n    randomY?: number;\n    relative?: boolean;\n}\n\n@engineComponent(ComponentTypes.Style)\n// TODO add comments\nexport class ParticleStyle extends Style {\n    // value in percentage for creating reserv in display list to pooling particles\n    static ElementsReserve: number = 0.5;\n\n    // names for zones\n    static ZoneRectangle: string = \"Rectangle\";\n    static ZoneLine: string = \"Line\";\n    static ZoneEllipse: string = \"Ellipse\";\n    static ZoneTarget: string = \"Target\";\n    static ZoneDynamic: string = \"Dynamic\";\n\n    static NodeCount: string = \"Count\";\n    static NodeLife: string = \"Life\";\n    static NodeImages: string = \"Images\";\n    static NodePosition: string = \"Position\";\n    static NodePath: string = \"Path\";\n    static NodeScale: string = \"Scale\";\n    static NodeRotation: string = \"Rotation\";\n    static NodeAlpha: string = \"Alpha\";\n    static NodeValue: string = \"Value\";\n\n    // TODO possible memory leak\n    node: Element;\n\n    private _count: number;\n    private _time: number;\n    private _minLife: number;\n    private _maxLife: number;\n    private _images: Array<string>;\n    private _randomStartFrame: boolean;\n    private _subParticleStyle: string;\n    private _positionZone: IZoneOptions;\n\n    private _pathEase: string;\n    private _pathValues: Array<ICoordinateOptions2D>;\n    private _pathKeyTimes: Array<number>;\n\n    private _scaleEase: string;\n    private _scaleValues: Array<ICoordinateOptions2D>;\n    private _scaleKeyTimes: Array<number>;\n\n    private _rotationEase: string;\n    private _rotationValues: Array<ICoordinateOptions1D>;\n    private _rotationKeyTimes: Array<number>;\n\n    private _alphaEase: string;\n    private _alphaValues: Array<ICoordinateOptions1D>;\n    private _alphaKeyTimes: Array<number>;\n\n    private _tint: number;\n\n    constructor() {\n        super();\n\n        this._count = 1;\n        this._time = 60;\n        this._minLife = 60;\n        this._maxLife = 120;\n        this._images = [];\n        this._randomStartFrame = false;\n        this._subParticleStyle = \"\";\n        this._positionZone = {\n            type: ParticleStyle.ZoneRectangle,\n            x: 0,\n            y: 0,\n            innerX: 0,\n            innerY: 0,\n            width: StageController.Width,\n            height: StageController.Height,\n            innerWidth: -1,\n            innerHeight: -1,\n            radius: 0,\n            minRadius: 0,\n            radiusB: 0,\n            minRadiusB: 0,\n            innerRadius: 0,\n            minInnerRadius: 0,\n            innerRadiusB: 0,\n            minInnerRadiusB: 0,\n            angle: 360,\n            startAngle: 0, //used to prevent container rotation deformation with ellipse\n        };\n        this._pathEase = \"linear\";\n        this._pathValues = [];\n        this._pathKeyTimes = null;\n\n        this._scaleEase = \"linear\";\n        this._scaleValues = [];\n        this._scaleKeyTimes = null;\n\n        this._rotationEase = \"linear\";\n        this._rotationValues = [];\n        this._rotationKeyTimes = null;\n\n        this._alphaEase = \"linear\";\n        this._alphaValues = [];\n        this._alphaKeyTimes = null;\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element) {\n        this.node = node;\n\n        super.create(node);\n\n        if (node.hasAttribute(ParticleElementAttributes.EXTEND_STYLE)) {\n            let extendStyle: ParticleStyle = <ParticleStyle>(\n                StyleManager.Styles[node.getAttribute(ParticleElementAttributes.EXTEND_STYLE)]\n            );\n            if (extendStyle != null && extendStyle.node != null) {\n                this.parseChildrenNodes(extendStyle.node);\n            }\n        }\n\n        this.parseChildrenNodes(node);\n    }\n\n    private parseChildrenNodes(node: Element): void {\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            switch (next.nodeName) {\n                case ParticleStyle.NodeCount:\n                    this.initializeCount(next);\n                    break;\n                case ParticleStyle.NodeLife:\n                    this.initializeLife(next);\n                    break;\n                case ParticleStyle.NodeImages:\n                    this.initializeImages(next);\n                    break;\n                case ParticleStyle.NodePosition:\n                    this.initializePosition(next);\n                    break;\n                case ParticleStyle.NodePath:\n                    this.initializePath(next);\n                    break;\n                case ParticleStyle.NodeScale:\n                    this.initializeScale(next);\n                    break;\n                case ParticleStyle.NodeRotation:\n                    this.initializeRotation(next);\n                    break;\n                case ParticleStyle.NodeAlpha:\n                    this.initializeAlpha(next);\n                    break;\n                default:\n                    if (DEBUG) {\n                        this.log(\"WARNING unknown node in particle style \" + next.nodeName);\n                    }\n            }\n            next = next.nextElementSibling;\n        }\n    }\n\n    get count(): number {\n        return this._count;\n    }\n\n    get time(): number {\n        return this._time;\n    }\n\n    get minLife(): number {\n        return this._minLife;\n    }\n\n    get maxLife(): number {\n        return this._maxLife;\n    }\n\n    get images(): Array<string> {\n        return this._images;\n    }\n\n    get randomStartFrame(): boolean {\n        return this._randomStartFrame;\n    }\n\n    get subParticleStyle(): string {\n        return this._subParticleStyle;\n    }\n\n    get positionZone(): IZoneOptions {\n        return this._positionZone;\n    }\n\n    get pathValues(): Array<ICoordinateOptions2D> {\n        return this._pathValues;\n    }\n\n    get scaleValues(): Array<ICoordinateOptions2D> {\n        return this._scaleValues;\n    }\n\n    get rotationValues(): Array<ICoordinateOptions1D> {\n        return this._rotationValues;\n    }\n\n    get alphaValues(): Array<ICoordinateOptions1D> {\n        return this._alphaValues;\n    }\n\n    get pathEase(): string {\n        return this._pathEase;\n    }\n\n    get scaleEase(): string {\n        return this._scaleEase;\n    }\n\n    get rotationEase(): string {\n        return this._rotationEase;\n    }\n\n    get alphaEase(): string {\n        return this._alphaEase;\n    }\n\n    get pathKeyTimes(): Array<number> {\n        return this._pathKeyTimes;\n    }\n\n    get scaleKeyTimes(): Array<number> {\n        return this._scaleKeyTimes;\n    }\n\n    get rotationKeyTimes(): Array<number> {\n        return this._rotationKeyTimes;\n    }\n\n    get alphaKeyTimes(): Array<number> {\n        return this._alphaKeyTimes;\n    }\n\n    calculateElements(): number {\n        let elementsPerSecond: number = (StageController.FPS / this._time) * this._count;\n        let elementsWithLife: number = (this._maxLife / StageController.FPS) * elementsPerSecond;\n        return elementsWithLife;\n    }\n\n    /**\n     * Initialize elements per second.\n     * Count - how much elements\n     * Time - time when specified count of elements is generated\n     *\n     * Example:\n     *  <Count Count=\"8\" Time=\"2\"/>\n     * @param node\n     */\n    private initializeCount(node: Element): void {\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_COUNT)) {\n            this._count = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_COUNT));\n        }\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_TIME)) {\n            this._time = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_TIME));\n        }\n    }\n\n    /**\n     * Example:\n     *  <Life Min=\"500\" Max=\"1000\"/>\n     * @param node\n     */\n    private initializeLife(node: Element): void {\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN)) {\n            this._minLife = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_MIN));\n        }\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_MAX)) {\n            this._maxLife = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_MAX));\n        }\n\n        if (this._minLife > this._maxLife) {\n            this._maxLife = this._minLife;\n        }\n    }\n\n    /**\n     * Example:\n     *  <Images Images=\"GFX_particle1;GFX_particle2;...\"/>\n     * @param node\n     */\n    private initializeImages(node: Element): void {\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_FROM_FRAME)) {\n            this._images = node.getAttribute(ParticleStyleAttributes.ATTR_FROM_FRAME).split(\";\");\n\n            for (let i: number = 0; i < this._images.length; i++) {\n                // TODO 0000\n                this._images[i] = this._images[i] + \"0000\";\n            }\n        } else if (node.hasAttribute(ParticleStyleAttributes.ATTR_IMAGES)) {\n            this._images = node.getAttribute(ParticleStyleAttributes.ATTR_IMAGES).split(\";\");\n        }\n\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_START_FRAME)) {\n            this._randomStartFrame = StringUtils.parseBoolean(\n                node.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_START_FRAME),\n            );\n        }\n\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_SUB_PARTICLE_STYLE)) {\n            this._subParticleStyle = node.getAttribute(ParticleStyleAttributes.ATTR_SUB_PARTICLE_STYLE);\n        }\n    }\n\n    /**\n     * Bornplace of elements.\n     * Example:\n     *  <Position Type=\"Rectangle\" X=\"0\" Y=\"-100\" Width=\"288\" Height=\"1080\"/>\n     * @param node\n     */\n    private initializePosition(node: Element): void {\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_TYPE)) {\n            this._positionZone.type = node.getAttribute(ParticleStyleAttributes.ATTR_TYPE);\n            switch (this._positionZone.type) {\n                case ParticleStyle.ZoneRectangle:\n                    // TODO separate method get Zone\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\n                        this._positionZone.x = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_X));\n                        this._positionZone.innerX = this._positionZone.x;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\n                        this._positionZone.y = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_Y));\n                        this._positionZone.innerY = this._positionZone.y;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_X)) {\n                        this._positionZone.innerX = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_X));\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_Y)) {\n                        this._positionZone.innerY = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_Y));\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_WIDTH)) {\n                        this._positionZone.width = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_WIDTH));\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_HEIGHT)) {\n                        this._positionZone.height = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_HEIGHT));\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_WIDTH)) {\n                        this._positionZone.innerWidth = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_INNER_WIDTH),\n                        );\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_HEIGHT)) {\n                        this._positionZone.innerHeight = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_INNER_HEIGHT),\n                        );\n                    }\n                    break;\n                case ParticleStyle.ZoneTarget:\n                    this._positionZone.width = 0;\n                    this._positionZone.height = 0;\n\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_WIDTH)) {\n                        this._positionZone.width = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_WIDTH));\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_HEIGHT)) {\n                        this._positionZone.height = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_HEIGHT));\n                    }\n\n                    break;\n                case ParticleStyle.ZoneDynamic:\n                    break;\n                case ParticleStyle.ZoneLine:\n                    // TODO\n                    break;\n                case ParticleStyle.ZoneEllipse:\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\n                        this._positionZone.x = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_X));\n                        this._positionZone.innerX = this._positionZone.x;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\n                        this._positionZone.y = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_Y));\n                        this._positionZone.innerY = this._positionZone.y;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_X)) {\n                        this._positionZone.innerX = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_X));\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_Y)) {\n                        this._positionZone.innerY = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_Y));\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_RADIUS)) {\n                        let radius = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_RADIUS));\n                        //set all attributes by radius, if we have only circle with no minRadius\n                        this._positionZone.radius = radius;\n                        this._positionZone.radiusB = radius;\n                        this._positionZone.minRadius = radius;\n                        this._positionZone.minRadiusB = radius;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS)) {\n                        this._positionZone.minRadius = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS),\n                        );\n                        this._positionZone.minRadiusB = this._positionZone.minRadius;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_RADIUS_B)) {\n                        this._positionZone.radiusB = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_RADIUS_B),\n                        );\n                        this._positionZone.minRadiusB = this._positionZone.radiusB;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS_B)) {\n                        this._positionZone.minRadiusB = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS_B),\n                        );\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS)) {\n                        let innerRadius = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS));\n                        this._positionZone.innerRadius = innerRadius;\n                        this._positionZone.innerRadiusB = innerRadius;\n                        this._positionZone.minInnerRadius = innerRadius;\n                        this._positionZone.minInnerRadiusB = innerRadius;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS)) {\n                        this._positionZone.minInnerRadius = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS),\n                        );\n                        this._positionZone.minInnerRadiusB = this._positionZone.minInnerRadius;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS_B)) {\n                        this._positionZone.innerRadiusB = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS_B),\n                        );\n                        this._positionZone.minInnerRadiusB = this._positionZone.innerRadiusB;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS_B)) {\n                        this._positionZone.minInnerRadiusB = parseFloat(\n                            node.getAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS_B),\n                        );\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_START_ANGLE)) {\n                        let startAngle = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_START_ANGLE));\n                        this._positionZone.startAngle = startAngle;\n                    }\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_ANGLE)) {\n                        let angle = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_ANGLE));\n                        this._positionZone.angle = angle;\n                    }\n                    break;\n                default:\n                    if (DEBUG) {\n                        this.log(\"WARNING unknown zone \" + this._positionZone.type);\n                    }\n            }\n        }\n    }\n\n    /**\n     * Initialize movement from defined start points to end points with possible random range.\n     * Example:\n     *  <Path Ease=\"circOut\" KeyTimes=\"0;0.4;1\">\n     *      <Value X=\"0\" Y=\"0\"/>\n     *      <Value X=\"0\" Y=\"-100\"/>\n     *      <Value X=\"100\" Y=\"-100\" RandomX=\"100\" RandomY=\"-100\"/>\n     *  </Path>\n     * @param node\n     */\n    private initializePath(node: Element): void {\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_EASE)) {\n            this._pathEase = node.getAttribute(ParticleStyleAttributes.ATTR_EASE);\n        }\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES)) {\n            this._pathKeyTimes = ArrayUtils.numberArray(node.getAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES));\n        }\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            if (next.nodeName === ParticleStyle.NodeValue) {\n                let path: ICoordinateOptions2D = { x: null, y: null, randomX: null, randomY: null, relative: false };\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\n                    path.x = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_X));\n                } else {\n                    path.x = 0;\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\n                    path.y = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_Y));\n                } else {\n                    path.y = 0;\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_X)) {\n                    path.randomX = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_X));\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_Y)) {\n                    path.randomY = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_Y));\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RELATIVE)) {\n                    path.relative = StringUtils.parseBoolean(next.getAttribute(ParticleStyleAttributes.ATTR_RELATIVE));\n                }\n                this._pathValues.push(path);\n            }\n            next = next.nextElementSibling;\n        }\n    }\n\n    /**\n     * Scale of object.\n     * Example:\n     *  <Scale Ease=\"circOut\" KeyTimes=\"0;0.75;1\">\n     *      <Value X=\"0.5\" Y=\"0.5\" RandomX=\"0.2\"/> (X between 0.5 and 0.7, Y=0.5)\n     *      <Value Value=\"0.6\" RandomValue=\"0.2\"/> (both identical, between 0.6 and 0.8)\n     *      <Value  X=\"0.5\" Y=\"0.5\" RandomX=\"0.2\" RandomY=\"0.2\"/> (both independent between 0.5 and 0.7)\n     *  </Scale>\n     * @param node\n     */\n    private initializeScale(node: Element): void {\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_EASE)) {\n            this._scaleEase = node.getAttribute(ParticleStyleAttributes.ATTR_EASE);\n        }\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES)) {\n            this._scaleKeyTimes = ArrayUtils.numberArray(node.getAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES));\n        }\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            if (next.nodeName === ParticleStyle.NodeValue) {\n                let coordinates: ICoordinateOptions2D = {\n                    x: null,\n                    y: null,\n                    randomX: null,\n                    randomY: null,\n                    relative: false,\n                };\n\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUES)) {\n                    let arr = ArrayUtils.numberArray(next.getAttribute(ParticleStyleAttributes.ATTR_VALUES));\n                    if (arr.length > 1) {\n                        coordinates.x = (arr[1] - arr[0]) / 2 + arr[0];\n                        coordinates.randomX = arr[1] - arr[0];\n                    } else {\n                        coordinates.x = arr[0];\n                    }\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE)) {\n                    coordinates.x = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE));\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE_RANDOM)) {\n                    coordinates.randomX = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE_RANDOM));\n                }\n\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\n                    coordinates.x = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_X));\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_X)) {\n                    coordinates.randomX = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_X));\n                }\n\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\n                    coordinates.y = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_Y));\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_Y)) {\n                    coordinates.randomY = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_Y));\n                }\n\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RELATIVE)) {\n                    coordinates.relative = StringUtils.parseBoolean(\n                        next.getAttribute(ParticleStyleAttributes.ATTR_RELATIVE),\n                    );\n                }\n\n                this._scaleValues.push(coordinates);\n            }\n            next = next.nextElementSibling;\n        }\n    }\n\n    /**\n     * Rotations of object in degrees.\n     * Example:\n     *  <Rotation Ease=\"circOut\" KeyTimes=\"0;0.25;1\">\n     *      <Value Values=\"1\"/>\n     *      <Value Values=\"-30;-20\"/>\n     *      <Value Values=\"30;45\"/>\n     *  </Rotation>\n     * @param node\n     */\n    private initializeRotation(node: Element): void {\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_EASE)) {\n            this._rotationEase = node.getAttribute(ParticleStyleAttributes.ATTR_EASE);\n        }\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES)) {\n            this._rotationKeyTimes = ArrayUtils.numberArray(node.getAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES));\n        }\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            if (next.nodeName === ParticleStyle.NodeValue) {\n                let coordinates: ICoordinateOptions1D = { value: null, randomValue: null, relative: false };\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUES)) {\n                    let arr = ArrayUtils.numberArray(next.getAttribute(ParticleStyleAttributes.ATTR_VALUES));\n                    if (arr.length > 1) {\n                        coordinates.value = (arr[1] - arr[0]) / 2 + arr[0];\n                        coordinates.randomValue = arr[1] - arr[0];\n                    } else {\n                        coordinates.value = arr[0];\n                    }\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE)) {\n                    coordinates.value = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE));\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE_RANDOM)) {\n                    coordinates.randomValue = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE_RANDOM));\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RELATIVE)) {\n                    coordinates.relative = StringUtils.parseBoolean(\n                        next.getAttribute(ParticleStyleAttributes.ATTR_RELATIVE),\n                    );\n                }\n\n                this._rotationValues.push(coordinates);\n            }\n            next = next.nextElementSibling;\n        }\n    }\n\n    /**\n     * Example:\n     *  <Alpha Ease=\"linear\" KeyTimes=\"0;1\">\n     *      <Value Value=\"0.8\" ValueRandom=\"0.1\"/>\n     *      <Value Value=\"1\"/>\n     *  </Alpha>\n     * @param node The Alpha node\n     */\n    private initializeAlpha(node: Element): void {\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_EASE)) {\n            this._alphaEase = node.getAttribute(ParticleStyleAttributes.ATTR_EASE);\n        }\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES)) {\n            this._alphaKeyTimes = ArrayUtils.numberArray(node.getAttribute(ParticleStyleAttributes.ATTR_KEY_TIMES));\n        }\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            if (next.nodeName === ParticleStyle.NodeValue) {\n                let coordinates: ICoordinateOptions1D = { value: null, randomValue: null, relative: false };\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE)) {\n                    coordinates.value = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE));\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE_RANDOM)) {\n                    coordinates.randomValue = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE_RANDOM));\n                }\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RELATIVE)) {\n                    coordinates.relative = StringUtils.parseBoolean(\n                        next.getAttribute(ParticleStyleAttributes.ATTR_RELATIVE),\n                    );\n                }\n                this._alphaValues.push(coordinates);\n            }\n            next = next.nextElementSibling;\n        }\n    }\n}\n\nconst ParticleStyleAttributes = {\n    ATTR_COUNT: \"Count\",\n    ATTR_TIME: \"Time\",\n    ATTR_MIN: \"Min\",\n    ATTR_MAX: \"Max\",\n    ATTR_FROM_FRAME: \"FromFrame\",\n    ATTR_IMAGES: \"Images\",\n    ATTR_TYPE: \"Type\",\n    ATTR_X: \"X\",\n    ATTR_Y: \"Y\",\n    ATTR_RELATIVE: \"Relative\",\n    ATTR_INNER_X: \"InnerX\",\n    ATTR_INNER_Y: \"InnerY\",\n    ATTR_RADIUS: \"Radius\",\n    ATTR_MIN_RADIUS: \"MinRadius\",\n    ATTR_RADIUS_B: \"RadiusB\",\n    ATTR_MIN_RADIUS_B: \"MinRadiusB\",\n    ATTR_INNER_RADIUS: \"InnerRadius\",\n    ATTR_MIN_INNER_RADIUS: \"MinInnerRadius\",\n    ATTR_INNER_RADIUS_B: \"InnerRadiusB\",\n    ATTR_MIN_INNER_RADIUS_B: \"MinInnerRadiusB\",\n    ATTR_ANGLE: \"Angle\",\n    ATTR_START_ANGLE: \"StartAngle\",\n    ATTR_RANDOM_X: \"RandomX\",\n    ATTR_RANDOM_Y: \"RandomY\",\n    ATTR_VALUE_RANDOM: \"RandomValue\",\n    ATTR_WIDTH: \"Width\",\n    ATTR_HEIGHT: \"Height\",\n    ATTR_INNER_WIDTH: \"InnerWidth\",\n    ATTR_INNER_HEIGHT: \"InnerHeight\",\n    ATTR_VALUES: \"Values\",\n    ATTR_VALUE: \"Value\",\n    ATTR_RANDOM_START_FRAME: \"RandomStartFrame\",\n    ATTR_SUB_PARTICLE_STYLE: \"SubParticleStyle\",\n\n    ATTR_EASE: \"Ease\",\n    ATTR_KEY_TIMES: \"KeyTimes\",\n    ATTR_RANDOM_PASSES: \"RandomPasses\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/ParticleStyle.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { PaylinesDefinitions } from \"./PaylinesDefinitions\";\nimport { Payline } from \"./Payline\";\nimport { Configuration } from \"../Components/Configuration\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\n\n/**\n * Paylines class is holder for all paylines.\n * Paylines define behaviour of paylines on screen.\n * @class Paylines\n * @extends ContainerElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class PaylinesSelector extends ContainerElement {\n    private _paylineIDs: Array<number>;\n    private _paylines: Array<Payline>;\n\n    constructor() {\n        super();\n\n        this._paylines = [];\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    createByNode(node: Element) {\n        super.createByNode(node);\n\n        /*\n         * Name of config for paylines.\n         * @property Configs\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Configs\")) {\n            var configs: Array<string> = node.getAttribute(\"Configs\").split(\";\");\n            for (var i: number = 0; i < configs.length; i++) {\n                var config: Element = Configuration.Configurations[configs[i]];\n                if (config != null) {\n                    this.configurate(config);\n                }\n            }\n        }\n\n        if (this.childs != null) {\n            for (var key in this.childs) {\n                if (this.childs[key] instanceof Payline) {\n                    this._paylines.push(this.childs[key]);\n                }\n            }\n        }\n    }\n\n    /**\n     * Get attributes from configuration and set up supported properties.\n     * @method configurate\n     * @param node is Element from xml\n     * @return void\n     */\n    configurate(node: Element): void {\n        /*\n         * PaylineIDs defines ids of payline used for game.\n         * @property PaylineIDs\n         * @type Array<number>\n         * @default null\n         */\n        if (node.hasAttribute(\"PaylineIDs\")) {\n            this._paylineIDs = ArrayUtils.numberArray(node.getAttribute(\"PaylineIDs\"));\n        }\n    }\n\n    /**\n     * Reset all paylines to case NORMAL.\n     * @method reset\n     * @return void\n     */\n    reset(): void {\n        this.visible = false;\n    }\n\n    select(): void {\n        this.visible = true;\n        for (var i: number = 0; i < this._paylines.length; i++) {\n            this._paylines[i].goToCase(Payline.CaseSelect);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/PaylinesSelector.ts\n **/","import { engineComponent, Logger } from \"neo-common\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { Symbol } from \"./Symbol\";\nimport { AnimationStyle } from \"../Components/Elements/Styles/AnimationStyle\";\nimport { StyleManager } from \"../Components/Managers/StyleManager\";\nimport { Configuration } from \"../Components/Configuration\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { StageController } from \"../Components/StageController\";\n\n/**\n * The symbols class is holder for game symbols. Class holds also textures for rotation.\n * @class Symbols\n * @extends ContainerElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Symbols extends ContainerElement {\n    // instances for cloning in game\n    symbols: Array<Symbol>;\n    // symbols bitmap data for reel rotation\n    symbolsData: Array<Object>;\n\n    constructor() {\n        super();\n\n        this.symbols = [];\n        this.symbolsData = [];\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        let configs: Array<string>;\n\n        /*\n         * Name of config for symbol instance.\n         * @property Configs\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Configs\")) {\n            configs = node.getAttribute(\"Configs\").split(\";\");\n        }\n\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs[key] instanceof Symbol) {\n                    if (configs != null) {\n                        for (var i: number = 0; i < configs.length; i++) {\n                            this.childs[key].configurate(Configuration.Configurations[configs[i]]);\n                        }\n                    }\n                    this.symbols.push(this.childs[key]);\n                }\n            }\n        }\n\n        if (this.symbols != null) {\n            this.createSymbolsData();\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no symbols\");\n            }\n        }\n\n        this.removeChildren();\n\n        this.visible = false;\n\n        this.createObjectPool();\n    }\n\n    /**\n     * Create symbols bitmap data for reel rotation.\n     * Store normal case of symbol for static symbols and blur case for rotation.\n     * @method createSymbolsData\n     * @retutn void\n     */\n    createSymbolsData(): void {\n        if (DEBUG) {\n            this.log(\"createSymbolsData\");\n        }\n\n        for (let i: number = 1; i <= this.symbols.length; i++) {\n            if (this.symbols[i - 1].hasElements) {\n                let caseElement: Element;\n                let rotationBitmap: PIXI.Texture = null;\n                let blurBitmap: PIXI.Texture = null;\n\n                // create data from rotation but if symbol doesnt have rotation try blur or normal\n                if (this.symbols[i - 1].hasCase(Symbol.CaseRotation)) {\n                    caseElement = this.symbols[i - 1].getCase(Symbol.CaseRotation);\n                } else {\n                    if (this.symbols[i - 1].hasCase(Symbol.CaseBlur)) {\n                        caseElement = this.symbols[i - 1].getCase(Symbol.CaseBlur);\n                    } else {\n                        if (this.symbols[i - 1].hasCase(Symbol.CaseNormal)) {\n                            caseElement = this.symbols[i - 1].getCase(Symbol.CaseNormal);\n                        } else {\n                            if (DEBUG) {\n                                this.log(\"ERROR Symbol has no CaseRotation, CaseBlur nor CaseNormal. Symbol ID: \" + i);\n                            }\n                        }\n                    }\n                }\n\n                rotationBitmap = this._getBitmapByCaseElement(caseElement);\n                if (rotationBitmap == null) {\n                    if (DEBUG) {\n                        this.log(\n                            \"ERROR no style, animation or image of symbol with ID: \" +\n                                i +\n                                \" case: \" +\n                                Symbol.CaseRotation,\n                        );\n                    }\n                }\n\n                if (this.symbols[i - 1].hasCase(Symbol.CaseBlur)) {\n                    caseElement = this.symbols[i - 1].getCase(Symbol.CaseBlur);\n                }\n\n                blurBitmap = this._getBitmapByCaseElement(caseElement);\n                if (blurBitmap == null) {\n                    if (DEBUG) {\n                        this.log(\n                            \"ERROR no style, animation or image of symbol with ID: \" + i + \" case: \" + Symbol.CaseBlur,\n                        );\n                    }\n                }\n\n                let object: Object = {};\n\n                if (rotationBitmap != null) {\n                    object[Symbol.CaseRotation] = rotationBitmap;\n                }\n\n                if (blurBitmap != null) {\n                    object[Symbol.CaseBlur] = blurBitmap;\n                } else {\n                    if (rotationBitmap != null) {\n                        object[Symbol.CaseBlur] = rotationBitmap;\n                    }\n                }\n\n                if (object != null) {\n                    object[\"zIndex\"] = this.symbols[i - 1].zIndex;\n                    this.symbolsData.push(object);\n                }\n            }\n        }\n    }\n\n    /**\n     *\n     * @param caseElement\n     * @returns {PIXI.Texture}\n     * @private\n     */\n    private _getBitmapByCaseElement(caseElement: Element): PIXI.Texture {\n        if (caseElement != null) {\n            if (caseElement.firstElementChild.hasAttribute(\"Style\")) {\n                if (DEBUG) {\n                    /* todo Add check for parentNode existence */\n                    this.log(\n                        \"WARNING Please use Animation attribute! Node: \" +\n                            caseElement.parentNode.parentNode.nodeName +\n                            \", Case: \" +\n                            caseElement.getAttribute(\"Case\"),\n                    );\n                }\n\n                if (<AnimationStyle>StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")] != null) {\n                    if (\n                        <AnimationStyle>(\n                            StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")].animation\n                        ) != null\n                    ) {\n                        return StageController.getTextureByResourceId(\n                            <AnimationStyle>(\n                                StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")].animation\n                            ) + \"0000\",\n                        );\n                    }\n                }\n            } else if (caseElement.firstElementChild.hasAttribute(\"FromFrame\")) {\n                if (caseElement.firstElementChild.getAttribute(\"FromFrame\") != null) {\n                    return StageController.getTextureByResourceId(\n                        caseElement.firstElementChild.getAttribute(\"FromFrame\"),\n                    );\n                }\n            } else if (caseElement.firstElementChild.hasAttribute(\"Image\")) {\n                return StageController.getTextureByResourceId(caseElement.firstElementChild.getAttribute(\"Image\"));\n            } else {\n                return null;\n            }\n        }\n        return null;\n    }\n\n    //******************************************************************************************************************\n    //  OBJECT POOL\n    //******************************************************************************************************************\n\n    protected objectPool: Array<Array<Symbol>>;\n\n    protected objectContainer: ContainerElement;\n\n    protected createObjectPool(): void {\n        this.objectPool = [];\n\n        for (let i = 0; i < this.symbols.length; i++) {\n            this.objectPool.push([]);\n        }\n\n        this.objectContainer = new ContainerElement();\n        this.objectContainer.name = \"ObjectContainer\";\n    }\n\n    public getSymbol(id: number, caseType: string): Symbol {\n        let symbol: Symbol;\n\n        if (this.objectPool[id].length === 0) {\n            symbol = this.symbols[id].clone();\n            symbol.name = \"Symbol\" + id;\n            symbol.id = id;\n        } else {\n            symbol = this.objectPool[id].pop();\n        }\n\n        symbol.visible = true;\n        symbol.goToCase(caseType);\n\n        return symbol;\n    }\n\n    public returnSymbol(symbol: Symbol): void {\n        symbol.visible = false;\n        symbol.goToCase(Symbol.CaseEmpty);\n\n        this.objectContainer.addChild(symbol);\n\n        this.objectPool[symbol.id].push(symbol);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Symbols.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Attributes } from \"../Utils/Attributes\";\n\n/**\n * The symbol element is used for hold symbol special cases and handle symbol behaviour on screen.\n * @class Symbol\n * @extends SwitchElement\n */\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Symbol extends SwitchElement {\n    // base symbol cases\n    static CaseRotation: string = \"ROTATION\";\n    static CaseBlur: string = \"BLUR\";\n\n    static CaseEmpty: string = \"EMPTY\";\n    static CaseNormal: string = \"NORMAL\";\n    static CaseIdle: string = \"IDLE\";\n    static CaseNowin: string = \"NOWIN\";\n    static CaseWin: string = \"WIN\";\n    static CaseCycle: string = \"CYCLE\";\n\n    static CaseWinAll: string = \"WIN_ALL\";\n    static CaseTeasing: string = \"TEASING\";\n    static CaseStart: string = \"START\";\n\n    static CaseImpact: string = \"IMPACT\";\n    static CaseImpactNowin: string = \"IMPACT_NOWIN\";\n    static CaseImpactTease: string = \"IMPACT_TEASE\";\n    static CaseTeaser: string = \"TEASER\";\n\n    //offsets for symbol which has bigger dimension than standard symbols\n    offsetX: number;\n    offsetY: number;\n\n    zIndex: number = 0;\n    type: string;\n    hasWinFrame: boolean;\n\n    usedInPool: boolean;\n    id: number;\n\n    constructor() {\n        super();\n\n        //default values\n        this.offsetX = 0;\n        this.offsetY = 0;\n\n        this.center = true;\n\n        this.usedInPool = false;\n        this.id = -1;\n\n        this.hasWinFrame = true;\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        if (DEBUG) {\n            if (node.hasAttribute(SymbolAttributes.DEBUG) && node.getAttribute(SymbolAttributes.DEBUG) === \"true\") {\n                debugger;\n            }\n        }\n\n        super.create(node);\n\n        this.offsetX = Attributes.assignFloatAttribute(node, SymbolAttributes.OFFSET_X, this.offsetX);\n        this.offsetY = Attributes.assignFloatAttribute(node, SymbolAttributes.OFFSET_Y, this.offsetY);\n\n        if (node.hasAttribute(SymbolAttributes.OFFSET)) {\n            this.offsetX = parseFloat(node.getAttribute(SymbolAttributes.OFFSET));\n            this.offsetY = parseFloat(node.getAttribute(SymbolAttributes.OFFSET));\n        }\n\n        this.zIndex = Attributes.assignFloatAttribute(node, SymbolAttributes.Z_INDEX, this.zIndex);\n        this.type = Attributes.assignStringAttribute(node, SymbolAttributes.TYPE, this.type);\n\n        this.hasWinFrame = Attributes.assignBooleanAttribute(node, \"HasWinFrame\", this.hasWinFrame);\n    }\n\n    /**\n     * Get attributes from configuration and set up supported properties.\n     * @method configurate\n     * @param node is Element from xml\n     * @return void\n     */\n    configurate(node: Element): void {\n        /*\n         * Standard symbol width without offsets.\n         * @property SymbolWidth\n         * @type number\n         * @default null\n         */\n        if (node.hasAttribute(\"SymbolWidth\")) {\n            this.symbolWidth = parseInt(node.getAttribute(\"SymbolWidth\"));\n        }\n\n        /*\n         * Standard symbol height without offsets.\n         * @property SymbolHeight\n         * @type number\n         * @default null\n         */\n        if (node.hasAttribute(\"SymbolHeight\")) {\n            this.symbolHeight = parseInt(node.getAttribute(\"SymbolHeight\"));\n        }\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return Symbol\n     */\n    clone(): Symbol {\n        let element: Symbol = new Symbol();\n\n        element.elements = this.elements.clone();\n        element.addChild(element.elements);\n\n        element.style = this.style;\n        element.offsetX = this.offsetX;\n        element.offsetY = this.offsetY;\n        element.symbolWidth = this.symbolWidth;\n        element.symbolHeight = this.symbolHeight;\n        element.visible = this.visible;\n        element.case = this.case;\n        element.style = this.style;\n        element.zIndex = this.zIndex;\n        element.type = this.type;\n        element.hasWinFrame = this.hasWinFrame;\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\nexport const SymbolAttributes = {\n    DEBUG: \"Debug\",\n    /*\n     * OffsetX is difference between width of this symbol and standard symbol width divided by two.\n     * @property OffsetX\n     * @type Number\n     * @default 0\n     */\n    OFFSET_X: \"OffsetX\",\n    /*\n     * OffsetY is difference between heigth of this symbol and standard symbol height divided by two.\n     * @property OffsetX\n     * @type Number\n     * @default 0\n     */\n    OFFSET_Y: \"OffsetY\",\n    /*\n     * Use offset property when offseX and offsetY is the same number.\n     * @property Offset\n     * @type Number\n     * @default 0\n     */\n    OFFSET: \"Offset\",\n    /*\n     * Z-index of symbol on screen\n     * @property Zindex\n     * @type Number\n     * @default 0\n     */\n    Z_INDEX: \"Zindex\",\n    /*\n     * Type of symbol. E.g.: wild\n     */\n    TYPE: \"Type\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Symbol.ts\n **/","import { ArrayUtils, engineComponent, NumberUtils } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { Payline } from \"./Payline\";\nimport { Paylines } from \"./Paylines\";\nimport { PaylinesDefinitions } from \"./PaylinesDefinitions\";\nimport { Symbol } from \"./Symbol\";\nimport { Symbols } from \"./Symbols\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Configuration } from \"../Components/Configuration\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { TimelineElement } from \"../Components/Elements/Graphics/TimelineElement\";\nimport { SoundManager } from \"../Components/Managers/SoundManager\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\nimport { Languages } from \"../Utils/Languages\";\nimport { BetManager } from \"../Managers/BetManager\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { ImageTextCounterElement } from \"../Components/Elements/Texts/ImageTextCounterElement\";\n\n/**\n * WinAnimator uses paylines and symbols to create presentation of wins to user.\n * Also handle high wins animation for presentation special screens to user when win is bigger than some defined values.\n * @class WinAnimator\n * @extends ContainerElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class WinAnimator extends ContainerElement {\n    //******************************************************************************************************************\n    //  EVENTS\n    //******************************************************************************************************************\n\n    public static readonly FinishWinCalculation: string = \"eventFinishWinCalculation\";\n\n    public static readonly FinishWinAnimator: string = \"eventFinishWinAnimator\";\n\n    public static readonly FinishQuickWinCalculation: string = \"eventFinishQuickWinCalculation\";\n\n    //******************************************************************************************************************\n    //  TIMER STATUSES\n    //******************************************************************************************************************\n\n    protected static readonly Idle: string = \"idle\";\n\n    protected static readonly CycleWins: string = \"cycleWins\";\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected reelCount: number;\n    protected reelX: Array<number>;\n    protected reelY: Array<number>;\n\n    protected symbolCount: number;\n    protected symbolWidth: number;\n    protected symbolHeight: number;\n\n    protected timerStatus: string;\n    protected timer: FrameTimerEventEmitter;\n\n    protected symbols: Symbols;\n    protected noWinSymbolsContainer: ContainerElement;\n    protected symbolsContainer: ContainerElement;\n    protected currentSymbols: Array<Array<Symbol>>;\n\n    protected paylines: Paylines;\n\n    protected multipliers: Array<number>;\n    protected currentMultiplierIndex: number;\n\n    protected animationNames: Array<string>;\n    protected animationsContainer: ContainerElement;\n    protected animations: Array<TimelineElement>;\n    protected currentAnimationIndex: number;\n    protected currentAnimationFinished: boolean;\n    protected value: TimelineElement;\n\n    protected currentReels: Array<Communication.Game.IReel>;\n    protected currentWins: Array<Communication.Game.IWin>;\n    protected currentWin: number;\n\n    protected currentCycle: number;\n\n    //******************************************************************************************************************\n    //  CREATE, INITIALIZE\n    //******************************************************************************************************************\n\n    public create(node: Element): void {\n        super.create(node);\n\n        if (node.hasAttribute(WinAnimatorAttributes.CONFIGS)) {\n            let configs: Array<string> = node.getAttribute(WinAnimatorAttributes.CONFIGS).split(\";\");\n\n            for (let i = 0; i < configs.length; i++) {\n                this.configure(Configuration.Configurations[configs[i]]);\n            }\n        }\n    }\n\n    protected configure(node: Element): void {\n        if (node.hasAttribute(\"ReelCount\")) {\n            this.reelCount = parseInt(node.getAttribute(\"ReelCount\"));\n        }\n\n        if (node.hasAttribute(\"ReelX\")) {\n            this.reelX = ArrayUtils.numberArray(node.getAttribute(\"ReelX\"));\n        }\n\n        if (node.hasAttribute(\"ReelY\")) {\n            this.reelY = ArrayUtils.numberArray(node.getAttribute(\"ReelY\"));\n        }\n\n        if (node.hasAttribute(\"VisibleSymbolCount\")) {\n            this.symbolCount = parseInt(node.getAttribute(\"VisibleSymbolCount\"));\n        }\n\n        if (node.hasAttribute(\"SymbolWidth\")) {\n            this.symbolWidth = parseInt(node.getAttribute(\"SymbolWidth\"));\n        }\n\n        if (node.hasAttribute(\"SymbolHeight\")) {\n            this.symbolHeight = parseInt(node.getAttribute(\"SymbolHeight\"));\n        }\n\n        if (node.hasAttribute(\"WinsMultipliers\")) {\n            this.multipliers = ArrayUtils.numberArray(node.getAttribute(\"WinsMultipliers\"));\n        }\n\n        if (node.hasAttribute(\"WinsAnimations\")) {\n            this.animationNames = node.getAttribute(\"WinsAnimations\").split(\";\");\n        }\n    }\n\n    public initialize(\n        symbols: Symbols,\n        paylines?: Paylines,\n        noWinSymbolsContainer?: ContainerElement,\n        symbolsContainer?: ContainerElement,\n    ): void {\n        this.createTimer();\n        this.createSymbols(symbols, noWinSymbolsContainer, symbolsContainer);\n        this.createPaylines(paylines);\n        this.createAnimations();\n    }\n\n    //******************************************************************************************************************\n    //  ON REEL STOPPED, SHOW SYMBOLS\n    //******************************************************************************************************************\n\n    public onReelStopped(reelsData: Array<Communication.Game.IReel>, reelIndex: number): void {\n        this.currentReels = reelsData;\n\n        for (let i = 0; i < reelsData[reelIndex].symbols.length; i++) {\n            this.removeCurrentSymbol(reelIndex, i);\n        }\n\n        // for (let i = 0; i < reelsData[reelIndex].symbols.length; i++) {\n        for (let i = reelsData[reelIndex].symbols.length - 1; i >= 0; i--) {\n            this.addCurrentSymbol(reelIndex, i);\n        }\n    }\n\n    public showSymbols(reelsData: Array<Communication.Game.IReel>): void {\n        this.currentReels = reelsData;\n\n        for (let i = 0; i < reelsData.length; i++) {\n            for (let j = 0; j < reelsData[i].symbols.length; j++) {\n                this.removeCurrentSymbol(i, j);\n            }\n        }\n\n        for (let i = 0; i < reelsData.length; i++) {\n            // for (let j = 0; j < reelsData[i].symbols.length; j++) {\n            for (let j = reelsData[i].symbols.length - 1; j >= 0; j--) {\n                this.addCurrentSymbol(i, j);\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SHOW WINS\n    //******************************************************************************************************************\n\n    public showWins(wins: Array<Communication.Game.IWin>, win: number): boolean {\n        this.currentWins = wins;\n        this.currentWin = win;\n\n        this.resetAnimations();\n\n        if (wins != null && wins.length > 0) {\n            this.currentMultiplierIndex = 0;\n\n            for (let i = 0; i < this.multipliers.length; i++) {\n                if (this.currentWin / BetManager.Bet >= this.multipliers[i]) {\n                    this.currentMultiplierIndex = i;\n                }\n            }\n\n            if (!this.showCustomWin()) {\n                this.showFirstWins();\n            }\n\n            return this.currentMultiplierIndex >= 3;\n        } else {\n            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\n\n            return false;\n        }\n    }\n\n    protected showCustomWin(): boolean {\n        return false;\n    }\n\n    protected showFirstWins(): void {\n        this.allSymbolsGoToCase(Symbol.CaseNowin, true);\n        this.allPaylinesGoToCase(Payline.CaseNowin);\n\n        for (let i = 0; i < this.currentWins.length; i++) {\n            this.winSymbolsGoToCase(i, Symbol.CaseWin, false);\n            this.winPaylineGoToCase(i, Payline.CaseWin);\n        }\n\n        this.startAnimation();\n    }\n\n    protected finishFirstWins(): void {\n        this.emit(WinAnimator.FinishWinAnimator);\n\n        this.currentCycle = 0;\n\n        this.cycleWins();\n    }\n\n    //******************************************************************************************************************\n    //  SHOW INIT WINS\n    //******************************************************************************************************************\n\n    public showInitWins(wins: Array<Communication.Game.IWin>, win: number): void {\n        this.currentWins = wins;\n        this.currentWin = win;\n\n        this.resetAnimations();\n\n        if (wins != null && wins.length > 0) {\n            this.showCustomInitWin();\n            this.showFirstInitWins();\n            this.finishFirstInitWins();\n        } else {\n            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\n        }\n    }\n\n    protected showCustomInitWin(): void {}\n\n    protected showFirstInitWins(): void {\n        this.allSymbolsGoToCase(Symbol.CaseNowin, true);\n        this.allPaylinesGoToCase(Payline.CaseNowin);\n\n        for (let i = 0; i < this.currentWins.length; i++) {\n            this.winSymbolsGoToCase(i, Symbol.CaseWin, false);\n            this.winPaylineGoToCase(i, Payline.CaseWin);\n        }\n    }\n\n    protected finishFirstInitWins(): void {\n        this.currentCycle = 0;\n\n        this.cycleWins();\n    }\n\n    //******************************************************************************************************************\n    //  CYCLE WINS\n    //******************************************************************************************************************\n\n    protected cycleWins(): void {\n        if (this.currentWins == null) {\n            return;\n        }\n\n        this.allPaylinesGoToCase(Payline.CaseNowin);\n\n        for (let i = 0; i < this.currentWins.length; i++) {\n            this.winPaylineGoToCase(i, Payline.CaseNormal);\n        }\n\n        this.winSymbolsGoToCase(this.currentCycle, Symbol.CaseCycle, true);\n        this.winPaylineGoToCase(this.currentCycle, Payline.CaseCycle);\n\n        this.currentCycle = (this.currentCycle + 1) % this.currentWins.length;\n\n        this.startTimer(WinAnimator.CycleWins, this.getCycleWinsDelay());\n    }\n\n    protected getCycleWinsDelay(): number {\n        return 120;\n    }\n\n    //******************************************************************************************************************\n    //  RESET\n    //******************************************************************************************************************\n\n    public reset(showLastSymbols: boolean): boolean {\n        this.stopTimer();\n\n        this.allSymbolsGoToCase(showLastSymbols ? Symbol.CaseNormal : Symbol.CaseEmpty, false);\n\n        this.allPaylinesGoToCase(Payline.CaseNormal);\n\n        if (showLastSymbols) {\n            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\n        }\n\n        if (this.value) {\n            this.value.visible = false;\n        }\n\n        let lastMultiplierIndex = this.currentMultiplierIndex;\n        this.currentMultiplierIndex = -1;\n\n        if (this.currentAnimationIndex != null) {\n            if (this.currentAnimationFinished) {\n                this.resetAnimations();\n\n                this.currentWins = null;\n                this.currentWin = null;\n                return false;\n            } else {\n                this.stopAnimation();\n\n                this.currentWins = null;\n                this.currentWin = null;\n                return lastMultiplierIndex >= 2; // condition should be greater than or equals 2 beacause we`ve got only two types of base wins (before high wins)\n            }\n        } else {\n            this.currentWins = null;\n            this.currentWin = null;\n            return lastMultiplierIndex >= 2; // condition should be greater than or equals 2 beacause we`ve got only two types of base wins (before high wins)\n        }\n    }\n\n    //******************************************************************************************************************\n    //  TIMER\n    //******************************************************************************************************************\n\n    protected createTimer(): void {\n        this.timerStatus = \"\";\n\n        this.timer = CreateFrameTimer(\"timer\");\n        this.timer.on(FrameTimerEvents.Complete, this.onTimerComplete.bind(this));\n    }\n\n    protected startTimer(status: string, duration: number): void {\n        this.timerStatus = status;\n\n        this.timer.start(duration);\n    }\n\n    protected stopTimer(): void {\n        if (this.timer != null) {\n            this.timer.stop();\n        }\n    }\n\n    public resetTimer(): void {\n        this.stopTimer();\n\n        if (!this.currentAnimationFinished) {\n            this.stopAnimation();\n        }\n    }\n\n    protected onTimerComplete(): void {\n        this.timer.stop();\n\n        switch (this.timerStatus) {\n            case WinAnimator.Idle:\n                this.idle();\n                break;\n            case WinAnimator.CycleWins:\n                this.cycleWins();\n                break;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SYMBOLS\n    //******************************************************************************************************************\n\n    protected createSymbols(\n        symbols: Symbols,\n        noWinSymbolsContainer: ContainerElement,\n        symbolsContainer: ContainerElement,\n    ): void {\n        this.symbols = symbols;\n\n        if (noWinSymbolsContainer != null) {\n            this.noWinSymbolsContainer = noWinSymbolsContainer;\n        } else {\n            this.noWinSymbolsContainer = new ContainerElement();\n            this.noWinSymbolsContainer.name = \"NoWinSymbols\";\n\n            this.addChild(this.noWinSymbolsContainer);\n        }\n\n        if (symbolsContainer != null) {\n            this.symbolsContainer = symbolsContainer;\n        } else {\n            this.symbolsContainer = new ContainerElement();\n            this.symbolsContainer.name = \"Symbols\";\n\n            this.addChild(this.symbolsContainer);\n        }\n\n        this.currentSymbols = [];\n\n        for (let i = 0; i < this.reelCount; i++) {\n            this.currentSymbols.push([]);\n\n            for (let j = 0; j < this.symbolCount; j++) {\n                this.currentSymbols[i].push(null);\n            }\n        }\n    }\n\n    protected addCurrentSymbol(reelIndex: number, symbolIndex: number): void {\n        if (this.currentSymbols[reelIndex][symbolIndex] === null) {\n            const id = this.currentReels[reelIndex].symbols[symbolIndex];\n\n            const symbol = this.symbols.getSymbol(id - 1, Symbol.CaseNormal);\n            symbol.position.x = this.reelX[reelIndex] - symbol.offsetX;\n            symbol.position.y = this.reelY[reelIndex] + this.symbolHeight * symbolIndex - symbol.offsetY;\n\n            this.symbolsContainer.addChild(symbol);\n\n            this.currentSymbols[reelIndex][symbolIndex] = symbol;\n        }\n    }\n\n    protected removeCurrentSymbol(reelIndex: number, symbolIndex: number): void {\n        if (this.currentSymbols[reelIndex][symbolIndex] !== null) {\n            this.symbols.returnSymbol(this.currentSymbols[reelIndex][symbolIndex]);\n\n            this.currentSymbols[reelIndex][symbolIndex] = null;\n        }\n    }\n\n    protected allSymbolsGoToReset(): void {\n        const caseType = Symbol.CaseNormal;\n\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            // for (let j = 0; j < this.currentSymbols[i].length; j++) {\n            for (let j = this.currentSymbols[i].length - 1; j >= 0; j--) {\n                const symbol = this.currentSymbols[i][j];\n\n                if (symbol !== null && this.allowSymbolGoToCase(i, j, caseType)) {\n                    const currentCaseType = symbol.getCurrentCase();\n\n                    if (caseType !== currentCaseType && currentCaseType.indexOf(Symbol.CaseIdle) === -1) {\n                        symbol.goToCase(caseType);\n                    }\n\n                    this.symbolsContainer.addChild(symbol);\n                }\n            }\n        }\n    }\n\n    protected allSymbolsGoToCase(caseType: string, noWin: boolean): void {\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            // for (let j = 0; j < this.currentSymbols[i].length; j++) {\n            for (let j = this.currentSymbols[i].length - 1; j >= 0; j--) {\n                const symbol = this.currentSymbols[i][j];\n\n                if (symbol !== null && this.allowSymbolGoToCase(i, j, caseType)) {\n                    symbol.goToCase(caseType);\n\n                    if (noWin) {\n                        this.noWinSymbolsContainer.addChild(symbol);\n                    } else {\n                        this.symbolsContainer.addChild(symbol);\n                    }\n                }\n            }\n        }\n    }\n\n    protected winSymbolsGoToCase(winIndex: number, caseType: string, useValue: boolean): Array<Symbol> {\n        const win = this.currentWins[winIndex];\n        let symbols: Array<Symbol> = [];\n\n        switch (win.trigger) {\n            case Communication.Game.WinTrigger.Payline:\n                symbols = this.winSymbolsGoToCaseAsPayline(winIndex, caseType);\n                break;\n            case Communication.Game.WinTrigger.Scatter:\n                symbols = this.winSymbolsGoToCaseAsScatter(winIndex, caseType);\n                break;\n            case Communication.Game.WinTrigger.Way:\n                symbols = this.winSymbolsGoToCaseAsWay(winIndex, caseType);\n                break;\n            default:\n                symbols = this.winSymbolsGoToCaseAsCustom(winIndex, caseType);\n                break;\n        }\n\n        if (useValue && this.value && symbols.length > 0 && win.amount > 0) {\n            this.value.visible = true;\n            this.value.position.x = symbols[0].position.x + symbols[0].offsetX;\n            this.value.position.y = symbols[0].position.y + symbols[0].offsetY;\n\n            if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                ImageTextCounterElement.Round = true;\n                this.value.play(parseInt(NumberUtils.devide(win.amount, BetManager.CoinSize).toString()));\n            } else {\n                ImageTextCounterElement.Round = false;\n                this.value.play(parseFloat(Languages.formatText(Languages.FormatMoney, win.amount.toString())));\n            }\n        } else {\n            if (this.value) {\n                this.value.visible = false;\n            }\n        }\n\n        return symbols;\n    }\n\n    protected winSymbolsGoToCaseAsPayline(winIndex: number, caseType: string): Array<Symbol> {\n        const win = this.currentWins[winIndex];\n        const symbols: Array<Symbol> = [];\n\n        if (this.paylines != null) {\n            const definition = PaylinesDefinitions.getPaylineDefinitionsById(\n                win.paylineId,\n                this.paylines.paylineDefinition,\n            );\n\n            for (let i = 0; i < definition.length; i++) {\n                if (win.mask[i] === 1 && this.allowSymbolGoToCase(i, definition[i], caseType)) {\n                    const symbol = this.currentSymbols[i][definition[i]];\n                    symbol.goToCase(caseType);\n\n                    this.symbolsContainer.addChild(symbol);\n\n                    symbols.push(symbol);\n                }\n            }\n        }\n\n        return symbols;\n    }\n\n    protected winSymbolsGoToCaseAsScatter(winIndex: number, caseType: string): Array<Symbol> {\n        const win = this.currentWins[winIndex];\n        const symbols: Array<Symbol> = [];\n\n        for (let i = 0; i < this.reelCount; i++) {\n            for (let j = 0; j < this.symbolCount; j++) {\n                if ((win.mask[i] & (1 << j)) !== 0 && this.allowSymbolGoToCase(i, j, caseType)) {\n                    const symbol = this.currentSymbols[i][j];\n                    symbol.goToCase(caseType);\n\n                    this.symbolsContainer.addChild(symbol);\n\n                    symbols.push(symbol);\n                }\n            }\n        }\n\n        return symbols;\n    }\n\n    protected winSymbolsGoToCaseAsWay(winIndex: number, caseType: string): Array<Symbol> {\n        const win = this.currentWins[winIndex];\n        const symbols: Array<Symbol> = [];\n\n        for (let i = 0; i < this.reelCount; i++) {\n            for (let j = 0; j < this.symbolCount; j++) {\n                if ((win.mask[i] & (1 << j)) !== 0 && this.allowSymbolGoToCase(i, j, caseType)) {\n                    const symbol = this.currentSymbols[i][j];\n                    symbol.goToCase(caseType);\n\n                    this.symbolsContainer.addChild(symbol);\n\n                    symbols.push(symbol);\n                }\n            }\n        }\n\n        return symbols;\n    }\n\n    protected winSymbolsGoToCaseAsCustom(winIndex: number, caseType: string): Array<Symbol> {\n        // TODO Implement feature when needed.\n        return [];\n    }\n\n    protected allowSymbolGoToCase(reelIndex: number, symbolIndex: number, caseType: string): boolean {\n        return true;\n    }\n\n    //******************************************************************************************************************\n    //  PAYLINES\n    //******************************************************************************************************************\n\n    protected createPaylines(paylines: Paylines): void {\n        this.paylines = paylines;\n\n        this.allPaylinesGoToCase(Payline.CaseNormal);\n    }\n\n    protected allPaylinesGoToCase(caseType: string): void {\n        if (this.paylines != null) {\n            this.paylines.goToCase(caseType);\n        }\n    }\n\n    protected winPaylineGoToCase(winIndex: number, caseType: string): void {\n        if (this.paylines != null) {\n            const win = this.currentWins[winIndex];\n\n            if (win.trigger === Communication.Game.WinTrigger.Payline) {\n                if (caseType === Payline.CaseCycle && this.currentWins.length === 1) {\n                    this.paylines.goToCase(Payline.CaseSingleCycle, win.paylineId);\n                } else {\n                    this.paylines.goToCase(caseType, win.paylineId);\n                }\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  ANIMATIONS\n    //******************************************************************************************************************\n\n    protected createAnimations(): void {\n        this.animationsContainer = new ContainerElement();\n        this.animationsContainer.name = \"Animations\";\n\n        this.addChild(this.animationsContainer);\n\n        if (this.childs[\"Value\"]) {\n            this.value = this.childs[\"Value\"];\n\n            this.animationsContainer.addChild(this.value);\n        }\n\n        this.animations = [];\n\n        for (let i = 0; i < this.animationNames.length; i++) {\n            if (this.childs[this.animationNames[i]]) {\n                let animation = this.childs[this.animationNames[i]];\n                animation.visible = false;\n                animation.on(\"finished\", this.onAnimationFinished.bind(this));\n                animation.on(TimelineElement.AnimationComplete, this.onAnimationComplete.bind(this));\n                animation.on(\"calculationFinished\", this.onCalculationFinished.bind(this));\n\n                this.animations.push(animation);\n\n                this.animationsContainer.addChild(animation);\n            }\n        }\n\n        this.currentAnimationIndex = null;\n        this.currentAnimationFinished = true;\n    }\n\n    protected resetAnimations(): void {\n        this.currentAnimationIndex = null;\n        this.currentAnimationFinished = true;\n\n        for (let i = 0; i < this.animations.length; i++) {\n            const animation = this.animations[i];\n            animation.visible = false;\n            animation.stop();\n        }\n    }\n\n    protected startAnimation(): void {\n        this.currentAnimationIndex = this.getAnimationIndex();\n        this.currentAnimationFinished = false;\n\n        const animation = this.animations[this.currentAnimationIndex];\n        animation.visible = true;\n\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            ImageTextCounterElement.Round = true;\n            animation.play(parseInt(NumberUtils.devide(this.currentWin, BetManager.CoinSize).toString()));\n        } else {\n            ImageTextCounterElement.Round = false;\n            animation.play(this.currentWin);\n        }\n    }\n\n    protected stopAnimation(): void {\n        if (this.currentAnimationIndex != null) {\n            const animation = this.animations[this.currentAnimationIndex];\n            animation.visible = true;\n            if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                ImageTextCounterElement.Round = true;\n                animation.goToOutro(parseInt(NumberUtils.devide(this.currentWin, BetManager.CoinSize).toString()));\n            } else {\n                ImageTextCounterElement.Round = false;\n                animation.goToOutro(this.currentWin);\n            }\n\n            this.currentAnimationIndex = null;\n            this.currentAnimationFinished = true;\n        }\n    }\n\n    protected getAnimationIndex(): number {\n        return this.currentMultiplierIndex;\n    }\n\n    protected onCalculationFinished(): void {\n        //win0 has no counting duration, so we want to override total win update\n        this.emit(WinAnimator.FinishQuickWinCalculation);\n    }\n\n    protected onAnimationFinished(): void {\n        this.currentAnimationFinished = true;\n\n        this.emit(WinAnimator.FinishWinCalculation);\n    }\n\n    protected onAnimationComplete(): void {\n        this.currentAnimationIndex = null;\n\n        this.finishFirstWins();\n    }\n\n    //******************************************************************************************************************\n    //  IDLE\n    //******************************************************************************************************************\n\n    protected idle(): void {\n        for (let reelIndex = 0; reelIndex < this.currentSymbols.length; reelIndex++) {\n            for (let symbolIndex = 0; symbolIndex < this.currentSymbols[reelIndex].length; symbolIndex++) {\n                const symbol = this.currentSymbols[reelIndex][symbolIndex];\n                if (\n                    symbol.getCurrentCase() === Symbol.CaseNormal &&\n                    symbol.hasCase(Symbol.CaseIdle) &&\n                    symbol.getCurrentCase() !== Symbol.CaseIdle\n                ) {\n                    symbol.goToCase(Symbol.CaseIdle);\n                }\n            }\n        }\n\n        this.startTimer(WinAnimator.Idle, this.getIdleDelay());\n    }\n\n    protected getInitialIdleDelay(): number {\n        return 1;\n    }\n\n    protected getIdleDelay(): number {\n        return 60;\n    }\n\n    protected getIdleActiveElementsCount(): number {\n        return 2;\n    }\n}\n\nexport const WinAnimatorAttributes = {\n    /**\n     * Name of config for win animator.\n     * @property Configs\n     * @type string\n     * @default null\n     */\n    CONFIGS: \"Configs\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/WinAnimator.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\nimport { BaseElement } from \"./BaseElement\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { TimelineStyle } from \"../Styles/TimelineStyle\";\nimport { ImageTextCounterElement } from \"../Texts/ImageTextCounterElement\";\nimport { ContainerElement } from \"./ContainerElement\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { SoundManager } from \"../../Managers/SoundManager\";\nimport { PlayList } from \"../../Sounds/PlayList\";\nimport { SongAttributes } from \"../../Sounds/Song\";\nimport { Tweens } from \"../../Effects/Tweens\";\nimport { SoundElementAttributes } from \"../../../CustomComponents/SoundElement\";\n\n/**\n * TimelineElement is element which can create animation flow from object and setting up these elemenets based on frames.\n * TimelineElement need TimelineStyle as definition of animation.\n * Example:\n *   <TimelineElement Class=\"TimelineElement\" Style=\"TimelineStyle\" Loop=\"true\" />\n *\n * @class TimelineElement\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class TimelineElement extends BaseElement {\n    static AnimationComplete: string = \"animationComplete\";\n\n    private _style: TimelineStyle;\n    private _elements: ContainerElement;\n    private _timer: FrameTimerEventEmitter;\n    private _framesArray: Array<number>;\n    private _frameCounter: number;\n    private _loop: boolean;\n    private _winValue: number;\n    private _winValueFrom: number;\n\n    private _outroDelayPlay: FrameTimerEventEmitter;\n    private _delayPlayElement: Element;\n\n    _tint: number;\n\n    constructor() {\n        super();\n\n        this._frameCounter = 0;\n        this._loop = false;\n\n        this._timer = CreateFrameTimer(\"TimelineElement\");\n        this._timer.on(FrameTimerEvents.Complete, this.animate.bind(this));\n\n        this._outroDelayPlay = CreateFrameTimer(\"outroDelayPlay\");\n        this._outroDelayPlay.on(FrameTimerEvents.Complete, this.outroDelayPlay.bind(this));\n    }\n\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        this._timer.stop();\n\n        if (this._elements.childs != null) {\n            for (var key in this._elements.childs) {\n                if (this._elements.childs.hasOwnProperty(key)) {\n                    if (this._elements.childs[key] instanceof PIXI.DisplayObject) {\n                        this._elements.childs[key].destroy(options);\n                    }\n                    this._elements.childs[key] = null;\n                }\n            }\n\n            this._elements.childs = null;\n        }\n    }\n\n    set winValue(value: number) {\n        this._winValue = value;\n    }\n    get winValue() {\n        return this._winValue;\n    }\n    set winValueFrom(value: number) {\n        this._winValueFrom = value;\n    }\n    get winValueFrom() {\n        return this._winValueFrom;\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    public createByNode(node: Element): void {\n        super.createByNode(node);\n\n        if (node.hasAttribute(TimelineElementAttributes.LOOP)) {\n            this._loop = StringUtils.parseBoolean(node.getAttribute(TimelineElementAttributes.LOOP));\n        }\n\n        if (node.hasAttribute(TimelineElementAttributes.STYLE)) {\n            this._style = <TimelineStyle>StyleManager.Styles[node.getAttribute(TimelineElementAttributes.STYLE)];\n            if (this._style != null) {\n                // get all elements and add them to this display list\n                if (this._style.container != null) {\n                    if (\n                        node.hasAttribute(TimelineElementAttributes.CLONE) &&\n                        StringUtils.parseBoolean(node.getAttribute(TimelineElementAttributes.CLONE))\n                    ) {\n                        this._elements = this._style.container.clone();\n                    } else {\n                        this._elements = this._style.container;\n                    }\n                    this.addChild(this._elements);\n\n                    if (this._style.frames != null) {\n                        this._framesArray = [];\n\n                        for (let key in this._style.frames) {\n                            this._framesArray.push(parseInt(key));\n                        }\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING no timeline\");\n                        }\n                    }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no children\");\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no style with name: \" + node.getAttribute(TimelineElementAttributes.STYLE));\n                }\n            }\n        }\n    }\n\n    /**\n     * @param node\n     */\n    public updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(TimelineElementAttributes.TINT)) {\n            if (this._elements != null && this._elements.children != null && this._elements.children.length > 0) {\n                for (let i: number = 0; i < this._elements.children.length; i++) {\n                    let child: any = this._elements.children[i];\n                    if (child instanceof PIXI.DisplayObject) {\n                        if (child.children != null && child.children.length > 0) {\n                            for (let j: number = 0; j < child.children.length; j++) {\n                                let childOfChild: any = child.children[j];\n                                if (\n                                    childOfChild instanceof PIXI.Sprite ||\n                                    childOfChild instanceof PIXI.extras.AnimatedSprite\n                                ) {\n                                    if (node.getAttribute(TimelineElementAttributes.TINT) === \"0\") {\n                                        childOfChild.tint = 0xffffff;\n                                    } else {\n                                        childOfChild.tint = parseInt(\n                                            node.getAttribute(TimelineElementAttributes.TINT),\n                                            16,\n                                        );\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        if (\n            node.hasAttribute(TimelineElementAttributes.PLAY) &&\n            StringUtils.parseBoolean(node.getAttribute(TimelineElementAttributes.PLAY))\n        ) {\n            if (this._framesArray != null) {\n                this.startAnimate();\n            } else {\n                if (DEBUG) {\n                    this.log(\"WARNING can't play because movieClip is null\");\n                }\n            }\n        }\n\n        if (node.hasAttribute(\"GoToOutro\") && StringUtils.parseBoolean(node.getAttribute(\"GoToOutro\"))) {\n            this.goToOutro();\n        }\n    }\n\n    /**\n     * Start playing animation.\n     * @method play\n     * @param winValue number - optional\n     * @return void\n     */\n    play(winValue?: number, winValueFrom?: number): void {\n        if (winValue != null) {\n            this._winValue = winValue;\n        }\n        this._winValueFrom = winValueFrom || 0;\n\n        if (this._framesArray != null) {\n            this.startAnimate();\n        }\n    }\n\n    /**\n     *\n     */\n    stop(): void {\n        if (this._elements.childs != null) {\n            for (let key in this._elements.childs) {\n                if (this._elements.childs.hasOwnProperty(key)) {\n                    Tweens.removeTweens(this._elements.childs[key], \"all\");\n                    this._elements.childs[key].visible = false;\n                    if (this._elements.childs[key] instanceof ImageTextCounterElement) {\n                        this._elements.childs[key].stop();\n                    }\n                }\n            }\n        }\n\n        this.stopAnimate();\n    }\n\n    /**\n     * Stop animation and go to last outro state.\n     * @method goToOutro\n     * @return void\n     */\n    goToOutro(winValue?: number): void {\n        if (winValue != null) {\n            this._winValue = winValue;\n        }\n        this._timer.stop();\n        if (this._style != null && this._style.outro != null) {\n            let node: Element = this._style.outro;\n            if (node != null) {\n                if (node.hasAttribute(\"Emit\")) {\n                    this.emit(node.getAttribute(\"Emit\"));\n                }\n\n                let next: Element = node.firstElementChild;\n                if (next != null) {\n                    while (next != null) {\n                        let element: any = this._elements.childs[next.nodeName];\n                        if (element != null) {\n                            // send new node to element and set / change new attributes\n                            element.updateByNode(next);\n                            if (element instanceof ImageTextCounterElement) {\n                                if (this._winValue != null) {\n                                    element.start(this._winValueFrom || 0, this._winValue, 0);\n                                } else {\n                                    element.force();\n                                }\n                            }\n                        }\n                        next = next.nextElementSibling;\n                    }\n                }\n            }\n\n            if (this._style != null && this._style.outroSounds != null) {\n                let node2: Element = this._style.outroSounds;\n                if (node2 != null) {\n                    let next: Element = node2.firstElementChild;\n                    if (next != null) {\n                        while (next != null) {\n                            if (next.hasAttribute(SongAttributes.SONG)) {\n                                if (next.hasAttribute(SongAttributes.PLAY)) {\n                                    let value: string = next.getAttribute(SongAttributes.PLAY);\n                                    let intValue: number = parseInt(value);\n                                    if (value === \"true\") {\n                                        if (next.hasAttribute(SongAttributes.FADEIN)) {\n                                            PlayList.play(\n                                                next.getAttribute(SongAttributes.SONG),\n                                                parseInt(next.getAttribute(SongAttributes.FADEIN)),\n                                            );\n                                        } else {\n                                            PlayList.play(next.getAttribute(SongAttributes.SONG));\n                                        }\n                                    } else if (!isNaN(intValue)) {\n                                        this._delayPlayElement = next;\n                                        this._outroDelayPlay.stop();\n                                        this._outroDelayPlay.start(intValue);\n                                    }\n                                }\n                                if (next.hasAttribute(SongAttributes.LOOP)) {\n                                    if (next.hasAttribute(SongAttributes.FADEIN)) {\n                                        PlayList.loop(\n                                            next.getAttribute(SongAttributes.SONG),\n                                            parseInt(next.getAttribute(SongAttributes.FADEIN)),\n                                        );\n                                    } else {\n                                        PlayList.loop(next.getAttribute(SongAttributes.SONG));\n                                    }\n                                }\n                                if (next.hasAttribute(SongAttributes.STOP)) {\n                                    if (next.hasAttribute(SongAttributes.FADEOUT)) {\n                                        PlayList.stop(\n                                            next.getAttribute(SongAttributes.SONG),\n                                            parseInt(next.getAttribute(SongAttributes.FADEOUT)),\n                                        );\n                                    } else {\n                                        PlayList.stop(next.getAttribute(SongAttributes.SONG));\n                                    }\n                                }\n                            }\n                            next = next.nextElementSibling;\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    private outroDelayPlay(): void {\n        if (this._delayPlayElement != null) {\n            if (this._delayPlayElement.hasAttribute(SongAttributes.FADEIN)) {\n                PlayList.play(\n                    this._delayPlayElement.getAttribute(SongAttributes.SONG),\n                    parseInt(this._delayPlayElement.getAttribute(SongAttributes.FADEIN)),\n                );\n            } else {\n                PlayList.play(this._delayPlayElement.getAttribute(SongAttributes.SONG));\n            }\n        }\n    }\n\n    /**\n     * Start animate on timeline.\n     * @method startAnimate\n     * @return void\n     */\n    private startAnimate(): void {\n        this._timer.stop();\n        this._frameCounter = 0;\n\n        if (this.children != null) {\n            if (this._framesArray[0] === 0) {\n                this.animate();\n            } else {\n                this._timer.start(this._framesArray[0]);\n            }\n        }\n    }\n\n    /**\n     * Reset timeline and start animation again.\n     * @method reset\n     * @return void\n     */\n    private reset(): void {\n        this.startAnimate();\n    }\n\n    /**\n     * Stop timeline.\n     * @method stopAnimate\n     * @return void\n     */\n    private stopAnimate(): void {\n        this._timer.stop();\n    }\n\n    /**\n     * Animate change elements when reach new frame.\n     * @method animate\n     * @return void\n     */\n    private animate(): void {\n        if (this._framesArray != null) {\n            if (this._framesArray[this._frameCounter] != null) {\n                this.goToFrame(this._framesArray[this._frameCounter]);\n            } else {\n                this._timer.stop();\n                if (this._loop) {\n                    this.reset();\n                }\n            }\n        }\n        this._frameCounter++;\n\n        if (this._framesArray[this._frameCounter] != null) {\n            this._timer.stop();\n            this._timer.start(this._framesArray[this._frameCounter] - this._framesArray[this._frameCounter - 1]);\n        } else {\n            this.emit(TimelineElement.AnimationComplete);\n            this._timer.stop();\n            if (this._loop) {\n                this.reset();\n            }\n        }\n    }\n\n    /**\n     * Go to frame get xml node from frames and set up children to state defined in frames xml node.\n     * @method goToFrame\n     * @param frame number\n     * @return void\n     */\n    private goToFrame(frame: number) {\n        if (this._style != null && this._style.frames != null) {\n            let node: Element = this._style.frames[frame.toString()];\n\n            if (node.hasAttribute(\"Emit\")) {\n                this.emit(node.getAttribute(\"Emit\"));\n            }\n\n            if (node != null && node.childElementCount > 0) {\n                let next: Element = node.firstElementChild;\n                if (next != null) {\n                    while (next != null) {\n                        let element: any = this._elements.childs[next.nodeName];\n                        if (element != null) {\n                            // send new node to element and set / change new attributes\n                            element.updateByNode(next);\n                            if (element instanceof ImageTextCounterElement && this._winValue != null) {\n                                if (element.visible) {\n                                    element.start(this._winValueFrom || 0, this._winValue);\n                                    this._winValue = null;\n                                }\n                            }\n                        }\n                        next = next.nextElementSibling;\n                    }\n                }\n            }\n\n            if (this._style != null && this._style.framesSounds != null) {\n                let node2: Element = this._style.framesSounds[frame.toString()];\n                if (node2 != null) {\n                    let next: Element = node2.firstElementChild;\n                    if (next != null) {\n                        while (next != null) {\n                            if (next.hasAttribute(SongAttributes.SONG)) {\n                                if (next.hasAttribute(SongAttributes.PLAY)) {\n                                    if (next.hasAttribute(SongAttributes.FADEIN)) {\n                                        PlayList.play(\n                                            next.getAttribute(SongAttributes.SONG),\n                                            parseInt(next.getAttribute(SongAttributes.FADEIN)),\n                                        );\n                                    } else {\n                                        PlayList.play(next.getAttribute(SongAttributes.SONG));\n                                    }\n                                }\n                                if (next.hasAttribute(SongAttributes.LOOP)) {\n                                    if (next.hasAttribute(SongAttributes.FADEIN)) {\n                                        PlayList.loop(\n                                            next.getAttribute(SongAttributes.SONG),\n                                            parseInt(next.getAttribute(SongAttributes.FADEIN)),\n                                        );\n                                    } else {\n                                        PlayList.loop(next.getAttribute(SongAttributes.SONG));\n                                    }\n                                }\n                                if (next.hasAttribute(SongAttributes.STOP)) {\n                                    if (next.hasAttribute(SongAttributes.FADEOUT)) {\n                                        PlayList.stop(\n                                            next.getAttribute(SongAttributes.SONG),\n                                            parseInt(next.getAttribute(SongAttributes.FADEOUT)),\n                                        );\n                                    } else {\n                                        PlayList.stop(next.getAttribute(SongAttributes.SONG));\n                                    }\n                                }\n                            }\n                            next = next.nextElementSibling;\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\n        this._timer.stop();\n        super.destroy(options);\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return TimelineElement\n     */\n    clone(): TimelineElement {\n        let element: TimelineElement = new TimelineElement();\n\n        element._elements = this._elements.clone();\n        element.addChild(element._elements);\n        element._style = this._style;\n        element._framesArray = this._framesArray;\n        element._loop = this._loop;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.visible = this.visible;\n\n        if (this.maskSprite != null) {\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\n            elementMask.position.x = this.maskSprite.position.x;\n            elementMask.position.y = this.maskSprite.position.y;\n\n            element.maskSprite = elementMask;\n            element.addChild(elementMask);\n            element.mask = elementMask;\n        }\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n\n    public setTint(tintColor: number): void {\n        if (this._tint === tintColor || isNaN(tintColor)) {\n            return;\n        }\n        this._tint = tintColor;\n        for (let child in this._elements.childs) {\n            if (typeof this._elements.childs[child].tint === \"number\") {\n                this._elements.childs[child].tint = tintColor;\n            }\n        }\n\n        // for(let child in this._style.container.childs) {\n        //     if(typeof this._style.container.childs[child].tint === \"number\") {\n        //         this._style.container.childs[child].tint = tintColor;\n        //     }\n        // }\n    }\n\n    set tint(tintColor: number) {\n        this.setTint(tintColor);\n    }\n\n    get tint(): number {\n        return this._tint;\n    }\n}\n\nexport const TimelineElementAttributes = {\n    CLONE: \"Clone\",\n    DEBUG: \"Debug\",\n    EMIT: \"Emit\",\n    /*\n     * Indicates whenever this element should loop when it reaches the end of its timeline.\n     * @property Loop\n     * @type boolean\n     * @default false\n     */\n    LOOP: \"Loop\",\n    /*\n     * Start playing animation.\n     * @property Play\n     * @type boolean\n     */\n    PLAY: \"Play\",\n    /*\n     * Playlist id for machine.\n     * @property Sounds\n     * @type string\n     * @default null\n     */\n    SOUNDS: \"Sounds\",\n    /*\n     * Style holds elements as ContainerElement and also holds frames as xml nodes.\n     * Style for TimelineElement has to be instance of TimelineStyle.\n     * @property Style\n     * @type string\n     * @default null\n     */\n    STYLE: \"Style\",\n    /*\n     * Tint of animation. Hex color which colorize movie clip.\n     * @property Tint\n     * @type string\n     * @default null\n     */\n    TINT: \"Tint\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/TimelineElement.ts\n **/","import { engineComponent, NumberUtils, StringUtils } from \"neo-common\";\nimport { ImageTextElement } from \"./ImageTextElement\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { Tweens } from \"../../Effects/Tweens\";\nimport { AppContext } from \"../../../../Common/AppContext\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ImageTextCounterElement extends ImageTextElement {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    static Round: boolean = false;\n\n    public from: number;\n\n    public to: number;\n\n    public duration: number;\n\n    public round: boolean;\n\n    protected currentValue: number;\n\n    protected finalValue: number;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor() {\n        super();\n\n        this.from = 0;\n        this.to = 0;\n        this.duration = 0;\n        this.round = false;\n        this.currentValue = 0;\n        this.finalValue = 0;\n    }\n\n    //******************************************************************************************************************\n    //  CREATE, UPDATE\n    //******************************************************************************************************************\n\n    public updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(ImageTextCounterElementAttributes.FROM)) {\n            this.from = parseFloat(node.getAttribute(ImageTextCounterElementAttributes.FROM));\n        }\n\n        if (node.hasAttribute(ImageTextCounterElementAttributes.TO)) {\n            this.to = parseFloat(node.getAttribute(ImageTextCounterElementAttributes.TO));\n        }\n\n        if (node.hasAttribute(ImageTextCounterElementAttributes.DURATION)) {\n            this.duration = parseInt(node.getAttribute(ImageTextCounterElementAttributes.DURATION));\n        }\n\n        if (node.hasAttribute(ImageTextCounterElementAttributes.ROUND)) {\n            this.round = StringUtils.parseBoolean(node.getAttribute(ImageTextCounterElementAttributes.ROUND));\n        }\n\n        if (node.hasAttribute(ImageTextCounterElementAttributes.ACTION)) {\n            switch (node.getAttribute(ImageTextCounterElementAttributes.ACTION)) {\n                case ImageTextCounterElementAttributes.ACTION_VALUE.START:\n                    this.start(this.from, this.to, this.duration);\n                    break;\n                case ImageTextCounterElementAttributes.ACTION_VALUE.STOP:\n                    this.stop();\n                    break;\n                case ImageTextCounterElementAttributes.ACTION_VALUE.FORCE:\n                    this.force();\n                    break;\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  START\n    //******************************************************************************************************************\n\n    public start(from: number, to: number, duration?: number): void {\n        const d = duration != null ? duration : this.duration;\n\n        if (d <= 0 || from === to) {\n            this.currentValue = to;\n            this.finalValue = to;\n\n            this.onCountTo();\n        } else {\n            this.currentValue = from;\n            this.finalValue = from;\n\n            this.onCountTo();\n\n            this.finalValue = to;\n\n            Tweens.customTween(this, {\n                tween: \"currentValue\",\n                tweenValues: [this.currentValue, this.finalValue],\n                tweenDuration: [d],\n                callbackType: \"onUpdate\",\n                callbackFunction: this.onCountTo,\n                callbackScope: this,\n            });\n        }\n    }\n\n    protected onCountTo(): void {\n        if (this.currentValue === this.finalValue) {\n            Tweens.removeTweens(this, \"currentValue\");\n            this.bitmapText.text = NumberUtils.valueToNumber(\n                this.finalValue,\n                this.round || ImageTextCounterElement.Round ? 0 : AppContext.gameConfiguration.ShowDecimalPlaces,\n            );\n            this.realign();\n            return;\n        }\n\n        this.bitmapText.text = NumberUtils.valueToNumber(\n            this.currentValue,\n            this.round || ImageTextCounterElement.Round ? 0 : AppContext.gameConfiguration.ShowDecimalPlaces,\n        );\n\n        this.realign();\n    }\n\n    //******************************************************************************************************************\n    //  STOP\n    //******************************************************************************************************************\n\n    public stop(): void {\n        Tweens.removeTweens(this, \"currentValue\");\n    }\n\n    //******************************************************************************************************************\n    //  FORCE\n    //******************************************************************************************************************\n\n    public force(): void {\n        this.currentValue = this.finalValue;\n\n        this.onCountTo();\n    }\n\n    //******************************************************************************************************************\n    //  CLONE\n    //******************************************************************************************************************\n\n    public clone(): ImageTextCounterElement {\n        let element: ImageTextCounterElement = new ImageTextCounterElement();\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n\n        element.font = this.font;\n        element.text = this.text;\n        element.textAlign = this.textAlign;\n        element.textBaseline = this.textBaseline;\n\n        element.from = this.from;\n        element.to = this.to;\n        element.duration = this.duration;\n        element.round = this.round;\n\n        element.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\n        element.addChild(element.bitmapText);\n\n        element.realign();\n        element.markAsCloned();\n\n        return element;\n    }\n\n    set tint(tintColor: number) {\n        this.bitmapText.tint = tintColor;\n    }\n\n    get tint(): number {\n        return this.bitmapText.tint;\n    }\n}\n\nexport const ImageTextCounterElementAttributes = {\n    /**\n     * Round will show numbers without decimal places.\n     * @property Round\n     * @type boolean\n     * @default false\n     */\n    ROUND: \"Round\",\n    /**\n     * Duration in frames. This property sets how long will counter run in frames.\n     * @property Duration\n     * @type number\n     * @default 0\n     */\n    DURATION: \"Duration\",\n    FROM: \"From\",\n    TO: \"To\",\n    ACTION: \"Action\",\n    ACTION_VALUE: {\n        START: \"Start\",\n        STOP: \"Stop\",\n        FORCE: \"Force\",\n    },\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Texts/ImageTextCounterElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { BaseElement } from \"../Graphics/BaseElement\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ImageTextElement extends BaseElement {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    public textAlign: string;\n\n    public textBaseline: string;\n\n    public text: string;\n\n    public font: string;\n\n    public bitmapText: PIXI.extras.BitmapText;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor() {\n        super();\n\n        this.textAlign = ImageTextElementAttributes.TEXT_ALIGN_VALUE.LEFT;\n        this.textBaseline = ImageTextElementAttributes.TEXT_BASELINE_VALUE.TOP;\n        this.text = \"\";\n    }\n\n    //******************************************************************************************************************\n    //  CREATE, UPDATE\n    //******************************************************************************************************************\n\n    public createByNode(node: Element) {\n        super.createByNode(node);\n\n        if (this.bitmapText == null) {\n            if (node.hasAttribute(ImageTextElementAttributes.FONT)) {\n                if (node.hasAttribute(ImageTextElementAttributes.TEXT)) {\n                    this.text = node.getAttribute(ImageTextElementAttributes.TEXT);\n                }\n\n                this.font = node.getAttribute(ImageTextElementAttributes.FONT);\n\n                this.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\n\n                this.addChild(this.bitmapText);\n            }\n        }\n    }\n\n    public updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(ImageTextElementAttributes.TEXT_ALIGN)) {\n            this.textAlign = node.getAttribute(ImageTextElementAttributes.TEXT_ALIGN);\n\n            this.realign();\n        }\n\n        if (node.hasAttribute(ImageTextElementAttributes.TEXT_BASELINE)) {\n            this.textBaseline = node.getAttribute(ImageTextElementAttributes.TEXT_BASELINE);\n\n            this.realign();\n        }\n\n        if (node.hasAttribute(ImageTextElementAttributes.TINT)) {\n            let val = parseInt(node.getAttribute(ImageTextElementAttributes.TINT), 16);\n            if (!isNaN(val)) {\n                this.bitmapText.tint = val;\n            }\n        }\n\n        if (node.hasAttribute(ImageTextElementAttributes.TEXT)) {\n            if (this.bitmapText) {\n                this.bitmapText.text = node.getAttribute(ImageTextElementAttributes.TEXT);\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  REALIGN\n    //******************************************************************************************************************\n\n    public realign(): void {\n        switch (this.textAlign) {\n            case ImageTextElementAttributes.TEXT_ALIGN_VALUE.RIGHT:\n                this.bitmapText.position.x = -this.bitmapText.width;\n                break;\n            case ImageTextElementAttributes.TEXT_ALIGN_VALUE.CENTER:\n                this.bitmapText.position.x = -this.bitmapText.width * 0.5;\n                break;\n            default:\n                this.bitmapText.position.x = 0;\n                break;\n        }\n\n        switch (this.textBaseline) {\n            case ImageTextElementAttributes.TEXT_BASELINE_VALUE.BOTTOM:\n                this.bitmapText.position.y = -this.bitmapText.height;\n                break;\n            case ImageTextElementAttributes.TEXT_BASELINE_VALUE.MIDDLE:\n                this.bitmapText.position.y = -this.bitmapText.height * 0.5;\n                break;\n            default:\n                this.bitmapText.position.y = 0;\n                break;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CLONE\n    //******************************************************************************************************************\n\n    public clone(): ImageTextElement {\n        let element: ImageTextElement = new ImageTextElement();\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n\n        element.font = this.font;\n        element.text = this.text;\n        element.textAlign = this.textAlign;\n        element.textBaseline = this.textBaseline;\n\n        element.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\n        element.bitmapText.tint = this.bitmapText.tint;\n        element.addChild(element.bitmapText);\n\n        element.realign();\n        element.markAsCloned();\n\n        return element;\n    }\n}\n\nexport const ImageTextElementAttributes = {\n    /**\n     * The text to display.\n     * @property Text\n     * @type string\n     * @default null\n     */\n    TEXT: \"Text\",\n    /**\n     * Bitmap font for text.\n     * @property Font\n     * @type string\n     * @default null\n     */\n    FONT: \"Font\",\n    /**\n     * The horizontal text alignment. Any of \"left\", \"right\", and \"center\".\n     * For detailed information view the whatwg spec. Default is \"left\".\n     * @property TextAlign\n     * @type string\n     * @default left\n     */\n    TEXT_ALIGN: \"TextAlign\",\n    TEXT_ALIGN_VALUE: {\n        LEFT: \"left\",\n        CENTER: \"center\",\n        RIGHT: \"right\",\n    },\n    /**\n     * The vertical alignment point on the text. Any of \"top\", \"middle\" or \"bottom\". Default is \"top\".\n     * @property TextBaseline\n     * @type string\n     * @default top\n     */\n    TEXT_BASELINE: \"TextBaseline\",\n    TEXT_BASELINE_VALUE: {\n        TOP: \"top\",\n        MIDDLE: \"middle\",\n        BOTTOM: \"bottom\",\n    },\n    TINT: \"Tint\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Texts/ImageTextElement.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../ComponentTypes\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { DataManager } from \"../../Managers/DataManager\";\n\n@engineComponent(ComponentTypes.Song)\nexport class Song {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    public id: string;\n\n    protected sound: PIXI.sound.Sound;\n\n    protected alias: string;\n\n    protected instance: PIXI.sound.IMediaInstance;\n\n    protected group: string;\n\n    protected volume: number;\n\n    protected pan: number;\n\n    protected fade: number;\n\n    protected fadeStartTime: number;\n\n    protected fadeEndTime: number;\n\n    //******************************************************************************************************************\n    //  CREATE\n    //******************************************************************************************************************\n\n    public create(node: Element): void {\n        this.id = node.nodeName;\n        this.alias = node.hasAttribute(SongAttributes.ALIAS) ? node.getAttribute(SongAttributes.ALIAS) : null;\n        this.instance = null;\n        this.group = node.hasAttribute(SongAttributes.GROUP) ? node.getAttribute(SongAttributes.GROUP) : null;\n        this.volume = node.hasAttribute(SongAttributes.VOLUME)\n            ? parseFloat(node.getAttribute(SongAttributes.VOLUME))\n            : 1;\n        this.pan = node.hasAttribute(SongAttributes.PAN) ? parseFloat(node.getAttribute(SongAttributes.PAN)) : 0;\n        this.fade = 0;\n        this.fadeStartTime = 0;\n        this.fadeEndTime = 0;\n\n        if (node.hasAttribute(SongAttributes.SONG)) {\n            if (PIXI.sound.exists(node.getAttribute(SongAttributes.SONG))) {\n                this.sound = PIXI.sound.find(node.getAttribute(SongAttributes.SONG));\n            } else {\n                this.sound = null;\n\n                if (DEBUG) {\n                    this.log(`ERROR no sound with id: ${node.getAttribute(\"Song\")}`);\n                }\n            }\n        } else {\n            this.sound = null;\n\n            if (DEBUG) {\n                this.log(\"ERROR no attribute: Song\");\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  PLAY\n    //******************************************************************************************************************\n\n    public play(\n        loop: boolean,\n        fadeIn: number,\n        reset: boolean,\n        onProgress: (progress: number, duration: number) => void = null,\n    ): void {\n        if (this.group === \"BackgroundMusic\" && !AppContext.current.isBackgroundMusicEnabled) {\n            return;\n        }\n\n        if (this.sound !== null && (reset || this.instance === null)) {\n            this.sound.filters = this.pan === 0 ? null : [new PIXI.sound.filters.StereoFilter(this.pan)];\n\n            if (fadeIn > 0) {\n                this.fade = 1;\n                this.fadeStartTime = new Date().getTime();\n                this.fadeEndTime = this.fadeStartTime + fadeIn * 16.7;\n            } else {\n                this.fade = 0;\n                this.fadeStartTime = 0;\n                this.fadeEndTime = 0;\n            }\n\n            this.playInstance(loop, onProgress);\n        }\n\n        if (this.instance != null && this.group === \"BackgroundMusic\" && !DataManager.BackSoundsPlayingFromGame) {\n            this.instance.volume = 0;\n        }\n    }\n\n    protected playInstance(\n        loop: boolean = true,\n        onProgress: (progress: number, duration: number) => void = null,\n    ): void {\n        this.stopInstance();\n\n        this.instance = <any>(\n            this.sound.play(this.alias !== null ? { sprite: this.alias, volume: this.volume } : { volume: this.volume })\n        );\n        this.instance.on(\"end\", loop ? this.playInstance : this.stopInstance, this);\n\n        if (this.fade !== 0) {\n            this.instance.on(\"progress\", this.fade === 1 ? this.onFadeIn : this.onFadeOut, this);\n        }\n\n        if (onProgress) {\n            this.instance.on(\"progress\", onProgress, this);\n        }\n\n        if (this.instance != null && this.group === \"BackgroundMusic\" && !DataManager.BackSoundsPlayingFromGame) {\n            this.instance.volume = 0;\n        }\n    }\n\n    public isPlaying(): boolean {\n        return this.sound.isPlaying;\n    }\n\n    protected onFadeIn(): void {\n        const duration = this.fadeEndTime - this.fadeStartTime;\n        const progress = new Date().getTime() - this.fadeStartTime;\n        const volume = this.volume * Math.min(progress / duration, 1);\n\n        if (this.group === \"BackgroundMusic\" && !DataManager.BackSoundsPlayingFromGame) {\n            this.instance.volume = 0;\n        } else {\n            try {\n                this.instance.volume = volume;\n            } catch (e) {}\n        }\n\n        if (volume === this.volume) {\n            this.instance.off(\"progress\", this.onFadeIn, this);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  STOP\n    //******************************************************************************************************************\n\n    public toggleGroup(group: string, toggle: boolean = false): void {\n        if (this.group === group && this.instance != null) {\n            if (toggle) {\n                this.instance.volume = this.volume;\n            } else {\n                this.instance.volume = 0;\n            }\n        }\n    }\n\n    public stop(fadeOut: number): void {\n        if (this.instance != null) {\n            if (fadeOut > 0) {\n                this.fade = -1;\n                this.fadeStartTime = new Date().getTime();\n                this.fadeEndTime = this.fadeStartTime + fadeOut * 16.7;\n\n                this.instance.off(\"progress\", this.onFadeIn, this);\n                this.instance.on(\"progress\", this.onFadeOut, this);\n            } else {\n                this.stopInstance();\n            }\n        }\n    }\n\n    public pause(): void {\n        if (this.instance != null) {\n            this.sound.pause();\n        }\n    }\n\n    public resume(): void {\n        if (this.instance != null) {\n            this.sound.resume();\n        }\n    }\n\n    protected stopInstance(): void {\n        if (this.instance != null) {\n            this.instance.off(\"progress\", this.onFadeIn, this);\n            this.instance.off(\"progress\", this.onFadeOut, this);\n            this.instance.off(\"end\", this.playInstance, this);\n            this.instance.off(\"end\", this.stopInstance, this);\n            this.instance.stop();\n            this.instance = null;\n        }\n    }\n\n    protected onFadeOut(): void {\n        const duration = this.fadeEndTime - this.fadeStartTime;\n        const progress = new Date().getTime() - this.fadeStartTime;\n        const volume = this.volume - this.volume * Math.min(progress / duration, 1);\n\n        if (this.group === \"BackgroundMusic\" && !DataManager.BackSoundsPlayingFromGame) {\n            this.instance.volume = 0;\n        } else {\n            try {\n                this.instance.volume = volume;\n            } catch (e) {}\n        }\n\n        if (volume === 0) {\n            this.stopInstance();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  LOG\n    //******************************************************************************************************************\n\n    protected log(s: string): void {\n        if (DEBUG) {\n            const compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\nexport const SongAttributes = {\n    SONG: \"Song\",\n    ALIAS: \"Alias\",\n    GROUP: \"Group\",\n    VOLUME: \"Volume\",\n    PAN: \"Pan\",\n    PLAY: \"Play\",\n    LOOP: \"Loop\",\n    STOP: \"Stop\",\n    FADEIN: \"FadeIn\",\n    FADEOUT: \"FadeOut\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Sounds/Song.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\nimport { Symbols } from \"./Symbols\";\nimport { Reel } from \"./Reel\";\nimport { Reel2 } from \"./Reel2\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../Utils/FrameTimer\";\nimport { Configuration } from \"../Components/Configuration\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\nimport { ImageElement } from \"../Components/Elements/Graphics/ImageElement\";\nimport { Tweens } from \"../Components/Effects/Tweens\";\nimport { DataManager } from \"../Managers/DataManager\";\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\nimport { IReelTeasingAttributes, TeasingComponent } from \"../CustomComponents/TeasingComponent\";\nimport { TeasingBonus } from \"../CustomComponents/TeasingBonus\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\n\ntype IReel = Communication.Game.IReel;\n\n/**\n * Machine handle reels and symbols for reels rotation.\n * Machine define behaviour for complete flow of reel rotation.\n * @class Machine\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Machine extends BaseElement {\n    // events for view when reel or machine stopped\n    static MachineStopped: string = \"machineStopped\";\n    static ReelStopped: string = \"onReelStopped\";\n\n    // symbols from view\n    protected _symbols: Symbols;\n    // array of reel indexes\n    protected _reels: Array<Reel2>;\n    // array of stopped symbols for finish reel rotation\n    protected _stoppedSymbolsArray: Array<IReel>;\n\n    // count of reel\n    protected _reelCount: number;\n    // reels x positions\n    protected _reelX: Array<number>;\n    // reels y positions\n    protected _reelY: Array<number>;\n    // symbol width without offsetX\n    protected _symbolWidth: number;\n    // symbol height without offsetY\n    protected _symbolHeight: number;\n    // number of symbols which will be visible on screen during the rotation\n    protected _visibleSymbolCount: number;\n    // min spin rotation in frames\n    protected _minSpinRotation: number;\n    // min spin rotation in frames for high wins\n    protected _minSpinRotationLong: number;\n\n    // delay to start rotation in frames\n    protected _startDelay: number;\n    // delay to stop rotation in frames\n    protected _stopDelay: number;\n    // configuration ID for reels\n    protected _reelConfiguration: string;\n\n    // timer for minimal time to stop reels\n    protected _stopTimer: FrameTimerEventEmitter;\n    // timer for defined time in configuration.json to stop reels\n    protected _legalStopTimer: any;\n\n    // boolean which indicates that machine can stop and rotate min defined time\n    protected _stoppedFromMachine: boolean;\n    // boolean which indicates that machine can stop and response has arrived\n    protected _stoppedFromServer: boolean;\n    // boolean which indicates that machine can stop and rotate min legal time\n    protected _stoppedFromLegal: boolean;\n\n    protected _startSpinTime: number;\n\n    // container as a parent for reels\n    protected _reelsContainer: PIXI.Container;\n\n    // helper to count stopped reels\n    protected _stoppedReelIndexes: number;\n\n    // information for view which reel was stopped actualy\n    public actualReelStopped: number;\n\n    // ice & fire teasing\n    public respin: number;\n\n    private _teasingComponent: TeasingComponent;\n\n    protected elementInstance: Array<Object> = [];\n\n    constructor() {\n        super();\n\n        // default values\n        this._reels = [];\n        this._stoppedSymbolsArray = [];\n        this._stoppedFromServer = false;\n        this._stoppedFromMachine = false;\n        this._stoppedFromLegal = false;\n        this._stoppedReelIndexes = 0;\n\n        this._stopTimer = CreateFrameTimer(\"Machine\");\n        this._stopTimer.on(FrameTimerEvents.Complete, this.spinStop.bind(this));\n\n        this.actualReelStopped = -1;\n\n        this._reelsContainer = new PIXI.Container();\n        this.addChild(this._reelsContainer);\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    public create(node: Element): void {\n        super.create(node);\n\n        if (this.maskSprite != null && this._reelsContainer != null) {\n            this._reelsContainer.addChild(this.maskSprite);\n            this._reelsContainer.mask = this.maskSprite;\n        }\n\n        if (node.hasAttribute(MachineAttributes.CONFIGS)) {\n            let configs: Array<string> = node.getAttribute(MachineAttributes.CONFIGS).split(\";\");\n            for (let i: number = 0; i < configs.length; i++) {\n                let config: Element = Configuration.Configurations[configs[i]];\n                if (config != null) {\n                    this.configurate(config);\n                }\n            }\n        }\n    }\n\n    /**\n     * Get attributes from configuration and set up supported properties.\n     * @method configurate\n     * @param node is Element from xml\n     * @return void\n     */\n    protected configurate(node: Element): void {\n        /*\n         * ReelCount is count of reels on screen for game.\n         * @property ReelCount\n         * @type Number\n         * @default null\n         */\n        if (node.hasAttribute(\"ReelCount\")) {\n            this._reelCount = parseInt(node.getAttribute(\"ReelCount\"));\n        }\n\n        /*\n         * ReelX is array of x position for reels.\n         * @property ReelX\n         * @type Array<number>\n         * @default null\n         */\n        if (node.hasAttribute(\"ReelX\")) {\n            this._reelX = ArrayUtils.numberArray(node.getAttribute(\"ReelX\"));\n        }\n\n        /*\n         * ReelY is array of y position for reels.\n         * @property ReelY\n         * @type Array<number>\n         * @default null\n         */\n        if (node.hasAttribute(\"ReelY\")) {\n            this._reelY = ArrayUtils.numberArray(node.getAttribute(\"ReelY\"));\n        }\n\n        /*\n         * Standard symbol width without offsets.\n         * @property SymbolWidth\n         * @type number\n         * @default null\n         */\n        if (node.hasAttribute(\"SymbolWidth\")) {\n            this._symbolWidth = parseInt(node.getAttribute(\"SymbolWidth\"));\n        }\n\n        /*\n         * Standard symbol height without offsets.\n         * @property SymbolHeight\n         * @type number\n         * @default null\n         */\n        if (node.hasAttribute(\"SymbolHeight\")) {\n            this._symbolHeight = parseInt(node.getAttribute(\"SymbolHeight\"));\n        }\n\n        /*\n         * Number of symbols visible on reel.\n         * @property VisibleSymbolCount\n         * @type number\n         * @default null\n         */\n        if (node.hasAttribute(\"VisibleSymbolCount\")) {\n            this._visibleSymbolCount = parseInt(node.getAttribute(\"VisibleSymbolCount\"));\n        }\n\n        /*\n         * Min spin rotation in frames.\n         * @property MinSpinRotation\n         * @type number\n         * @default 40\n         */\n        if (node.hasAttribute(\"MinSpinRotation\")) {\n            this._minSpinRotation = parseInt(node.getAttribute(\"MinSpinRotation\"));\n        } else {\n            this._minSpinRotation = 40;\n        }\n\n        /*\n         * Min spin rotation in frames for outro high wins.\n         * @property MinSpinRotationLong\n         * @type number\n         * @default 100\n         */\n        if (node.hasAttribute(\"MinSpinRotationLong\")) {\n            this._minSpinRotationLong = parseInt(node.getAttribute(\"MinSpinRotationLong\"));\n        } else {\n            this._minSpinRotationLong = 100;\n        }\n\n        /*\n         * Delay to start rotation in frames.\n         * @property StartDelay\n         * @type number\n         * @default 3\n         */\n        if (node.hasAttribute(\"StartDelay\")) {\n            this._startDelay = parseInt(node.getAttribute(\"StartDelay\"));\n        } else {\n            this._startDelay = 3;\n        }\n\n        /*\n         * Delay to stop rotation in frames.\n         * @property StopDelay\n         * @type number\n         * @default 10\n         */\n        if (node.hasAttribute(\"StopDelay\")) {\n            this._stopDelay = parseInt(node.getAttribute(\"StopDelay\"));\n        } else {\n            this._stopDelay = 10;\n        }\n\n        /*\n         * Configuration ID for reels.\n         * @property StopDelay\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"ReelConfiguration\")) {\n            this._reelConfiguration = node.getAttribute(\"ReelConfiguration\");\n        }\n    }\n\n    /**\n     * Create reels based on response and xml configuration.\n     * @method createReels\n     * @param reels Array<Array<number>> from initialization and based on response\n     * @return void\n     */\n    protected createReels(reels: Array<Array<number>>): void {\n        for (let i: number = 0; i < this._reelCount; i++) {\n            this._reels.push(new Reel2());\n        }\n\n        for (let i: number = 0; i < this._reelCount; i++) {\n            const reel = this._reels[i];\n\n            if (this._reelConfiguration != null) {\n                let configs: Array<string> = this._reelConfiguration.split(\";\");\n                for (let j: number = 0; j < configs.length; j++) {\n                    reel.configure(Configuration.Configurations[configs[j]]);\n                }\n            }\n            reel.visible = false;\n            //reel.initialize(i, this._symbols, reels[i], this._reelX[i], this._reelY[i], this._visibleSymbolCount, 1, 1, this._symbolWidth, this._symbolHeight, this._startDelay * i, this._stopDelay * i);\n            reel.initialize(\n                i > 0 ? this._reels[i - 1] : null,\n                i < this._reelCount - 1 ? this._reels[i + 1] : null,\n                i,\n                this._symbols,\n                reels[i],\n                this._reelX[i],\n                this._reelY[i],\n                this._visibleSymbolCount,\n                2,\n                1,\n                this._symbolWidth,\n                this._symbolHeight,\n                this._startDelay * i,\n                this._stopDelay * i,\n            );\n            reel.on(Reel.ReelStopped, this.onReelStopped.bind(this));\n            this._reelsContainer.addChild(reel);\n        }\n        this._reelsContainer.visible = false;\n    }\n\n    /**\n     * Initialize reference correct symbols and create reels.\n     * @method initialize\n     * @param symbols Symbols\n     * @param reels Array<Array<number>>\n     * @return void\n     */\n    public initialize(symbols: Symbols, reels: Array<Array<number>>, teasingComponent?: TeasingComponent): void {\n        if (teasingComponent != null) {\n            this._teasingComponent = teasingComponent;\n        } else {\n            this._teasingComponent = new TeasingComponent();\n        }\n\n        this._symbols = symbols;\n        this.createReels(reels);\n    }\n\n    /**\n     *\n     * @param {Object} element\n     */\n    public addElementInstance(element: Object): void {\n        this.elementInstance[Object.keys(element)[0]] = element[Object.keys(element)[0]];\n    }\n\n    /**\n     * Set symbols which stopped after reels will be stopped.\n     * @method setStoppedSymbolsArray\n     * @param value Array<number>\n     * @return void\n     */\n    public setStoppedSymbolsArray(value: Array<IReel>): void {\n        this._stoppedSymbolsArray = value;\n    }\n\n    /**\n     * Show static symbols on reels.\n     * @method showSymbols\n     * @param reelsData Array<IReel>\n     * @return void\n     */\n    public showSymbols(reelsData: Array<IReel>): void {\n        if (DEBUG) {\n            this.log(\"showSymbols\");\n        }\n\n        this.actualReelStopped = -1;\n\n        if (this._reels != null) {\n            for (let i: number = 0; i < this._reelCount; i++) {\n                if (reelsData[i] != null) {\n                    if (this._reels[i] != null) {\n                        this._reels[i].visible = true;\n                        this._reels[i].setData(reelsData[i]);\n                        this._reels[i].showSymbols();\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"ERROR no reel with index: \" + i);\n                        }\n                    }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR no reelsData with index: \" + i);\n                    }\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no reels\");\n            }\n        }\n    }\n\n    /**\n     * Start spinning reels.\n     * @method spinStart\n     * @param longRotation boolean\n     * @return void\n     */\n    public spinStart(longRotation?: boolean): void {\n        if (DEBUG) {\n            this.log(\"spinStart\");\n        }\n\n        this._stoppedFromServer = false;\n        this._stoppedFromMachine = false;\n        this._stoppedFromLegal = false;\n\n        this._startSpinTime = Date.now();\n\n        this.visible = true;\n        this._reelsContainer.visible = true;\n\n        this.actualReelStopped = -1;\n        this._stoppedReelIndexes = 0;\n\n        let delay = 0;\n\n        if (this._reels != null) {\n            for (let i: number = 0; i < this._reelCount; i++) {\n                if (this.respin != null) {\n                    if (i === 0 && this.respin !== 1) {\n                        continue;\n                    }\n\n                    if (i === 1 && this.respin !== 2) {\n                        continue;\n                    }\n\n                    if (i === 2 && this.respin !== 4) {\n                        continue;\n                    }\n\n                    // let iceCount = 0;\n                    //\n                    // for (let i = 0; i < this._stoppedSymbolsArray.length; i++) {\n                    //     if (this._stoppedSymbolsArray[i].symbols.indexOf(7) !== -1) {\n                    //         iceCount++;\n                    //     }\n                    // }\n                }\n\n                if (this._reels[i] != null) {\n                    if (this._stoppedSymbolsArray.length > 0) {\n                        this._reels[i].visible = true;\n                        this._reels[i].setData(this._stoppedSymbolsArray[i]);\n                        this._reels[i].showSymbols();\n                        this._reels[i].spinStart(delay);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"ERROR no stopped symbols\");\n                        }\n                    }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR no reel with index: \" + i);\n                    }\n                }\n            }\n\n            if (longRotation != null && longRotation) {\n                this._stopTimer.start(this._minSpinRotationLong);\n            } else {\n                this._stopTimer.start(this._minSpinRotation);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no reels\");\n            }\n        }\n\n        if (delay > 0) {\n            setTimeout(() => {\n                PlayList.play(\"SND_BaseRespinStart\");\n                PlayList.loop(\"SND_BaseRespinLoop\");\n                PlayList.loop(\"SND_BaseRiser\");\n\n                PlayList.play(\"SND_BaseRotationStart\");\n                //PlayList.loop('SND_BaseRotation', 0, true);\n            }, delay);\n        } else {\n            PlayList.play(\"SND_BaseRotationStart\");\n            //PlayList.loop('SND_BaseRotation', 0, true);\n        }\n    }\n\n    protected verifyMinGameRoundDurationConditions(): boolean {\n        return (\n            (AppContext.gameConfiguration.MinGameRoundDuration > 0 ||\n                AppContext.gameConfiguration.GameRoundMinSpan > 0) &&\n            !ModuleManager.freespinsActive()\n        );\n    }\n\n    /**\n     * Stop reels rotation.\n     * @method spinStop\n     * @param event any - from timer\n     * @param force boolean - default false used when spin_stop was dispatch\n     * @param fromServer boolean - default false used when spin_stop was dispatch from server\n     * @param legal\n     * @return void\n     */\n    public spinStop(event: any, force: boolean = false, fromServer: boolean = false, legal: boolean = false): void {\n        if (fromServer) {\n            this._stoppedFromServer = true;\n            if (this._legalStopTimer != null) {\n                clearTimeout(this._legalStopTimer);\n            }\n            if (this.verifyMinGameRoundDurationConditions()) {\n                this._legalStopTimer = setTimeout(\n                    () => this.spinStop(null, false, false, true),\n                    this.getLegalRemainingSpinDuration(),\n                );\n            } else {\n                this._stoppedFromLegal = true;\n            }\n        } else if (legal) {\n            if (this._legalStopTimer != null) {\n                clearTimeout(this._legalStopTimer);\n            }\n            this._stoppedFromLegal = true;\n        } else {\n            this._stopTimer.stop();\n            this._stoppedFromMachine = true;\n        }\n\n        if (force) {\n            if (this._legalStopTimer != null) {\n                clearTimeout(this._legalStopTimer);\n            }\n            this._stoppedFromLegal = true;\n            this._stopTimer.stop();\n            this._stoppedFromMachine = true;\n        }\n\n        if (DEBUG) {\n            this.log(\"spinStop \" + force);\n        }\n\n        if (this._stoppedFromServer && this._stoppedFromMachine && this._stoppedFromLegal) {\n            if (\n                !ModuleManager.freespinsActive() &&\n                !(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")\n            ) {\n                DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n                DataManager.updateDataElement(GameData.DataTotalWinDenom, \"0\");\n            }\n\n            let rta: Array<IReelTeasingAttributes>;\n\n            if (this.elementInstance[\"teasing\"] != null) {\n                this.elementInstance[\"teasing\"].forEach((teasingComponent: TeasingComponent) => {\n                    let reelTeasingAttributes = teasingComponent.checkOnInit({\n                        force: force,\n                        stoppedSymbols: this._stoppedSymbolsArray,\n                    });\n                    if (teasingComponent.teasingEnabled) {\n                        rta = reelTeasingAttributes;\n                    }\n                }, this);\n            }\n\n            if (this._reels != null) {\n                for (let i: number = 0; i < this._reelCount; i++) {\n                    if (this._reels[i] != null) {\n                        if (this._stoppedSymbolsArray.length !== 0) {\n                            this._reels[i].setData(this._stoppedSymbolsArray[i]);\n\n                            if (typeof rta !== \"undefined\") {\n                                this._reels[i].spinStop(force, rta[i].stopDelay);\n                            } else {\n                                this._reels[i].spinStop(force);\n                            }\n                        } else {\n                            if (DEBUG) {\n                                this.log(\"ERROR no stopped symbols\");\n                            }\n                        }\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"ERROR no reel with index: \" + i);\n                        }\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no reels\");\n                }\n            }\n        }\n    }\n\n    /**\n     * Get remaining time for legal spin duration\n     * @method getLegalRemainingSpinDuration\n     * @return number\n     */\n    protected getLegalRemainingSpinDuration(): number {\n        if (AppContext.gameConfiguration.GameRoundMinSpan > 0) {\n            return this.calculateRemainingSpinDuration(AppContext.gameConfiguration.GameRoundMinSpan);\n        }\n\n        if (AppContext.gameConfiguration.MinGameRoundDuration > 0) {\n            return AppContext.gameConfiguration.MinGameRoundDuration;\n        }\n\n        return 0;\n    }\n\n    /**\n     * Calculate remaining time for legal spin duration\n     * @method calculateRemainingSpinDuration\n     * @param minTime: number - minimal spin duration in seconds\n     * @return number\n     */\n    protected calculateRemainingSpinDuration(minTime: number): number {\n        const now = Date.now();\n        const diff = now - this._startSpinTime;\n        const reelStopDuration = this.getReelStopDuration();\n        return Math.max(minTime - diff - reelStopDuration, 0);\n    }\n\n    protected getReelStopDuration(): number {\n        return (this._reels[this._reelCount - 1].getStopDuration() / 60) * 1000;\n    }\n\n    public onReelStopped(reelIndex: number): void {\n        if (this.respin == null) {\n            if (this._stoppedSymbolsArray[reelIndex].symbols.indexOf(7) !== -1) {\n                let count = 1;\n\n                for (let i = 0; i < reelIndex; i++) {\n                    if (this._stoppedSymbolsArray[i].symbols.indexOf(7) !== -1) {\n                        count++;\n                    }\n                }\n\n                if (count > 0) {\n                    PlayList.play(`SND_BaseIceTeasing${count}`);\n                }\n            }\n\n            if (this._stoppedSymbolsArray[reelIndex].symbols.indexOf(8) !== -1) {\n                let count = 1;\n\n                for (let i = 0; i < reelIndex; i++) {\n                    if (this._stoppedSymbolsArray[i].symbols.indexOf(8) !== -1) {\n                        count++;\n                    }\n                }\n\n                if (count > 0) {\n                    PlayList.play(`SND_BaseIceTeasing${count}`);\n                }\n            }\n        }\n\n        PlayList.play(\"SND_BaseRotationEnd\" + reelIndex);\n\n        this._stoppedReelIndexes++;\n        this.actualReelStopped = reelIndex;\n        this._reels[reelIndex].visible = false;\n        this.emit(Machine.ReelStopped);\n\n        if (this._stoppedReelIndexes === this._reelCount || this.respin != null) {\n            PlayList.stop(\"SND_BaseRotation\", 10);\n            if (this._legalStopTimer != null) {\n                clearTimeout(this._legalStopTimer);\n            }\n            this._stopTimer.stop();\n            this._reelsContainer.visible = false;\n            if (DEBUG) {\n                const old = AppContext.gameConfiguration.MinGameRoundDuration;\n                const current = AppContext.gameConfiguration.GameRoundMinSpan;\n                const minDuration = current > 0 ? current : old > 0 ? old : 0;\n                const spinDuration = Date.now() - this._startSpinTime;\n\n                if (spinDuration > minDuration || !this.verifyMinGameRoundDurationConditions()) {\n                    this.log(\"Spin time duration: \" + spinDuration + \" ms\");\n                } else {\n                    console.log(\"%cError spin time duration:\" + spinDuration + \" ms\", \"color: #ff9900\");\n                }\n            }\n\n            this.emit(Machine.MachineStopped);\n        }\n    }\n}\n\n/**\n * Inherits attributes from BaseElement.\n */\nexport const MachineAttributes = {\n    /**\n     * Name of config for machine.\n     * @property Configs\n     * @type string\n     * @default null\n     */\n    CONFIGS: \"Configs\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Machine.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { Symbol } from \"./Symbol\";\nimport { Symbols } from \"./Symbols\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Tweens } from \"../Components/Effects/Tweens\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\n\n/**\n * Class reel represent reel symbols rotation.\n * @class Reel\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Reel extends BaseElement {\n    //******************************************************************************************************************\n    //  EVENTS\n    //******************************************************************************************************************\n\n    public static readonly ReelStopped: string = \"reelStopped\";\n    public static readonly ReelStopping: string = \"reelStopping\";\n\n    //******************************************************************************************************************\n    //  VARIABLES (CONFIGURE)\n    //******************************************************************************************************************\n\n    protected preRoll: number;\n\n    protected preRollSpeed: number;\n\n    protected postRoll: number;\n\n    protected postRollSpeed: number;\n\n    protected speed: number;\n\n    protected forceSpeed: number;\n\n    //******************************************************************************************************************\n    //  VARIABLES (INITIALIZE)\n    //******************************************************************************************************************\n\n    protected index: number;\n\n    protected symbols: Symbols;\n\n    protected strip: Array<number>;\n\n    protected positionX: number;\n\n    protected positionY: number;\n\n    protected symbolCount: number;\n\n    protected symbolTopCount: number;\n\n    protected symbolBottomCount: number;\n\n    protected symbolWidth: number;\n\n    protected symbolHeight: number;\n\n    protected startDelay: number;\n\n    protected stopDelay: number;\n\n    protected previousReel: Reel;\n\n    protected nextReel: Reel;\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected stopTimer: FrameTimerEventEmitter;\n\n    protected currentSymbols: Array<Symbol>;\n\n    protected data: Communication.Game.IReel;\n\n    protected shouldBeStopping: boolean;\n\n    protected isStopping: boolean;\n\n    protected stoppingCounter: number;\n\n    protected isTeasing: boolean;\n\n    protected teasingSymbols: Array<number>;\n\n    protected rollSpeed: number;\n\n    protected stripIndex: number;\n\n    //******************************************************************************************************************\n    //  CONFIGURE\n    //******************************************************************************************************************\n\n    public configure(node: Element): void {\n        this.preRoll = node.hasAttribute(\"PreRoll\") ? parseInt(node.getAttribute(\"PreRoll\")) : 180;\n        this.preRollSpeed = node.hasAttribute(\"PreRollSpeed\") ? parseInt(node.getAttribute(\"PreRollSpeed\")) : 10;\n        this.postRoll = node.hasAttribute(\"PostRoll\") ? parseInt(node.getAttribute(\"PostRoll\")) : 180;\n        this.postRollSpeed = node.hasAttribute(\"PostRollSpeed\") ? parseInt(node.getAttribute(\"PostRollSpeed\")) : 5;\n        this.speed = node.hasAttribute(\"Speed\") ? parseInt(node.getAttribute(\"Speed\")) : 3;\n        this.forceSpeed = node.hasAttribute(\"ForceSpeed\") ? parseInt(node.getAttribute(\"ForceSpeed\")) : 2;\n    }\n\n    //******************************************************************************************************************\n    //  INITIALIZE\n    //******************************************************************************************************************\n\n    public initialize(\n        previousReel: Reel,\n        nextReel: Reel,\n        index: number,\n        symbols: Symbols,\n        strip: Array<number>,\n        positionX: number,\n        positionY: number,\n        symbolCount: number,\n        symbolTopCount: number,\n        symbolBottomCount: number,\n        symbolWidth: number,\n        symbolHeight: number,\n        startDelay: number,\n        stopDelay: number,\n    ): void {\n        this.previousReel = previousReel;\n        this.nextReel = nextReel;\n        this.index = index;\n        this.symbols = symbols;\n        this.strip = strip;\n        this.positionX = positionX;\n        this.positionY = positionY;\n        this.symbolCount = symbolCount;\n        this.symbolTopCount = symbolTopCount;\n        this.symbolBottomCount = symbolBottomCount;\n        this.symbolWidth = symbolWidth;\n        this.symbolHeight = symbolHeight;\n        this.startDelay = startDelay;\n        this.stopDelay = stopDelay;\n\n        this.stopTimer = CreateFrameTimer(\"reel\");\n        this.stopTimer.on(FrameTimerEvents.Complete, this.onStopTimerComplete.bind(this));\n\n        this.currentSymbols = [];\n    }\n\n    //******************************************************************************************************************\n    //  SET DATA\n    //******************************************************************************************************************\n\n    public setData(data: Communication.Game.IReel) {\n        this.data = data;\n    }\n\n    //******************************************************************************************************************\n    //  SHOW SYMBOLS\n    //******************************************************************************************************************\n\n    public showSymbols(): void {\n        this.shouldBeStopping = false;\n        this.isStopping = false;\n        this.stoppingCounter = 0;\n        this.isTeasing = false;\n        this.teasingSymbols = [];\n\n        this.x = this.positionX;\n        this.y = this.positionY;\n\n        while (this.currentSymbols.length > 0) {\n            this.returnSymbol(this.currentSymbols.pop());\n        }\n\n        for (let i = 0; i < this.symbolBottomCount + this.symbolCount + this.symbolTopCount; i++) {\n            let symbolId: number;\n            let symbolCase: string;\n\n            if (i < this.symbolBottomCount) {\n                symbolId =\n                    this.strip[\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase = i === this.symbolBottomCount - 1 ? Symbol.CaseRotation : Symbol.CaseBlur;\n            } else if (i < this.symbolBottomCount + this.symbolCount) {\n                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - i - 1];\n                symbolCase = Symbol.CaseRotation;\n            } else {\n                symbolId =\n                    this.strip[\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase = i === this.symbolBottomCount + this.symbolCount ? Symbol.CaseRotation : Symbol.CaseBlur;\n            }\n\n            if (symbolId == 10 && symbolCase == Symbol.CaseRotation) {\n                symbolCase = \"ROTATION_NO_BACKGROUND\";\n            }\n\n            this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\n\n            this.addChild(this.currentSymbols[0]);\n        }\n\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            const symbol = this.currentSymbols[i];\n            symbol.x = -symbol.offsetX;\n            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SPIN START\n    //******************************************************************************************************************\n\n    public spinStart(): void {\n        this.shouldBeStopping = false;\n        this.isStopping = false;\n        this.stoppingCounter = 0;\n        this.isTeasing = false;\n        this.teasingSymbols = [];\n        this.rollSpeed = this.speed;\n        this.stripIndex = (this.data.index - this.symbolTopCount + this.strip.length) % this.strip.length;\n\n        this.spinPreRoll();\n    }\n\n    //******************************************************************************************************************\n    //  SPIN STOP\n    //******************************************************************************************************************\n\n    public spinStop(force: boolean = false, customDelay: number = 0): void {\n        this.stopTimer.stop();\n\n        if (force) {\n            this.shouldBeStopping = true;\n            this.rollSpeed = this.forceSpeed;\n            this.emit(Reel.ReelStopping, this.index);\n        } else {\n            this.stopTimer.start(customDelay !== 0 ? customDelay : this.stopDelay);\n        }\n    }\n\n    protected onStopTimerComplete(): void {\n        this.emit(Reel.ReelStopping, this.index);\n        this.shouldBeStopping = true;\n        this.isStopping = true;\n    }\n\n    public getStopDuration(): number {\n        const stoppingSymbols = this.symbolTopCount + this.symbolCount + this.symbolBottomCount - 1;\n        return this.stopDelay + stoppingSymbols * this.speed + this.postRollSpeed * 2;\n    }\n\n    //******************************************************************************************************************\n    //  SPIN TEASE\n    //******************************************************************************************************************\n\n    public spinTease(symbols: Array<number>, customDelay: number = 0): void {\n        this.shouldBeStopping = false;\n        this.isStopping = false;\n        this.stoppingCounter = 0;\n        this.isTeasing = true;\n        this.teasingSymbols = symbols;\n\n        this.stopTimer.stop();\n        this.stopTimer.start(customDelay !== 0 ? customDelay : this.stopDelay);\n    }\n\n    //******************************************************************************************************************\n    //  SPIN PRE ROLL\n    //******************************************************************************************************************\n\n    protected spinPreRoll(): void {\n        Tweens.removeTweens(this, \"position\");\n        Tweens.positionTween(this, {\n            tweenX: [this.positionX, this.positionX, this.positionX],\n            tweenY: [this.positionY, this.positionY - this.preRoll, this.positionY],\n            tweenDuration: this.preRollSpeed * 2,\n            tweenDelay: this.startDelay,\n            callbackFunction: this.spinRoll,\n            callbackScope: this,\n        });\n    }\n\n    //******************************************************************************************************************\n    //  SPIN ROLL\n    //******************************************************************************************************************\n\n    protected spinRoll(): void {\n        Tweens.removeTweens(this, \"position\");\n        Tweens.positionTween(this, {\n            tweenX: [this.positionX, this.positionX],\n            tweenY: [this.positionY, this.positionY + this.symbolHeight],\n            tweenDuration: this.rollSpeed,\n            callbackFunction: this.updateReel,\n            callbackScope: this,\n        });\n    }\n\n    protected updateReel(): void {\n        this.returnSymbol(this.currentSymbols.pop());\n\n        if (this.shouldBeStopping && !this.isStopping) {\n            if (this.previousReel === null) {\n                this.isStopping = true;\n            } else if (this.previousReel.isStopping) {\n                this.isStopping = true;\n            }\n        }\n\n        this.stripIndex = (this.stripIndex - 1 + this.strip.length) % this.strip.length;\n\n        let symbolId = this.strip[this.stripIndex];\n        let symbolCase = Symbol.CaseBlur;\n\n        if (this.isStopping) {\n            if (this.stoppingCounter < this.symbolBottomCount) {\n                symbolId =\n                    this.strip[\n                        (this.data.index +\n                            this.symbolBottomCount +\n                            this.symbolCount -\n                            this.stoppingCounter -\n                            1 +\n                            this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase =\n                    this.stoppingCounter === this.symbolBottomCount - 1 ? Symbol.CaseRotation : Symbol.CaseBlur;\n            } else if (this.stoppingCounter < this.symbolBottomCount + this.symbolCount) {\n                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - this.stoppingCounter - 1];\n                symbolCase = Symbol.CaseRotation;\n            } else {\n                symbolId =\n                    this.strip[\n                        (this.data.index +\n                            this.symbolBottomCount +\n                            this.symbolCount -\n                            this.stoppingCounter -\n                            1 +\n                            this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase =\n                    this.stoppingCounter === this.symbolBottomCount + this.symbolCount\n                        ? Symbol.CaseRotation\n                        : Symbol.CaseBlur;\n            }\n\n            this.stoppingCounter++;\n        }\n\n        this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\n\n        this.addChild(this.currentSymbols[0]);\n\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            const symbol = this.currentSymbols[i];\n            symbol.x = -symbol.offsetX;\n            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\n        }\n\n        if (\n            this.isStopping &&\n            this.stoppingCounter === this.symbolBottomCount + this.symbolCount + this.symbolTopCount\n        ) {\n            this.spinPostRoll();\n        } else {\n            this.spinRoll();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SPIN POST ROLL\n    //******************************************************************************************************************\n\n    protected spinPostRoll(): void {\n        Tweens.removeTweens(this, \"position\");\n        Tweens.positionTween(this, {\n            tweenX: [this.positionX, this.positionX, this.positionX],\n            tweenY: [this.positionY, this.positionY + this.postRoll, this.positionY],\n            tweenDuration: this.postRollSpeed * 2,\n            callbackFunction: this.spinComplete,\n            callbackScope: this,\n        });\n    }\n\n    //******************************************************************************************************************\n    //  SPIN COMPLETE\n    //******************************************************************************************************************\n\n    protected spinComplete(): void {\n        Tweens.removeTweens(this, \"position\");\n\n        while (this.currentSymbols.length > 0) {\n            this.returnSymbol(this.currentSymbols.pop());\n        }\n\n        this.emit(Reel.ReelStopped, this.index);\n    }\n\n    //******************************************************************************************************************\n    //  SYMBOLS\n    //******************************************************************************************************************\n\n    protected getSymbol(symbolId: number, symbolCase: string): Symbol {\n        return this.symbols.getSymbol(symbolId, symbolCase);\n    }\n\n    protected returnSymbol(symbol: Symbol): void {\n        this.symbols.returnSymbol(symbol);\n    }\n\n    public isReelStopping(): boolean {\n        return this.isStopping;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Reel.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Reel } from \"./Reel\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Reel2 extends Reel {\n    //******************************************************************************************************************\n    //  SPIN START\n    //******************************************************************************************************************\n\n    public spinStart(delay?: number): void {\n        this.shouldBeStopping = false;\n        this.isStopping = false;\n        this.stoppingCounter = 0;\n        this.isTeasing = false;\n        this.teasingSymbols = [];\n        this.rollSpeed = this.speed;\n        this.stripIndex = (this.data.index - this.symbolTopCount + this.strip.length) % this.strip.length;\n\n        if (delay > 0) {\n            setTimeout(() => {\n                this.spinPreRoll();\n            }, delay);\n        } else {\n            this.spinPreRoll();\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Reel2.ts\n **/","import { Logger, ArrayUtils } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { Settings } from \"./Settings\";\nimport {\n    Configuration,\n    GeneralConfigurationAttributes,\n    MachineConfigurationAttributes,\n} from \"../Components/Configuration\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\n\ntype IReel = Communication.Game.IReel;\n\nexport interface ICheckOptions {\n    force: boolean;\n    stoppedSymbols: Array<IReel>;\n}\n\nexport interface IReelTeasingAttributes {\n    action: number;\n    stopping: boolean;\n    stopDelay?: number;\n}\n\nexport interface ISymbolTeasingAttributes {\n    teasable: boolean;\n    action?: number;\n}\n\nexport const ReelTeasingActions = {\n    DO_NOTHING: 0,\n    SPIN_STOP: 1,\n    TEASE: 2,\n    FORCE_SPIN_STOP: 3, // todo Use this?\n};\n\nexport const SymbolTeasingActions = {\n    NO_CHANGE: -1,\n    NOWIN: 0,\n    NORMAL: 1,\n    IMPACT: 2,\n    IMPACT_NOWIN: 3,\n    TEASE: 4,\n    IMPACT_TEASE: 5,\n};\n\n/**\n * @author Marek Turkovic\n */\nexport class TeasingComponent {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    // count of reel\n    protected reelCount: number;\n    // number of symbols which will be visible on screen during the rotation\n    private _visibleSymbolCount: number;\n    // reels x positions\n    protected reelX: Array<number>;\n    // reels y positions\n    protected reelY: Array<number>;\n    // delay to stop rotation in frames\n    protected stopDelay: number;\n    // teased symbol\n    protected teasingSymbol: number = -1;\n\n    protected impactSymbols: Array<number> = [];\n\n    // delay to stop teasing rotation in frames\n    protected teasingStopDelay: number;\n    protected minimumSymbolsForTeasing: number;\n    protected countSymbolsOnReelsAndRows: number;\n\n    protected canPlayTeaserSound: boolean;\n    protected wasPlayedTeaserSound: boolean;\n    protected wasPlayedTeaserWinSound: boolean;\n    protected wasPlayedTeaserFailSound: boolean;\n\n    protected elementInstance: Array<Object> = [];\n\n    // array of stopped symbols for finish reel rotation\n    protected stoppedSymbolsArray: Array<IReel>;\n\n    // teasing enabled in current round ?\n    public teasingEnabled: boolean = false; // todo create getter for public access ?\n    public teasingEnabledForce: boolean = false; // todo create getter for public access ?\n    protected force: boolean = false;\n    public reelsTeasingAttributes: Array<IReelTeasingAttributes> = [];\n    public symbolsTeasingAttributes: Array<Array<ISymbolTeasingAttributes>> = [];\n\n    private _customData: any;\n    set customData(value: any) {\n        this._customData = value;\n    }\n\n    constructor() {\n        // default values\n        this.reelCount = 5;\n        this.teasingStopDelay = 90;\n        this.minimumSymbolsForTeasing = 2;\n        this.countSymbolsOnReelsAndRows = 0;\n        this.canPlayTeaserSound = false;\n        this.wasPlayedTeaserSound = false;\n        this.wasPlayedTeaserWinSound = false;\n        this.wasPlayedTeaserFailSound = false;\n\n        this.finishTeasing = this.finishTeasing.bind(this);\n\n        // CONFIGS\n        let configs: Array<string> = [\"GeneralConfiguration\", \"MachineConfiguration\"];\n        for (let i: number = 0; i < configs.length; i++) {\n            let config: Element = Configuration.Configurations[configs[i]];\n            if (config != null) {\n                this.configurate(config);\n            }\n        }\n\n        // REELS\n        for (let i = 0; i < this.reelCount; i++) {\n            this.reelsTeasingAttributes[i] = { action: ReelTeasingActions.DO_NOTHING, stopping: false };\n        }\n\n        // SYMBOLS\n        for (let i = 0; i < this.reelCount; i++) {\n            if (this.symbolsTeasingAttributes[i] == null) {\n                this.symbolsTeasingAttributes[i] = [];\n            }\n            for (let j = 0; j < this._visibleSymbolCount; j++) {\n                this.symbolsTeasingAttributes[i][j] = { teasable: false, action: SymbolTeasingActions.NOWIN };\n            }\n        }\n\n        this._customData = [];\n    }\n\n    //******************************************************************************************************************\n    //  CREATE, INITIALIZE\n    //******************************************************************************************************************\n\n    /**\n     *\n     * @param {Element} node\n     */\n    public create(node: Element): void {\n        if (node.hasAttribute(TeasingComponentAttributes.CONFIGS)) {\n            let configs: Array<string> = node.getAttribute(TeasingComponentAttributes.CONFIGS).split(\";\");\n            for (let i: number = 0; i < configs.length; i++) {\n                let config: Element = Configuration.Configurations[configs[i]];\n                if (config != null) {\n                    this.configurate(config);\n                }\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CONFIGURATE\n    //******************************************************************************************************************\n\n    /**\n     * Get attributes from configuration and set up supported properties.\n     * @method configurate\n     * @param node is Element from xml\n     * @return void\n     */\n    private configurate(node: Element): void {\n        if (node.hasAttribute(GeneralConfigurationAttributes.REEL_COUNT)) {\n            this.reelCount = parseInt(node.getAttribute(GeneralConfigurationAttributes.REEL_COUNT));\n        }\n\n        if (node.hasAttribute(GeneralConfigurationAttributes.VISIBLE_SYMBOL_COUNT)) {\n            this._visibleSymbolCount = parseInt(node.getAttribute(GeneralConfigurationAttributes.VISIBLE_SYMBOL_COUNT));\n        }\n\n        if (node.hasAttribute(MachineConfigurationAttributes.TEASING_STOP_DELAY)) {\n            this.teasingStopDelay = parseInt(node.getAttribute(MachineConfigurationAttributes.TEASING_STOP_DELAY));\n        }\n\n        if (node.hasAttribute(GeneralConfigurationAttributes.REEL_X)) {\n            this.reelX = ArrayUtils.numberArray(node.getAttribute(GeneralConfigurationAttributes.REEL_X));\n        }\n\n        if (node.hasAttribute(GeneralConfigurationAttributes.REEL_Y)) {\n            this.reelY = ArrayUtils.numberArray(node.getAttribute(GeneralConfigurationAttributes.REEL_Y));\n        }\n\n        if (node.hasAttribute(MachineConfigurationAttributes.STOP_DELAY)) {\n            this.stopDelay = parseInt(node.getAttribute(MachineConfigurationAttributes.STOP_DELAY));\n        }\n    }\n\n    /**\n     *\n     * @param {Object} element\n     */\n    public addElementInstance(element: Object): void {\n        this.elementInstance[Object.keys(element)[0]] = element[Object.keys(element)[0]];\n    }\n\n    //******************************************************************************************************************\n    //  CHECK REELS\n    //******************************************************************************************************************\n\n    /**\n     * Check called before reel.spinStop(). Checks if teasing is possible and checks which reel can be stopped immediatly.\n     * @param {ICheckOptions} options\n     */\n    public checkOnInit(options: ICheckOptions): Array<IReelTeasingAttributes> {\n        this.stoppedSymbolsArray = options.stoppedSymbols;\n        this.force = options.force;\n\n        return this.reelsTeasingAttributes;\n    }\n\n    /**\n     * Counts teasing symbols on reels [0..reelIndex] and decide if it has a sense to start teasing.\n     * @returns {boolean}\n     * @param reelIndexStart\n     * @param reelIndexStop\n     */\n    protected isEnoughtForStartTeasing(reelIndexStart: number = 0, reelIndexStop: number): boolean {\n        return (\n            this.countSymbols(reelIndexStart, reelIndexStop, Settings.SymbolTeasing) >= this.minimumSymbolsForTeasing\n        );\n    }\n\n    /**\n     * Count symbols of some kind on reels.\n     * @param {number} reelIndexStart\n     * @param {number} reelIndexStop\n     * @param symbolId\n     * @returns {number}\n     */\n    public countSymbols(reelIndexStart: number = 0, reelIndexStop: number, symbolId: number): number {\n        let count = 0;\n\n        for (let i = reelIndexStart; i <= reelIndexStop; i++) {\n            if (this.stoppedSymbolsArray[i].symbols.indexOf(symbolId) !== -1) {\n                count++;\n            }\n        }\n\n        return count;\n    }\n\n    /**\n     * Custom conditions to setup reel as teasable.\n     * @param {number} reelIndex\n     * @returns {boolean}\n     */\n    protected isReelTeasable(reelIndex: number): boolean {\n        //return this.teasingEnabled && reelIndex >= 2;\n        return this.teasingEnabled;\n    }\n\n    /**\n     * Return index of reel of first symbols occurence.\n     * @returns {number}\n     */\n    private firstOccurrenceOfSymbol(reelIndexStart: number = 0, reelIndexStop: number): number {\n        for (let i = reelIndexStart; i <= reelIndexStop; i++) {\n            if (this.stoppedSymbolsArray[i].symbols.indexOf(Settings.SymbolTeasing) !== -1) {\n                //return this._stoppedSymbolsArray[i].symbols.indexOf(Settings.SymbolTeasing);\n                return i;\n            }\n        }\n\n        return -1;\n    }\n\n    protected precedingReelsWithSymbols(reelIndex: number, symbolId: number) {\n        let count: number = 0;\n        for (let i = 0; i < reelIndex; i++) {\n            if (this.stoppedSymbolsArray[i].symbols.indexOf(symbolId) !== -1) {\n                count++;\n            }\n        }\n        return count;\n    }\n\n    /**\n     *\n     * @param {number} reelIndexStart\n     * @param {number} reelIndexStop\n     * @param {number} symbolId\n     * @returns {number}\n     */\n    protected getCountSymbolsOnReelsAndRows(\n        reelIndexStart: number = 0,\n        reelIndexStop: number,\n        symbolId: number,\n    ): number {\n        this.countSymbolsOnReelsAndRows = 0;\n\n        for (let i = reelIndexStart; i <= reelIndexStop; i++) {\n            for (let j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\n                if (this.stoppedSymbolsArray[i].symbols[j]) {\n                    if (this.stoppedSymbolsArray[i].symbols[j] === symbolId) {\n                        this.countSymbolsOnReelsAndRows++;\n                    }\n                }\n            }\n        }\n\n        return this.countSymbolsOnReelsAndRows;\n    }\n\n    public getTeasingSymbol(): number {\n        return this.teasingSymbol;\n    }\n\n    //******************************************************************************************************************\n    //  CHECK SYMBOLS TEASING\n    //******************************************************************************************************************\n\n    /**\n     *\n     * @param {number} reelIndex\n     * @returns {Array<ISymbolTeasingAttributes>}\n     */\n    public checkSymbolsPerReel(reelIndex: number): Array<Array<ISymbolTeasingAttributes>> {\n        if (this.teasingEnabled) {\n            let countOfSymbol = this.getCountSymbolsOnReelsAndRows(0, reelIndex, Settings.SymbolTeasing);\n            /*\n            0 - nowin\n            1 - normal\n            2 - impact\n            3 - tease\n            */\n            switch (reelIndex) {\n                case 0:\n                    if (countOfSymbol > 1) {\n                        for (let j = 0; j < this.stoppedSymbolsArray[reelIndex].symbols.length; j++) {\n                            if (this.stoppedSymbolsArray[reelIndex].symbols[j]) {\n                                if (this.stoppedSymbolsArray[reelIndex].symbols[j] === Settings.SymbolTeasing) {\n                                    this.symbolsTeasingAttributes[reelIndex][j].action = SymbolTeasingActions.TEASE;\n                                }\n                            }\n                        }\n                    } else if (countOfSymbol == 1) {\n                        for (let j = 0; j < this.stoppedSymbolsArray[reelIndex].symbols.length; j++) {\n                            if (this.stoppedSymbolsArray[reelIndex].symbols[j]) {\n                                if (this.stoppedSymbolsArray[reelIndex].symbols[j] === Settings.SymbolTeasing) {\n                                    this.symbolsTeasingAttributes[reelIndex][j].action = SymbolTeasingActions.IMPACT;\n                                }\n                            }\n                        }\n                    } else {\n                        for (let j = 0; j < this.stoppedSymbolsArray[reelIndex].symbols.length; j++) {\n                            if (this.stoppedSymbolsArray[reelIndex].symbols[j]) {\n                                if (this.stoppedSymbolsArray[reelIndex].symbols[j] === Settings.SymbolTeasing) {\n                                    this.symbolsTeasingAttributes[reelIndex][j].action = SymbolTeasingActions.NORMAL;\n                                }\n                            }\n                        }\n                    }\n\n                    break;\n                case 1:\n                    if (countOfSymbol > 1) {\n                        for (let i = 0; i <= reelIndex; i++) {\n                            for (let j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\n                                if (this.stoppedSymbolsArray[i].symbols[j]) {\n                                    if (this.stoppedSymbolsArray[i].symbols[j] === Settings.SymbolTeasing) {\n                                        this.symbolsTeasingAttributes[i][j].action = SymbolTeasingActions.IMPACT_TEASE;\n                                    }\n                                }\n                            }\n                        }\n                    } else {\n                        for (let i = 0; i <= reelIndex; i++) {\n                            for (let j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\n                                if (this.stoppedSymbolsArray[i].symbols[j]) {\n                                    if (this.stoppedSymbolsArray[i].symbols[j] === Settings.SymbolTeasing) {\n                                        this.symbolsTeasingAttributes[i][j].action = SymbolTeasingActions.NOWIN;\n                                    }\n                                }\n                            }\n                        }\n                    }\n\n                    break;\n                case 2:\n                    if (countOfSymbol > 2) {\n                        for (let i = 0; i <= reelIndex; i++) {\n                            for (let j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\n                                if (this.stoppedSymbolsArray[i].symbols[j]) {\n                                    if (this.stoppedSymbolsArray[i].symbols[j] === Settings.SymbolTeasing) {\n                                        if (i == reelIndex) {\n                                            this.symbolsTeasingAttributes[i][j].action =\n                                                SymbolTeasingActions.IMPACT_TEASE;\n                                        } else {\n                                            this.symbolsTeasingAttributes[i][j].action = SymbolTeasingActions.TEASE;\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    } else {\n                        this.teasingEnabled = false;\n                        for (let i = 0; i <= reelIndex; i++) {\n                            for (let j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\n                                if (this.stoppedSymbolsArray[i].symbols[j]) {\n                                    this.symbolsTeasingAttributes[i][j].action = SymbolTeasingActions.NORMAL;\n                                }\n                            }\n                        }\n                    }\n                    break;\n                case 3:\n                    if (countOfSymbol > 3) {\n                        for (let i = 0; i <= reelIndex; i++) {\n                            for (let j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\n                                if (this.stoppedSymbolsArray[i].symbols[j]) {\n                                    if (this.stoppedSymbolsArray[i].symbols[j] === Settings.SymbolTeasing) {\n                                        if (i == reelIndex) {\n                                            this.symbolsTeasingAttributes[i][j].action =\n                                                SymbolTeasingActions.IMPACT_TEASE;\n                                        } else {\n                                            this.symbolsTeasingAttributes[i][j].action = SymbolTeasingActions.TEASE;\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    } else if (countOfSymbol == 3) {\n                        for (let i = 0; i <= reelIndex; i++) {\n                            for (let j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\n                                if (this.stoppedSymbolsArray[i].symbols[j]) {\n                                    if (this.stoppedSymbolsArray[i].symbols[j] === Settings.SymbolTeasing) {\n                                        this.symbolsTeasingAttributes[i][j].action = SymbolTeasingActions.TEASE;\n                                    }\n                                }\n                            }\n                        }\n                    } else {\n                        for (let i = 0; i <= reelIndex; i++) {\n                            for (let j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\n                                if (this.stoppedSymbolsArray[i].symbols[j]) {\n                                    this.symbolsTeasingAttributes[i][j].action = SymbolTeasingActions.NORMAL;\n                                }\n                            }\n                        }\n                    }\n                    break;\n                case 4:\n                    if (countOfSymbol > 4) {\n                        for (let i = 0; i <= reelIndex; i++) {\n                            for (let j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\n                                if (this.stoppedSymbolsArray[i].symbols[j]) {\n                                    if (this.stoppedSymbolsArray[i].symbols[j] === Settings.SymbolTeasing) {\n                                        if (i == reelIndex) {\n                                            this.symbolsTeasingAttributes[i][j].action =\n                                                SymbolTeasingActions.IMPACT_TEASE;\n                                        } else {\n                                            this.symbolsTeasingAttributes[i][j].action = SymbolTeasingActions.TEASE;\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    } else if (countOfSymbol == 3 || countOfSymbol == 4) {\n                        for (let i = 0; i <= reelIndex; i++) {\n                            for (let j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\n                                if (this.stoppedSymbolsArray[i].symbols[j]) {\n                                    if (this.stoppedSymbolsArray[i].symbols[j] === Settings.SymbolTeasing) {\n                                        this.symbolsTeasingAttributes[i][j].action = SymbolTeasingActions.TEASE;\n                                    }\n                                }\n                            }\n                        }\n                    } else {\n                        for (let i = 0; i <= reelIndex; i++) {\n                            for (let j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\n                                if (this.stoppedSymbolsArray[i].symbols[j]) {\n                                    this.symbolsTeasingAttributes[i][j].action = SymbolTeasingActions.NORMAL;\n                                }\n                            }\n                        }\n                    }\n                    break;\n            }\n        } else {\n            for (let i = 0; i <= reelIndex; i++) {\n                for (let j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\n                    this.symbolsTeasingAttributes[i][j].action = SymbolTeasingActions.NORMAL;\n                }\n            }\n        }\n\n        return this.symbolsTeasingAttributes;\n    }\n\n    //******************************************************************************************************************\n    //  REELS TEASING ANIMATIONS\n    //******************************************************************************************************************\n\n    /**\n     * Start animating teasing layers.\n     *\n     * @param {number} reelIndex\n     */\n    public animateTeasing(reelIndex: number): void {}\n\n    /**\n     *\n     */\n    public finishTeasing(): void {\n        for (let i = 0; i <= this.reelCount - 1; i++) {\n            for (let j = 0; j < this.stoppedSymbolsArray[i].symbols.length; j++) {\n                if (this.stoppedSymbolsArray[i].symbols[j]) {\n                    this.symbolsTeasingAttributes[i][j].action = SymbolTeasingActions.NORMAL; //TODO Reset to NO_WIN or -1?\n                }\n            }\n        }\n\n        this.canPlayTeaserSound = false;\n        this.wasPlayedTeaserSound = false;\n        this.wasPlayedTeaserWinSound = false;\n        this.wasPlayedTeaserFailSound = false;\n    }\n\n    /**\n     * Remove teasing animations\n     *\n     * @param {boolean} noWin\n     */\n    public removeTeasing(noWin: boolean): void {\n        if (noWin) {\n            // PlayList.play(this._playList, 'SND_BaseFSTeaserFail');\n        }\n    }\n\n    //******************************************************************************************************************\n    //  LOG\n    //******************************************************************************************************************\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\nconst TeasingComponentAttributes = {\n    CONFIGS: \"Configs\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/TeasingComponent.ts\n **/","export class Settings {\n    //******************************************************************************************************************\n    //  SYMBOLS\n    //******************************************************************************************************************\n\n    public static readonly SymbolTeasing: number = 11;\n    public static readonly SymbolsImpact: Array<number> = [11];\n    public static readonly SymbolsNoTrim: Array<number> = [5, 6, 7, 8, 9, 10, 11];\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/Settings.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\nimport { TimelineElement } from \"../Components/Elements/Graphics/TimelineElement\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\nimport { ImageTextElement } from \"../Components/Elements/Texts/ImageTextElement\";\n\nexport interface MinigameValue {\n    type: \"multiplier\" | \"freespins\" | \"end\";\n    count: number;\n    failed: boolean;\n}\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class MinigameElement extends ContainerElement {\n    private _htmlElement: HTMLElement;\n    private _data: Array<number> = [];\n\n    private callback: () => void;\n\n    private board: BaseElement;\n    private boardElements: Array<SwitchElement> = [];\n    private boardCounters: Array<SwitchElement> = [];\n    private boardButtons: Array<HTMLElement> = [];\n\n    private introElements: Array<TimelineElement> = [];\n    private outroElements: Array<TimelineElement> = [];\n\n    private activeElements: Array<SwitchElement> = [];\n    private activeElementsCase: string;\n\n    static CaseNormal: string = \"NORMAL\";\n    static CaseWinGold: string = \"WIN_GOLD\";\n    static CaseWinGoldSilent: string = \"WIN_GOLD_SILENT\";\n    static CaseWinSilver: string = \"WIN_SILVER\";\n    static CaseWinSilverSilent: string = \"WIN_SILVER_SILENT\";\n    static CaseNoWinGold: string = \"NO_WIN_GOLD\";\n    static CaseNoWinGoldSilent: string = \"NO_WIN_GOLD_SILENT\";\n    static CaseNoWinSilver: string = \"NO_WIN_SILVER\";\n    static CaseNoWinSilverSilent: string = \"NO_WIN_SILVER_SILENT\";\n    static CaseOn: string = \"ON\";\n    static CaseOnSilent: string = \"ON_SILENT\";\n    static CaseOff: string = \"OFF\";\n    static CaseFailed: string = \"FAILED\";\n    static CaseFailedSilent: string = \"FAILED_SILENT\";\n    static CaseEnd: string = \"END\";\n    static CaseEndSilent: string = \"END_SILENT\";\n\n    public static readonly EventButtonAction: string = \"buttonAction\";\n    public static readonly EventIntroFinished: string = \"introFinished\";\n    public static readonly EventOutroFinished: string = \"outroFinished\";\n\n    createByNode(node: Element): void {\n        super.createByNode(node);\n\n        if (this.style) {\n            // update attributes from style\n            for (let attribute in MinigameElementAttributes) {\n                const name = MinigameElementAttributes[attribute];\n                if (this.style.node.hasAttribute(name)) {\n                    node.setAttribute(name, this.style.node.getAttribute(name));\n                }\n            }\n        }\n\n        if (node.hasAttribute(MinigameElementAttributes.ACTIVE_ELEMENTS)) {\n            let names = node.getAttribute(MinigameElementAttributes.ACTIVE_ELEMENTS).split(\";\");\n            names.forEach((name) => {\n                if (this.childs[name]) {\n                    this.activeElements.push(this.childs[name]);\n                }\n            });\n        }\n\n        if (node.hasAttribute(MinigameElementAttributes.BOARD_CONTAINER)) {\n            let el = this.childs[node.getAttribute(MinigameElementAttributes.BOARD_CONTAINER)];\n            if (el && el instanceof BaseElement) {\n                this.board = el;\n            } else {\n                this.board = new ContainerElement();\n                this.addChild(this.board);\n            }\n        } else {\n            this.board = new ContainerElement();\n            this.addChild(this.board);\n        }\n\n        if (node.hasAttribute(MinigameElementAttributes.BOARD_ELEMENT_NAMES)) {\n            let boardElementNames = node.getAttribute(MinigameElementAttributes.BOARD_ELEMENT_NAMES).split(\";\");\n            this.boardElements = [];\n            boardElementNames.forEach((name, index) => {\n                if (this.childs[name] && this.childs[name] instanceof SwitchElement) {\n                    this.boardElements[index] = this.childs[name];\n                    this.board.addChild(this.childs[name]);\n                }\n            });\n        }\n\n        if (node.hasAttribute(MinigameElementAttributes.BOARD_COUNTER_NAMES)) {\n            let boardCounterNames = node.getAttribute(MinigameElementAttributes.BOARD_COUNTER_NAMES).split(\";\");\n            this.boardCounters = [];\n            boardCounterNames.forEach((name, index) => {\n                if (this.childs[name] && this.childs[name] instanceof SwitchElement) {\n                    this.boardCounters[index] = this.childs[name];\n                    this.board.addChild(this.childs[name]);\n                }\n            });\n        }\n\n        if (node.hasAttribute(MinigameElementAttributes.INTRO_ELEMENT_NAME)) {\n            let names = node.getAttribute(MinigameElementAttributes.INTRO_ELEMENT_NAME).split(\";\");\n            names.forEach((name) => {\n                const element = this.childs[name];\n                if (element instanceof TimelineElement) {\n                    this.introElements.push(element);\n                    element.on(\"board\", this.showBoard.bind(this));\n                    element.on(\n                        \"finished\",\n                        function () {\n                            this.emit(MinigameElement.EventIntroFinished);\n                        }.bind(this),\n                    );\n                    element.visible = false;\n                }\n            });\n        }\n\n        if (node.hasAttribute(MinigameElementAttributes.OUTRO_ELEMENT_NAME)) {\n            let names = node.getAttribute(MinigameElementAttributes.OUTRO_ELEMENT_NAME).split(\";\");\n            names.forEach((name) => {\n                const element = this.childs[name];\n                if (element instanceof TimelineElement) {\n                    this.outroElements.push(element);\n                    element.on(\"board\", this.hideBoard.bind(this));\n                    element.on(\n                        \"finished\",\n                        function () {\n                            this.visible = false;\n                            this.emit(MinigameElement.EventOutroFinished);\n                            if (this.callback) {\n                                this.callback();\n                                this.callback = null;\n                            }\n                        }.bind(this),\n                    );\n                    element.visible = false;\n                }\n            });\n        }\n\n        if (node.hasAttribute(MinigameElementAttributes.HTML_ELEMENT_NAME)) {\n            let htmlElement = document.getElementById(node.getAttribute(MinigameElementAttributes.HTML_ELEMENT_NAME));\n            if (htmlElement) {\n                this._htmlElement = htmlElement;\n            }\n        }\n    }\n\n    updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.getAttribute(MinigameElementAttributes.DATA_RESET) == \"true\") {\n            this._data = null;\n        }\n\n        // if (node.hasAttribute(MinigameElementAttributes.DATA)) {\n        //     // this.setData(node.getAttribute(MinigameElementAttributes.DATA).split(';').map(value => {\n        //     //     let parsed: number = parseFloat(value);\n        //     //     return isNaN(parsed) ? null : parsed;\n        //     // }));\n        // }\n    }\n\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        super.internalDestroy(options);\n        this.boardElements = null;\n        this.boardCounters = null;\n    }\n\n    public setData(data: Array<MinigameValue | null>, silent?: boolean): void {\n        for (let i = 0; i < data.length; i++) {\n            let val = data[i];\n\n            let element: SwitchElement = this.boardElements[i];\n            if (val) {\n                if (element.getCurrentCase() === MinigameElement.CaseNormal) {\n                    let counter: SwitchElement = this.boardCounters[i + (val.type === \"multiplier\" ? 9 : 0)];\n\n                    counter.visible = true;\n\n                    if (val.type === \"end\") {\n                        // LAST CHEST \"END\"\n\n                        // chest element and counter\n                        if (!silent) {\n                            element.goToCase(MinigameElement.CaseEnd);\n                            counter.goToCase(MinigameElement.CaseEnd);\n                        } else {\n                            element.goToCase(MinigameElement.CaseEndSilent);\n                            counter.goToCase(MinigameElement.CaseEndSilent);\n                        }\n                    } else {\n                        // WIN GOLD / WIN SILVER / NOWIN CHEST\n\n                        if (val.type === \"multiplier\") {\n                            // ----------------- SET TEXT -----------------\n                            let counterText: ImageTextElement = counter.getChildElementByName(\n                                \"WinCounter\",\n                            ) as ImageTextElement;\n\n                            if (counterText && counterText.bitmapText) {\n                                counterText.bitmapText.text = \"x\" + val.count.toString();\n                            }\n\n                            // ----------------- SILVER -----------------\n                            if (!val.failed) {\n                                if (!silent) {\n                                    element.goToCase(MinigameElement.CaseWinSilver);\n                                    counter.goToCase(MinigameElement.CaseOn);\n                                } else {\n                                    element.goToCase(MinigameElement.CaseWinSilverSilent);\n                                    counter.goToCase(MinigameElement.CaseOnSilent);\n                                }\n\n                                // ----------------- FLARE -----------------\n                                let flareMulti: SwitchElement = this.getActiveElementByName(\"FlareMulti\");\n\n                                if (!silent && flareMulti) {\n                                    if (flareMulti.hasCase((i + 1).toString())) {\n                                        flareMulti.goToCase((i + 1).toString());\n                                    }\n                                }\n                            } else {\n                                if (!silent) {\n                                    element.goToCase(MinigameElement.CaseNoWinSilver);\n                                    counter.goToCase(MinigameElement.CaseFailed);\n                                } else {\n                                    element.goToCase(MinigameElement.CaseNoWinSilverSilent);\n                                    counter.goToCase(MinigameElement.CaseFailedSilent);\n                                }\n                            }\n                        } else if (val.type === \"freespins\") {\n                            // ----------------- SET TEXT -----------------\n                            let counterText: ImageTextElement = counter.getChildElementByName(\n                                \"WinCounter\",\n                            ) as ImageTextElement;\n\n                            if (counterText && counterText.bitmapText) {\n                                counterText.bitmapText.text = \"+\" + val.count.toString();\n                            }\n\n                            // ----------------- GOLD -----------------\n                            if (!val.failed) {\n                                if (!silent) {\n                                    element.goToCase(MinigameElement.CaseWinGold);\n                                    counter.goToCase(MinigameElement.CaseOn);\n                                } else {\n                                    element.goToCase(MinigameElement.CaseWinGoldSilent);\n                                    counter.goToCase(MinigameElement.CaseOnSilent);\n                                }\n\n                                // ----------------- FLARE -----------------\n                                let flareCount: SwitchElement = this.getActiveElementByName(\"FlareCount\");\n\n                                if (!silent && flareCount) {\n                                    if (flareCount.hasCase((i + 1).toString())) {\n                                        flareCount.goToCase((i + 1).toString());\n                                    }\n                                }\n                            } else {\n                                if (!silent) {\n                                    element.goToCase(MinigameElement.CaseNoWinGold);\n                                    counter.goToCase(MinigameElement.CaseFailed);\n                                } else {\n                                    element.goToCase(MinigameElement.CaseNoWinGoldSilent);\n                                    counter.goToCase(MinigameElement.CaseFailedSilent);\n                                }\n                            }\n                        } else {\n                            // NOT FREESPIN OR MULTIPLIER\n                            element.goToCase(MinigameElement.CaseNormal);\n                            counter.goToCase(MinigameElement.CaseOff);\n                        }\n                    }\n                }\n            } else {\n                element.goToCase(MinigameElement.CaseNormal);\n                this.boardCounters[i].visible = false;\n                this.boardCounters[i + 9].visible = false;\n            }\n        }\n    }\n\n    public intro(data?: Array<MinigameValue | null>) {\n        if (data) {\n            if (this._data) {\n                this._data = null;\n            }\n            this.setData(data, true);\n        }\n\n        if (this.introElements.length) {\n            this.hideBoard();\n            this.introElements.forEach((element) => {\n                element.visible = true;\n                element.play();\n            });\n        } else {\n            this.showBoard();\n        }\n        this.visible = true;\n        this.setActiveElementCase(MinigameElement.CaseOn);\n    }\n\n    public outro(score?: Array<number>, callback?: () => void) {\n        if (callback) {\n            this.callback = callback;\n        } else {\n            this.callback = null;\n        }\n        if (this.outroElements.length) {\n            this.outroElements.forEach((element, index) => {\n                element.visible = true;\n                element.play(score && score[index] ? score[index] : null);\n            });\n        } else {\n            this.hideBoard();\n            if (this.callback) {\n                this.callback();\n                this.callback = null;\n            }\n        }\n        this.setActiveElementCase(MinigameElement.CaseOff);\n    }\n\n    public showBoard() {\n        this.board.visible = true;\n    }\n\n    public hideBoard() {\n        this.board.visible = false;\n    }\n\n    public hideScore() {\n        this.boardCounters.forEach((element) => {\n            element.visible = false;\n        });\n    }\n\n    private setActiveElementCase(s: string, emitEvent: boolean = false, delay?: number) {\n        this.activeElementsCase = s;\n        this.activeElements.forEach((element) => {\n            if (element.hasCase(s)) {\n                element.goToCase(s, emitEvent, delay);\n            }\n        });\n    }\n\n    private getActiveElementByName(name: string): SwitchElement {\n        let s: SwitchElement;\n        this.activeElements.forEach((element) => {\n            if (element.name === name) {\n                s = element;\n            }\n        });\n        return s;\n    }\n}\n\nconst MinigameElementAttributes = {\n    ACTIVE_ELEMENTS: \"ActiveElements\",\n\n    BOARD_CONTAINER: \"BoardContainer\",\n\n    BOARD_BUTTON_NAMES: \"BoardButtons\",\n    // names of timeline elements used to show score for board fields\n    BOARD_COUNTER_NAMES: \"BoardCounters\",\n    // names of switch elements used as individual board fields\n    BOARD_ELEMENT_NAMES: \"BoardElements\",\n    // data for testing\n    DATA: \"Data\",\n    DATA_RESET: \"DataReset\",\n    // id of element to click through\n    HTML_ELEMENT_NAME: \"HTMLElement\",\n    // intro and outro timeline elements\n    INTRO_ELEMENT_NAME: \"IntroElement\",\n    OUTRO_ELEMENT_NAME: \"OutroElement\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/MinigameElement.ts\n **/","import { Settings } from \"./Settings\";\nimport {\n    ICheckOptions,\n    IReelTeasingAttributes,\n    ISymbolTeasingAttributes,\n    ReelTeasingActions,\n    SymbolTeasingActions,\n    TeasingComponent,\n} from \"./TeasingComponent\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\n\n/**\n * @author Marek Turkovic\n */\nexport class TeasingBonus extends TeasingComponent {\n    _impactScatterCounter: number;\n    _stopScatterCounter: number;\n\n    private _delayedTeasingFaildSound: FrameTimerEventEmitter;\n\n    constructor() {\n        super();\n\n        //this.teasingStopDelay = 90;\n        this.minimumSymbolsForTeasing = 2;\n\n        this.teasingSymbol = Settings.SymbolTeasing;\n        this.impactSymbols = Settings.SymbolsImpact;\n\n        this._impactScatterCounter = 0;\n        this._stopScatterCounter = 0;\n\n        this._delayedTeasingFaildSound = CreateFrameTimer(\"delayedTeasingFaildSound\");\n        this._delayedTeasingFaildSound.on(FrameTimerEvents.Complete, this.delayedTeasingFaildSound.bind(this));\n    }\n\n    set customData(value: any) {}\n\n    //******************************************************************************************************************\n    //  CHECK REELS\n    //******************************************************************************************************************\n\n    /**\n     * Check called before reel.spinStop(). Checks if teasing is possible and checks which reel can be stopped immediately.\n     * @param {ICheckOptions} options\n     */\n    public checkOnInit(options: ICheckOptions): Array<IReelTeasingAttributes> {\n        this.stoppedSymbolsArray = options.stoppedSymbols;\n        this.force = options.force;\n        let additionalDelay = 0;\n\n        this.teasingEnabled = false;\n        this.teasingEnabledForce = false;\n\n        for (let reelIndex = 0; reelIndex < this.reelCount; reelIndex++) {\n            if (this.precedingReelsWithSymbols(reelIndex, this.teasingSymbol) >= 2 && reelIndex > 3) {\n                if (!options.force) {\n                    this.teasingEnabled = true;\n                } else {\n                    this.teasingEnabledForce = true;\n                }\n                additionalDelay += this.teasingStopDelay;\n                this.reelsTeasingAttributes[reelIndex].action = ReelTeasingActions.TEASE;\n            } else {\n                this.reelsTeasingAttributes[reelIndex].action = ReelTeasingActions.SPIN_STOP;\n            }\n            this.reelsTeasingAttributes[reelIndex].stopDelay = reelIndex * this.stopDelay + additionalDelay;\n        }\n\n        return this.reelsTeasingAttributes;\n    }\n\n    /**\n     *\n     * @param {number} reelIndexStart\n     * @param {number} reelIndexStop\n     * @returns {boolean}\n     */\n    protected isEnoughtForStartTeasing(reelIndexStart: number = 0, reelIndexStop: number): boolean {\n        return this.countSymbols(reelIndexStart, reelIndexStop, this.teasingSymbol) >= this.minimumSymbolsForTeasing;\n    }\n\n    /**\n     *\n     * @param {number} reelIndex\n     * @returns {boolean}\n     */\n    /*protected isReelTeasable(reelIndex: number): boolean {\n        return this.teasingEnabled && reelIndex >= 2;\n    }*/\n\n    //******************************************************************************************************************\n    //  CHECK SYMBOLS TEASING\n    //******************************************************************************************************************\n\n    /**\n     *\n     * @param {number} reelIndex\n     * @returns {Array<ISymbolTeasingAttributes>}\n     */\n    public checkSymbolsPerReel(reelIndex: number): Array<Array<ISymbolTeasingAttributes>> {\n        let countOfSymbol = this.getCountSymbolsOnReelsAndRows(0, reelIndex, this.teasingSymbol);\n\n        let preceeding = this.precedingReelsWithSymbols(reelIndex + 1, this.teasingSymbol);\n\n        let bonus = preceeding == 3 && reelIndex + 1 == this.stoppedSymbolsArray.length;\n\n        for (let reelNo = 0; reelNo < this.stoppedSymbolsArray.length; reelNo++) {\n            for (let symbolNo = 0; symbolNo < this.stoppedSymbolsArray[reelNo].symbols.length; symbolNo++) {\n                if (reelNo === reelIndex) {\n                    // only current reel will show impact animations\n                    if (this.stoppedSymbolsArray[reelNo].symbols[symbolNo] === this.teasingSymbol) {\n                        // teasing symbols have different impact animation names\n                        if (countOfSymbol > 0 && reelNo - this._impactScatterCounter === 2) {\n                            // if enough scatter symbols happened before, tease\n                            if (reelNo + 1 == this.stoppedSymbolsArray.length) {\n                                this.symbolsTeasingAttributes[reelNo][symbolNo].action = SymbolTeasingActions.NORMAL;\n                            } else {\n                                this.symbolsTeasingAttributes[reelNo][symbolNo].action =\n                                    SymbolTeasingActions.IMPACT_TEASE;\n                            }\n                            PlayList.play(\"SND_BaseRotationEndScatter\" + ++this._stopScatterCounter);\n                        } else {\n                            // if not enough scatters happened, just impact\n                            if (preceeding >= 2 && reelIndex >= 3 && reelIndex - preceeding === 1) {\n                                this.symbolsTeasingAttributes[reelNo][symbolNo].action =\n                                    SymbolTeasingActions.IMPACT_NOWIN;\n                            } else {\n                                this.symbolsTeasingAttributes[reelNo][symbolNo].action = SymbolTeasingActions.IMPACT;\n                            }\n                        }\n                        this._impactScatterCounter++;\n                    } else {\n                        if (preceeding >= 2 && reelIndex >= 3 && reelIndex - preceeding === 1) {\n                            this.symbolsTeasingAttributes[reelNo][symbolNo].action = SymbolTeasingActions.IMPACT_NOWIN;\n                        } else {\n                            this.symbolsTeasingAttributes[reelNo][symbolNo].action = SymbolTeasingActions.IMPACT;\n                        }\n                    }\n                } else {\n                    // regular symbols are...\n                    if (reelIndex - preceeding > 1) {\n                        // ...put into normal state if preceeding scatters mean teasing is NOT happening (teasing happened, but failed, so bonus will not happen)\n                        if (this.stoppedSymbolsArray[reelNo].symbols[symbolNo] === this.teasingSymbol) {\n                            this.symbolsTeasingAttributes[reelNo][symbolNo].action = SymbolTeasingActions.NO_CHANGE;\n                        } else {\n                            this.symbolsTeasingAttributes[reelNo][symbolNo].action = SymbolTeasingActions.NORMAL;\n                        }\n                    } else if (\n                        preceeding == 2 &&\n                        reelIndex >= 3 &&\n                        this.stoppedSymbolsArray[reelNo].symbols[symbolNo] !== this.teasingSymbol\n                    ) {\n                        // ...put into nowin (dark) state if next reel starts teasing\n                        this.symbolsTeasingAttributes[reelNo][symbolNo].action = SymbolTeasingActions.NOWIN;\n                    } else if (preceeding == 3 && reelIndex + 1 == this.stoppedSymbolsArray.length) {\n                        // preceeding tease symbols set to normal on last reel if bonus triggers, for quick stop interrupt\n                        this.symbolsTeasingAttributes[reelNo][symbolNo].action = SymbolTeasingActions.NORMAL;\n                    } else {\n                        // ...not changed otherwise\n                        this.symbolsTeasingAttributes[reelNo][symbolNo].action = SymbolTeasingActions.NO_CHANGE;\n                    }\n                }\n            }\n        }\n\n        if (reelIndex === this.reelCount - 1) {\n            this._impactScatterCounter = 0;\n            this._stopScatterCounter = 0;\n        }\n\n        return this.symbolsTeasingAttributes;\n    }\n\n    //******************************************************************************************************************\n    //  REELS TEASING ANIMATIONS\n    //******************************************************************************************************************\n\n    /**\n     * Start animating teasing layers.\n     *\n     * @param reelIndex\n     */\n    public animateTeasing(reelIndex: number): boolean {\n        if (this.teasingEnabled) {\n            //this.removeTeasing(false);\n\n            if (this.reelsTeasingAttributes[reelIndex + 1] != null) {\n                if (this.reelsTeasingAttributes[reelIndex + 1].action == ReelTeasingActions.TEASE) {\n                    if (this.elementInstance[\"teasingFront\"] != null) {\n                        this.elementInstance[\"teasingFront\"].alpha = 1;\n                        this.elementInstance[\"teasingFront\"].visible = true;\n                        this.elementInstance[\"teasingFront\"].x = this.reelX[reelIndex + 1];\n                        this.elementInstance[\"teasingFront\"].y = this.reelY[reelIndex + 1];\n                        this.elementInstance[\"teasingFront\"].goToCase(\"INIT\");\n                    }\n                    if (this.elementInstance[\"teasingParticles\"] != null) {\n                        this.elementInstance[\"teasingParticles\"].alpha = 1;\n                        this.elementInstance[\"teasingParticles\"].visible = true;\n                        if (\n                            this.elementInstance[\"teasingParticles\"].getCurrentCase() == \"LOOP\" &&\n                            this.elementInstance[\"teasingParticles\"].hasCase(\"CONTINUE_\" + reelIndex)\n                        ) {\n                            this.elementInstance[\"teasingParticles\"].x = 0;\n                            this.elementInstance[\"teasingParticles\"].y = 0;\n                            this.elementInstance[\"teasingParticles\"].goToCase(\"CONTINUE_\" + reelIndex);\n                        } else if (this.elementInstance[\"teasingParticles\"].hasCase(\"INIT_\" + reelIndex)) {\n                            this.elementInstance[\"teasingParticles\"].x = 0;\n                            this.elementInstance[\"teasingParticles\"].y = 0;\n                            this.elementInstance[\"teasingParticles\"].goToCase(\"INIT_\" + reelIndex);\n                        } else {\n                            this.elementInstance[\"teasingParticles\"].x = this.reelX[reelIndex + 1];\n                            this.elementInstance[\"teasingParticles\"].y = this.reelY[reelIndex + 1];\n                            this.elementInstance[\"teasingParticles\"].goToCase(\"INIT\");\n                        }\n                    }\n\n                    if (!this.wasPlayedTeaserSound) {\n                        //PlayList.play('SND_BaseFSTeaser');\n                        this.wasPlayedTeaserSound = true;\n                    }\n                } else if (this.reelsTeasingAttributes[reelIndex + 1].action == ReelTeasingActions.SPIN_STOP) {\n                    this.removeTeasing(false);\n                    return false;\n                }\n                return true;\n            }\n\n            let countSymbolsOnReelsAndRows = this.getCountSymbolsOnReelsAndRows(0, reelIndex, this.teasingSymbol);\n            let countSymbolsOnCurrentReel = this.getCountSymbolsOnReelsAndRows(\n                reelIndex,\n                reelIndex,\n                this.teasingSymbol,\n            );\n\n            /*\n            if (countSymbolsOnCurrentReel) {\n                if (countSymbolsOnReelsAndRows > 0 && countSymbolsOnReelsAndRows <=3) {\n                    PlayList.play('SND_SymScatterStop01');\n                } else if (countSymbolsOnReelsAndRows > 3) {\n                    PlayList.play('SND_SymScatterStop03');\n                }\n            }*/\n        } else {\n            this.removeTeasing(false);\n            return false;\n        }\n        return false;\n    }\n\n    /**\n     * Remove teasing animations.\n     * In case of enought teasing symbols count win sound is played else fail sound is played.\n     *\n     * @param {boolean} noWin\n     */\n    public removeTeasing(noWin: boolean): void {\n        if (noWin) {\n            PlayList.play(\"SND_BaseFSTeaserFail\");\n        }\n\n        if (this.wasPlayedTeaserSound) {\n            // PlayList.stop('SND_BaseFSTeaser');\n\n            if (this.countSymbolsOnReelsAndRows > this.minimumSymbolsForTeasing) {\n                if (!this.wasPlayedTeaserWinSound) {\n                    // PlayList.play('SND_BaseFSTeaserWin');\n                    this.wasPlayedTeaserWinSound = true;\n                }\n            } else {\n                if (!this.wasPlayedTeaserFailSound) {\n                    PlayList.play(\"SND_BaseFSTeaserFail\");\n                    this.wasPlayedTeaserFailSound = true;\n                }\n            }\n        }\n\n        if (this.elementInstance[\"teasingFront\"] != null) {\n            if (\n                this.elementInstance[\"teasingFront\"].getCurrentCase() !== \"NORMAL\" &&\n                this.elementInstance[\"teasingFront\"].getCurrentCase() !== \"OUTRO\"\n            ) {\n                this.elementInstance[\"teasingFront\"].goToCase(\"OUTRO\");\n            }\n        }\n        if (this.elementInstance[\"teasingParticles\"] != null) {\n            if (\n                this.elementInstance[\"teasingParticles\"].getCurrentCase() !== \"NORMAL\" &&\n                this.elementInstance[\"teasingParticles\"].getCurrentCase() !== \"OUTRO\"\n            ) {\n                this.elementInstance[\"teasingParticles\"].goToCase(\"OUTRO\");\n            }\n        }\n    }\n\n    public finishTeasing(reelIndex?: number): void {\n        // PlayList.stop('SND_BaseFSTeaser');\n\n        let countSymbolsOnReelsAndRows = this.getCountSymbolsOnReelsAndRows(0, this.reelCount - 1, this.teasingSymbol);\n        if (this.wasPlayedTeaserSound || (reelIndex == this.reelCount - 1 && this.teasingEnabledForce)) {\n            if (countSymbolsOnReelsAndRows > this.minimumSymbolsForTeasing) {\n                // PlayList.play('SND_BaseFSTeaserWin');\n            } else {\n                this._delayedTeasingFaildSound.start(30);\n            }\n        }\n\n        super.finishTeasing();\n\n        this.canPlayTeaserSound = false;\n        this.wasPlayedTeaserSound = false;\n\n        if (this.elementInstance[\"teasingFront\"] != null) {\n            if (\n                this.elementInstance[\"teasingFront\"].getCurrentCase() !== \"NORMAL\" &&\n                this.elementInstance[\"teasingFront\"].getCurrentCase() !== \"OUTRO\"\n            ) {\n                this.elementInstance[\"teasingFront\"].goToCase(\"OUTRO\");\n            }\n        }\n\n        if (this.elementInstance[\"teasingParticles\"] != null) {\n            if (\n                this.elementInstance[\"teasingParticles\"].getCurrentCase() !== \"NORMAL\" &&\n                this.elementInstance[\"teasingParticles\"].getCurrentCase() !== \"OUTRO\"\n            ) {\n                this.elementInstance[\"teasingParticles\"].goToCase(\"OUTRO\");\n            }\n        }\n    }\n\n    public delayedTeasingFaildSound(): void {\n        if (!this.force) {\n            PlayList.play(\"SND_BaseFSTeaserFail\", 0, true);\n            this.wasPlayedTeaserFailSound = true;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/TeasingBonus.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { UserControls } from \"../Common/UserControls/UserControls\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { GameData } from \"../Common/Datas/GameData\";\nimport { GameActions } from \"../Common/Actions/GameActions\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { LimitDialog } from \"../Common/Dialogs/LimitDialog\";\nimport { FreespinsController } from \"../../GameComponents/Freespins/FreespinsController\";\nimport { FreespinsActions } from \"../Common/Actions/FreespinsActions\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { Configuration } from \"../../Components/Configuration\";\nimport { FreeRoundBonus } from \"../Common/Bonuses/FreeRoundBonus\";\nimport { TweenLite } from \"gsap\";\n\nvar GameModules = Communication.Game.GameModules;\nvar WinType = Communication.Game.WinType;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class DesktopFreespinsUserControls extends UserControls {\n    protected _controller: FreespinsController;\n\n    private _userControls: HTMLElement;\n    private _baseUserControls: HTMLElement;\n    private _userControls_supreme: HTMLElement;\n    private _afterWinDelay: FrameTimerEventEmitter;\n    private _autoplayDelay: FrameTimerEventEmitter;\n    private _backDelay: FrameTimerEventEmitter;\n    private _backButtonDelay: FrameTimerEventEmitter;\n    private _prepareNewGameRound: FrameTimerEventEmitter;\n    private _fsEnterEnableDelay: FrameTimerEventEmitter;\n\n    protected _userControlsShowDelay: FrameTimerEventEmitter;\n    protected _baseUserControlsShowDelay: FrameTimerEventEmitter;\n\n    private _fsBoards: Array<HTMLElement>;\n\n    private _wasCalclulated: boolean = true;\n\n    constructor() {\n        super(\"freespins\");\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.registerActions();\n\n        this._afterWinDelay = CreateFrameTimer(\"afterWinDelay\");\n        this._afterWinDelay.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._autoplayDelay = CreateFrameTimer(\"autoplayDelay\");\n        this._autoplayDelay.on(FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\n\n        this._backDelay = CreateFrameTimer(\"backDelay\");\n        this._backDelay.on(FrameTimerEvents.Complete, this.back.bind(this));\n\n        this._backButtonDelay = CreateFrameTimer(\"backButtonDelay\");\n        this._backButtonDelay.on(FrameTimerEvents.Complete, this.backButton.bind(this));\n\n        this._prepareNewGameRound = CreateFrameTimer(\"prepareNewGameRound\");\n        this._prepareNewGameRound.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._userControls = document.getElementById(\"freespinsUserControls\");\n\n        this._userControlsShowDelay = CreateFrameTimer(\"userControlsShowDelay\");\n        this._userControlsShowDelay.on(FrameTimerEvents.Complete, this.userControlsShowDelay.bind(this));\n\n        this._baseUserControlsShowDelay = CreateFrameTimer(\"userControlsShowDelay\");\n        this._baseUserControlsShowDelay.on(FrameTimerEvents.Complete, this.baseUserControlsShowDelay.bind(this));\n\n        this._fsEnterEnableDelay = CreateFrameTimer(\"fsEnterEnableDelay\");\n        this._fsEnterEnableDelay.on(FrameTimerEvents.Complete, this.fsEnterEnableDelay.bind(this));\n\n        this._fsBoards = [document.getElementById(\"fsCount\"), document.getElementById(\"fsMultiplier\")];\n    }\n\n    addController(controller: FreespinsController): void {\n        this._controller = controller;\n        this._controller.on(FreespinsController.StartReceived, this.startReceived.bind(this));\n        this._controller.on(FreespinsController.ConfirmReceived, this.confirmReceived.bind(this));\n        this._controller.on(FreespinsController.SpinReceived, this.spinReceived.bind(this));\n        this._controller.on(FreespinsController.EndReceived, this.endReceived.bind(this));\n        this._controller.on(FreespinsController.MachineStopped, this.machineStopped.bind(this));\n        this._controller.on(FreespinsController.WinCalculationFinished, this.winCalculationFinished.bind(this));\n        this._controller.on(FreespinsController.AllWinsFinished, this.allWinsFinished.bind(this));\n        this._controller.on(FreespinsController.IntroFinished, this.introFinished.bind(this));\n        this._controller.on(FreespinsController.OutroFinished, this.outroFinished.bind(this));\n        this._controller.on(\n            FreespinsController.QuickWinCalculationFinished,\n            this.quickWinCalculationFinished.bind(this),\n        );\n    }\n\n    registerActions(): void {\n        this.actions.registerActions({\n            [FreespinsActions.ActionStart]: false,\n            [FreespinsActions.ActionBack]: false,\n            [FreespinsActions.ActionAutoplay]: false,\n            [FreespinsActions.ActionAutoplayStop]: false,\n            [FreespinsActions.ActionSpin]: false,\n            [FreespinsActions.ActionSpinStop]: false,\n        });\n    }\n\n    initReceived(): void {\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\n        this._baseUserControls = document.getElementById(\"userControls\");\n\n        super.initReceived();\n\n        this._controller.initReceived();\n\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    restoreGameRound(): void {\n        this.prepareNewGameRound();\n    }\n\n    startReceived(finished: boolean): void {\n        // DataManager.updateDataElement(GameData.DataFreeSpinsRemainingCount, (GameManager.freespinsResponse.freeSpins.remainingCount).toString());\n        // DataManager.updateDataElement(GameData.DataFreeSpinsCount, (GameManager.freespinsResponse.freeSpins.totalCount).toString());\n        //\n        if (\n            this._baseUserControls != null &&\n            !this._baseUserControls.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._baseUserControls.classList.add(HtmlController.DisabledClass);\n        }\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n        //\n        // // this.actions.changeActionState(FreespinsActions.ActionSpinStop, AppContext.gameConfiguration.GameEnableReelsStop);\n        // // HtmlController.updateActionElements(this.getAllActions());\n        // this.prepareNewGameRound();\n\n        ModuleManager.outroModule(GameModules.Pick);\n    }\n\n    confirmReceived(): void {\n        ModuleManager.outroModule(GameModules.Base);\n    }\n\n    spinReceived(): void {\n        let fsCount = document.querySelector(\"#fsCount .value\");\n        let hide = TweenLite.to(fsCount, 0.1, { alpha: 0 });\n        hide.eventCallback(\"onComplete\", () => {\n            DataManager.updateDataElement(\n                GameData.DataFreeSpinsRemainingCount,\n                GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n            );\n\n            TweenLite.to(fsCount, 0.1, { alpha: 1 });\n        });\n\n        if (DataManager.quickspinEnabled()) {\n            // auto quick stop\n            this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n            HtmlController.updateActionElements(this.getAllActions());\n            HtmlController.dispatchUiAction(\"\");\n            this._controller.stop();\n        } else {\n            this.actions.changeActionState(\n                FreespinsActions.ActionSpinStop,\n                AppContext.gameConfiguration.GameEnableReelsStop,\n            );\n            HtmlController.updateActionElements(this.getAllActions());\n        }\n    }\n\n    endReceived(): void {\n        ModuleManager.outroModule(GameModules.Freespins);\n    }\n\n    dispatchAction(action: string): void {\n        if (action === GameActions.ActionSpinOrStop) {\n            if (this.actions.getActionState(FreespinsActions.ActionBack)) {\n                action = FreespinsActions.ActionBack;\n            } else if (this.actions.getActionState(FreespinsActions.ActionSpin)) {\n                action = FreespinsActions.ActionSpin;\n            } else if (this.actions.getActionState(FreespinsActions.ActionSpinStop)) {\n                action = FreespinsActions.ActionSpinStop;\n            } else {\n                return;\n            }\n        }\n\n        if (this.actions.getActionState(action)) {\n            PlayList.play(\"SND_Click\");\n            super.dispatchAction(action);\n\n            switch (action) {\n                case FreespinsActions.ActionStart:\n                    this.start();\n                    break;\n                case FreespinsActions.ActionBack:\n                    this.back();\n                    break;\n                case FreespinsActions.ActionSpin:\n                    this.spin();\n                    break;\n                case FreespinsActions.ActionSpinStop:\n                    this.stop();\n                    break;\n                case FreespinsActions.ActionAutoplay:\n                    this.autoplay();\n                    break;\n                case FreespinsActions.ActionAutoplayStop:\n                    this.autoplayStop();\n                    break;\n            }\n        }\n    }\n\n    start(id?: number): void {\n        this.actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n        this._controller.start(id);\n    }\n\n    spin(): void {\n        if (!this._wasCalclulated) {\n            if (GameManager.freespinsResponse != null && GameManager.freespinsResponse.currentWin > 0) {\n                Platforms.Platforms.win(GameManager.freespinsResponse.currentWin);\n            }\n        }\n\n        this.actions.disableAllActions();\n        if (DataManager.Autoplay) {\n            this.actions.changeActionState(FreespinsActions.ActionAutoplayStop, DataManager.autoplayEnabled());\n        }\n        HtmlController.dispatchUiAction(\"\");\n        DataManager.updateDataElement(GameData.DataTotalWin);\n        HtmlController.updateActionElements(this.getAllActions());\n        this._controller.spin();\n\n        Platforms.Platforms.spinStarted();\n    }\n\n    back(): void {\n        this._backDelay.stop();\n        this.disable();\n        ModuleManager.endFreespins();\n    }\n\n    stop(): void {\n        this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n        HtmlController.updateActionElements(this.getAllActions());\n        HtmlController.dispatchUiAction(\"\");\n        DataManager.quickspinStopped();\n        this._controller.stop();\n    }\n\n    end(): void {\n        if (GameManager.freespinsResponse != null && GameManager.freespinsResponse.totalWin > 0) {\n            Platforms.Platforms.win(GameManager.freespinsResponse.totalWin, true);\n        }\n\n        this._controller.end();\n    }\n\n    autoplayDelayed(): void {\n        this._autoplayDelay.stop();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        } else {\n            this.prepareNewGameRound();\n        }\n    }\n\n    autoplay(): void {\n        this._afterWinDelay.stop();\n\n        if (DataManager.AutoplayCount === \"∞\") {\n            DataManager.Autoplay = true;\n            DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n            this.spin();\n        } else {\n            DataManager.AutoplayCount = (parseInt(DataManager.AutoplayCount) - 1).toString();\n            if (parseInt(DataManager.AutoplayCount) >= 0) {\n                DataManager.Autoplay = true;\n                DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n                this.spin();\n            } else {\n                DataManager.Autoplay = false;\n                this.prepareNewGameRound();\n            }\n        }\n    }\n\n    autoplayStop(): void {\n        DataManager.Autoplay = false;\n        this.actions.changeActionState(FreespinsActions.ActionAutoplayStop, false);\n        HtmlController.updateActionElement(FreespinsActions.ActionAutoplayStop, false);\n    }\n\n    backButton(): void {\n        this.actions.changeActionState(FreespinsActions.ActionBack, true);\n        HtmlController.updateActionElement(FreespinsActions.ActionBack, true);\n    }\n\n    machineStopped(isHighWin: boolean): void {\n        Platforms.Platforms.spinEnded();\n        if (GameManager.freespinsResponse.currentWin === 0) {\n            this._wasCalclulated = true;\n        } else {\n            this._wasCalclulated = false;\n        }\n\n        if (GameManager.freespinsResponse.currentWin > 0) {\n            //this._afterWinDelay.start(30);\n\n            let hasScatterFreespinWin = false;\n\n            for (let i = 0; i < GameManager.freespinsResponse.wins.length; i++) {\n                if (GameManager.freespinsResponse.wins[i].trigger === Communication.Game.WinTrigger.Scatter) {\n                    if (GameManager.freespinsResponse.wins[i].type === Communication.Game.WinType.freeSpins) {\n                        hasScatterFreespinWin = true;\n                    }\n                } else if (GameManager.freespinsResponse.wins[i].trigger === Communication.Game.WinTrigger.Way) {\n                    if (GameManager.freespinsResponse.wins[i].type === Communication.Game.WinType.Cash) {\n                    }\n                }\n            }\n\n            this._afterWinDelay.stop();\n            if (isHighWin) {\n                this._afterWinDelay.start(80);\n            } else {\n                if (GameManager.freespinsResponse.totalWin > 0) {\n                    this._afterWinDelay.start(30);\n                } else {\n                    this.prepareNewGameRound();\n                }\n            }\n        }\n\n        if (this.isLastFreespin()) {\n            this._afterWinDelay.stop();\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n            if (GameManager.freespinsResponse.currentWin === 0) {\n                if (GameManager.freespinsResponse.totalWin != null) {\n                    DataManager.updateGameDataFromModule(\n                        GameData.DataFreeSpinTotalWin,\n                        GameManager.freespinsResponse.totalWin.toString(),\n                    );\n                }\n                DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n\n                // Autostart Configurator in case of retrigger > 0. Else show back-button to basegame.\n                if (this.getRetriggerCount() > 0 && !DataManager.GameLimit) {\n                    this._backDelay.start(15);\n                } else {\n                    this._backButtonDelay.start(60);\n                }\n            }\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n\n        if (GameManager.freespinsResponse.currentWin === 0) {\n            this.prepareNewGameRound();\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n\n        if (DataManager.Autoplay && GameManager.freespinsResponse.currentWin === 0) {\n            this._autoplayDelay.start(15);\n        }\n    }\n\n    quickWinCalculationFinished(): void {\n        if (\n            GameManager.freespinsResponse != null &&\n            GameManager.freespinsResponse.currentWin > 0 &&\n            !this._wasCalclulated\n        ) {\n            Platforms.Platforms.win(GameManager.freespinsResponse.currentWin);\n        }\n\n        this._wasCalclulated = true;\n        DataManager.updateDataElement(GameData.DataTotalWin);\n    }\n\n    winCalculationFinished(): void {\n        this._afterWinDelay.stop();\n\n        DataManager.updateDataElement(GameData.DataTotalWin);\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinTotalWin,\n                GameManager.freespinsResponse.totalWin.toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n\n        if (this.isLastFreespin()) {\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n    }\n\n    allWinsFinished(): void {\n        if (\n            GameManager.freespinsResponse != null &&\n            GameManager.freespinsResponse.currentWin > 0 &&\n            !this._wasCalclulated\n        ) {\n            Platforms.Platforms.win(GameManager.freespinsResponse.currentWin);\n        }\n        this._wasCalclulated = true;\n\n        this._afterWinDelay.stop();\n\n        if (this.isLastFreespin()) {\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n\n            // Autostart Configurator in case of retrigger > 0. Else show back-button to basegame.\n            if (this.getRetriggerCount() > 0 && !DataManager.GameLimit) {\n                this.back();\n            } else {\n                this._backButtonDelay.start(60);\n            }\n\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        }\n    }\n\n    initIntro(): void {\n        FreeRoundBonus.disableUi();\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsMultiplier,\n            GameManager.freespinsResponse.freeSpins.multiplier.toString(),\n        );\n\n        DataManager.updateDataElement(GameData.DataTotalWin);\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinTotalWin,\n                GameManager.freespinsResponse.totalWin.toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n\n        super.initIntro();\n        this._controller.initIntro();\n        Platforms.Platforms.featureInit({ type: Communication.Game.GameModules.Freespins });\n\n        if (this.isLastFreespin()) {\n            this.actions.disableAllActions();\n\n            // Autostart Configurator in case of retrigger > 0. Else show back-button to basegame.\n            if (this.getRetriggerCount() > 0 && !DataManager.GameLimit) {\n                this._backDelay.start(15);\n            } else {\n                this._backButtonDelay.start(60);\n            }\n\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n    }\n\n    intro(long: boolean = false): void {\n        FreeRoundBonus.disableUi();\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsCount,\n            GameManager.freespinsResponse.freeSpins.totalCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsMultiplier,\n            GameManager.freespinsResponse.freeSpins.multiplier.toString(),\n        );\n\n        for (let item of this._fsBoards) {\n            item.classList.remove(HtmlController.DisabledClass);\n        }\n\n        this._controller.intro(long);\n\n        this._userControlsShowDelay.start(100);\n    }\n\n    introFinished(): void {\n        if (this._userControls != null) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n        this._prepareNewGameRound.start(120);\n        this._userControlsShowDelay.start(100);\n    }\n\n    outro(): void {\n        DataManager.Autoplay = false;\n\n        this._controller.outro();\n\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    outroFinished(): void {\n        ModuleManager.introModule(GameModules.Base, true);\n\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    prepareNewGameRound(): void {\n        this._afterWinDelay.stop();\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinTotalWin,\n                GameManager.freespinsResponse.totalWin.toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n\n        if (DataManager.GameLimit) {\n            DataManager.Autoplay = false;\n            this.limit();\n        } else {\n            if (!DataManager.Autoplay) {\n                this.actions.changeActionStates({\n                    [FreespinsActions.ActionStart]: false,\n                    [FreespinsActions.ActionBack]: false,\n                    [FreespinsActions.ActionAutoplay]: !DataManager.Autoplay && DataManager.autoplayEnabled(),\n                    [FreespinsActions.ActionAutoplayStop]: DataManager.Autoplay && DataManager.autoplayEnabled(),\n                    [FreespinsActions.ActionSpin]: true,\n                    [FreespinsActions.ActionSpinStop]: false,\n                });\n            }\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    limit(): void {\n        LimitDialog.openDialog();\n\n        this.actions.changeActionStates({\n            [FreespinsActions.ActionStart]: false,\n            [FreespinsActions.ActionBack]: false,\n            [FreespinsActions.ActionAutoplay]: false,\n            [FreespinsActions.ActionAutoplayStop]: false,\n            [FreespinsActions.ActionSpin]: false,\n            [FreespinsActions.ActionSpinStop]: false,\n        });\n    }\n\n    fsEnterEnableDelay() {\n        this.actions.changeActionState(FreespinsActions.ActionStart, true);\n        HtmlController.updateActionElement(FreespinsActions.ActionStart, true);\n    }\n\n    enable(): void {\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsCount,\n            GameManager.freespinsResponse.freeSpins.totalCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsMultiplier,\n            GameManager.freespinsResponse.freeSpins.multiplier.toString(),\n        );\n\n        this._fsEnterEnableDelay.start(30);\n        // this.actions.changeActionState(FreespinsActions.ActionStart, true);\n        // HtmlController.updateActionElement(FreespinsActions.ActionStart, true);\n\n        this._controller.enable();\n\n        // if (this._baseUserControls != null && !this._baseUserControls.classList.contains(HtmlController.DisabledClass)) {\n        //     this._baseUserControls.classList.add(HtmlController.DisabledClass);\n        // }\n\n        // this._baseUserControlsShowDelay.start(100);\n    }\n\n    disable(): void {\n        this.actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    /**\n     *\n     * @returns {boolean}\n     */\n    private isLastFreespin(): boolean {\n        if (DataManager.GameLimit) {\n            this.limit();\n            return true;\n        }\n\n        if (\n            GameManager.freespinsResponse.freeSpins != null &&\n            GameManager.freespinsResponse.freeSpins.remainingCount != null &&\n            GameManager.freespinsResponse.freeSpins.remainingCount === 0\n        ) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Get remaining retriggers.\n     * @returns {number}\n     */\n    private getRetriggerCount(): number {\n        if (\n            GameManager.freespinsResponse.hasOwnProperty(\"customData\") &&\n            GameManager.freespinsResponse.customData[\"retriggerCount\"] != null\n        ) {\n            return GameManager.freespinsResponse.customData[\"retriggerCount\"];\n        }\n\n        return null;\n    }\n\n    userControlsShowDelay(): void {\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    baseUserControlsShowDelay(): void {\n        if (this._baseUserControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._baseUserControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    overlayFsBoard(): void {\n        for (let item of this._fsBoards) {\n            if (item != null && !item.classList.contains(\"_overlayed\")) {\n                item.classList.add(\"_overlayed\");\n            }\n        }\n    }\n\n    removeOverlayFsBoard(): void {\n        for (let item of this._fsBoards) {\n            if (item != null && item.classList.contains(\"_overlayed\")) {\n                item.classList.remove(\"_overlayed\");\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Desktop/DesktopFreespinsUserControls.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Controller } from \"../Controller\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { FreespinsView } from \"./FreespinsView\";\nimport { FreespinsModel } from \"./FreespinsModel\";\n\n@engineComponent(ComponentTypes.Controller)\nexport class FreespinsController extends Controller {\n    public static readonly StartReceived: string = \"eventStartReceived\";\n    public static readonly ConfirmReceived: string = \"eventConfirmReceived\";\n    public static readonly SpinReceived: string = \"eventSpinReceived\";\n    public static readonly EndReceived: string = \"eventEndReceived\";\n    public static readonly MachineStopped: string = \"eventMachineStopped\";\n    public static readonly WinCalculationFinished: string = \"eventWinCalculationFinished\";\n    public static readonly AllWinsFinished: string = \"eventAllWinsFinished\";\n    public static readonly IntroFinished: string = \"eventIntroFinished\";\n    public static readonly OutroFinished: string = \"eventOutroFinished\";\n    public static readonly QuickWinCalculationFinished: string = \"eventQuickWinCalculationFinished\";\n    public static readonly ConfiguratorStart: string = \"eventConfiguratorStart\";\n    public static readonly ConfiguratorContinue: string = \"eventConfiguratorContinue\";\n\n    protected _view: FreespinsView;\n    protected _model: FreespinsModel;\n\n    constructor() {\n        super();\n    }\n\n    startInitialization(view: any): void {\n        if (DEBUG) {\n            this.log(\"startInitialization\");\n        }\n\n        if (view instanceof FreespinsView) {\n            this._view = view;\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR view is not instance of BaseView\");\n            }\n        }\n\n        this._model = new FreespinsModel(this);\n    }\n\n    initReceived(): void {\n        this._view.initReceived(this);\n    }\n\n    disableLogo(): void {\n        this._view.disableLogo();\n    }\n\n    initIntro(): void {\n        this._view.initIntro();\n    }\n\n    start(id?: number): void {\n        this._model.start(id);\n    }\n\n    confirm(): void {\n        this._model.confirm();\n    }\n\n    spin(): void {\n        this._model.spin();\n        this._view.spin();\n    }\n\n    end(): void {\n        this._model.end();\n    }\n\n    stop(): void {\n        this._view.stop();\n    }\n\n    startReceived(): void {\n        this.emit(FreespinsController.StartReceived, this._view.startReceived());\n    }\n\n    confirmReceived(): void {\n        this.emit(FreespinsController.ConfirmReceived, this._view.confirmReceived());\n    }\n\n    spinReceived(): void {\n        this._view.spinReceived();\n        this.emit(FreespinsController.SpinReceived);\n    }\n\n    endReceived(): void {\n        this._view.endReceived();\n        this.emit(FreespinsController.EndReceived);\n    }\n\n    machineStopped(isHighWin: boolean): void {\n        this.emit(FreespinsController.MachineStopped, isHighWin);\n    }\n\n    quickWinCalculationFinished(): void {\n        this.emit(FreespinsController.QuickWinCalculationFinished);\n    }\n\n    winCalculationFinished(): void {\n        this.emit(FreespinsController.WinCalculationFinished);\n    }\n\n    allWinsFinished(): void {\n        this.emit(FreespinsController.AllWinsFinished);\n    }\n\n    intro(long: boolean = false): void {\n        this._view.intro(long);\n    }\n\n    introFinished(): void {\n        this.emit(FreespinsController.IntroFinished);\n    }\n\n    outro(): void {\n        this._view.outro();\n    }\n\n    outroFinished(): void {\n        this.emit(FreespinsController.OutroFinished);\n    }\n\n    enable(): void {\n        this._view.enable();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Freespins/FreespinsController.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { GameData } from \"../../Channels/Common/Datas/GameData\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { ContainerElement } from \"../../Components/Elements/Graphics/ContainerElement\";\nimport { SwitchElement } from \"../../Components/Elements/Graphics/SwitchElement\";\nimport { WinAnimator } from \"../WinAnimator\";\nimport { Machine } from \"../Machine\";\nimport { Symbols } from \"../Symbols\";\nimport { TeasingComponent } from \"../../CustomComponents/TeasingComponent\";\nimport { WinAnimatorExtended } from \"../../CustomComponents/WinAnimatorExtended\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { TeasingBonus } from \"../../CustomComponents/TeasingBonus\";\nimport { Tweens } from \"../../Components/Effects/Tweens\";\nimport { Paylines } from \"../Paylines\";\nimport { PaylinesSelector } from \"../PaylinesSelector\";\nimport { MachineExtended } from \"../../CustomComponents/MachineExtended\";\nimport { FreespinsController } from \"./FreespinsController\";\nimport { AmbientBackground } from \"../../Utils/AmbientBackground\";\n\nvar GameModules = Communication.Game.GameModules;\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class FreespinsView extends ContainerElement {\n    public static readonly DELAY_NUMBER_FS_COUNT_AND_MULTIPLIER: number = 30;\n    public static readonly DELAY_SHOW_NOWIN_CHESTS: number = 100;\n    public static readonly DELAY_CLICK_CHESTS: number = 30;\n    public static readonly DELAY_FS_START_MESSAGE: number = 180;\n\n    protected _controller: FreespinsController;\n\n    private _wasFinished: boolean = false;\n    private _outroDelay: FrameTimerEventEmitter;\n\n    private _fsMessageEnd: HTMLElement;\n    private _fsMessageEndNoWin: HTMLElement;\n\n    private _fsMessageStartDelay: FrameTimerEventEmitter;\n\n    private _fsCounter: HTMLElement;\n    private _fsMultiplier: HTMLElement;\n\n    private _paylines: Paylines;\n    private _paylinesSelector: PaylinesSelector;\n    private _symbols: Symbols;\n    private _machine: MachineExtended;\n    private _noWinContainer: ContainerElement;\n    private _winAnimator: WinAnimatorExtended;\n\n    private _fsMessageHideDelay: FrameTimerEventEmitter;\n    private _teasingBonus: TeasingBonus;\n    protected _transition: SwitchElement;\n\n    private transitionAlphaTween: Array<number>;\n    private transitionAlphaTweenEase: string;\n    private transitionAlphaTweenDelay: number;\n    private transitionAlphaTweenDuration: number;\n    private transitionAlphaTweenKeyTimes: Array<number>;\n\n    private _actualFsCount: number;\n    private _actualFsMultiplier: number;\n    private _timerDelayUpdateCountMulti: FrameTimerEventEmitter;\n    private _timerDelayEnableConfiguration: FrameTimerEventEmitter;\n\n    private _timerDelayLastChest: FrameTimerEventEmitter;\n\n    private _wildContainer: ContainerElement;\n\n    private _fsConfiguratorText: HTMLElement;\n\n    private _userControls: HTMLElement;\n    private _baseUserControls: HTMLElement;\n    private _userControls_supreme: HTMLElement;\n\n    constructor() {\n        super();\n\n        this._actualFsCount = 0;\n        this._actualFsMultiplier = 0;\n\n        this._fsMessageHideDelay = CreateFrameTimer(\"fsMessageHideDelay\");\n        this._fsMessageHideDelay.on(\n            FrameTimerEvents.Complete,\n            function (): void {\n                if (\n                    this._fsMessageStart != null &&\n                    !this._fsMessageStart.classList.contains(HtmlController.DisabledClass)\n                ) {\n                    this._fsMessageStart.classList.add(HtmlController.DisabledClass);\n                }\n            }.bind(this),\n        );\n\n        this._fsConfiguratorText = document.getElementById(\"fsConfiguratorText\");\n\n        this._outroDelay = CreateFrameTimer(\"outroDelay\");\n        this._outroDelay.on(FrameTimerEvents.Complete, this.outroFinished.bind(this));\n\n        this._timerDelayUpdateCountMulti = CreateFrameTimer(\"timerDelayUpdateCountMulti\");\n        this._timerDelayUpdateCountMulti.on(FrameTimerEvents.Complete, this.updateNumberCountAndMultiplier.bind(this));\n\n        this._timerDelayEnableConfiguration = CreateFrameTimer(\"_timerDelayEnableConfiguration\");\n        this._timerDelayEnableConfiguration.on(FrameTimerEvents.Complete, this.enableConfiguration.bind(this));\n\n        this._teasingBonus = new TeasingBonus();\n\n        this._userControls = document.getElementById(\"freespinsUserControls\");\n        this._baseUserControls = document.getElementById(\"userControls\");\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\n    }\n\n    createByNode(node: Element): void {\n        super.createByNode(node);\n\n        if (this.childs != null) {\n            for (var key in this.childs) {\n                if (this.childs[key] instanceof Paylines) {\n                    this._paylines = this.childs[key];\n                }\n\n                if (this.childs[key] instanceof PaylinesSelector) {\n                    this._paylinesSelector = this.childs[key];\n                }\n\n                if (this.childs[key] instanceof Symbols) {\n                    this._symbols = this.childs[key];\n                    this.removeChild(this._symbols);\n                }\n\n                if (this.childs[key] instanceof Machine) {\n                    this._machine = this.childs[key];\n                }\n\n                if (this.childs[key] instanceof WinAnimator) {\n                    this._winAnimator = this.childs[key];\n                }\n\n                if (key === \"NoWinContainer\" && this.childs[key] instanceof ContainerElement) {\n                    this._noWinContainer = this.childs[key];\n                }\n\n                if (key === \"TeasingComponent\" && this.childs[key] instanceof TeasingComponent) {\n                    this._teasingBonus = this.childs[key];\n                }\n\n                if (key === \"TeasingFront\" && this.childs[key] instanceof SwitchElement) {\n                    if (this._teasingBonus != null) {\n                        this._teasingBonus.addElementInstance({ teasingFront: this.childs[key] });\n                    }\n                }\n\n                if (key === \"TeasingParticles\" && this.childs[key] instanceof SwitchElement) {\n                    if (this._teasingBonus != null) {\n                        this._teasingBonus.addElementInstance({ teasingParticles: this.childs[key] });\n                    }\n                }\n\n                if (key === \"Transition\" && this.childs[key] instanceof SwitchElement) {\n                    this._transition = this.childs[key];\n                }\n\n                if (key === \"WildContainer\" && this.childs[key] instanceof ContainerElement) {\n                    this._wildContainer = this.childs[key];\n                }\n            }\n        }\n\n        this._fsCounter = document.getElementById(\"fsCount\");\n        if (this._fsCounter == null) {\n            if (DEBUG) {\n                this.log(\"ERROR no fsCounter\");\n            }\n        }\n\n        this._fsMultiplier = document.getElementById(\"fsMultiplier\");\n        if (this._fsMultiplier == null) {\n            if (DEBUG) {\n                this.log(\"ERROR no fsMultiplier\");\n            }\n        }\n\n        this._fsMessageEnd = document.getElementById(\"fsMessageEnd\");\n        if (this._fsMessageEnd == null) {\n            if (DEBUG) {\n                this.log(\"ERROR no fsMessageEnd\");\n            }\n        }\n\n        this._fsMessageEndNoWin = document.getElementById(\"fsMessageEndNoWin\");\n        if (this._fsMessageEndNoWin == null) {\n            if (DEBUG) {\n                this.log(\"ERROR no fsMessageEndNoWin\");\n            }\n        }\n    }\n\n    updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN)) {\n            this.transitionAlphaTween = node\n                .getAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN)\n                .split(\";\")\n                .map((value) => parseFloat(value));\n        }\n        if (node.hasAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_KEY_TIMES)) {\n            this.transitionAlphaTweenKeyTimes = node\n                .getAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_KEY_TIMES)\n                .split(\";\")\n                .map((value) => parseFloat(value));\n        }\n        if (node.hasAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_EASE)) {\n            this.transitionAlphaTweenEase = node.getAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_EASE);\n        }\n        if (node.hasAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_DELAY)) {\n            this.transitionAlphaTweenDelay = parseInt(\n                node.getAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_DELAY),\n            );\n        }\n        if (node.hasAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_DURATION)) {\n            this.transitionAlphaTweenDuration = parseInt(\n                node.getAttribute(FreespinsViewAttributes.TRANSITION_ALPHA_TWEEN_DURATION),\n            );\n        }\n    }\n\n    initReceived(controller: FreespinsController): void {\n        if (DEBUG) {\n            this.log(\"initReceived\");\n        }\n\n        this._controller = controller;\n\n        if (this._symbols != null) {\n            if (this._machine != null) {\n                if (GameManager.freespinsResponse != null) {\n                    if (\n                        GameManager.freespinsResponse.initData != null &&\n                        GameManager.freespinsResponse.initData.reels != null\n                    ) {\n                        this._machine.on(Machine.ReelStopped, this.onReelStopped.bind(this));\n                        this._machine.on(Machine.MachineStopped, this.machineStopped.bind(this));\n                        this._machine.initialize(this._symbols, GameManager.freespinsResponse.initData.reels);\n                        this._machine.addElementInstance({ teasing: [this._teasingBonus] });\n                    }\n\n                    if (this._winAnimator != null) {\n                        this._winAnimator.on(WinAnimator.FinishWinCalculation, this.finishWinCalculation.bind(this));\n                        this._winAnimator.on(WinAnimator.FinishWinAnimator, this.finishWinAnimator.bind(this));\n                        this._winAnimator.on(\n                            WinAnimator.FinishQuickWinCalculation,\n                            this.finishQuickWinCalculation.bind(this),\n                        );\n                        this._winAnimator.initialize(\n                            this._symbols,\n                            this._paylines,\n                            this.childs[\"NoWinContainer\"],\n                            this.childs[\"WinContainer\"],\n                            this,\n                        );\n                        this._winAnimator.showSymbols(GameManager.baseResponse.screen.reels);\n                        this._winAnimator.addElementInstance({ teasing: [this._teasingBonus] });\n                        this._winAnimator.addElementInstance({ wildContainer: this._wildContainer });\n                    }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR no freespins reponse\");\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no machine\");\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no symbols\");\n            }\n        }\n\n        this.toggleElements(false);\n    }\n\n    disableLogo(): void {\n        if (this.childs[\"Logo\"] != null) {\n            this.removeChild(this.childs[\"Logo\"]);\n        }\n    }\n\n    initIntro(): void {\n        this._machine.setStoppedSymbolsArray(GameManager.freespinsResponse.screen.reels);\n        this._winAnimator.showSymbols(GameManager.freespinsResponse.screen.reels);\n        this._winAnimator.setCustomData(GameManager.freespinsResponse.customData);\n        this._winAnimator.showInitWins(GameManager.freespinsResponse.wins, GameManager.freespinsResponse.currentWin);\n\n        this.toggleElements(true);\n        this.showCounterMultiplier();\n\n        this.visible = true;\n\n        AmbientBackground.changeAmbientBackground(\"color-1\", 0);\n\n        if (this.isLastFreespin()) {\n            PlayList.stop(\"SND_FSConfiguratorLoop\");\n            PlayList.stop(\"SND_FSEndLoop\");\n            PlayList.stop(\"SND_CycleLoop\");\n            PlayList.stop(\"SND_FSLoop\");\n            PlayList.stop(\"SND_BaseLoop\");\n            PlayList.loop(\"SND_FSEnd\");\n\n            if (GameManager.freespinsResponse.totalWin > 0) {\n                if (this._fsMessageEnd != null && this._fsMessageEnd.classList.contains(HtmlController.DisabledClass)) {\n                    this._fsMessageEnd.classList.remove(HtmlController.DisabledClass);\n                }\n            } else {\n                if (\n                    this._fsMessageEndNoWin != null &&\n                    this._fsMessageEndNoWin.classList.contains(HtmlController.DisabledClass)\n                ) {\n                    this._fsMessageEndNoWin.classList.remove(HtmlController.DisabledClass);\n                }\n            }\n        } else {\n            PlayList.loop(\"SND_FSLoop\");\n        }\n    }\n\n    spin(): void {\n        PlayList.stop(\"SND_FSConfiguratorLoop\");\n        PlayList.stop(\"SND_FSEndLoop\");\n        PlayList.stop(\"SND_CycleLoop\");\n        PlayList.stop(\"SND_BaseLoop\");\n        PlayList.loop(\"SND_FSLoop\");\n\n        if (this._paylinesSelector != null) {\n            this._paylinesSelector.reset();\n        }\n\n        this._machine.respin = null;\n        this._machine.spinStart(this._winAnimator.reset(false, true));\n    }\n\n    stop(): void {\n        this._machine.spinStop(null, true);\n    }\n\n    spinReceived(): void {\n        this._machine.setStoppedSymbolsArray(GameManager.freespinsResponse.screen.reels);\n        this._machine.spinStop(null, false, true);\n    }\n\n    endReceived(): void {}\n\n    onReelStopped(): void {\n        this._winAnimator.onReelStopped(\n            GameManager.freespinsResponse.screen.reels,\n            this._machine.actualReelStopped,\n            this._machine.forceStop,\n        );\n    }\n\n    machineStopped(): void {\n        this._wasFinished = false;\n\n        let isHighWin = this._winAnimator.isHighWin(GameManager.freespinsResponse.currentWin);\n\n        this._controller.machineStopped(isHighWin);\n\n        if (this._winAnimator.showWins(GameManager.freespinsResponse.wins, GameManager.freespinsResponse.currentWin)) {\n            // PlayList.stop('SND_BaseLoop');\n        }\n\n        if (GameManager.freespinsResponse.currentWin === 0) {\n            if (this.isLastFreespin()) {\n                PlayList.stop(\"SND_FSLoop\");\n                PlayList.loop(\"SND_FSEnd\");\n\n                this.fsMessageEnd();\n            }\n        }\n    }\n\n    private finishQuickWinCalculation(): void {\n        this._controller.quickWinCalculationFinished();\n    }\n\n    finishWinCalculation(): void {\n        this._wasFinished = true;\n\n        this._controller.winCalculationFinished();\n    }\n\n    finishWinAnimator(): void {\n        if (!DataManager.Autoplay) {\n            // PlayList.stop('SND_BaseLoop');\n            // PlayList.loop('SND_BaseRecapLoop');\n        }\n\n        if (this.isLastFreespin()) {\n            PlayList.stop(\"SND_FSLoop\", 60);\n            PlayList.loop(\"SND_FSEnd\");\n            this.fsMessageEnd();\n        }\n\n        this._controller.allWinsFinished();\n    }\n\n    intro(long: boolean = false): void {\n        this.toggleElements(true, false);\n        // this._fsMessageHideDelay.start(120);\n\n        this.introFinished();\n    }\n\n    introFinished(): void {\n        this.visible = true;\n        this._controller.introFinished();\n    }\n\n    outro(): void {\n        if (this._fsMessageEnd != null && !this._fsMessageEnd.classList.contains(HtmlController.DisabledClass)) {\n            this._fsMessageEnd.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._fsCounter) {\n            this._fsCounter.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._fsMultiplier) {\n            this._fsMultiplier.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._fsMessageEndNoWin != null &&\n            !this._fsMessageEndNoWin.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._fsMessageEndNoWin.classList.add(HtmlController.DisabledClass);\n        }\n\n        // PlayList.stop('SND_BaseLoop');\n        // PlayList.stop('SND_BaseRecapLoop');\n\n        PlayList.stop(\"SND_FSLoop\");\n        PlayList.stop(\"SND_FSEnd\");\n        PlayList.play(\"SND_FStransition\");\n        this._transition.goToCase(\"RESET\");\n        this.hideCounterMultiplier();\n\n        this._transition.once(SwitchElement.AnimationComplete, () => {\n            if (this._paylinesSelector != null) {\n                this._paylinesSelector.reset();\n            }\n\n            let inHighWins = this._winAnimator.reset(true);\n            if (this._wasFinished) {\n                this.outroFinished();\n            } else {\n                if (inHighWins) {\n                    this._outroDelay.start(60);\n                } else {\n                    this._outroDelay.start(30);\n                }\n            }\n        });\n\n        this._transition.goToCase(\"INIT_2\");\n    }\n\n    outroFinished(): void {\n        this.toggleElements(false, false);\n        this.hideCounterMultiplier();\n        this._controller.outroFinished();\n    }\n\n    enable(): void {}\n\n    private updateNumberCountAndMultiplier(): void {\n        DataManager.updateDataElement(GameData.DataFreeSpinsRemainingCount, this._actualFsCount.toString());\n        DataManager.updateDataElement(GameData.DataFreeSpinsMultiplier, this._actualFsMultiplier.toString());\n    }\n\n    startReceived(): boolean {\n        this.visible = true;\n        this.alpha = 1;\n\n        this._winAnimator.showSymbols(GameManager.freespinsResponse.screen.reels);\n        this._machine.setStoppedSymbolsArray(GameManager.freespinsResponse.screen.reels);\n        this._winAnimator.showSymbols(GameManager.freespinsResponse.screen.reels);\n        this._winAnimator.setCustomData(GameManager.freespinsResponse.customData);\n        this._winAnimator.showInitWins(GameManager.freespinsResponse.wins, GameManager.freespinsResponse.currentWin);\n        //this._controller.startConfigurator();\n\n        if (GameManager.freespinsResponse.freeSpins) {\n            DataManager.updateDataElement(\n                GameData.DataFreeSpinsRemainingCount,\n                GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n            );\n            DataManager.updateDataElement(\n                GameData.DataFreeSpinsMultiplier,\n                GameManager.freespinsResponse.freeSpins.multiplier.toString(),\n            );\n        }\n\n        if (this._baseUserControls != null && this._baseUserControls.classList.contains(HtmlController.DisabledClass)) {\n            this._baseUserControls.classList.remove(HtmlController.DisabledClass);\n        }\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._fsCounter) {\n            this._fsCounter.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._fsMultiplier) {\n            this._fsMultiplier.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._transition) {\n            this._transition.goToCase(\"RESET\");\n        }\n\n        this._paylines.visible = true;\n\n        return ModuleManager.freespinsActive();\n    }\n\n    enableConfiguration() {\n        ModuleManager.freeSpinsConfiguratorContinue();\n    }\n\n    confirmReceived(): boolean {\n        console.warn(\"!\");\n        return ModuleManager.freespinsActive();\n    }\n\n    // COUNTER AND MULTIPLIER\n    showCounterMultiplier(): void {\n        if (this._fsCounter != null && this._fsMultiplier != null) {\n            this._fsCounter.classList.remove(HtmlController.DisabledClass);\n            this._fsMultiplier.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    hideCounterMultiplier(): void {\n        if (this._fsCounter != null && this._fsMultiplier != null) {\n            this._fsCounter.classList.add(HtmlController.DisabledClass);\n            this._fsMultiplier.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    // MESSAGE WINDOWS\n    fsMessageEnd(): void {\n        PlayList.play(\"SND_FSMessage\");\n        // this._fsMessageEndSoundDelay.start(90);\n\n        if (GameManager.freespinsResponse.totalWin > 0) {\n            if (this._fsMessageEnd != null && this._fsMessageEnd.classList.contains(HtmlController.DisabledClass)) {\n                this._fsMessageEnd.classList.remove(HtmlController.DisabledClass);\n            }\n        } else {\n            if (\n                this._fsMessageEndNoWin != null &&\n                this._fsMessageEndNoWin.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._fsMessageEndNoWin.classList.remove(HtmlController.DisabledClass);\n            }\n        }\n    }\n    //\n    // private fsMessageEndSoundDelay(): void\n    // {\n    //     // PlayList.loop('SND_FSEnd', 30);\n    // }\n\n    /**\n     * Checks last freespin.\n     * @returns {boolean}\n     */\n    private isLastFreespin(): boolean {\n        if (DataManager.GameLimit) {\n            return true;\n        }\n\n        if (\n            GameManager.freespinsResponse.freeSpins != null &&\n            GameManager.freespinsResponse.freeSpins.remainingCount != null &&\n            GameManager.freespinsResponse.freeSpins.remainingCount === 0\n        ) {\n            return true;\n        }\n\n        return false;\n    }\n\n    toggleElements(visible: boolean, long: boolean = false): void {\n        if (long) {\n            Tweens.removeTweens(this, \"all\");\n            Tweens.alphaTween(this, {\n                alphas: visible ? [0, 1] : [1, 0],\n                tweenDuration: 15,\n            });\n        } else {\n            this.alpha = visible ? 1 : 0;\n        }\n    }\n}\n\nconst FreespinsViewAttributes = {\n    TRANSITION_ALPHA_TWEEN: \"TransitionAlphaTween\",\n    TRANSITION_ALPHA_TWEEN_EASE: \"TransitionAlphaTweenEase\",\n    TRANSITION_ALPHA_TWEEN_DELAY: \"TransitionAlphaTweenDelay\",\n    TRANSITION_ALPHA_TWEEN_DURATION: \"TransitionAlphaTweenDuration\",\n    TRANSITION_ALPHA_TWEEN_KEY_TIMES: \"TransitionAlphaTweenKeyTimes\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Freespins/FreespinsView.ts\n **/","import { Utils, NumberUtils } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { MessageManager } from \"../../Managers/MessageManager\";\nimport { FreespinsController } from \"./FreespinsController\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { MinigameValue } from \"../../CustomComponents/MinigameElement\";\n\nexport class FreespinsModel {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected controller: FreespinsController;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor(controller: FreespinsController) {\n        this.controller = controller;\n    }\n\n    //******************************************************************************************************************\n    //  REQUESTS\n    //******************************************************************************************************************\n\n    public start(id?: number): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        GameManager.gameClient.start(Communication.Game.GameModules.Freespins).then((response: any): any => {\n            MessageManager.postpone(this.startReceived.bind(this), response);\n        });\n    }\n\n    public confirm(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        GameManager.gameClient\n            .start(Communication.Game.GameModules.Freespins, { confirm: true })\n            .then((response: any): any => {\n                MessageManager.postpone(this.confirmReceived.bind(this), response);\n            });\n    }\n\n    public spin(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        GameManager.gameClient.freespin(Communication.Game.GameModules.Freespins).then((response: any): any => {\n            MessageManager.postpone(this.spinReceived.bind(this), response);\n        });\n    }\n\n    public end(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        GameManager.gameClient.endFreespin().then((response: any): any => {\n            MessageManager.postpone(this.endReceived.bind(this), response);\n        });\n    }\n\n    //******************************************************************************************************************\n    //  RESPONSES\n    //******************************************************************************************************************\n\n    protected startReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            Platforms.Platforms.featureStarted({ type: Communication.Game.GameModules.Freespins });\n            this.controller.startReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    protected confirmReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            this.controller.confirmReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    protected spinReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            this.controller.spinReceived();\n            Platforms.Platforms.spinReceived({\n                balance: parseFloat(NumberUtils.add(response.balance.real, response.balance.bonus)),\n                win: GameManager.freespinsResponse.currentWin,\n                totalBet: BetManager.createBetForSpin().totalBet,\n                roundId: response.roundId,\n            });\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    protected endReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            Platforms.Platforms.featureFinished({ type: Communication.Game.GameModules.Freespins });\n            this.controller.endReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Freespins/FreespinsModel.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { GambleUserControls } from \"../Common/UserControls/GambleUserControls\";\n\nvar GameModules = Communication.Game.GameModules;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class DesktopGambleUserControls extends GambleUserControls {\n    // activate base background animations if we start game at gamble scene\n    initIntro(): void {\n        ModuleManager.setActiveSceneBackground(GameModules.Base, 0);\n\n        super.initIntro();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Desktop/DesktopGambleUserControls.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { UserControls } from \"../Common/UserControls/UserControls\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { GameActions } from \"../Common/Actions/GameActions\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { PickActions } from \"../Common/Actions/PickActions\";\nimport { PickController } from \"../../GameComponents/Pick/PickController\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { GameData } from \"../Common/Datas/GameData\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { TweenLite } from \"gsap\";\n\nvar GameModules = Communication.Game.GameModules;\nvar GameStatuses = Communication.Game.GameModuleStatus;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class DesktopPickUserControls extends UserControls {\n    protected _controller: PickController;\n\n    private _userControls: HTMLElement;\n    private _userControls_supreme: HTMLElement;\n    private _baseUserControls: HTMLElement;\n    private _pickCount: HTMLElement;\n    private _pickMultiplier: HTMLElement;\n    private _backDelay: FrameTimerEventEmitter;\n    private _backButtonDelay: FrameTimerEventEmitter;\n\n    private _fsConfiguratorText: HTMLElement;\n    private _fsCount: HTMLElement;\n    private _fsMultiplier: HTMLElement;\n\n    constructor() {\n        super(\"pick\");\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.registerActions();\n\n        this._userControls = document.getElementById(\"pickUserControls\");\n        this._fsConfiguratorText = document.getElementById(\"fsConfiguratorText\");\n\n        this._backDelay = CreateFrameTimer(\"backDelay\");\n        this._backDelay.on(FrameTimerEvents.Complete, this.back.bind(this));\n\n        this._backButtonDelay = CreateFrameTimer(\"backButtonDelay\");\n        this._backButtonDelay.on(FrameTimerEvents.Complete, this.backButton.bind(this));\n\n        this._pickCount = document.getElementById(\"pickCount\"); //todo  ???\n        if (this._pickCount == null) {\n            if (DEBUG) {\n                this.log(\"ERROR no pickCount\");\n            }\n        }\n\n        this._pickMultiplier = document.getElementById(\"pickMultiplier\"); //todo  ???\n        if (this._pickMultiplier == null) {\n            if (DEBUG) {\n                this.log(\"ERROR no pickMultiplier\");\n            }\n        }\n    }\n\n    addController(controller: PickController): void {\n        this._controller = controller;\n        this._controller.on(PickController.StartReceived, this.startReceived.bind(this));\n        this._controller.on(PickController.SelectReceived, this.selectReceived.bind(this));\n        this._controller.on(PickController.EndReceived, this.endReceived.bind(this));\n        this._controller.on(PickController.UpdateCounters, this.updateCounter.bind(this));\n        this._controller.on(PickController.UpdateCountersValues, this.updateCounterValues.bind(this));\n        this._controller.on(PickController.SelectComplete, this.selectComplete.bind(this));\n        this._controller.on(PickController.AllWinsFinished, this.allWinsFinished.bind(this));\n        this._controller.on(PickController.IntroFinished, this.introFinished.bind(this));\n        this._controller.on(PickController.Intro, this.intro.bind(this));\n        this._controller.on(PickController.OutroFinished, this.outroFinished.bind(this));\n        this._controller.on(PickController.Outro, this.outro.bind(this));\n    }\n\n    registerActions(): void {\n        this.actions.registerActions({\n            [PickActions.ActionSpot + 0]: false,\n            [PickActions.ActionSpot + 1]: false,\n            [PickActions.ActionSpot + 2]: false,\n            [PickActions.ActionSpot + 3]: false,\n            [PickActions.ActionSpot + 4]: false,\n            [PickActions.ActionSpot + 5]: false,\n            [PickActions.ActionSpot + 6]: false,\n            [PickActions.ActionSpot + 7]: false,\n            [PickActions.ActionSpot + 8]: false,\n        });\n    }\n\n    initReceived(): void {\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\n        this._baseUserControls = document.getElementById(\"userControls\");\n        this._fsCount = document.getElementById(\"fsCount\");\n        this._fsMultiplier = document.getElementById(\"fsMultiplier\");\n\n        super.initReceived();\n\n        this._controller.initReceived();\n\n        /*if (GameManager.pickResponse.multiplier != null) {\n            DataManager.updateGameDataFromModule(GameData.DataFreeSpinsMultiplier, GameManager.pickResponse.multiplier.toString());\n            DataManager.updateDataElement(GameData.DataFreeSpinsMultiplier, GameManager.pickResponse.multiplier.toString());\n        }*/\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"none\";\n        }\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    startReceived(): void {\n        ModuleManager.outroModule(GameModules.Base);\n        ModuleManager.setAutoplayAfterFeature(false);\n    }\n\n    selectReceived(): void {\n        /*if(this._pickCount && this._pickCount.classList.contains('flash')) {\n            this._pickCount.classList.remove('flash');\n        }\n\n        if(this._pickMultiplier && this._pickMultiplier.classList.contains('flash')) {\n            this._pickMultiplier.classList.remove('flash');\n        }*/\n    }\n\n    endReceived(): void {\n        if (ModuleManager.freespinsEnabled()) {\n            ModuleManager.enableFreespins();\n        }\n    }\n\n    dispatchAction(action: string): void {\n        if (ModuleManager.pickEnabled() || ModuleManager.pickActive()) {\n            if (action === GameActions.ActionSpinOrStop) {\n                return;\n            }\n\n            if (this.actions.getActionState(action)) {\n                super.dispatchAction(action);\n\n                if (action.substr(0, PickActions.ActionSpot.length) === PickActions.ActionSpot) {\n                    let id: number = parseInt(action.substr(PickActions.ActionSpot.length, action.length));\n                    this._controller.select(id);\n                }\n                this.actions.disableAllActions();\n            }\n            HtmlController.updateActionElements(this.getAllActions());\n        }\n\n        // if((GameManager.freespinsResponse != null && GameManager.freespinsResponse.status != null && GameManager.freespinsResponse.status === GameStatuses.Disabled)\n        //     && (GameManager.gambleResponse == null || (GameManager.gambleResponse.status != null && GameManager.gambleResponse.status === GameStatuses.Disabled))) {\n        //\n        //     if (action == PickActions.ActionConfirm\n        //         || (\n        //             action === GameActions.ActionSpinOrStop\n        //             && GameManager.pickResponse\n        //             && GameManager.pickResponse.round\n        //             && GameManager.pickResponse.round.spots.filter(value => value.status === Communication.Game.PickRoundSpotStatus.Enabled).length == 0\n        //         )) {\n        //         this._controller.end();\n        //         this.actions.changeActionState(PickActions.ActionConfirm, false);\n        //         HtmlController.updateActionElement(PickActions.ActionConfirm, false);\n        //         return;\n        //     }\n        // }\n        //\n        // if (action === GameActions.ActionSpinOrStop) {\n        //     return;\n        // }\n        //\n        // if (this.actions.getActionState(action)) {\n        //     super.dispatchAction(action);\n        //\n        //     if(action == PickActions.ActionConfirm) {\n        //         this._controller.outro();\n        //     } else if(action.substr(0, PickActions.ActionSpot.length) === PickActions.ActionSpot) {\n        //         let id: number = parseInt(action.substr(PickActions.ActionSpot.length, action.length));\n        //         this._controller.select(id);\n        //     }\n        // }\n        // this.actions.disableAllActions();\n        // HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    start(): void {\n        this.actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n        this._controller.start();\n    }\n\n    back(): void {\n        this._backDelay.stop();\n        this.disable();\n        ModuleManager.endPick();\n    }\n\n    end(): void {\n        if (GameManager.pickResponse.count != null && GameManager.pickResponse.multiplier != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinsCountMultiplier,\n                GameManager.pickResponse.count.toString() + \";\" + GameManager.pickResponse.multiplier.toString(),\n            );\n            DataManager.updateDataElement(\n                GameData.DataFreeSpinsCountMultiplier,\n                GameManager.pickResponse.count.toString() + \";\" + GameManager.pickResponse.multiplier.toString(),\n            );\n        }\n        this._controller.end();\n    }\n\n    backButton(): void {\n        this.actions.changeActionState(PickActions.ActionBack, true);\n        HtmlController.updateActionElement(PickActions.ActionBack, true);\n    }\n\n    allWinsFinished(): void {\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    initIntro(): void {\n        super.initIntro();\n        this._controller.initIntro();\n        Platforms.Platforms.featureInit({ type: Communication.Game.GameModules.Pick });\n        this.prepareNewGameRound(true);\n\n        if (this._fsConfiguratorText) {\n            this._fsConfiguratorText.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._fsCount) {\n            this._fsCount.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._fsMultiplier) {\n            this._fsMultiplier.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n\n        if (this._userControls != null) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._baseUserControls != null) {\n            this._baseUserControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    intro(long: boolean = false): void {\n        if (ModuleManager.pickEnabled()) {\n            if (this._userControls != null) {\n                this._userControls.classList.add(HtmlController.DisabledClass);\n            }\n\n            if (this._userControls_supreme != null) {\n                this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n            }\n\n            if (this._baseUserControls != null) {\n                this._baseUserControls.classList.add(HtmlController.DisabledClass);\n            }\n        }\n    }\n\n    introFinished(): void {\n        this.prepareNewGameRound();\n\n        if (this._fsConfiguratorText) {\n            this._fsConfiguratorText.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._fsCount) {\n            this._fsCount.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._fsMultiplier) {\n            this._fsMultiplier.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n\n        if (this._userControls != null) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._baseUserControls != null) {\n            this._baseUserControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    outro(): void {\n        if (this._fsConfiguratorText) {\n            this._fsConfiguratorText.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._fsCount) {\n            this._fsCount.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._fsMultiplier) {\n            this._fsMultiplier.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._baseUserControls != null) {\n            this._baseUserControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        this._controller.outro();\n    }\n\n    outroFinished(): void {\n        // ModuleManager.disablePick();\n        // ModuleManager.startFreespins();\n        ModuleManager.introModule(GameModules.Freespins, true);\n    }\n\n    prepareNewGameRound(init: boolean = false): void {\n        this.actions.changeActionStates({\n            [PickActions.ActionSpot + 0]: false,\n            [PickActions.ActionSpot + 1]: false,\n            [PickActions.ActionSpot + 2]: false,\n            [PickActions.ActionSpot + 3]: false,\n            [PickActions.ActionSpot + 4]: false,\n            [PickActions.ActionSpot + 5]: false,\n            [PickActions.ActionSpot + 6]: false,\n            [PickActions.ActionSpot + 7]: false,\n            [PickActions.ActionSpot + 8]: false,\n        });\n\n        if (\n            GameManager.pickResponse != null &&\n            GameManager.pickResponse.round != null &&\n            GameManager.pickResponse.round.spots != null\n        ) {\n            if (GameManager.pickResponse.round.remainingPicks === 0) {\n                if (!ModuleManager.freespinsEnabled()) {\n                    this.end();\n                } else {\n                    if (GameManager.pickResponse.count != null && GameManager.pickResponse.multiplier != null) {\n                        DataManager.updateGameDataFromModule(\n                            GameData.DataFreeSpinsCountMultiplier,\n                            GameManager.pickResponse.count.toString() +\n                                \";\" +\n                                GameManager.pickResponse.multiplier.toString(),\n                        );\n                        DataManager.updateDataElement(\n                            GameData.DataFreeSpinsCountMultiplier,\n                            GameManager.pickResponse.count.toString() +\n                                \";\" +\n                                GameManager.pickResponse.multiplier.toString(),\n                        );\n                    }\n                    ModuleManager.enableFreespins();\n                }\n                return;\n            }\n\n            for (let key in GameManager.pickResponse.round.spots) {\n                let id: number = GameManager.pickResponse.round.spots[key].id;\n                let status: string = GameManager.pickResponse.round.spots[key].status.toString();\n\n                if (id != null && status != null && status === \"enabled\") {\n                    this.actions.changeActionState(PickActions.ActionSpot + id, true);\n                }\n            }\n        }\n\n        // DataManager.updateDataElement(GameData.DataFreeSpinsRemainingCount, ''); //opera fix\n        // DataManager.updateDataElement(GameData.DataFreeSpinsMultiplier, ''); //opera fix\n\n        if (\n            DataManager.getDataById(GameData.DataFreeSpinsRemainingCount) !== GameManager.pickResponse.count.toString()\n        ) {\n            let fsCount = document.querySelector(\"#fsCount .value\");\n            let hide = TweenLite.to(fsCount, 0.1, { alpha: 0 });\n            hide.eventCallback(\"onComplete\", () => {\n                DataManager.updateDataElement(\n                    GameData.DataFreeSpinsRemainingCount,\n                    GameManager.pickResponse.count.toString(),\n                );\n\n                TweenLite.to(fsCount, 0.1, { alpha: 1 });\n            });\n        }\n        if (\n            DataManager.getDataById(GameData.DataFreeSpinsMultiplier) !== GameManager.pickResponse.multiplier.toString()\n        ) {\n            let fsMultiplier = document.querySelectorAll(\"#fsMultiplier .value\");\n            let hide = TweenLite.to(fsMultiplier, 0.1, { alpha: 0 });\n            hide.eventCallback(\"onComplete\", () => {\n                DataManager.updateDataElement(\n                    GameData.DataFreeSpinsMultiplier,\n                    GameManager.pickResponse.multiplier.toString(),\n                );\n\n                TweenLite.to(fsMultiplier, 0.1, { alpha: 1 });\n            });\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    updateCounter(): void {\n        console.warn(\"!\");\n\n        DataManager.updateDataElement(GameData.DataFreeSpinsRemainingCount, \"\"); //opera fix\n        DataManager.updateDataElement(GameData.DataFreeSpinsMultiplier, \"\"); //opera fix\n\n        DataManager.updateDataElement(GameData.DataFreeSpinsRemainingCount, GameManager.pickResponse.count.toString());\n        DataManager.updateDataElement(GameData.DataFreeSpinsMultiplier, GameManager.pickResponse.multiplier.toString());\n\n        let fsCount = document.getElementById(\"fsCount\");\n        TweenLite.to(fsCount, 1, { alpha: [1, 0] });\n        /*if(PickView.ActualValueType != '') {\n            if(PickView.ActualValueType === 'count') {\n                if(this._pickCount && !this._pickCount.classList.contains('flash')) {\n                    this._pickCount.classList.add('flash');\n                }\n            } else if(PickView.ActualValueType === 'multiplier') {\n                if(this._pickMultiplier && !this._pickMultiplier.classList.contains('flash')) {\n                    this._pickMultiplier.classList.add('flash');\n                }\n            }\n        }*/\n    }\n\n    updateCounterValues(): void {\n        /*if(PickView.ActualValue != -1 && PickView.ActualValueType != '') {\n            let count: number;\n            let multiplier: number;\n\n            if (PickView.ActualValueType === 'count') {\n                count = parseInt(DataManager.getDataById(GameData.DataFreeSpinsRemainingCount)) + PickView.ActualValue;\n                DataManager.updateGameDataFromModule(GameData.DataFreeSpinsRemainingCount, count.toString());\n                DataManager.updateDataElement(GameData.DataFreeSpinsRemainingCount, count.toString());\n            } else if (PickView.ActualValueType === 'multiplier') {\n                multiplier = parseInt(DataManager.getDataById(GameData.DataFreeSpinsMultiplier)) + PickView.ActualValue;\n                DataManager.updateGameDataFromModule(GameData.DataFreeSpinsMultiplier, multiplier.toString());\n                DataManager.updateDataElement(GameData.DataFreeSpinsMultiplier, multiplier.toString());\n            }\n        }*/\n    }\n\n    pickStartButton(): void {\n        if (this._baseUserControls != null && this._baseUserControls.classList.contains(HtmlController.DisabledClass)) {\n            this._baseUserControls.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    selectComplete(): void {\n        this.prepareNewGameRound();\n    }\n\n    enable(): void {\n        this.start();\n    }\n\n    disable(): void {\n        this.actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n        //this.outro();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Desktop/DesktopPickUserControls.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Controller } from \"../Controller\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { PickModel } from \"./PickModel\";\nimport { PickView } from \"./PickView\";\n\n@engineComponent(ComponentTypes.Controller)\nexport class PickController extends Controller {\n    public static readonly StartReceived: string = \"eventStartReceived\";\n    public static readonly SelectReceived: string = \"eventSelectReceived\";\n    public static readonly EndReceived: string = \"eventEndReceived\";\n    public static readonly UpdateCounters: string = \"eventUpdateCounters\";\n    public static readonly UpdateCountersValues: string = \"eventUpdateCountersValues\";\n    public static readonly SelectComplete: string = \"eventSelectComplete\";\n    public static readonly AllWinsFinished: string = \"eventAllWinsFinished\";\n    public static readonly Intro: string = \"eventIntro\";\n    public static readonly IntroFinished: string = \"eventIntroFinished\";\n    public static readonly Outro: string = \"eventOutro\";\n    public static readonly OutroFinished: string = \"eventOutroFinished\";\n\n    protected _view: PickView;\n    protected _model: PickModel;\n\n    constructor() {\n        super();\n    }\n\n    startInitialization(view: any): void {\n        if (DEBUG) {\n            this.log(\"startInitialization\");\n        }\n\n        if (view instanceof PickView) {\n            this._view = view;\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR view is not instance of PickView\");\n            }\n        }\n\n        this._model = new PickModel(this);\n    }\n\n    initReceived(): void {\n        this._view.initReceived(this);\n    }\n\n    disableLogo(): void {\n        this._view.disableLogo();\n    }\n\n    initIntro(): void {\n        this._view.initIntro();\n    }\n\n    collect(): void {}\n\n    start(): void {\n        this._model.start();\n        this._view.start();\n    }\n\n    select(spotId: number): void {\n        this._model.select(spotId);\n        this._view.select(spotId);\n    }\n\n    end(): void {\n        this._model.end();\n        this._view.end();\n    }\n\n    fsMessageStart(): void {\n        this._view.fsMessageStart();\n    }\n\n    startReceived(): void {\n        this._view.startReceived();\n        this.emit(PickController.StartReceived);\n    }\n\n    selectReceived(): void {\n        this._view.selectReceived();\n        this.emit(PickController.SelectReceived);\n    }\n\n    endReceived(): void {\n        this._view.endReceived();\n        this.emit(PickController.EndReceived);\n    }\n\n    updateCounters(): void {\n        this.emit(PickController.UpdateCounters);\n    }\n\n    updateCountersValues(): void {\n        this.emit(PickController.UpdateCountersValues);\n    }\n\n    selectComplete(): void {\n        this.emit(PickController.SelectComplete);\n    }\n\n    allWinsFinished(): void {\n        this.emit(PickController.AllWinsFinished);\n    }\n\n    intro(long: boolean = false): void {\n        this.emit(PickController.Intro);\n    }\n\n    introFinished(): void {\n        this.emit(PickController.IntroFinished);\n    }\n\n    outro(): void {\n        this._view.outro();\n    }\n\n    outroFinished(): void {\n        this.emit(PickController.OutroFinished);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Pick/PickController.ts\n **/","import { Utils } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { PickController } from \"./PickController\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { MessageManager } from \"../../Managers/MessageManager\";\n\nexport class PickModel {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected controller: PickController;\n\n    //******************************************************************************************************************\n    //  CONSTRUCTOR\n    //******************************************************************************************************************\n\n    constructor(controller: PickController) {\n        this.controller = controller;\n    }\n\n    //******************************************************************************************************************\n    //  REQUESTS\n    //******************************************************************************************************************\n\n    public start(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        GameManager.gameClient.start(Communication.Game.GameModules.Pick).then((response: any): any => {\n            MessageManager.postpone(this.startReceived.bind(this), response);\n        });\n    }\n\n    public select(spotId: number): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        GameManager.gameClient.pickSelect(spotId).then((response: any): any => {\n            MessageManager.postpone(this.selectReceived.bind(this), response);\n        });\n    }\n\n    public end(): void {\n        if (GameManager.requestSend) {\n            return;\n        }\n\n        GameManager.requestSend = true;\n\n        GameManager.gameClient.end(Communication.Game.GameModules.Pick).then((response: any): any => {\n            MessageManager.postpone(this.endReceived.bind(this), response);\n        });\n    }\n\n    //******************************************************************************************************************\n    //  RESPONSES\n    //******************************************************************************************************************\n\n    protected startReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            Platforms.Platforms.featureStarted({ type: Communication.Game.GameModules.Pick });\n            this.controller.startReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    protected selectReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            this.controller.selectReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n\n    protected endReceived(response: Communication.Game.GameResponse): void {\n        if (!Utils.isNullOrUndefined(response)) {\n            GameManager.parseResponses(response);\n            DataManager.updateResponseData();\n\n            Platforms.Platforms.featureFinished({ type: Communication.Game.GameModules.Pick });\n            this.controller.endReceived();\n        }\n\n        GameManager.requestSend = false;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Pick/PickModel.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { PickController } from \"./PickController\";\nimport { ContainerElement } from \"../../Components/Elements/Graphics/ContainerElement\";\nimport { Symbol } from \"../Symbol\";\nimport { WinAnimatorExtended } from \"../../CustomComponents/WinAnimatorExtended\";\nimport { Spot } from \"./Spot\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { Tweens } from \"../../Components/Effects/Tweens\";\nimport { BaseView } from \"../Base/BaseView\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { SwitchElement } from \"../../Components/Elements/Graphics/SwitchElement\";\nimport { WinAnimatorPick } from \"../../CustomComponents/WinAnimatorPick\";\nimport { IPickRoundSpot } from \"neo-games/Engine/Communication/Game/Types/IPickRoundSpot\";\nimport { Symbols } from \"../Symbols\";\nimport { WinAnimator } from \"../WinAnimator\";\nimport { GameData } from \"../../Channels/Common/Datas/GameData\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { AmbientBackground } from \"../../Utils/AmbientBackground\";\n\nvar PickRoundSpotStatus = Communication.Game.PickRoundSpotStatus;\nvar PickRoundSpotValueType = Communication.Game.PickRoundSpotValueType;\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class PickView extends ContainerElement {\n    private _controller: PickController;\n\n    private _introDelay: FrameTimerEventEmitter;\n    private _outroDelay: FrameTimerEventEmitter;\n\n    private _introDuration: number = 120;\n    private _outroDuration: number = 120;\n\n    private _startDuration: number = 60;\n\n    //private _spots: Array<Spot> = [];\n    private _background: ContainerElement;\n    private _spots: Symbols;\n    private _bottomContainer: ContainerElement;\n    private _topContainer: ContainerElement;\n    private _transition: SwitchElement;\n    private _winAnimator: WinAnimatorPick;\n    private _logo: SwitchElement;\n\n    private _fsMessageStartDelay: FrameTimerEventEmitter;\n    private _fsMessageHideDelay: FrameTimerEventEmitter;\n    private _pickStartButtonDelay: FrameTimerEventEmitter;\n    private _selectCompleteDelay: FrameTimerEventEmitter;\n\n    private _statusTimer: FrameTimerEventEmitter;\n    private _status: string;\n\n    private _fsMessageStart: HTMLElement;\n\n    constructor() {\n        super();\n\n        this._fsMessageStartDelay = CreateFrameTimer(\"fsMessageStartDelay\");\n        this._fsMessageStartDelay.on(FrameTimerEvents.Complete, this.fsMessageStart.bind(this));\n\n        this._fsMessageHideDelay = CreateFrameTimer(\"fsMessageHideDelay\");\n        this._fsMessageHideDelay.on(\n            FrameTimerEvents.Complete,\n            function (): void {\n                if (\n                    this._fsMessageStart != null &&\n                    !this._fsMessageStart.classList.contains(HtmlController.DisabledClass)\n                ) {\n                    this._fsMessageStart.classList.add(HtmlController.DisabledClass);\n                }\n            }.bind(this),\n        );\n\n        this._statusTimer = CreateFrameTimer(\"statusTimer\");\n        this._statusTimer.on(FrameTimerEvents.Complete, this.statusTimerComplete.bind(this));\n\n        this._introDelay = CreateFrameTimer(\"introDelay\");\n        this._introDelay.on(FrameTimerEvents.Complete, this.introFinished.bind(this));\n\n        this._outroDelay = CreateFrameTimer(\"outroDelay\");\n        this._outroDelay.on(FrameTimerEvents.Complete, this.outroFinished.bind(this));\n\n        this._pickStartButtonDelay = CreateFrameTimer(\"pickStartButtonDelay\");\n        this._pickStartButtonDelay.on(FrameTimerEvents.Complete, this.pickStartButtonDelay.bind(this));\n\n        this._selectCompleteDelay = CreateFrameTimer(\"selectCompleteDelay\");\n        this._selectCompleteDelay.on(FrameTimerEvents.Complete, this.selectCompleteDelay.bind(this));\n    }\n\n    createByNode(node: Element): void {\n        super.createByNode(node);\n\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs[key] instanceof WinAnimatorPick) {\n                    this._winAnimator = this.childs[key];\n                }\n\n                if (key === \"BottomContainer\" && this.childs[key] instanceof ContainerElement) {\n                    this._bottomContainer = this.childs[\"BottomContainer\"];\n                }\n\n                if (key === \"TopContainer\" && this.childs[key] instanceof ContainerElement) {\n                    this._topContainer = this.childs[\"TopContainer\"];\n                }\n\n                if (this.childs[key] instanceof Symbols) {\n                    this._spots = this.childs[key];\n                    this.removeChild(this._spots);\n                }\n\n                if (key === \"Background\" && this.childs[key] instanceof ContainerElement) {\n                    this._background = this.childs[key];\n                }\n\n                if (key === \"Transition\" && this.childs[key] instanceof SwitchElement) {\n                    this._transition = this.childs[\"Transition\"];\n                }\n\n                if (key === \"Logo\" && this.childs[key] instanceof SwitchElement) {\n                    this._logo = this.childs[key];\n                }\n            }\n        }\n\n        this._fsMessageStart = document.getElementById(\"fsMessageStart\");\n    }\n\n    initReceived(controller: PickController): void {\n        if (DEBUG) {\n            this.log(\"initReceived\");\n        }\n\n        this._controller = controller;\n\n        if (this._spots != null) {\n            if (GameManager.pickResponse != null) {\n                if (this._winAnimator != null) {\n                    this._winAnimator.on(WinAnimatorPick.FinishWinAnimator, this.finishWinAnimator.bind(this));\n                    this._winAnimator.initialize(this._spots);\n                    if (GameManager.pickResponse.round != null && GameManager.pickResponse.round.spots != null) {\n                        this._winAnimator.showSpots(GameManager.pickResponse.round.spots);\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no pick response\");\n                }\n            }\n        }\n    }\n\n    private statusTimerComplete(): void {\n        switch (this._status) {\n            case \"start\": // intro\n                this.enabledSpots();\n                this.introFinished();\n                break;\n            case \"showWin\": // selectReceived\n                this.showWin();\n                break;\n            case \"updateCounters\":\n                this.updateCounters();\n                break;\n            case \"selectUpdate\":\n                this.updateCountersValues();\n                break;\n            case \"select\":\n                if (GameManager.pickResponse.round.remainingPicks <= 0) {\n                    this._controller.selectComplete();\n                    this.fsMessageStart();\n                } else {\n                    this.enabledSpots();\n                    this._controller.selectComplete();\n                }\n                break;\n        }\n    }\n\n    disableLogo(): void {\n        if (this._logo != null) {\n            this.removeChild(this._logo);\n        }\n    }\n\n    initIntro(): void {\n        if (\n            GameManager.pickResponse != null &&\n            GameManager.pickResponse.round != null &&\n            GameManager.pickResponse.round.spots != null\n        ) {\n            this.visible = true;\n            this.enabledSpots();\n            this._winAnimator.showPickWins(GameManager.pickResponse, true);\n\n            AmbientBackground.changeAmbientBackground(\"color-1\", 0);\n\n            PlayList.stop(\"SND_FSLoop\");\n            PlayList.stop(\"SND_BaseRotation\");\n            PlayList.loop(\"SND_FSConfiguratorLoop\");\n\n            if (GameManager.pickResponse.round.remainingPicks <= 0) {\n                this._selectCompleteDelay.start(1);\n            }\n        }\n    }\n\n    selectCompleteDelay() {\n        this._controller.selectComplete();\n        this.fsMessageStart();\n    }\n\n    collect(): void {}\n\n    start(): void {\n        this.intro();\n    }\n\n    /**\n     *\n     * @param spotId\n     */\n    select(spotId: number): void {\n        if (\n            GameManager.pickResponse != null &&\n            GameManager.pickResponse.round != null &&\n            GameManager.pickResponse.round.spots != null\n        ) {\n            for (let key in GameManager.pickResponse.round.spots) {\n                let id: number = GameManager.pickResponse.round.spots[key].id;\n                let spotData: IPickRoundSpot = GameManager.pickResponse.round.spots[id];\n            }\n        }\n    }\n\n    end(): void {}\n\n    startReceived(): void {\n        //PlayList.stop('SND_FSTransitionMenu');\n        //PlayList.play('SND_FSTransitionSelect');\n    }\n\n    selectReceived(): void {\n        if (\n            GameManager.pickResponse != null &&\n            GameManager.pickResponse.round != null &&\n            GameManager.pickResponse.round.spots != null\n        ) {\n            // Set spots to correspond case\n            this._winAnimator.setSpotsData(GameManager.pickResponse.round.spots);\n\n            // Show win/s\n            this._winAnimator.showPickWins(GameManager.pickResponse);\n\n            this._status = \"select\";\n            this._statusTimer.start(GameManager.pickResponse.round.remainingPicks ? 0 : this._startDuration);\n        }\n    }\n\n    showWin(): void {\n        this._status = \"updateCounters\";\n        this._statusTimer.start(30);\n    }\n\n    updateCounters(): void {\n        this._controller.updateCounters();\n        this._status = \"selectUpdate\";\n        this._statusTimer.start(60);\n    }\n\n    updateCountersValues(): void {\n        this._controller.updateCountersValues();\n\n        this._status = \"select\";\n        this._statusTimer.start(20);\n    }\n\n    endReceived(): void {\n        if (this._fsMessageStart != null && this._fsMessageStart.classList.contains(HtmlController.DisabledClass)) {\n            this._fsMessageStart.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    finishWinAnimator(): void {\n        this._controller.allWinsFinished();\n    }\n\n    /**\n     * Changes visibility of all content except transition SwitchElement. For intro/outro purposes.\n     * @param state boolean Whether to show or hide the content or not\n     */\n    contentVisibility(state: boolean) {\n        for (let key in this.childs) {\n            if (this.childs[key] != this._transition) {\n                this.childs[key].visible = state;\n            }\n        }\n    }\n\n    intro(long: boolean = false): void {\n        this.visible = true;\n        this.contentVisibility(false);\n        if (this._transition) {\n            this._transition.goToCase(\"INIT\");\n        }\n\n        AmbientBackground.changeAmbientBackground(\"color-1\", 20);\n\n        if (\n            GameManager.pickResponse != null &&\n            GameManager.pickResponse.round != null &&\n            GameManager.pickResponse.round.spots != null\n        ) {\n            //PlayList.stop('SND_FSWinLoop');\n            //PlayList.loop('SND_FSpickupMusic');\n            this._winAnimator.showSpots(GameManager.pickResponse.round.spots);\n            this._winAnimator.updateCounters(GameManager.pickResponse, true);\n        }\n\n        PlayList.stop(\"SND_FSLoop\");\n        PlayList.stop(\"SND_BaseRotation\");\n        PlayList.loop(\"SND_FSConfiguratorLoop\");\n        this._controller.intro(long);\n        this._introDelay.start(this._introDuration);\n    }\n\n    /**\n     *\n     */\n    enabledSpots(): void {\n        if (\n            GameManager.pickResponse != null &&\n            GameManager.pickResponse.round != null &&\n            GameManager.pickResponse.round.spots != null\n        ) {\n            this._winAnimator.setSpotsData(GameManager.pickResponse.round.spots);\n        }\n    }\n\n    introFinished(): void {\n        //this.enabledSpots();\n        this.contentVisibility(true);\n        if (this._transition) {\n            this._transition.goToCase(\"OUTRO\");\n        }\n\n        this._controller.introFinished();\n    }\n\n    outro(): void {\n        if (this._fsMessageStart != null && !this._fsMessageStart.classList.contains(HtmlController.DisabledClass)) {\n            this._fsMessageStart.classList.add(HtmlController.DisabledClass);\n        }\n\n        this._winAnimator.reset(true);\n\n        if (this._transition != null) {\n            //PlayList.play('SND_FSTransition');\n            this._transition.goToCase(\"START\");\n        }\n\n        this.contentVisibility(true);\n        if (this._transition) {\n            this._transition.goToCase(\"INIT\");\n        }\n\n        this._outroDelay.start(this._outroDuration);\n    }\n\n    outroFinished(): void {\n        this._outroDelay.stop();\n        this.contentVisibility(false);\n        if (this._transition) {\n            this._transition.goToCase(\"OUTRO\");\n        }\n        this._controller.outroFinished();\n    }\n\n    // MESSAGE WINDOWS\n    fsMessageStart(): void {\n        this._fsMessageStartDelay.stop();\n        // PlayList.stop('SND_BaseRecaploop', 30);\n\n        let progressFn = function (progress: number, duration: number) {\n            let progressInt = Math.round(progress * 100);\n\n            if (progressInt > 50) {\n                this.instance.off(\"progress\", progressFn);\n                PlayList.loop(\"SND_FSConfiguratorLoop\", 20, true);\n            }\n        };\n\n        PlayList.stop(\"SND_FSConfiguratorLoop\", 20);\n        PlayList.play(\"SND_FSMessageStart\", 0, true, progressFn);\n\n        if (this._fsMessageStart != null) {\n            if (GameManager.pickResponse && GameManager.pickResponse.round) {\n                DataManager.updateDataElement(\n                    GameData.DataFreeSpinsCountMultiplier,\n                    GameManager.pickResponse.count.toString() + \";\" + GameManager.pickResponse.multiplier.toString(),\n                );\n            }\n            this._fsMessageStart.classList.remove(HtmlController.DisabledClass);\n        }\n\n        this._pickStartButtonDelay.start(30);\n    }\n\n    pickStartButtonDelay(): void {\n        this._pickStartButtonDelay.stop();\n        ModuleManager.pickStartButton();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Pick/PickView.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { TimelineElement } from \"../Components/Elements/Graphics/TimelineElement\";\nimport { BetManager } from \"../Managers/BetManager\";\nimport { IPickRoundSpot } from \"neo-games/Engine/Communication/Game/Types/IPickRoundSpot\";\nimport { Symbol } from \"../GameComponents/Symbol\";\nimport { WinAnimator } from \"../GameComponents/WinAnimator\";\nimport { Symbols } from \"../GameComponents/Symbols\";\nimport { GameModulePickResponse } from \"neo-games/Engine/Communication/Game/Responses/GameModulePickResponse\";\nimport { IPickRound } from \"neo-games/Engine/Communication/Game/Types/IPickRound\";\nimport { ImageTextElement } from \"../Components/Elements/Texts/ImageTextElement\";\n\nvar PickRoundSpotStatus = Communication.Game.PickRoundSpotStatus;\nvar PickRoundSpotValueType = Communication.Game.PickRoundSpotValueType;\n\n/**\n * WinAnimatorPick uses paylines and symbols to create presentation of wins to user.\n * Also handle high wins animation for presentation special screens to user when win is bigger than some defined values.\n * @class WinAnimatorPick\n * @extends ContainerElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class WinAnimatorPick extends WinAnimator {\n    //******************************************************************************************************************\n    //  EVENTS\n    //******************************************************************************************************************\n\n    //******************************************************************************************************************\n    //  TIMER STATUSES\n    //******************************************************************************************************************\n\n    protected static readonly Start: string = \"start\";\n    protected static readonly SelectUpdate: string = \"selectUpdate\";\n    protected static readonly Select: string = \"select\";\n    protected static readonly UpdateCounters: string = \"updateCounters\";\n    protected static readonly ShowWin: string = \"showWin\";\n\n    protected static readonly Idle: string = \"idle\";\n\n    protected static readonly CycleWins: string = \"cycleWins\";\n\n    //******************************************************************************************************************\n    //  CASES\n    //******************************************************************************************************************\n\n    protected static readonly CaseDisabled: string = \"BONUS_DISABLED\";\n    protected static readonly CaseDisabledCash: string = \"BONUS_DISABLED_CASH\";\n    protected static readonly CaseDisabledCount: string = \"BONUS_DISABLED_COUNT\";\n    protected static readonly CaseDisabledMultiplier: string = \"BONUS_DISABLED_MULTIPLIER\";\n\n    protected static readonly CaseEnabled: string = \"BONUS_ENABLED\";\n\n    protected static readonly CaseSelected: string = \"BONUS_SELECTED\";\n\n    protected static readonly CaseRevealed: string = \"BONUS_REVEALED\";\n    protected static readonly CaseRevealedCash: string = \"BONUS_REVEALED_CASH\";\n    protected static readonly CaseRevealedCount: string = \"BONUS_REVEALED_COUNT\";\n    protected static readonly CaseRevealedMultiplier: string = \"BONUS_REVEALED_MULTIPLIER\";\n\n    protected static readonly CaseShown: string = \"BONUS_SHOWN\";\n    protected static readonly CaseShownCash: string = \"BONUS_SHOWN_CASH\";\n    protected static readonly CaseShownCount: string = \"BONUS_SHOWN_COUNT\";\n    protected static readonly CaseShownMultiplier: string = \"BONUS_SHOWN_MULTIPLIER\";\n\n    protected static readonly CaseStart: string = \"BONUS_START\";\n\n    // INIT\n    protected static readonly CaseDisabledInit: string = \"BONUS_DISABLED_INIT\";\n    protected static readonly CaseDisabledCashInit: string = \"BONUS_DISABLED_CASH_INIT\";\n    protected static readonly CaseDisabledCountInit: string = \"BONUS_DISABLED_COUNT_INIT\";\n    protected static readonly CaseDisabledMultiplierInit: string = \"BONUS_DISABLED_MULTIPLIER_INIT\";\n\n    protected static readonly CaseEnabledInit: string = \"BONUS_ENABLED_INIT\";\n\n    protected static readonly CaseSelectedInit: string = \"BONUS_SELECTED_INIT\";\n\n    protected static readonly CaseRevealedInit: string = \"BONUS_REVEALED_INIT\";\n    protected static readonly CaseRevealedCashInit: string = \"BONUS_REVEALED_CASH_INIT\";\n    protected static readonly CaseRevealedCountInit: string = \"BONUS_REVEALED_COUNT_INIT\";\n    protected static readonly CaseRevealedMultiplierInit: string = \"BONUS_REVEALED_MULTIPLIER_INIT\";\n\n    protected static readonly CaseShownInit: string = \"BONUS_SHOWN_INIT\";\n    protected static readonly CaseShownCashInit: string = \"BONUS_SHOWN_CASH_INIT\";\n    protected static readonly CaseShownCountInit: string = \"BONUS_SHOWN_COUNT_INIT\";\n    protected static readonly CaseShownMultiplierInit: string = \"BONUS_SHOWN_MULTIPLIER_INIT\";\n\n    protected static readonly CaseStartInit: string = \"BONUS_START_INIT\";\n\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    protected elementInstance: Array<Object> = [];\n\n    protected winStepDuration: number = 10;\n\n    protected spotsCount: number;\n\n    private currentCash: number = 0;\n    private currentCount: number = 0;\n    private currentMultiplier: number = 0;\n\n    //private _spots: Array<Spot> = [];\n    private _spots: Symbols;\n    private _picksTotal: number = 0;\n    private _pickSelected: number = 0;\n    private _actualReel: number = -1;\n    protected currentSpots: IPickRoundSpot[];\n    protected currentRound: IPickRound;\n\n    //******************************************************************************************************************\n    //  CREATE, INITIALIZE\n    //******************************************************************************************************************\n\n    public createByNode(node: Element): void {\n        super.createByNode(node);\n    }\n\n    public initialize(spots: Symbols): void {\n        this._spots = spots;\n\n        this.createTimer();\n        this.createSpots(spots);\n        this.createAnimations();\n    }\n\n    /**\n     *\n     * @param {Object} element\n     */\n    public addElementInstance(element: Object): void {\n        this.elementInstance[Object.keys(element)[0]] = element[Object.keys(element)[0]];\n    }\n\n    public updateCounters(response: GameModulePickResponse, force?: boolean, init?: boolean): boolean {\n        let oldCash = force ? response.totalWin : this.currentCash;\n        let oldCount = force ? response.count : this.currentCount;\n        let oldMultiplier = force ? response.multiplier : this.currentMultiplier;\n\n        this.currentCash = response.totalWin;\n        this.currentCount = response.count;\n        this.currentMultiplier = response.multiplier;\n\n        let wasAnimation: boolean = false;\n\n        if (init) {\n            if (this.childs[\"Cash\"] && this.childs[\"Cash\"] instanceof TimelineElement) {\n                this.childs[\"Cash\"].goToOutro(this.currentCash);\n                wasAnimation = true;\n            }\n            if (this.childs[\"Count\"] instanceof TimelineElement) {\n                this.childs[\"Count\"].goToOutro(this.currentCash);\n                wasAnimation = true;\n            }\n            if (this.childs[\"Multiplier\"] && this.childs[\"Multiplier\"] instanceof TimelineElement) {\n                this.childs[\"Multiplier\"].goToOutro(this.currentCash);\n                wasAnimation = true;\n            }\n        } else {\n            if (\n                force ||\n                (oldCash != this.currentCash && this.childs[\"Cash\"] && this.childs[\"Cash\"] instanceof TimelineElement)\n            ) {\n                this.childs[\"Cash\"].play(this.currentCash, force ? this.currentCash : oldCash);\n                wasAnimation = true;\n            }\n            if (\n                force ||\n                (oldCount != this.currentCount &&\n                    this.childs[\"Count\"] &&\n                    this.childs[\"Count\"] instanceof TimelineElement)\n            ) {\n                this.childs[\"Count\"].play(this.currentCount, force ? this.currentCount : oldCount);\n                wasAnimation = true;\n            }\n            if (\n                force ||\n                (oldMultiplier != this.currentMultiplier &&\n                    this.childs[\"Multiplier\"] &&\n                    this.childs[\"Multiplier\"] instanceof TimelineElement)\n            ) {\n                this.childs[\"Multiplier\"].play(this.currentMultiplier, force ? this.currentMultiplier : oldMultiplier);\n                wasAnimation = true;\n            }\n        }\n\n        return wasAnimation;\n    }\n\n    /**\n     *\n     * @param spotsData\n     */\n    public showSpots(spotsData: IPickRoundSpot[]): void {\n        this._pickSelected = null;\n        this._picksTotal = 0;\n\n        this._actualReel = -1;\n        this.currentSpots = spotsData;\n\n        for (let i = 0; i < spotsData.length; i++) {\n            this.removeCurrentSpot(i);\n        }\n\n        for (let key in spotsData) {\n            this.addCurrentSpot(spotsData[key].id);\n        }\n    }\n\n    /**\n     *\n     * @param spotsData\n     */\n    public setSpotsData(spotsData: IPickRoundSpot[]): void {\n        this.currentSpots = spotsData;\n    }\n\n    /**\n     *\n     * @param spotIndex\n     * @param useValue\n     */\n    protected spotGoToCase(spotIndex: number, useValue: boolean, init?: boolean): void {\n        let id: number;\n        let status: Communication.Game.PickRoundSpotStatus;\n        let value: number = null;\n        let valueType: string;\n        let addDelay: boolean = true;\n\n        let spotData: IPickRoundSpot = this.currentSpots[spotIndex];\n        if (spotData.id != null) {\n            id = spotData.id;\n        }\n        if (spotData.status != null) {\n            status = spotData.status;\n        }\n        if (spotData.value != null) {\n            value = parseInt(spotData.value + \"\");\n        }\n        if (spotData.valueType != null) {\n            valueType = spotData.valueType.toString();\n        }\n\n        if (spotIndex != null && status != null) {\n            if (this.currentSymbols != null && this.currentSymbols[spotIndex] != null) {\n                if (value !== null) {\n                    let childs = this.currentSymbols[spotIndex][0].getChildElements();\n                    for (let key in childs) {\n                        if (childs[key] instanceof ImageTextElement) {\n                            switch (valueType) {\n                                case PickRoundSpotValueType.Cash.toString():\n                                    childs[key].bitmapText.text = String(value);\n                                    childs[key].realign();\n                                    break;\n                                case PickRoundSpotValueType.Count.toString():\n                                    childs[key].bitmapText.text = \"+\" + value;\n                                    childs[key].realign();\n                                    break;\n                                case PickRoundSpotValueType.Multiplier.toString():\n                                    childs[key].bitmapText.text = \"x\" + value;\n                                    childs[key].realign();\n                                    break;\n                            }\n                        }\n                    }\n                }\n\n                let toCase: string = null;\n\n                switch (status.toString()) {\n                    case PickRoundSpotStatus.Enabled.toString():\n                        //this.currentSymbols[id][0].enabled = true;\n                        if (this.symbolsContainer != null) {\n                            this.noWinSymbolsContainer.addChild(this.currentSymbols[id][0]);\n                        }\n                        toCase = \"CaseEnabled\";\n\n                        break;\n                    case PickRoundSpotStatus.Disabled.toString():\n                        //this.currentSymbols[id][0].enabled = false;\n                        if (this.symbolsContainer != null) {\n                            this.noWinSymbolsContainer.addChild(this.currentSymbols[id][0]);\n                        }\n                        switch (valueType) {\n                            case PickRoundSpotValueType.Cash.toString():\n                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseDisabledCash)) {\n                                    toCase = \"CaseDisabledCash\";\n                                } else {\n                                    toCase = \"CaseDisabled\";\n                                }\n                                break;\n                            case PickRoundSpotValueType.Count.toString():\n                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseDisabledCount)) {\n                                    toCase = \"CaseDisabledCount\";\n                                } else {\n                                    toCase = \"CaseDisabled\";\n                                }\n                                break;\n                            case PickRoundSpotValueType.Multiplier.toString():\n                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseDisabledMultiplier)) {\n                                    toCase = \"CaseDisabledMultiplier\";\n                                } else {\n                                    toCase = \"CaseDisabled\";\n                                }\n                                break;\n                            default:\n                                toCase = \"CaseDisabled\";\n                                break;\n                        }\n                        break;\n                    case PickRoundSpotStatus.Revealed.toString():\n                        if (this.symbolsContainer != null) {\n                            this.symbolsContainer.addChild(this.currentSymbols[id][0]);\n                        }\n\n                        if (value <= 0) {\n                            if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseStart)) {\n                                toCase = \"CaseStart\";\n                                break;\n                            }\n                        }\n\n                        switch (valueType) {\n                            case PickRoundSpotValueType.Cash.toString():\n                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseRevealedCash)) {\n                                    toCase = \"CaseRevealedCash\";\n                                } else {\n                                    toCase = \"CaseRevealed\";\n                                }\n                                break;\n                            case PickRoundSpotValueType.Count.toString():\n                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseRevealedCount)) {\n                                    toCase = \"CaseRevealedCount\";\n                                } else {\n                                    toCase = \"CaseRevealed\";\n                                }\n                                break;\n                            case PickRoundSpotValueType.Multiplier.toString():\n                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseRevealedMultiplier)) {\n                                    toCase = \"CaseRevealedMultiplier\";\n                                } else {\n                                    toCase = \"CaseRevealed\";\n                                }\n                                break;\n                            default:\n                                toCase = \"CaseRevealed\";\n                                break;\n                        }\n                        break;\n                    case PickRoundSpotStatus.Shown.toString():\n                        if (this.symbolsContainer != null) {\n                            this.symbolsContainer.addChild(this.currentSymbols[id][0]);\n                        }\n\n                        switch (valueType) {\n                            case PickRoundSpotValueType.Cash.toString():\n                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseShownCash)) {\n                                    toCase = \"CaseShownCash\";\n                                } else {\n                                    toCase = \"CaseShown\";\n                                }\n                                break;\n                            case PickRoundSpotValueType.Count.toString():\n                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseShownCount)) {\n                                    toCase = \"CaseShownCount\";\n                                } else {\n                                    toCase = \"CaseShown\";\n                                }\n                                break;\n                            case PickRoundSpotValueType.Multiplier.toString():\n                                if (this.currentSymbols[spotIndex][0].hasCase(WinAnimatorPick.CaseShownMultiplier)) {\n                                    toCase = \"CaseShownMultiplier\";\n                                } else {\n                                    toCase = \"CaseShown\";\n                                }\n                                break;\n                            default:\n                                toCase = \"CaseShown\";\n                                break;\n                        }\n                        break;\n                    default:\n                        break;\n                }\n\n                if (toCase != null) {\n                    // do not replay the same animation if this symbol was initiated\n                    if (this.currentSymbols[spotIndex][0].getCurrentCase() != WinAnimatorPick[toCase + \"Init\"]) {\n                        this.currentSymbols[spotIndex][0].goToCase(WinAnimatorPick[init ? toCase + \"Init\" : toCase]);\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no spots or spot with id\");\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no id or status\");\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SHOW WINS\n    //******************************************************************************************************************\n\n    /**\n     *\n     * @param round\n     */\n    public showPickWins(response: GameModulePickResponse, init?: boolean): boolean {\n        this.currentRound = response.round;\n        this.currentWin = response.round.totalWin;\n\n        let newPicks = 0;\n        this.currentRound.spots.forEach((spot) => {\n            if (spot.status == PickRoundSpotStatus.Revealed) {\n                newPicks++;\n            }\n        });\n\n        this.updateCounters(response, false, init);\n\n        if (newPicks > this._picksTotal) {\n            this._picksTotal = newPicks;\n\n            this.currentMultiplierIndex = 0;\n\n            for (let i = 0; i < this.multipliers.length; i++) {\n                if (this.currentWin / BetManager.Bet >= this.multipliers[i]) {\n                    this.currentMultiplierIndex = i;\n                }\n            }\n\n            this.showFirstWins(init);\n\n            this.startTimer(WinAnimatorPick.FinishWinAnimator, 60);\n\n            return this.currentMultiplierIndex >= 3;\n        } else {\n            //this.allSymbolsGoToCase(Symbol.CaseNormal, false);\n            this.startTimer(WinAnimatorPick.Idle, this.getInitialIdleDelay());\n\n            return false;\n        }\n    }\n\n    protected showFirstWins(init?: boolean): void {\n        // Add spot to win case\n        //this.allSymbolsGoToCase(Symbol.CaseNowin, true);\n\n        for (let key in this.currentSpots) {\n            // Add spot to win case\n            this.spotGoToCase(this.currentSpots[key].id, false, init);\n        }\n    }\n\n    protected getAnimationIndex(): number {\n        let out: number = null;\n        this.currentSpots.forEach((spot, index) => {\n            if (spot.status == PickRoundSpotStatus.Shown) {\n                switch (spot.valueType.toString()) {\n                    case PickRoundSpotValueType.Cash.toString():\n                        out = 0;\n                        break;\n                    case PickRoundSpotValueType.Count.toString():\n                        out = 1;\n                        break;\n                    case PickRoundSpotValueType.Multiplier.toString():\n                        out = 2;\n                        break;\n                }\n            }\n        });\n        return out;\n    }\n\n    // Does nothing - replaced by updateCounters\n    protected startAnimation(): void {\n        this.currentAnimationIndex = this.getAnimationIndex();\n        this.currentAnimationFinished = false;\n\n        if (this.currentAnimationIndex === null) {\n            return;\n        }\n\n        return;\n    }\n\n    //******************************************************************************************************************\n    //  RESET\n    //******************************************************************************************************************\n\n    public reset(showLastSymbols: boolean, spin: boolean = false): boolean {\n        // Timer\n        this.stopTimer();\n\n        if (showLastSymbols && !spin) {\n            this.startTimer(WinAnimatorPick.Idle, this.getInitialIdleDelay());\n        }\n\n        //this.value.visible = false;\n\n        let lastMultiplierIndex = this.currentMultiplierIndex;\n        this.currentMultiplierIndex = -1;\n\n        if (this.currentAnimationIndex != null) {\n            if (this.currentAnimationFinished) {\n                this.resetAnimations();\n\n                this.currentWins = null;\n                this.currentWin = null;\n\n                return false;\n            } else {\n                this.stopAnimation();\n\n                this.currentWins = null;\n                this.currentWin = null;\n\n                return lastMultiplierIndex >= 3;\n            }\n        } else {\n            this.currentWins = null;\n            this.currentWin = null;\n\n            return lastMultiplierIndex >= 3;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  TIMER\n    //******************************************************************************************************************\n\n    protected onTimerComplete(): void {\n        this.timer.stop();\n\n        switch (this.timerStatus) {\n            case WinAnimatorPick.FinishWinAnimator:\n                this.emit(WinAnimatorPick.FinishWinAnimator);\n                break;\n            case WinAnimatorPick.Start:\n                break;\n            case WinAnimatorPick.SelectUpdate:\n                break;\n            case WinAnimatorPick.Select:\n                break;\n            case WinAnimatorPick.UpdateCounters:\n                break;\n            case WinAnimatorPick.ShowWin:\n                //this.showWins();\n                break;\n            case WinAnimatorPick.Idle:\n                this.idle();\n                break;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SYMBOLS\n    //******************************************************************************************************************\n\n    protected createSpots(symbols: Symbols): void {\n        this.symbols = symbols;\n\n        this.noWinSymbolsContainer = new ContainerElement();\n        this.noWinSymbolsContainer.name = \"NoWinSymbols\";\n        this.addChild(this.noWinSymbolsContainer);\n\n        this.symbolsContainer = new ContainerElement();\n        this.symbolsContainer.name = \"Symbols\";\n        this.addChild(this.symbolsContainer);\n\n        this.currentSymbols = [];\n\n        for (let i = 0; i < this.reelCount; i++) {\n            this.currentSymbols.push([]);\n\n            for (let j = 0; j < this.symbolCount; j++) {\n                this.currentSymbols[i].push(null);\n            }\n        }\n    }\n\n    /**\n     *\n     * @param reelIndex\n     * @param symbolIndex\n     */\n    protected addCurrentSpot(reelIndex: number, symbolIndex: number = 0): void {\n        if (this.currentSymbols[reelIndex][symbolIndex] === null) {\n            let spotData: IPickRoundSpot = this.currentSpots[reelIndex];\n            if (spotData.id != null && spotData.status != null) {\n                let symbol: Symbol = null;\n\n                switch (spotData.status.toString()) {\n                    case PickRoundSpotStatus.Disabled.toString():\n                        symbol = this.symbols.getSymbol(spotData.id, WinAnimatorPick.CaseDisabled);\n                        break;\n                    case PickRoundSpotStatus.Enabled.toString():\n                        symbol = this.symbols.getSymbol(spotData.id, WinAnimatorPick.CaseEnabled);\n                        break;\n                    case PickRoundSpotStatus.Selected.toString():\n                        symbol = this.symbols.getSymbol(spotData.id, WinAnimatorPick.CaseSelected);\n                        break;\n                    case PickRoundSpotStatus.Revealed.toString():\n                        symbol = this.symbols.getSymbol(spotData.id, WinAnimatorPick.CaseRevealed);\n                        break;\n                    case PickRoundSpotStatus.Shown.toString():\n                        symbol = this.symbols.getSymbol(spotData.id, WinAnimatorPick.CaseShown);\n                        break;\n                }\n                if (this.symbolsContainer != null && symbol != null) {\n                    this.symbolsContainer.addChild(symbol);\n                    symbol.position.x = this.reelX[reelIndex] - symbol.offsetX;\n                    symbol.position.y = this.reelY[reelIndex] + this.symbolHeight * symbolIndex - symbol.offsetY;\n                    this.currentSymbols[reelIndex][symbolIndex] = symbol;\n                }\n            }\n        }\n    }\n\n    protected removeCurrentSpot(reelIndex: number, symbolIndex: number = 0): void {\n        if (this.currentSymbols[reelIndex][symbolIndex] !== null) {\n            this.symbols.returnSymbol(this.currentSymbols[reelIndex][symbolIndex]);\n\n            this.currentSymbols[reelIndex][symbolIndex] = null;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  IDLE\n    //******************************************************************************************************************\n\n    protected idle(): void {\n        /*for (let i = 0; i < this.getIdleActiveElementsCount(); i++) {\n            const symbol = this.currentSymbols[Math.floor(Math.random() * this.reelCount)][Math.floor(Math.random() * this.spotsCount)];\n\n            if (symbol.getCurrentCase() === Symbol.CaseNormal) {\n                if (symbol.hasCase(Symbol.CaseIdle)) {\n                    symbol.goToCase(Symbol.CaseIdle);\n                }\n            }\n        }\n\n        this.startTimer(WinAnimatorPick.Idle, this.getIdleDelay());*/\n    }\n\n    /*    protected getInitialIdleDelay(): number\n        {\n            return 60;\n        }\n\n        protected getIdleDelay(): number\n        {\n            return 60;\n        }\n\n        protected getIdleActiveElementsCount(): number\n        {\n            return 2;\n        }*/\n}\n\nexport const WinAnimatorPickAttributes = {\n    /**\n     * Sounds property initialize playlist for winAnimator.\n     * @property Sounds\n     * @type String\n     * @default null\n     */\n    SOUNDS: \"Sounds\",\n    /**\n     * Name of config for win animator.\n     * @property Configs\n     * @type string\n     * @default null\n     */\n    CONFIGS: \"Configs\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/WinAnimatorPick.ts\n **/","import { engineComponent, EngineComponentFactory, Logger, NumberUtils } from \"neo-common\";\nimport { ClientHost, Communication, GameEngine } from \"neo-games\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { BaseActions } from \"../Common/Actions/BaseActions\";\nimport { UserControls } from \"../Common/UserControls/UserControls\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { GameData } from \"../Common/Datas/GameData\";\nimport { GameActions } from \"../Common/Actions/GameActions\";\nimport { BaseController } from \"../../GameComponents/Base/BaseController\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { ActionsTypes, ActionSet } from \"../Common/Actions/ActionSet\";\nimport { BalanceManager } from \"../../Managers/BalanceManager\";\nimport { LimitDialog } from \"../Common/Dialogs/LimitDialog\";\nimport { ResponsibleDialog1 } from \"../Common/Dialogs/ResponsibleDialog1\";\nimport { TerminalActions } from \"../Common/Actions/TerminalActions\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { FireBirdPaytable } from \"./FireBirdPaytable\";\nimport { FireBirdHelp } from \"./FireBirdHelp\";\nimport { StyxClientHostEvents } from \"./FireBirdTypes\";\nimport { Game } from \"neo-games/Engine/Communication/index\";\n\nvar GameModules = Communication.Game.GameModules;\nvar GameEvents = ClientHost.GameEvents;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class FireBirdBaseUserControls extends UserControls {\n    protected ledStripe: string;\n\n    protected _controller: BaseController;\n    protected _terminalActions: ActionSet;\n\n    private _userControls: HTMLElement;\n    private _userControls_supreme: HTMLElement;\n    private _paytable: FireBirdPaytable;\n    private _help: FireBirdHelp;\n    private _afterWinDelay: FrameTimerEventEmitter;\n    private _autoplayDelay: FrameTimerEventEmitter;\n    private _autoplayAfterGamble: boolean = false;\n    private _autoplayAfterFeature: boolean = false;\n\n    private _unColectedWin: number = 0;\n    private _unColectedWinDelay: FrameTimerEventEmitter;\n\n    private _enableConfiguratorButtons: FrameTimerEventEmitter;\n    private _prepareNewGameRound: FrameTimerEventEmitter;\n\n    private _featureAutoStartTimer: FrameTimerEventEmitter;\n    private _featureAutoStarted: boolean = false;\n\n    private _fsConfigurator: HTMLElement;\n\n    private _wasPrimaryGameEnded: boolean = true;\n    private _wasGameEnded: boolean = true;\n\n    constructor() {\n        super(\"base\");\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.ledStripe = node.hasAttribute(\"LedStripe\") ? node.getAttribute(\"LedStripe\") : \"255;255;255\";\n\n        this._terminalActions = new ActionSet(\n            `${this._key}.terminalActions`,\n            EngineComponentFactory.getComponentName(this),\n        );\n\n        this.registerActions();\n\n        this._afterWinDelay = CreateFrameTimer(\"afterWinDelay\");\n        this._afterWinDelay.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._autoplayDelay = CreateFrameTimer(\"autoplayDelay\");\n        this._autoplayDelay.on(FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\n\n        this._unColectedWinDelay = CreateFrameTimer(\"unColectedWinDelay\");\n        this._unColectedWinDelay.on(FrameTimerEvents.Complete, this.unColectedWinDelay.bind(this));\n\n        this._userControls = document.getElementById(\"userControls\");\n\n        this._enableConfiguratorButtons = CreateFrameTimer(\"enableConfiguratorButtons\");\n        this._enableConfiguratorButtons.on(FrameTimerEvents.Complete, this.enableConfiguratorButtons.bind(this));\n\n        this._prepareNewGameRound = CreateFrameTimer(\"prepareNewGameRound\");\n        this._prepareNewGameRound.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._featureAutoStartTimer = CreateFrameTimer(\"featureAutoStartTimer\");\n        this._featureAutoStartTimer.on(FrameTimerEvents.Complete, this.featureAutoStartDelayed.bind(this));\n\n        this._fsConfigurator = document.getElementById(\"fsConfigurator\");\n\n        this.handleClientHostReload = this.handleClientHostReload.bind(this);\n\n        // event 'reload' is fired when client host requests reload of actions (styx/firebird only)\n        AppContext.clientHost.on(StyxClientHostEvents.Reload, this.handleClientHostReload);\n\n        let creditBox: HTMLElement = document.getElementById(\"creditBox\");\n        let betBox: HTMLElement = document.getElementById(\"betBox\");\n\n        if (AppContext != null && AppContext.gameConfiguration != null) {\n            if (creditBox != null) {\n                if (AppContext.gameConfiguration.UseCoins) {\n                    creditBox.classList.add(\"denomOn\");\n                }\n                if (AppContext.gameConfiguration.HideAmountsEnabled) {\n                    creditBox.classList.add(\"hideAmountsOn\");\n                }\n            }\n            if (betBox != null) {\n                if (AppContext.gameConfiguration.HideAmountsEnabled) {\n                    betBox.classList.add(\"hideAmountsOn\");\n                }\n            }\n        }\n    }\n\n    private handleClientHostReload() {\n        if (ModuleManager.gambleActive()) {\n            return;\n        }\n        if (ModuleManager.freespinsEnabled() || ModuleManager.freespinsActive()) {\n            return;\n        }\n\n        if (DEBUG) {\n            Logger.debugGroup(\"FireBirdBaseUserControls\", `Event 'reload' arrived, actions updated...`);\n        }\n\n        AppContext.clientHost.setLEDStripe(this.ledStripe, 0);\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n    }\n\n    protected get terminalActions(): ActionSet {\n        return this._terminalActions;\n    }\n\n    public getAllTerminalActions(): ActionsTypes {\n        return this._terminalActions.getAllActions();\n    }\n\n    addController(controller: BaseController): void {\n        this._controller = controller;\n        this._controller.on(BaseController.SpinReceived, this.spinReceived.bind(this));\n        this._controller.on(BaseController.MachineStopped, this.machineStopped.bind(this));\n        this._controller.on(BaseController.WinCalculationFinished, this.winCalculationFinished.bind(this));\n        this._controller.on(BaseController.AllWinsFinished, this.allWinsFinished.bind(this));\n        this._controller.on(BaseController.IntroFinished, this.introFinished.bind(this));\n        this._controller.on(BaseController.OutroFinished, this.outroFinished.bind(this));\n        this._controller.on(BaseController.ConfiguratorStart, this.configuratorStart.bind(this));\n    }\n\n    registerActions(): void {\n        this.actions.registerActions({\n            [BaseActions.ActionAutoplay]: false,\n            [BaseActions.ActionAutoplayStop]: false,\n            [BaseActions.ActionBaseCollect]: false,\n            [BaseActions.ActionBetCycle]: false,\n            [BaseActions.ActionDenomSelect]: false,\n            [BaseActions.ActionCoinCountSelect]: false,\n            [BaseActions.ActionBetSelect]: false,\n            [BaseActions.ActionSpin]: false,\n            [BaseActions.ActionSpinStop]: false,\n            [BaseActions.ActionSelectPayline + 1]: false,\n            [BaseActions.ActionSelectPayline + 2]: false,\n            [BaseActions.ActionSelectPayline + 3]: false,\n            [BaseActions.ActionSelectPayline + 4]: false,\n            [BaseActions.ActionSelectPayline + 5]: false,\n            [BaseActions.ActionSelectPayline + 6]: false,\n            [BaseActions.ActionSelectPayline + 7]: false,\n            [BaseActions.ActionSelectPayline + 8]: false,\n            [BaseActions.ActionSelectPayline + 9]: false,\n            [BaseActions.ActionFsConfiguratorTreasure + 1]: false,\n            [BaseActions.ActionFsConfiguratorTreasure + 2]: false,\n            [BaseActions.ActionFsConfiguratorTreasure + 3]: false,\n            [BaseActions.ActionFsConfiguratorTreasure + 4]: false,\n            [BaseActions.ActionFsConfiguratorTreasure + 5]: false,\n            [BaseActions.ActionFsConfiguratorTreasure + 6]: false,\n            [BaseActions.ActionFsConfiguratorTreasure + 7]: false,\n            [BaseActions.ActionFsConfiguratorTreasure + 8]: false,\n            [BaseActions.ActionFsConfiguratorTreasure + 9]: false,\n        });\n\n        this.terminalActions.registerActions({\n            [TerminalActions.Payout]: false,\n            [TerminalActions.BackToLobby]: false,\n            [TerminalActions.StartWithCollect]: false,\n            [TerminalActions.Autoplay]: false,\n            [TerminalActions.BetOrGamble]: false,\n        });\n    }\n\n    initReceived(): void {\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\n\n        super.initReceived();\n\n        this._controller.initReceived();\n        this._controller.disableLogo();\n\n        this._paytable = new FireBirdPaytable();\n        this._paytable.initialize();\n\n        this._help = new FireBirdHelp();\n        this._help.initialize();\n\n        if (GameManager.gameResponse != null) {\n            DataManager.updateGameDataFromModule(GameData.DataTotalWin, GameManager.gameResponse.totalWin.toString());\n            if (AppContext.gameConfiguration.UseCoins != null && BetManager.CoinSize != null) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataTotalWinDenom,\n                    parseInt(\n                        NumberUtils.devide(GameManager.gameResponse.totalWin, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n            }\n        }\n\n        if (this._userControls != null && !ModuleManager.gambleActive()) {\n            this._userControls.style.display = \"none\";\n        }\n        if (\n            this._userControls != null &&\n            !ModuleManager.gambleActive() &&\n            !this._userControls.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls_supreme != null && !ModuleManager.gambleActive()) {\n            this._userControls_supreme.style.display = \"none\";\n        }\n\n        DataManager.updateDataElements();\n\n        this._paytable.changeBet();\n    }\n\n    collectReceived(): void {\n        if (GameManager.disableOnCollect) {\n            GameManager.disableGamePlay = true;\n        }\n\n        DataManager.gameState(\"GameEnded\");\n        this._wasGameEnded = true;\n        super.collectReceived();\n\n        DataManager.Collectable = true;\n        DataManager.updateDataElements();\n\n        this.prepareNewGameRound();\n\n        this._paytable.reset();\n        this._help.reset();\n\n        DataManager.updateDataElement(GameData.DataTotalWin, this._unColectedWin.toString());\n        if (AppContext.gameConfiguration.UseCoins != null && BetManager.CoinSize != null) {\n            DataManager.updateDataElement(\n                GameData.DataTotalWinDenom,\n                parseInt(NumberUtils.devide(this._unColectedWin, BetManager.CoinSize).toString()).toString(),\n            );\n        }\n        this._unColectedWinDelay.stop();\n        this._unColectedWinDelay.start(75);\n        this._unColectedWin = 0;\n    }\n\n    restoreGameRound(): void {\n        super.collectReceived();\n\n        DataManager.Collectable = true;\n\n        this.prepareNewGameRound();\n    }\n\n    spinReceived(): void {\n        DataManager.gameState(\"PrimaryGameStarted\");\n        if (\n            DataManager.Autoplay &&\n            AppContext.gameConfiguration.AutoplayModeSpeed === \"fast\" &&\n            AppContext.gameConfiguration.GameEnableReelsStop &&\n            AppContext.gameConfiguration.MinGameRoundDuration === 0\n        ) {\n            this.stop();\n        } else {\n            this.actions.changeActionState(\n                BaseActions.ActionSpinStop,\n                AppContext.gameConfiguration.GameEnableReelsStop,\n            );\n            this.terminalActions.changeActionState(\n                TerminalActions.StartWithCollect,\n                AppContext.gameConfiguration.GameEnableReelsStop,\n            );\n            HtmlController.updateActionElements(this.getAllActions());\n            AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n        }\n        DataManager.updateDataElement(GameData.DataRoundId);\n    }\n\n    dispatchAction(action: string): void {\n        if (ModuleManager.gambleActive() || ModuleManager.freespinsActive()) {\n            return;\n        }\n\n        if (action === BaseActions.ActionDenomSelect && this.actions.getActionState(action)) {\n            if (BetManager.DenomContainer != null) {\n                BetManager.DenomContainer.toggle();\n            }\n            return;\n        }\n\n        if (action === BaseActions.ActionCoinCountSelect && this.actions.getActionState(action)) {\n            if (BetManager.CoinCountContainer != null) {\n                BetManager.CoinCountContainer.toggle();\n            }\n            return;\n        }\n\n        if (action === BaseActions.ActionBetSelect && this.actions.getActionState(action)) {\n            if (BetManager.BetContainer != null) {\n                BetManager.BetContainer.toggle();\n            }\n            return;\n        }\n\n        let denomSelectValue: string = \"\";\n        if (\n            action.substr(0, BaseActions.ActionDenomSelectValue.length) === BaseActions.ActionDenomSelectValue &&\n            this.actions.getActionState(BaseActions.ActionDenomSelect)\n        ) {\n            denomSelectValue = action.substr(BaseActions.ActionDenomSelectValue.length, action.length);\n            action = BaseActions.ActionDenomSelect;\n        }\n\n        let coinCountSelectValue: string = \"\";\n        if (\n            action.substr(0, BaseActions.ActionCoinCountSelectValue.length) ===\n                BaseActions.ActionCoinCountSelectValue &&\n            this.actions.getActionState(BaseActions.ActionCoinCountSelect)\n        ) {\n            coinCountSelectValue = action.substr(BaseActions.ActionCoinCountSelectValue.length, action.length);\n            action = BaseActions.ActionCoinCountSelect;\n        }\n\n        let betSelectValue: string = \"\";\n        if (\n            action.substr(0, BaseActions.ActionBetSelectValue.length) === BaseActions.ActionBetSelectValue &&\n            this.actions.getActionState(BaseActions.ActionBetSelect)\n        ) {\n            betSelectValue = action.substr(BaseActions.ActionBetSelectValue.length, action.length);\n            action = BaseActions.ActionBetSelect;\n        }\n\n        if (action.substr(0, BaseActions.ActionSelectPayline.length) === BaseActions.ActionSelectPayline) {\n            this._controller.selectPayline();\n            return;\n        }\n\n        if (action === GameActions.ActionSpinOrStop) {\n            if (this.actions.getActionState(BaseActions.ActionSpin)) {\n                action = BaseActions.ActionSpin;\n            } else if (this.actions.getActionState(BaseActions.ActionSpinStop)) {\n                action = BaseActions.ActionSpinStop;\n            } else {\n                return;\n            }\n        }\n\n        if (action === TerminalActions.StartWithCollect) {\n            if (this.actions.getActionState(BaseActions.ActionBaseCollect)) {\n                action = BaseActions.ActionBaseCollect;\n            } else if (this.actions.getActionState(BaseActions.ActionSpin)) {\n                action = BaseActions.ActionSpin;\n            } else if (this.actions.getActionState(BaseActions.ActionSpinStop)) {\n                action = BaseActions.ActionSpinStop;\n            }\n        }\n\n        if (action === TerminalActions.Autoplay) {\n            if (this.actions.getActionState(BaseActions.ActionAutoplay)) {\n                action = BaseActions.ActionAutoplay;\n                this._help.reset();\n            } else if (this.actions.getActionState(BaseActions.ActionAutoplayStop)) {\n                action = BaseActions.ActionAutoplayStop;\n                this._help.reset();\n            }\n        }\n\n        if (action === TerminalActions.BetOrGamble) {\n            if (this.actions.getActionState(BaseActions.ActionBetCycle)) {\n                action = BaseActions.ActionBetCycle;\n            }\n        }\n\n        if (this.actions.getActionState(action)) {\n            this._help.reset();\n            PlayList.play(\"SND_Click\");\n            super.dispatchAction(action);\n\n            switch (action) {\n                case BaseActions.ActionSpin:\n                    this.spin();\n                    this._help.reset();\n                    break;\n                case BaseActions.ActionSpinStop:\n                    this.stop();\n                    break;\n                case BaseActions.ActionAutoplay:\n                    if (!DataManager.Autoplay) {\n                        DataManager.gameState(\"AutoPlayStarted\");\n                    }\n                    this.autoplay();\n                    break;\n                case BaseActions.ActionAutoplayStop:\n                    this.autoplayStop();\n                    break;\n                case BaseActions.ActionBetCycle:\n                    this.changeBet(false, false, true);\n                    if (BetManager.DenomContainer != null) {\n                        BetManager.DenomContainer.disable();\n                    }\n                    if (BetManager.CoinCountContainer != null) {\n                        BetManager.CoinCountContainer.disable();\n                        BetManager.CoinCountContainer.changeValue();\n                    }\n                    if (BetManager.BetContainer != null) {\n                        BetManager.BetContainer.disable();\n                        BetManager.BetContainer.changeValue();\n                    }\n                    break;\n                case BaseActions.ActionBaseCollect:\n                    this.collect();\n                    break;\n                case BaseActions.ActionDenomSelect:\n                    if (denomSelectValue != \"\") {\n                        this.changeDenom(parseFloat(denomSelectValue));\n                    }\n                    break;\n                case BaseActions.ActionCoinCountSelect:\n                    if (coinCountSelectValue != \"\") {\n                        this.changeCoinCount(parseFloat(coinCountSelectValue));\n                    }\n                    break;\n                case BaseActions.ActionBetSelect:\n                    if (betSelectValue != \"\") {\n                        this.changeBetByValue(parseFloat(betSelectValue));\n                    }\n                    break;\n                case BaseActions.ActionFsConfiguratorTreasure + 1:\n                    this.selectFromConfigurator(1);\n                    break;\n                case BaseActions.ActionFsConfiguratorTreasure + 2:\n                    this.selectFromConfigurator(2);\n                    break;\n                case BaseActions.ActionFsConfiguratorTreasure + 3:\n                    this.selectFromConfigurator(3);\n                    break;\n                case BaseActions.ActionFsConfiguratorTreasure + 4:\n                    this.selectFromConfigurator(4);\n                    break;\n                case BaseActions.ActionFsConfiguratorTreasure + 5:\n                    this.selectFromConfigurator(5);\n                    break;\n                case BaseActions.ActionFsConfiguratorTreasure + 6:\n                    this.selectFromConfigurator(6);\n                    break;\n                case BaseActions.ActionFsConfiguratorTreasure + 7:\n                    this.selectFromConfigurator(7);\n                    break;\n                case BaseActions.ActionFsConfiguratorTreasure + 8:\n                    this.selectFromConfigurator(8);\n                    break;\n                case BaseActions.ActionFsConfiguratorTreasure + 9:\n                    this.selectFromConfigurator(9);\n                    break;\n            }\n        }\n    }\n\n    collect(): void {\n        super.collect();\n\n        ModuleManager.disableGamble();\n        this.disable();\n        this.playCollectSound();\n\n        this._controller.collect();\n        if (!this._wasPrimaryGameEnded) {\n            DataManager.gameState(\"PrimaryGameEnded\");\n            this._wasPrimaryGameEnded = true;\n        }\n        if (GameManager.gameResponse.totalWin > 0) {\n            DataManager.gameState(\"GameCollectEscrow\");\n        }\n\n        LimitDialog.closeDialog();\n        GameManager.collect(GameModules.Base);\n\n        if (AppContext.gameConfiguration.UseCoins != null && BetManager.CoinSize != null) {\n            DataManager.updateDataElement(\n                GameData.DataTotalWinDenom,\n                parseInt(NumberUtils.devide(this._unColectedWin, BetManager.CoinSize).toString()).toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataTotalWin, this._unColectedWin.toString());\n        this._unColectedWinDelay.start(75);\n    }\n\n    unColectedWinDelay(): void {\n        DataManager.updateDataElement(GameData.DataTotalWinDenom, \"0\");\n        DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n    }\n\n    spin(): void {\n        if (GameManager.disableOnCollect) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.collect();\n            } else {\n                GameManager.disableGamePlay = true;\n            }\n            return;\n        }\n\n        if (!BalanceManager.hasCredit(false, true)) {\n            if (DataManager.Autoplay) {\n                DataManager.gameState(\"AutoPlayEnded\");\n            }\n            DataManager.Autoplay = false;\n            ModuleManager.disableGamble();\n            // TODO FireBirdPaytable\n            // PaytableClient.sendGameAction('AUTOPLAY_STOP');\n            this.prepareNewGameRound();\n            return;\n        }\n\n        DataManager.Collectable = false;\n        ModuleManager.disableGamble();\n        HtmlController.dispatchUiAction(\"\");\n        this.actions.disableAllActions();\n        this.terminalActions.disableAllActions();\n        if (DataManager.Autoplay) {\n            this.actions.changeActionState(BaseActions.ActionAutoplayStop, DataManager.autoplayEnabled());\n            this.terminalActions.changeActionState(TerminalActions.Autoplay, DataManager.autoplayEnabled());\n        }\n        HtmlController.updateActionElements(this.getAllActions());\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n        this.playCollectSound();\n\n        BalanceManager.fixBalance();\n        if (!DataManager.GameRoundClosed) {\n            DataManager.updateDataElement(GameData.DataTotalWin);\n            DataManager.updateDataElement(GameData.DataTotalWinDenom);\n        }\n\n        if (!this._wasPrimaryGameEnded) {\n            DataManager.gameState(\"PrimaryGameEnded\");\n            this._wasPrimaryGameEnded = true;\n        }\n        if (!this._wasGameEnded) {\n            DataManager.gameState(\"GameEnded\");\n            this._wasGameEnded = true;\n        }\n\n        DataManager.gameState(\"PrimaryGameEscrow\");\n        this._controller.spin();\n\n        LimitDialog.closeDialog();\n\n        this._paytable.reset();\n        this._help.reset();\n    }\n\n    stop(): void {\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n        this.terminalActions.changeActionState(TerminalActions.StartWithCollect, false);\n        HtmlController.updateActionElements(this.getAllActions());\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n        HtmlController.dispatchUiAction(\"\");\n        this._controller.stop();\n        this._help.reset();\n    }\n\n    autoplayDelayed(): void {\n        this._autoplayDelay.stop();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        } else {\n            this.prepareNewGameRound();\n        }\n    }\n\n    autoplay(): void {\n        this._afterWinDelay.stop();\n\n        if (DataManager.AutoplayCount === \"∞\") {\n            DataManager.Autoplay = true;\n            DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n            this.spin();\n        } else {\n            DataManager.AutoplayCount = (parseInt(DataManager.AutoplayCount) - 1).toString();\n            if (parseInt(DataManager.AutoplayCount) >= 0) {\n                DataManager.Autoplay = true;\n                DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n                this.spin();\n            } else {\n                if (DataManager.Autoplay) {\n                    DataManager.gameState(\"AutoPlayEnded\");\n                }\n                DataManager.Autoplay = false;\n                this.prepareNewGameRound();\n            }\n        }\n    }\n\n    autoplayStop(): void {\n        if (DataManager.Autoplay) {\n            DataManager.gameState(\"AutoPlayEnded\");\n        }\n        DataManager.Autoplay = false;\n        this.actions.changeActionState(BaseActions.ActionAutoplayStop, false);\n        this.terminalActions.changeActionState(TerminalActions.Autoplay, false);\n        HtmlController.updateActionElement(BaseActions.ActionAutoplayStop, false);\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n    }\n\n    changeBetByValue(value: number): void {\n        if (!DataManager.GameRoundClosed) {\n            this.collect();\n        } else {\n            this._controller.collect();\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            DataManager.updateDataElement(GameData.DataTotalWinDenom, \"0\");\n            LimitDialog.closeDialog();\n        }\n        BetManager.changeBetByValue(value);\n        this._paytable.changeBet();\n    }\n\n    changeCoinCount(value: number): void {\n        if (!DataManager.GameRoundClosed) {\n            this.collect();\n        } else {\n            this._controller.collect();\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            DataManager.updateDataElement(GameData.DataTotalWinDenom, \"0\");\n            LimitDialog.closeDialog();\n        }\n        BetManager.changeCoinCount(value);\n        this._paytable.changeBet();\n    }\n\n    changeDenom(value: number): void {\n        if (!DataManager.GameRoundClosed) {\n            this.collect();\n        } else {\n            this._controller.collect();\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            DataManager.updateDataElement(GameData.DataTotalWinDenom, \"0\");\n            LimitDialog.closeDialog();\n        }\n        BetManager.changeDenom(value);\n        this._paytable.changeBet();\n    }\n\n    changeBet(decrease: boolean = false, max: boolean = false, cycle: boolean = false): void {\n        if (!DataManager.GameRoundClosed) {\n            this.collect();\n        } else {\n            this._controller.collect();\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            DataManager.updateDataElement(GameData.DataTotalWinDenom, \"0\");\n            DataManager.updateDataElement(GameData.DataBalanceBonus);\n            DataManager.updateDataElement(GameData.DataBalanceReal);\n            DataManager.updateDataElement(GameData.DataBalanceTotal);\n            LimitDialog.closeDialog();\n        }\n        BetManager.changeBet(decrease, max, cycle);\n        this._paytable.changeBet();\n    }\n\n    machineStopped(): void {\n        this._wasGameEnded = false;\n        this._wasPrimaryGameEnded = false;\n\n        this._unColectedWinDelay.stop();\n        this._unColectedWin = GameManager.gameResponse.totalWin;\n\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            if (GameManager.baseResponse.wins != null) {\n                this._paytable.showWins(GameManager.baseResponse.wins);\n            }\n            this.disable();\n            return;\n        }\n\n        // TODO TerminalApi\n        /*\n        if (AppContext.clientHost) {\n            AppContext.clientHost.notifyEventFromGame('GameRoundVisuallyEnded');\n        }\n        */\n\n        if (GameManager.baseResponse.totalWin === 0) {\n            DataManager.gameState(\"PrimaryGameEnded\");\n            DataManager.gameState(\"GameEnded\");\n            this._wasPrimaryGameEnded = true;\n            this._wasGameEnded = true;\n            DataManager.updateDataElements();\n            if (DataManager.GameRoundClosed && GameManager.disableOnCollect) {\n                GameManager.disableGamePlay = true;\n            }\n        }\n\n        if (\n            GameManager.gameResponse.balance != null &&\n            GameManager.gameResponse.balance.bonus != null &&\n            GameManager.gameResponse.balance.bonus < BetManager.Bet\n        ) {\n            this.changeBetColor();\n        }\n\n        if (GameManager.baseResponse.wins != null) {\n            this._paytable.showWins(GameManager.baseResponse.wins);\n        }\n        if (GameManager.baseResponse.totalWin === 0) {\n            DataManager.Collectable = true;\n        }\n\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n        this.terminalActions.changeActionState(TerminalActions.StartWithCollect, false);\n        if (GameManager.baseResponse.totalWin > 0) {\n            if (DataManager.Autoplay) {\n                if (!DataManager.GameLimit) {\n                    this.actions.changeActionState(BaseActions.ActionSpin, true);\n                    this.terminalActions.changeActionState(TerminalActions.StartWithCollect, true);\n                }\n                if (ModuleManager.gambleEnabled()) {\n                    this.terminalActions.changeActionState(TerminalActions.BetOrGamble, true);\n                }\n            }\n            this._afterWinDelay.start(80);\n        } else {\n            this.prepareNewGameRound();\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n\n        if (DataManager.Autoplay && GameManager.baseResponse.totalWin === 0) {\n            this._autoplayDelay.start(15);\n        }\n\n        ModuleManager.enableGamble();\n    }\n\n    winCalculationFinished(): void {\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            this._paytable.bounceLogo();\n            DataManager.updateDataElement(GameData.DataTotalWin);\n            DataManager.updateDataElement(GameData.DataTotalWinDenom);\n            return;\n        }\n\n        this._afterWinDelay.stop();\n\n        DataManager.updateDataElement(GameData.DataTotalWin);\n        DataManager.updateDataElement(GameData.DataTotalWinDenom);\n\n        if (DataManager.GameRoundClosed) {\n            DataManager.updateDataElements();\n        }\n        DataManager.Collectable = true;\n        this.prepareNewGameRound();\n\n        this._paytable.bounceLogo();\n        ModuleManager.enableGamble();\n    }\n\n    allWinsFinished(): void {\n        this._unColectedWin = 0;\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (!ModuleManager.freespinsEnabled()) {\n            DataManager.gameState(\"PrimaryGameEnded\");\n            this._wasPrimaryGameEnded = true;\n        }\n        if (DataManager.GameRoundClosed) {\n            DataManager.gameState(\"GameEnded\");\n            this._wasGameEnded = true;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            ModuleManager.enableFreespins();\n            this._controller.startConfigurator();\n            return;\n        }\n\n        this._afterWinDelay.stop();\n        this.prepareNewGameRound();\n        if (DataManager.Autoplay) {\n            DataManager.gameState(\"GameEnded\");\n            this._wasGameEnded = true;\n            this.autoplay();\n        }\n    }\n\n    initIntro(): void {\n        AppContext.clientHost.setLEDStripe(this.ledStripe, 2);\n\n        super.initIntro();\n        ModuleManager.enableGamble();\n        if (GameManager.baseResponse.wins != null) {\n            this._paytable.showWins(GameManager.baseResponse.wins);\n        }\n        this._controller.initIntro();\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            ModuleManager.enableFreespins();\n            this._controller.startConfigurator();\n            return;\n        }\n\n        this.prepareNewGameRound();\n        ModuleManager.enableGamble();\n    }\n\n    intro(long: boolean = false): void {\n        AppContext.clientHost.setLEDStripe(this.ledStripe, 2);\n\n        this._unColectedWin = GameManager.gameResponse.totalWin;\n\n        if (DataManager.GameRoundClosed) {\n            DataManager.updateDataElement(GameData.DataBalanceBonus);\n            DataManager.updateDataElement(GameData.DataBalanceReal);\n            DataManager.updateDataElement(GameData.DataBalanceTotal);\n        }\n\n        if (long) {\n            DataManager.gameState(\"PrimaryGameEnded\");\n            this._wasPrimaryGameEnded = true;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            DataManager.Autoplay = this._autoplayAfterFeature;\n            this._controller.startConfigurator();\n        } else {\n            this._controller.intro(long);\n        }\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n    }\n\n    introFinished(): void {\n        if (GameManager.disableOnCollect) {\n            this._autoplayAfterGamble = false;\n            if (DataManager.GameRoundClosed) {\n                GameManager.disableGamePlay = true;\n            }\n        }\n        if (this._autoplayAfterGamble) {\n            DataManager.Autoplay = this._autoplayAfterGamble;\n        }\n\n        if (this._autoplayAfterFeature) {\n            DataManager.Autoplay = this._autoplayAfterFeature;\n        }\n\n        ModuleManager.enableGamble();\n        this._prepareNewGameRound.start(30);\n        if (DataManager.Autoplay) {\n            if (this._autoplayAfterFeature) {\n                this._autoplayDelay.start(60);\n            } else {\n                this.autoplay();\n            }\n            this._autoplayAfterFeature = false;\n        }\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    outro(): void {\n        this._wasPrimaryGameEnded = true;\n        this._wasGameEnded = true;\n        this._afterWinDelay.stop();\n        this._autoplayDelay.stop();\n\n        if (ModuleManager.freespinsActive()) {\n            this._autoplayAfterFeature = this._featureAutoStarted ? DataManager.Autoplay : false;\n        }\n        this._autoplayAfterGamble = DataManager.Autoplay;\n        DataManager.Autoplay = false;\n        this._featureAutoStarted = false;\n        if (ModuleManager.freespinsActive()) {\n            this._autoplayAfterGamble = false;\n            if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n                this._userControls.classList.add(HtmlController.DisabledClass);\n            }\n\n            if (\n                this._userControls_supreme != null &&\n                !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n            }\n        }\n        this._paytable.reset();\n        this._help.reset();\n        this._controller.outro();\n    }\n\n    outroFinished(): void {\n        if (ModuleManager.freespinsActive()) {\n            if (this._userControls != null) {\n                this._userControls.style.display = \"none\";\n            }\n\n            if (this._userControls_supreme != null) {\n                this._userControls_supreme.style.display = \"none\";\n            }\n\n            ModuleManager.introModule(GameModules.Freespins);\n        } else {\n            ModuleManager.introModule(GameModules.Gamble);\n        }\n    }\n\n    prepareNewGameRound(): void {\n        this._afterWinDelay.stop();\n\n        if (GameManager.disableGamePlay) {\n            DataManager.gameState(\"GamePlayDisabled\");\n            return;\n        }\n\n        if (DataManager.GameLimit) {\n            if (DataManager.Autoplay) {\n                DataManager.gameState(\"AutoPlayEnded\");\n            }\n            DataManager.Autoplay = false;\n            this.limit();\n        } else {\n            if (!DataManager.Autoplay) {\n                let totalwin: boolean = GameManager.gameResponse.totalWin > 0;\n\n                this.actions.changeActionStates({\n                    [BaseActions.ActionAutoplay]: DataManager.autoplayEnabled(),\n                    [BaseActions.ActionAutoplayStop]: false,\n                    [BaseActions.ActionBaseCollect]: !DataManager.GameRoundClosed,\n                    [BaseActions.ActionBetCycle]: DataManager.GameRoundClosed,\n                    [BaseActions.ActionDenomSelect]: DataManager.GameRoundClosed,\n                    [BaseActions.ActionCoinCountSelect]: DataManager.GameRoundClosed,\n                    [BaseActions.ActionBetSelect]: DataManager.GameRoundClosed,\n                    [BaseActions.ActionSpin]: true,\n                    [BaseActions.ActionSpinStop]: false,\n                    [BaseActions.ActionSelectPayline + 1]: DataManager.GameRoundClosed && !totalwin,\n                    [BaseActions.ActionSelectPayline + 2]: DataManager.GameRoundClosed && !totalwin,\n                    [BaseActions.ActionSelectPayline + 3]: DataManager.GameRoundClosed && !totalwin,\n                    [BaseActions.ActionSelectPayline + 4]: DataManager.GameRoundClosed && !totalwin,\n                    [BaseActions.ActionSelectPayline + 5]: DataManager.GameRoundClosed && !totalwin,\n                    [BaseActions.ActionSelectPayline + 6]: DataManager.GameRoundClosed && !totalwin,\n                    [BaseActions.ActionSelectPayline + 7]: DataManager.GameRoundClosed && !totalwin,\n                    [BaseActions.ActionSelectPayline + 8]: DataManager.GameRoundClosed && !totalwin,\n                    [BaseActions.ActionSelectPayline + 9]: DataManager.GameRoundClosed && !totalwin,\n                });\n\n                this.terminalActions.changeActionStates({\n                    [TerminalActions.Payout]: GameManager.canExit(),\n                    [TerminalActions.BackToLobby]: GameManager.canExit(),\n                    [TerminalActions.StartWithCollect]: true,\n                    [TerminalActions.Autoplay]: DataManager.autoplayEnabled(),\n                    [TerminalActions.BetOrGamble]: ModuleManager.gambleEnabled() || DataManager.GameRoundClosed,\n                });\n            }\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n    }\n\n    limit(): void {\n        LimitDialog.openDialog();\n\n        if (DataManager.GameRoundClosed) {\n            this.actions.changeActionStates({\n                [BaseActions.ActionAutoplay]: DataManager.autoplayEnabled(),\n                [BaseActions.ActionAutoplayStop]: false,\n                [BaseActions.ActionBaseCollect]: false,\n                [BaseActions.ActionBetCycle]: true,\n                [BaseActions.ActionDenomSelect]: true,\n                [BaseActions.ActionCoinCountSelect]: true,\n                [BaseActions.ActionBetSelect]: true,\n                [BaseActions.ActionSpin]: true,\n                [BaseActions.ActionSpinStop]: false,\n            });\n            this.terminalActions.changeActionStates({\n                [TerminalActions.Payout]: GameManager.canExit(),\n                [TerminalActions.BackToLobby]: GameManager.canExit(),\n                [TerminalActions.StartWithCollect]: true,\n                [TerminalActions.Autoplay]: DataManager.autoplayEnabled(),\n                [TerminalActions.BetOrGamble]: true,\n            });\n        } else {\n            this.actions.changeActionStates({\n                [BaseActions.ActionAutoplay]: false,\n                [BaseActions.ActionAutoplayStop]: false,\n                [BaseActions.ActionBaseCollect]: true,\n                [BaseActions.ActionBetCycle]: false,\n                [BaseActions.ActionDenomSelect]: false,\n                [BaseActions.ActionCoinCountSelect]: false,\n                [BaseActions.ActionBetSelect]: false,\n                [BaseActions.ActionSpin]: false,\n                [BaseActions.ActionSpinStop]: false,\n            });\n            this.terminalActions.changeActionStates({\n                [TerminalActions.Payout]: GameManager.canExit(),\n                [TerminalActions.BackToLobby]: GameManager.canExit(),\n                [TerminalActions.StartWithCollect]: true,\n                [TerminalActions.Autoplay]: false,\n                [TerminalActions.BetOrGamble]: false,\n            });\n        }\n    }\n\n    disable(): void {\n        if (!this._fsConfigurator.classList.contains(\"_disabled\")) {\n            this._fsConfigurator.classList.add(\"_disabled\");\n        }\n        this._afterWinDelay.stop();\n        this.actions.disableAllActions();\n        this.terminalActions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n    }\n\n    cycleHelp(): void {\n        this._help.cycle();\n    }\n\n    configuratorStart(): void {\n        this.disable();\n\n        this._enableConfiguratorButtons.start(60);\n\n        if (this._fsConfigurator.classList.contains(\"_disabled\")) {\n            this._fsConfigurator.classList.remove(\"_disabled\");\n        }\n\n        this.startFeatureAutoStart(60);\n    }\n\n    /**\n     *\n     */\n    protected enableConfiguratorButtons(): void {\n        this.actions.changeActionStates({\n            [BaseActions.ActionFsConfiguratorTreasure + 1]: true,\n            [BaseActions.ActionFsConfiguratorTreasure + 2]: true,\n            [BaseActions.ActionFsConfiguratorTreasure + 3]: true,\n            [BaseActions.ActionFsConfiguratorTreasure + 4]: true,\n            [BaseActions.ActionFsConfiguratorTreasure + 5]: true,\n            [BaseActions.ActionFsConfiguratorTreasure + 6]: true,\n            [BaseActions.ActionFsConfiguratorTreasure + 7]: true,\n            [BaseActions.ActionFsConfiguratorTreasure + 8]: true,\n            [BaseActions.ActionFsConfiguratorTreasure + 9]: true,\n        });\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    /**\n     *\n     * @param {number} id\n     */\n    selectFromConfigurator(id: number): void {\n        this._featureAutoStartTimer.stop();\n        if (!this._featureAutoStarted) {\n            ModuleManager.setAutoplayAfterFeature(false);\n        }\n\n        this.disable();\n        ModuleManager.startFreespins();\n    }\n\n    freeSpinsConfiguratorContinue(): void {\n        let a = 0;\n    }\n\n    /**\n     *\n     * @param {number} id\n     */\n    setActiveSceneInBasegame(id: number): void {}\n\n    setSceneAnimations(sceneIndex: number): void {}\n\n    updatePaytable(): void {\n        if (this._paytable != null) {\n            this._paytable.updatePaytable();\n        }\n    }\n\n    /**\n     * Set _autoplayAfterFeature.\n     * @param tf True / False\n     */\n    public setAutoplayAfterFeature(tf: boolean): void {\n        this._autoplayAfterFeature = tf;\n    }\n\n    /**\n     * Start feature if enabled.\n     */\n    private featureAutoStartDelayed(): void {\n        this._featureAutoStartTimer.stop();\n\n        if (ModuleManager.freespinsEnabled()) {\n            if (AppContext.gameConfiguration.FeatureAutoPick != null && AppContext.gameConfiguration.FeatureAutoPick) {\n                this._featureAutoStarted = true;\n            }\n        }\n    }\n\n    /**\n     * Auto start feature.\n     * Duration is set to preDuration + duration from configuration.\n     * @param {number} preDuration\n     */\n    protected startFeatureAutoStart(preDuration: number = 0): void {\n        if (AppContext.gameConfiguration.FeatureAutoPlay != null && AppContext.gameConfiguration.FeatureAutoPlay > 0) {\n            this._featureAutoStartTimer.start(preDuration + AppContext.gameConfiguration.FeatureAutoPlay);\n        }\n    }\n\n    primaryGameEnded(): boolean {\n        return this._wasPrimaryGameEnded;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/FireBird/FireBirdBaseUserControls.ts\n **/","import { NumberUtils, lodash, ArrayUtils } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { Configuration } from \"../../Components/Configuration\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { AppContext } from \"../../../Common/AppContext\";\n\nexport class FireBirdPaytable {\n    private _logo: HTMLElement;\n    private _payoutsElements: Object;\n    private _countsElements: Object;\n    private _valuesElements: Object;\n    private _values: Object;\n\n    constructor() {\n        this._payoutsElements = {};\n        this._countsElements = {};\n        this._valuesElements = {};\n        this._values = {};\n    }\n\n    initialize(): void {\n        this._logo = document.getElementById(\"paytableLogo\");\n\n        let config: Element = Configuration.Configurations[\"PaytableConfiguration\"];\n\n        if (config != null) {\n            let next: Element = config.firstElementChild;\n            while (next != null) {\n                if (next.hasAttribute(\"Symbol\")) {\n                    let id: string = next.getAttribute(\"Symbol\");\n                    let attrCounts: string = null;\n                    let attrValues: string = null;\n\n                    let payoutElement: HTMLElement = document.getElementById(\"payout-\" + id);\n                    if (payoutElement != null) {\n                        this._payoutsElements[\"payout-\" + id] = payoutElement;\n                    }\n\n                    if (id === \"1\" || id === \"2\" || id === \"3\") {\n                        id = \"1_2_3\";\n                        payoutElement = document.getElementById(\"payout-\" + id);\n                        if (payoutElement != null) {\n                            this._payoutsElements[\"payout-\" + id] = payoutElement;\n                        }\n                    } else if (id === \"4\" || id === \"5\" || id === \"6\") {\n                        id = \"4_5_6\";\n                        payoutElement = document.getElementById(\"payout-\" + id);\n                        if (payoutElement != null) {\n                            this._payoutsElements[\"payout-\" + id] = payoutElement;\n                        }\n                    }\n\n                    let i: number;\n                    if (next.hasAttribute(\"Counts\")) {\n                        attrCounts = next.getAttribute(\"Counts\");\n                        let counts: Array<string> = next.getAttribute(\"Counts\").split(\";\");\n                        for (i = 0; i < counts.length; i++) {\n                            let countElement: HTMLElement = document.getElementById(\"count-\" + id + \"-\" + counts[i]);\n                            if (countElement != null) {\n                                this._countsElements[\"count-\" + id + \"-\" + counts[i]] = countElement;\n                            }\n\n                            let countBox: HTMLElement = document.getElementById(\"symbolCount-s\" + id + \"-\" + counts[i]);\n                            if (countBox != null) {\n                                countBox.innerHTML = counts[i];\n                            }\n                        }\n                    }\n\n                    if (next.hasAttribute(\"Values\")) {\n                        attrValues = next.getAttribute(\"Values\");\n                        let values: Array<string> = next.getAttribute(\"Values\").split(\";\");\n                        let countsForValues: Array<string> = next.getAttribute(\"Counts\").split(\";\");\n                        for (i = 0; i < values.length; i++) {\n                            if (countsForValues[i] != null) {\n                                let valueElement: HTMLElement = document.getElementById(\n                                    \"symbolValue-s\" + id + \"-\" + countsForValues[i],\n                                );\n                                if (valueElement != null) {\n                                    let calculateValue: string;\n                                    if (AppContext.gameConfiguration.UseCoins && BetManager.CoinCount != null) {\n                                        calculateValue = NumberUtils.multiply(Number(values[i]), BetManager.CoinCount);\n                                    } else {\n                                        calculateValue = NumberUtils.multiply(Number(values[i]), BetManager.Bet);\n                                    }\n                                    valueElement.innerHTML = calculateValue;\n                                    this._valuesElements[\"symbolValue-s\" + id + \"-\" + countsForValues[i]] =\n                                        valueElement;\n                                    this._values[\"symbolValue-s\" + id + \"-\" + countsForValues[i]] = values[i];\n                                }\n                            }\n                        }\n                    }\n                }\n                next = next.nextElementSibling;\n            }\n        }\n\n        this.updatePaytableData();\n    }\n\n    changeBet(): void {\n        this.reset();\n\n        for (let key in this._valuesElements) {\n            let calculateValue: string;\n            if (this._values[key] != null) {\n                let calculateValue: string;\n                if (AppContext.gameConfiguration.UseCoins && BetManager.CoinCount != null) {\n                    calculateValue = NumberUtils.multiply(this._values[key], BetManager.CoinCount);\n                } else {\n                    calculateValue = NumberUtils.multiply(this._values[key], BetManager.Bet);\n                }\n                this._valuesElements[key].innerHTML = calculateValue;\n            }\n        }\n    }\n\n    showWins(wins: Array<Communication.Game.IWin>): void {\n        this.reset();\n\n        let payoutIdsMap = lodash.map(wins, (win: Communication.Game.IWin) => win.payoutId).join(\";\");\n        let countsMap = lodash.map(wins, (win: Communication.Game.IWin) => win.count).join(\";\");\n        let symbolsMap = lodash.map(wins, (win: Communication.Game.IWin) => win.symbols).join(\";\");\n        let payoutIds = ArrayUtils.numberArray(payoutIdsMap);\n        let counts = ArrayUtils.numberArray(countsMap);\n\n        //add noWin class to all elements\n        if (payoutIdsMap != \"\") {\n            for (let key in this._payoutsElements) {\n                if (!(symbolsMap.indexOf(\"13\") > -1 && key == \"payout-13\")) {\n                    //if win with wild, dont disable wild symbol\n                    this._payoutsElements[key].classList.add(\"_noWin\");\n                }\n            }\n        }\n\n        for (let i: number = 0; i < payoutIds.length; i++) {\n            let payoutId = payoutIds[i];\n            let count = counts[i];\n\n            //ToDo check DEBUG-153174091024611724761, 5 bonus symbols get payoutIds 12 (bonus, correct) and 13 (wild, think not correct)\n            if (\n                payoutId != 13 &&\n                this._payoutsElements[\"payout-\" + payoutId] != null &&\n                !this._payoutsElements[\"payout-\" + payoutId].classList.contains(\"highlight\")\n            ) {\n                this._payoutsElements[\"payout-\" + payoutId].classList.add(\"highlight\");\n                this._payoutsElements[\"payout-\" + payoutId].classList.remove(\"_noWin\");\n            }\n\n            //if there are more symbols with same payouts\n            let payoutName = \"\";\n            if (payoutId === 1 || payoutId === 2 || payoutId === 3) {\n                payoutName = \"1_2_3\";\n            } else if (payoutId === 4 || payoutId === 5 || payoutId === 6) {\n                payoutName = \"4_5_6\";\n            }\n\n            if (payoutName != \"\") {\n                //if multiple symbol in one box\n                if (\n                    this._countsElements[\"count-\" + payoutName + \"-\" + count] != null &&\n                    !this._countsElements[\"count-\" + payoutName + \"-\" + count].classList.contains(\"highlight\")\n                ) {\n                    this._countsElements[\"count-\" + payoutName + \"-\" + count].classList.add(\"highlight\");\n                }\n\n                if (\n                    this._payoutsElements[\"payout-\" + payoutName] != null &&\n                    !this._payoutsElements[\"payout-\" + payoutName].classList.contains(\"highlight\")\n                ) {\n                    this._payoutsElements[\"payout-\" + payoutName].classList.add(\"highlight\");\n                    this._payoutsElements[\"payout-\" + payoutName].classList.remove(\"_noWin\");\n                }\n            } else if (count != null) {\n                if (\n                    this._countsElements[\"count-\" + payoutId + \"-\" + count] != null &&\n                    !this._countsElements[\"count-\" + payoutId + \"-\" + count].classList.contains(\"highlight\")\n                ) {\n                    this._countsElements[\"count-\" + payoutId + \"-\" + count].classList.add(\"highlight\");\n                }\n            }\n        }\n    }\n\n    bounceLogo(): void {\n        if (this._logo != null && !this._logo.classList.contains(\"bounce\")) {\n            !this._logo.classList.add(\"bounce\");\n        }\n    }\n\n    reset(): void {\n        if (this._logo != null && this._logo.classList.contains(\"bounce\")) {\n            !this._logo.classList.remove(\"bounce\");\n        }\n\n        var elements = document.getElementsByClassName(\"highlight\");\n        while (elements.length > 0) {\n            elements[0].classList.remove(\"highlight\");\n        }\n\n        var elements = document.getElementsByClassName(\"_noWin\");\n        while (elements.length > 0) {\n            elements[0].classList.remove(\"_noWin\");\n        }\n    }\n\n    updatePaytable(): void {\n        this.updatePaytableData();\n    }\n\n    updatePaytableData(): void {\n        let config: Element = Configuration.Configurations[\"PaytableConfiguration\"];\n\n        if (config != null) {\n            let next: Element = config.firstElementChild;\n            while (next != null) {\n                if (next.hasAttribute(\"Symbol\")) {\n                    let id: string = next.getAttribute(\"Symbol\");\n\n                    let i: number;\n                    if (next.hasAttribute(\"FreeSpins\")) {\n                        let fsCount: string = next.getAttribute(\"FreeSpins\");\n                        let fsCountElement: HTMLElement = document.getElementById(\"symbolFSCount-s\" + id);\n\n                        if (fsCountElement != null) {\n                            fsCountElement.innerHTML = fsCountElement.innerHTML.replace(\"%s\", fsCount);\n                        }\n                    }\n\n                    if (next.hasAttribute(\"Multipliers\")) {\n                        let multipliers: Array<string> = next.getAttribute(\"Multipliers\").split(\";\");\n                        for (i = 0; i < multipliers.length; i++) {\n                            let fsCountElement: HTMLElement = document.getElementById(\n                                \"symbolFSMultiplier-s\" + id + \"-\" + i,\n                            );\n                            if (fsCountElement != null) {\n                                fsCountElement.innerHTML = fsCountElement.innerHTML.replace(\"%s\", multipliers[i]);\n                            }\n                        }\n                    }\n                }\n                next = next.nextElementSibling;\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/FireBird/FireBirdPaytable.ts\n **/","import { DataManager } from \"../../Managers/DataManager\";\n\nexport class FireBirdHelp {\n    private _actualHelpPage = -1;\n\n    constructor() {}\n\n    initialize(): void {}\n\n    cycle(): void {\n        this._actualHelpPage++;\n        let i: number;\n\n        var elements = document.getElementsByClassName(\"helpPage\");\n        for (i = 0; i < elements.length; i++) {\n            (elements[i] as HTMLDivElement).style.display = \"none\";\n        }\n\n        var pagingElements = document.getElementsByClassName(\"pageNumber\");\n        for (i = 0; i < pagingElements.length; i++) {\n            (pagingElements[i] as HTMLDivElement).classList.remove(\"_active\");\n        }\n\n        let element = document.getElementById(\"help\");\n        if (element != null) {\n            element.style.display = \"block\";\n        }\n\n        if (elements[this._actualHelpPage] != null) {\n            (elements[this._actualHelpPage] as HTMLDivElement).style.display = \"block\";\n            if (pagingElements[this._actualHelpPage] != null) {\n                (pagingElements[this._actualHelpPage] as HTMLDivElement).classList.add(\"_active\");\n            }\n        } else {\n            this.reset(true);\n        }\n    }\n\n    reset(force: boolean = false): void {\n        this._actualHelpPage = -1;\n        let element = document.getElementById(\"help\");\n        if (element != null) {\n            element.style.display = \"none\";\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/FireBird/FireBirdHelp.ts\n **/","export class StyxClientHostEvents {\n    public static get Reload(): string {\n        return \"reload\";\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/FireBird/FireBirdTypes.ts\n **/","import { ArrayUtils, engineComponent, EngineComponentFactory, Logger, NumberUtils } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { UserControls } from \"../Common/UserControls/UserControls\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { GameData } from \"../Common/Datas/GameData\";\nimport { GameActions } from \"../Common/Actions/GameActions\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { LimitDialog } from \"../Common/Dialogs/LimitDialog\";\nimport { FreespinsController } from \"../../GameComponents/Freespins/FreespinsController\";\nimport { FreespinsActions } from \"../Common/Actions/FreespinsActions\";\nimport { ActionsTypes, ActionSet } from \"../Common/Actions/ActionSet\";\nimport { TerminalActions } from \"../Common/Actions/TerminalActions\";\nimport { FireBirdHelp } from \"./FireBirdHelp\";\nimport { FireBirdPaytable } from \"./FireBirdPaytable\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { Configuration } from \"../../Components/Configuration\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { StyxClientHostEvents } from \"./FireBirdTypes\";\n\nvar GameModules = Communication.Game.GameModules;\nvar WinType = Communication.Game.WinType;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class FireBirdFreespinsUserControls extends UserControls {\n    protected ledStripes: string[];\n\n    protected _controller: FreespinsController;\n    protected _terminalActions: ActionSet;\n\n    private _userControls: HTMLElement;\n    private _userControls_supreme: HTMLElement;\n    private _paytable: FireBirdPaytable;\n    private _help: FireBirdHelp;\n    private _afterWinDelay: FrameTimerEventEmitter;\n    private _autoplayDelay: FrameTimerEventEmitter;\n\n    private _updateRetriggerCountDelay: FrameTimerEventEmitter;\n    private _wildMultiplierCountDelay: FrameTimerEventEmitter;\n    private _wildMultiplierCountActiveDelay: FrameTimerEventEmitter;\n    private _backDelay: FrameTimerEventEmitter;\n    private _backButtonDelay: FrameTimerEventEmitter;\n    private _prepareNewGameRound: FrameTimerEventEmitter;\n\n    private _featureAutoEndTimer: FrameTimerEventEmitter;\n    private _featureAutoEnded: boolean = false;\n    private _featureAutoPlayTimer: FrameTimerEventEmitter;\n\n    private _fsMultiplier: HTMLElement;\n    private _fsRetrigger: HTMLElement;\n\n    private _wasGameEnded: boolean = true;\n\n    constructor() {\n        super(\"freespins\");\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.ledStripes = node.hasAttribute(\"LedStripes\")\n            ? ArrayUtils.stringArray(node.getAttribute(\"LedStripes\"), \"|\")\n            : [\"0;255;0\", \"0;0;255\", \"255;255;255\", \"255;0;0\", \"255;255;0\"];\n\n        this._terminalActions = new ActionSet(\n            `${this._key}.terminalActions`,\n            EngineComponentFactory.getComponentName(this),\n        );\n\n        this.registerActions();\n\n        this._afterWinDelay = CreateFrameTimer(\"afterWinDelay\");\n        this._afterWinDelay.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._autoplayDelay = CreateFrameTimer(\"autoplayDelay\");\n        this._autoplayDelay.on(FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\n\n        this._backDelay = CreateFrameTimer(\"backDelay\");\n        this._backDelay.on(FrameTimerEvents.Complete, this.back.bind(this));\n\n        this._backButtonDelay = CreateFrameTimer(\"backButtonDelay\");\n        this._backButtonDelay.on(FrameTimerEvents.Complete, this.backButton.bind(this));\n\n        this._prepareNewGameRound = CreateFrameTimer(\"prepareNewGameRound\");\n        this._prepareNewGameRound.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._featureAutoEndTimer = CreateFrameTimer(\"featureAutoEndTimer\");\n        this._featureAutoEndTimer.on(FrameTimerEvents.Complete, this.featureAutoEndDelayed.bind(this));\n\n        this._featureAutoPlayTimer = CreateFrameTimer(\"featureAutoPlayTimer\");\n        this._featureAutoPlayTimer.on(FrameTimerEvents.Complete, this.featureAutoPlayDelayed.bind(this));\n\n        this._userControls = document.getElementById(\"freespinsUserControls\");\n\n        this._fsMultiplier = document.getElementById(\"fsMultiplier\");\n        this._fsRetrigger = document.getElementById(\"fsRetrigger\");\n\n        this._wildMultiplierCountActiveDelay = CreateFrameTimer(\"wildMultiplierCountActiveDelay\");\n        this._wildMultiplierCountActiveDelay.on(\n            FrameTimerEvents.Complete,\n            this.setCountHolderActive.bind(this, this._fsMultiplier, true),\n        );\n\n        this.handleClientHostReload = this.handleClientHostReload.bind(this);\n\n        // event 'reload' is fired when client host requests reload of actions (styx/firebird only)\n        AppContext.clientHost.on(StyxClientHostEvents.Reload, this.handleClientHostReload);\n\n        let creditBox: HTMLElement = document.getElementById(\"fsCreditBox\");\n        let betBox: HTMLElement = document.getElementById(\"fsBetBox\");\n\n        if (AppContext != null && AppContext.gameConfiguration != null) {\n            if (creditBox != null) {\n                if (AppContext.gameConfiguration.UseCoins) {\n                    creditBox.classList.add(\"denomOn\");\n                }\n                if (AppContext.gameConfiguration.HideAmountsEnabled) {\n                    creditBox.classList.add(\"hideAmountsOn\");\n                }\n            }\n            if (betBox != null) {\n                if (AppContext.gameConfiguration.HideAmountsEnabled) {\n                    betBox.classList.add(\"hideAmountsOn\");\n                }\n            }\n        }\n    }\n\n    private handleClientHostReload() {\n        if (ModuleManager.gambleActive()) {\n            return;\n        }\n\n        if (DEBUG) {\n            Logger.debugGroup(\"FireBirdBaseUserControls\", `Event 'reload' arrived, actions updated...`);\n        }\n\n        if (ModuleManager.freespinsEnabled() || ModuleManager.freespinsActive()) {\n            this.setLedStripe(true);\n            AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n        }\n    }\n\n    protected get terminalActions(): ActionSet {\n        return this._terminalActions;\n    }\n\n    public getAllTerminalActions(): ActionsTypes {\n        return this._terminalActions.getAllActions();\n    }\n\n    addController(controller: FreespinsController): void {\n        this._controller = controller;\n        this._controller.on(FreespinsController.StartReceived, this.startReceived.bind(this));\n        this._controller.on(FreespinsController.SpinReceived, this.spinReceived.bind(this));\n        this._controller.on(FreespinsController.EndReceived, this.endReceived.bind(this));\n        this._controller.on(FreespinsController.MachineStopped, this.machineStopped.bind(this));\n        this._controller.on(FreespinsController.WinCalculationFinished, this.winCalculationFinished.bind(this));\n        this._controller.on(FreespinsController.AllWinsFinished, this.allWinsFinished.bind(this));\n        this._controller.on(FreespinsController.IntroFinished, this.introFinished.bind(this));\n        this._controller.on(FreespinsController.OutroFinished, this.outroFinished.bind(this));\n    }\n\n    registerActions(): void {\n        this.actions.registerActions({\n            [FreespinsActions.ActionStart]: false,\n            [FreespinsActions.ActionBack]: false,\n            [FreespinsActions.ActionAutoplay]: false,\n            [FreespinsActions.ActionAutoplayStop]: false,\n            [FreespinsActions.ActionSpin]: false,\n            [FreespinsActions.ActionSpinStop]: false,\n        });\n\n        this.terminalActions.registerActions({\n            [TerminalActions.Payout]: false,\n            [TerminalActions.BackToLobby]: false,\n            [TerminalActions.StartWithCollect]: false,\n            [TerminalActions.Autoplay]: false,\n        });\n    }\n\n    initReceived(): void {\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\n\n        super.initReceived();\n\n        this._controller.initReceived();\n        this._controller.disableLogo();\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"none\";\n        }\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        this._paytable = new FireBirdPaytable();\n        this._paytable.initialize();\n        this._paytable.changeBet();\n\n        this._help = new FireBirdHelp();\n        this._help.initialize();\n    }\n\n    startReceived(finished: boolean): void {\n        if (finished) {\n            ModuleManager.outroModule(GameModules.Base);\n        } else {\n            ModuleManager.freeSpinsConfiguratorContinue();\n        }\n    }\n\n    spinReceived(): void {\n        DataManager.gameState(\"BonusGameStarted\");\n        if (\n            DataManager.Autoplay &&\n            AppContext.gameConfiguration.AutoplayModeSpeed === \"fast\" &&\n            AppContext.gameConfiguration.GameEnableReelsStop &&\n            AppContext.gameConfiguration.MinGameRoundDuration === 0\n        ) {\n            this.stop();\n        } else {\n            this.actions.changeActionState(\n                FreespinsActions.ActionSpinStop,\n                AppContext.gameConfiguration.GameEnableReelsStop,\n            );\n            this.terminalActions.changeActionState(\n                TerminalActions.StartWithCollect,\n                AppContext.gameConfiguration.GameEnableReelsStop,\n            );\n            HtmlController.updateActionElements(this.getAllActions());\n            AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n        }\n    }\n\n    endReceived(): void {\n        ModuleManager.outroModule(GameModules.Freespins);\n    }\n\n    dispatchAction(action: string): void {\n        if (action === TerminalActions.StartWithCollect) {\n            if (this.actions.getActionState(FreespinsActions.ActionStart)) {\n                action = FreespinsActions.ActionStart;\n            } else if (this.actions.getActionState(FreespinsActions.ActionBack)) {\n                action = FreespinsActions.ActionBack;\n            } else if (this.actions.getActionState(FreespinsActions.ActionSpin)) {\n                action = FreespinsActions.ActionSpin;\n            } else if (this.actions.getActionState(FreespinsActions.ActionSpinStop)) {\n                action = FreespinsActions.ActionSpinStop;\n            }\n        }\n\n        if (action === TerminalActions.Autoplay) {\n            if (this.actions.getActionState(FreespinsActions.ActionAutoplay)) {\n                action = FreespinsActions.ActionAutoplay;\n                this._help.reset();\n            } else if (this.actions.getActionState(FreespinsActions.ActionAutoplayStop)) {\n                action = FreespinsActions.ActionAutoplayStop;\n                this._help.reset();\n            }\n        }\n\n        if (this.actions.getActionState(action)) {\n            super.dispatchAction(action);\n\n            switch (action) {\n                // case FreespinsActions.ActionStart:\n                //     this.start();\n                //     break;\n                case FreespinsActions.ActionBack:\n                    this.back();\n                    break;\n                case FreespinsActions.ActionSpin:\n                    this.spin();\n                    this._help.reset();\n                    break;\n                case FreespinsActions.ActionSpinStop:\n                    this.stop();\n                    break;\n                case FreespinsActions.ActionAutoplay:\n                    this.autoplay();\n                    break;\n                case FreespinsActions.ActionAutoplayStop:\n                    this.autoplayStop();\n                    break;\n            }\n        }\n    }\n\n    start(id: number): void {\n        this.actions.disableAllActions();\n        this.terminalActions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n        this._controller.start(id);\n    }\n\n    spin(): void {\n        this._featureAutoPlayTimer.stop();\n\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            (GameManager.freespinsResponse.freeSpins.remainingCount - 1).toString(),\n        );\n\n        this._fsRetrigger.classList.remove(\"counterFlash\");\n        this._fsMultiplier.classList.remove(\"counterFlash\");\n        this._fsMultiplier.classList.remove(\"halfTone\");\n\n        this.actions.disableAllActions();\n        this.terminalActions.disableAllActions();\n        if (DataManager.Autoplay) {\n            this.actions.changeActionState(FreespinsActions.ActionAutoplayStop, true);\n            this.terminalActions.changeActionState(TerminalActions.Autoplay, true);\n        } else {\n            HtmlController.dispatchUiAction(\"\");\n        }\n        DataManager.updateDataElement(GameData.DataTotalWin);\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            DataManager.updateDataElement(\n                GameData.DataTotalWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gameResponse.totalWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n            DataManager.updateGameDataFromModule(\n                GameData.DataTotalWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gameResponse.totalWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n        }\n        HtmlController.updateActionElements(this.getAllActions());\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n        this._controller.spin();\n        this._paytable.reset();\n        this._help.reset();\n        if (!this._wasGameEnded) {\n            DataManager.gameState(\"BonusGameEnded\");\n        }\n        DataManager.gameState(\"BonusGameEscrow\");\n    }\n\n    back(): void {\n        this._featureAutoEndTimer.stop();\n        this._featureAutoPlayTimer.stop();\n\n        if (!this._featureAutoEnded) {\n            ModuleManager.setAutoplayAfterFeature(false);\n        }\n\n        this._backDelay.stop();\n        this.disable();\n        ModuleManager.endFreespins();\n    }\n\n    stop(): void {\n        this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n        this.terminalActions.changeActionState(TerminalActions.StartWithCollect, false);\n        HtmlController.updateActionElements(this.getAllActions());\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n        HtmlController.dispatchUiAction(\"\");\n        this._controller.stop();\n        this._help.reset();\n    }\n\n    end(): void {\n        this._controller.end();\n    }\n\n    autoplayDelayed(): void {\n        this._autoplayDelay.stop();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        } else {\n            this.prepareNewGameRound();\n            this.startFeatureAutoPlay();\n        }\n    }\n\n    autoplay(): void {\n        this._afterWinDelay.stop();\n\n        if (DataManager.AutoplayCount === \"∞\") {\n            DataManager.Autoplay = true;\n            DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n            this.spin();\n        } else {\n            DataManager.AutoplayCount = (parseInt(DataManager.AutoplayCount) - 1).toString();\n            if (parseInt(DataManager.AutoplayCount) >= 0) {\n                DataManager.Autoplay = true;\n                DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n                this.spin();\n            } else {\n                DataManager.Autoplay = false;\n                this.prepareNewGameRound();\n            }\n        }\n    }\n\n    autoplayStop(): void {\n        ModuleManager.setAutoplayAfterFeature(false);\n\n        DataManager.Autoplay = false;\n        this.actions.changeActionState(FreespinsActions.ActionAutoplayStop, false);\n        this.terminalActions.changeActionState(TerminalActions.Autoplay, false);\n        HtmlController.updateActionElement(FreespinsActions.ActionAutoplayStop, false);\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n    }\n\n    backButton(): void {\n        this.actions.changeActionState(FreespinsActions.ActionBack, true);\n        this.terminalActions.changeActionState(TerminalActions.StartWithCollect, true);\n        HtmlController.updateActionElement(FreespinsActions.ActionBack, true);\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n    }\n\n    machineStopped(): void {\n        this._wasGameEnded = false;\n        if (GameManager.freespinsResponse.currentWin === 0) {\n            DataManager.gameState(\"BonusGameEnded\");\n            this._wasGameEnded = true;\n        }\n\n        if (GameManager.freespinsResponse.wins != null) {\n            this._paytable.showWins(GameManager.freespinsResponse.wins);\n        }\n\n        if (GameManager.freespinsResponse.currentWin > 0) {\n            //this._afterWinDelay.start(30);\n\n            let hasScatterFreespinWin = false;\n\n            for (let i = 0; i < GameManager.freespinsResponse.wins.length; i++) {\n                if (GameManager.freespinsResponse.wins[i].trigger === Communication.Game.WinTrigger.Scatter) {\n                    if (GameManager.freespinsResponse.wins[i].type === Communication.Game.WinType.freeSpins) {\n                        hasScatterFreespinWin = true;\n                    }\n                } else if (GameManager.freespinsResponse.wins[i].trigger === Communication.Game.WinTrigger.Way) {\n                    if (GameManager.freespinsResponse.wins[i].type === Communication.Game.WinType.Cash) {\n                    }\n                }\n            }\n\n            if (hasScatterFreespinWin) {\n                this._updateRetriggerCountDelay.start(120);\n                this.setCountHolderActive(this._fsRetrigger, true);\n\n                if (\n                    GameManager.freespinsResponse.hasOwnProperty(\"customData\") &&\n                    GameManager.freespinsResponse.customData[\"wildMultiplier\"] != null\n                ) {\n                    this._afterWinDelay.start(240);\n                    this._wildMultiplierCountDelay.start(240);\n                    this._wildMultiplierCountActiveDelay.start(120);\n                } else {\n                    this._afterWinDelay.start(120);\n                }\n            } else {\n                if (\n                    GameManager.freespinsResponse.hasOwnProperty(\"customData\") &&\n                    GameManager.freespinsResponse.customData[\"wildMultiplier\"] != null\n                ) {\n                    this._afterWinDelay.start(120);\n                    this._wildMultiplierCountDelay.start(120);\n                    this.setCountHolderActive(this._fsMultiplier, true);\n                } else {\n                    this._afterWinDelay.start(30);\n                }\n            }\n        }\n\n        if (this.isLastFreespin()) {\n            this._afterWinDelay.stop();\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n            this.terminalActions.disableAllActions();\n            if (GameManager.freespinsResponse.currentWin === 0) {\n                if (GameManager.freespinsResponse.totalWin != null) {\n                    if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                        DataManager.updateGameDataFromModule(\n                            GameData.DataFreeSpinTotalWinDenom,\n                            parseInt(\n                                NumberUtils.devide(\n                                    GameManager.freespinsResponse.totalWin,\n                                    BetManager.CoinSize,\n                                ).toString(),\n                            ).toString(),\n                        );\n                    } else {\n                        DataManager.updateGameDataFromModule(\n                            GameData.DataFreeSpinTotalWin,\n                            GameManager.freespinsResponse.totalWin.toString(),\n                        );\n                    }\n                }\n                DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n                DataManager.updateDataElement(GameData.DataFreeSpinTotalWinDenom);\n\n                // Autostart Configurator in case of retrigger > 0. Else show back-button to basegame.\n                if (this.getRetriggerCount() > 0 && !DataManager.GameLimit) {\n                    this._featureAutoEnded = true;\n                    this._backDelay.start(15);\n                } else {\n                    this._backButtonDelay.start(60);\n\n                    this.startFeatureAutoEnd(60);\n                }\n            }\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n        this.terminalActions.changeActionState(TerminalActions.StartWithCollect, false);\n\n        if (GameManager.freespinsResponse.currentWin === 0) {\n            this.prepareNewGameRound();\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n\n        if (GameManager.freespinsResponse.currentWin === 0) {\n            if (DataManager.Autoplay) {\n                this._autoplayDelay.start(15);\n            } else {\n                this.startFeatureAutoPlay();\n            }\n        }\n    }\n\n    winCalculationFinished(): void {\n        this._paytable.bounceLogo();\n\n        this._afterWinDelay.stop();\n\n        DataManager.updateDataElement(GameData.DataTotalWin);\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            DataManager.updateDataElement(\n                GameData.DataTotalWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gameResponse.totalWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n            DataManager.updateGameDataFromModule(\n                GameData.DataTotalWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gameResponse.totalWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n\n            if (GameManager.freespinsResponse.totalWin != null) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataFreeSpinTotalWinDenom,\n                    parseInt(\n                        NumberUtils.devide(GameManager.freespinsResponse.totalWin, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n            }\n        }\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinTotalWin,\n                GameManager.freespinsResponse.totalWin.toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWinDenom);\n\n        if (this.isLastFreespin()) {\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n    }\n\n    allWinsFinished(): void {\n        DataManager.gameState(\"BonusGameEnded\");\n        this._wasGameEnded = true;\n\n        this._afterWinDelay.stop();\n\n        if (this.isLastFreespin()) {\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n\n            // Autostart Configurator in case of retrigger > 0. Else show back-button to basegame.\n            if (this.getRetriggerCount() > 0 && !DataManager.GameLimit) {\n                this._featureAutoEnded = true;\n                this.back();\n            } else {\n                this._backButtonDelay.start(60);\n                this.startFeatureAutoEnd(60);\n            }\n\n            HtmlController.updateActionElements(this.getAllActions());\n            AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        } else {\n            this.startFeatureAutoPlay();\n        }\n    }\n\n    initIntro(): void {\n        this.setLedStripe(false);\n\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsMultiplier,\n            GameManager.freespinsResponse.freeSpins.multiplier.toString(),\n        );\n\n        DataManager.updateDataElement(GameData.DataTotalWin, GameManager.gameResponse.totalWin.toString());\n        DataManager.updateGameDataFromModule(GameData.DataTotalWin, GameManager.gameResponse.totalWin.toString());\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            DataManager.updateDataElement(\n                GameData.DataTotalWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gameResponse.totalWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n            DataManager.updateGameDataFromModule(\n                GameData.DataTotalWinDenom,\n                parseInt(\n                    NumberUtils.devide(GameManager.gameResponse.totalWin, BetManager.CoinSize).toString(),\n                ).toString(),\n            );\n\n            if (GameManager.freespinsResponse.totalWin != null) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataFreeSpinTotalWinDenom,\n                    parseInt(\n                        NumberUtils.devide(GameManager.freespinsResponse.totalWin, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n            }\n        }\n\n        this._fsRetrigger.classList.remove(\"_disabled\");\n        this._fsMultiplier.classList.remove(\"_disabled\");\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinTotalWin,\n                GameManager.freespinsResponse.totalWin.toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWinDenom);\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (GameManager.freespinsResponse.wins != null) {\n            this._paytable.showWins(GameManager.freespinsResponse.wins);\n        }\n\n        super.initIntro();\n        this._controller.initIntro();\n\n        if (this.isLastFreespin()) {\n            this.actions.disableAllActions();\n\n            // Autostart Configurator in case of retrigger > 0. Else show back-button to basegame.\n            if (this.getRetriggerCount() > 0 && !DataManager.GameLimit) {\n                this._featureAutoEnded = true;\n                this._backDelay.start(15);\n            } else {\n                this._backButtonDelay.start(60);\n                this.startFeatureAutoEnd(60);\n            }\n\n            HtmlController.updateActionElements(this.getAllActions());\n            AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n\n        this.startFeatureAutoPlay();\n    }\n\n    intro(long: boolean = false): void {\n        DataManager.gameState(\"AutoPlayEnded\");\n\n        this.setLedStripe(false);\n\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n\n        this._fsRetrigger.classList.remove(\"_disabled\");\n        this._fsMultiplier.classList.remove(\"_disabled\");\n\n        this._controller.intro(long);\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n    }\n\n    introFinished(): void {\n        this._prepareNewGameRound.start(60);\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n\n        this.startFeatureAutoPlay();\n    }\n\n    outro(): void {\n        DataManager.Autoplay = false;\n        this._featureAutoEnded = false;\n\n        this._controller.outro();\n        this._paytable.reset();\n        this._help.reset();\n\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    outroFinished(): void {\n        ModuleManager.introModule(GameModules.Base, true);\n        if (this._userControls != null) {\n            this._userControls.style.display = \"none\";\n        }\n    }\n\n    protected setLedStripe(quick: boolean): void {\n        const mode = quick ? 0 : 2;\n\n        if (\n            GameManager.freespinsResponse.hasOwnProperty(\"customData\") &&\n            GameManager.freespinsResponse.customData[\"selectedSymbol\"] != null\n        ) {\n            switch (GameManager.freespinsResponse.customData[\"selectedSymbol\"]) {\n                case 7:\n                    AppContext.clientHost.setLEDStripe(this.ledStripes[0], mode);\n                    return;\n                case 8:\n                    AppContext.clientHost.setLEDStripe(this.ledStripes[1], mode);\n                    return;\n                case 9:\n                    AppContext.clientHost.setLEDStripe(this.ledStripes[2], mode);\n                    return;\n                case 10:\n                    AppContext.clientHost.setLEDStripe(this.ledStripes[3], mode);\n                    return;\n                case 11:\n                    AppContext.clientHost.setLEDStripe(this.ledStripes[4], mode);\n                    return;\n            }\n        }\n    }\n\n    private setCountHolderActive(elem: HTMLElement, active: boolean): void {\n        if (elem != null) {\n            if (active) {\n                elem.classList.add(\"_active\");\n            } else {\n                elem.classList.remove(\"_active\");\n            }\n        }\n    }\n\n    prepareNewGameRound(): void {\n        this._afterWinDelay.stop();\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataFreeSpinTotalWinDenom,\n                    parseInt(\n                        NumberUtils.devide(GameManager.freespinsResponse.totalWin, BetManager.CoinSize).toString(),\n                    ).toString(),\n                );\n            } else {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataFreeSpinTotalWin,\n                    GameManager.freespinsResponse.totalWin.toString(),\n                );\n            }\n        }\n\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWinDenom);\n\n        if (DataManager.GameLimit) {\n            DataManager.Autoplay = false;\n            this.limit();\n        } else {\n            if (!DataManager.Autoplay) {\n                this.actions.changeActionStates({\n                    [FreespinsActions.ActionStart]: false,\n                    [FreespinsActions.ActionBack]: false,\n                    [FreespinsActions.ActionAutoplay]: !DataManager.Autoplay && DataManager.autoplayEnabled(),\n                    [FreespinsActions.ActionAutoplayStop]: DataManager.Autoplay && DataManager.autoplayEnabled(),\n                    [FreespinsActions.ActionSpin]: true,\n                    [FreespinsActions.ActionSpinStop]: false,\n                });\n\n                this.terminalActions.changeActionStates({\n                    [TerminalActions.StartWithCollect]: true,\n                    [TerminalActions.Autoplay]: !DataManager.Autoplay && DataManager.autoplayEnabled(),\n                });\n            }\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n    }\n\n    limit(): void {\n        LimitDialog.openDialog();\n\n        this.actions.changeActionStates({\n            [FreespinsActions.ActionStart]: false,\n            [FreespinsActions.ActionBack]: false,\n            [FreespinsActions.ActionAutoplay]: false,\n            [FreespinsActions.ActionAutoplayStop]: false,\n            [FreespinsActions.ActionSpin]: false,\n            [FreespinsActions.ActionSpinStop]: false,\n        });\n\n        this.terminalActions.changeActionStates({\n            [TerminalActions.StartWithCollect]: false,\n            [TerminalActions.Autoplay]: false,\n        });\n    }\n\n    enable(): void {\n        DataManager.gameState(\"BonusGameTriggered\");\n        DataManager.updateGameDataFromModule(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n        DataManager.updateGameDataFromModule(\n            GameData.DataFreeSpinsCount,\n            GameManager.freespinsResponse.freeSpins.totalCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsCount,\n            GameManager.freespinsResponse.freeSpins.totalCount.toString(),\n        );\n        this.actions.changeActionState(FreespinsActions.ActionStart, true);\n        this.terminalActions.changeActionState(TerminalActions.StartWithCollect, true);\n        HtmlController.updateActionElement(FreespinsActions.ActionStart, true);\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n        this._controller.enable();\n    }\n\n    disable(): void {\n        this.actions.disableAllActions();\n        this.terminalActions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n    }\n\n    private isLastFreespin(): boolean {\n        if (DataManager.GameLimit) {\n            this.limit();\n            return true;\n        }\n\n        if (\n            GameManager.freespinsResponse.freeSpins != null &&\n            GameManager.freespinsResponse.freeSpins.remainingCount != null &&\n            GameManager.freespinsResponse.freeSpins.remainingCount === 0\n        ) {\n            return true;\n        }\n\n        return false;\n    }\n\n    cycleHelp(): void {\n        this._help.cycle();\n    }\n\n    /**\n     * Get remaining retriggers.\n     * @returns {number}\n     */\n    private getRetriggerCount(): number {\n        if (\n            GameManager.freespinsResponse.hasOwnProperty(\"customData\") &&\n            GameManager.freespinsResponse.customData[\"retriggerCount\"] != null\n        ) {\n            return GameManager.freespinsResponse.customData[\"retriggerCount\"];\n        }\n\n        return null;\n    }\n\n    /**\n     * Dispatch action Back by timer.\n     */\n    private featureAutoEndDelayed(): void {\n        this._featureAutoEndTimer.stop();\n        this._featureAutoEnded = true;\n        this.dispatchAction(FreespinsActions.ActionBack);\n\n        if (DEBUG) {\n            this.log(\"INFO featureAutoEndDelayed ActionBack\");\n        }\n    }\n\n    /**\n     * Dispatch action Autoplay by timer.\n     */\n    private featureAutoPlayDelayed(): void {\n        this._featureAutoPlayTimer.stop();\n        this.dispatchAction(FreespinsActions.ActionAutoplay);\n\n        if (DEBUG) {\n            this.log(\"INFO featureAutoPlayDelayed ActionAutoplay\");\n        }\n    }\n\n    /**\n     * Auto end feature.\n     * Duration is set to preDuration + duration from configuration.\n     * @param {number} preDuration\n     */\n    protected startFeatureAutoEnd(preDuration: number = 0): void {\n        if (AppContext.gameConfiguration.FeatureAutoPlay != null && AppContext.gameConfiguration.FeatureAutoPlay > 0) {\n            this._featureAutoEndTimer.start(preDuration + AppContext.gameConfiguration.FeatureAutoPlay);\n        }\n    }\n\n    /**\n     * Auto start autoplay in feature.\n     * Duration is set from configuration.\n     */\n    protected startFeatureAutoPlay(): void {\n        if (AppContext.gameConfiguration.FeatureAutoPlay != null && AppContext.gameConfiguration.FeatureAutoPlay > 0) {\n            this._featureAutoPlayTimer.start(AppContext.gameConfiguration.FeatureAutoPlay);\n        }\n    }\n\n    freeSpinsStartButton(): void {\n        this.actions.changeActionState(FreespinsActions.ActionStart, true);\n        HtmlController.updateActionElement(FreespinsActions.ActionStart, true);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/FireBird/FireBirdFreespinsUserControls.ts\n **/","import { engineComponent, EngineComponentFactory, Logger } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { GambleActions } from \"../Common/Actions/GambleActions\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { GambleUserControls } from \"../Common/UserControls/GambleUserControls\";\nimport { ActionsTypes, ActionSet } from \"../Common/Actions/ActionSet\";\nimport { TerminalActions } from \"../Common/Actions/TerminalActions\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { StyxClientHostEvents } from \"./FireBirdTypes\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { GameData } from \"../Common/Datas/GameData\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class FireBirdGambleUserControls extends GambleUserControls {\n    protected ledStripe: string;\n\n    protected _terminalActions: ActionSet;\n\n    constructor() {\n        super();\n    }\n\n    create(node: Element): void {\n        this._terminalActions = new ActionSet(\n            `${this._key}.terminalActions`,\n            EngineComponentFactory.getComponentName(this),\n        );\n\n        super.create(node);\n\n        this.ledStripe = node.hasAttribute(\"LedStripe\") ? node.getAttribute(\"LedStripe\") : \"255;255;255\";\n\n        this.handleClientHostReload = this.handleClientHostReload.bind(this);\n\n        // event 'reload' is fired when client host requests reload of actions (styx/firebird only)\n        AppContext.clientHost.on(StyxClientHostEvents.Reload, this.handleClientHostReload);\n    }\n\n    private handleClientHostReload() {\n        if (!ModuleManager.gambleActive()) {\n            return;\n        }\n\n        if (DEBUG) {\n            Logger.debugGroup(\"FireBirdGambleUserControls\", `Event 'reload' arrived, actions updated...`);\n        }\n\n        AppContext.clientHost.setLEDStripe(this.ledStripe, 0);\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n    }\n\n    protected get terminalActions(): ActionSet {\n        return this._terminalActions;\n    }\n\n    public getAllTerminalActions(): ActionsTypes {\n        return this._terminalActions.getAllActions();\n    }\n\n    registerActions(): void {\n        super.registerActions();\n        this.terminalActions.registerActions({\n            [TerminalActions.Payout]: false,\n            [TerminalActions.BackToLobby]: false,\n            [TerminalActions.StartWithCollect]: false,\n            [TerminalActions.ActionLeft]: false,\n            [TerminalActions.ActionRight]: false,\n            [TerminalActions.BetOrGamble]: false,\n        });\n    }\n\n    dispatchAction(action: string): void {\n        if (action === TerminalActions.StartWithCollect) {\n            if (this.actions.getActionState(GambleActions.ActionGambleCollect)) {\n                action = GambleActions.ActionGambleCollect;\n            }\n        }\n\n        if (action === TerminalActions.BetOrGamble) {\n            if (this.actions.getActionState(GambleActions.ActionGambleStart)) {\n                action = GambleActions.ActionGambleStart;\n            }\n        }\n\n        if (action === TerminalActions.ActionLeft) {\n            if (this.actions.getActionState(GambleActions.ActionGambleRed)) {\n                action = GambleActions.ActionGambleRed;\n            }\n        }\n\n        if (action === TerminalActions.ActionRight) {\n            if (this.actions.getActionState(GambleActions.ActionGambleBlack)) {\n                action = GambleActions.ActionGambleBlack;\n            }\n        }\n\n        super.dispatchAction(action);\n    }\n\n    prepareNewGameRound(): void {\n        super.prepareNewGameRound();\n\n        if (!DataManager.GameLimit) {\n            let softLimit: boolean = false;\n            if (GameManager.gambleResponse.colorWin === 0) {\n                softLimit = true;\n            }\n\n            this.terminalActions.changeActionStates({\n                [TerminalActions.StartWithCollect]: true,\n                [TerminalActions.ActionLeft]: !softLimit,\n                [TerminalActions.ActionRight]: !softLimit,\n                [TerminalActions.BetOrGamble]: false,\n            });\n        }\n\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n    }\n\n    initIntro(): void {\n        AppContext.clientHost.setLEDStripe(this.ledStripe, 2);\n\n        super.initIntro();\n    }\n\n    intro(): void {\n        AppContext.clientHost.setLEDStripe(this.ledStripe, 2);\n\n        super.intro();\n    }\n\n    outro(): void {\n        super.outro();\n    }\n\n    outroFinished(): void {\n        super.outroFinished();\n        GameManager.dontEnableGamePlay = false;\n    }\n\n    collect(): void {\n        GameManager.dontEnableGamePlay = true;\n        super.collect();\n        DataManager.gameState(\"SecondaryGameCollectEscrow\");\n    }\n\n    start(): void {\n        if (!ModuleManager.primaryGameEnded()) {\n            DataManager.gameState(\"PrimaryGameEnded\");\n        }\n        super.start();\n    }\n\n    halve(): void {\n        super.halve();\n        DataManager.gameState(\"SecondaryGameHalved\");\n    }\n\n    select(color: Communication.Game.Color): void {\n        GameManager.dontEnableGamePlay = true;\n        super.select(color);\n        DataManager.gameState(\"SecondaryGameEscrow\");\n    }\n\n    lose(): void {\n        DataManager.gameState(\"SecondaryGameEnded\");\n        DataManager.gameState(\"GameEnded\");\n        super.lose();\n    }\n\n    startReceived(): void {\n        super.startReceived();\n        DataManager.gameState(\"SecondaryGameEntered\");\n    }\n\n    halveReceived(): void {\n        super.halveReceived();\n        DataManager.gameState(\"SecondaryGameEntered\");\n    }\n\n    selectReceived(): void {\n        super.selectReceived();\n        DataManager.gameState(\"SecondaryGameStarted\");\n        if (GameManager.gameResponse.totalWin > 0) {\n            DataManager.gameState(\"SecondaryGameEntered\");\n        }\n    }\n\n    collectReceived(): void {\n        DataManager.gameState(\"SecondaryGameEnded\");\n        DataManager.gameState(\"GameEnded\");\n        super.collectReceived();\n    }\n\n    limit(): void {\n        super.limit();\n\n        this.terminalActions.changeActionStates({\n            [TerminalActions.StartWithCollect]: true,\n            [TerminalActions.ActionLeft]: false,\n            [TerminalActions.ActionRight]: false,\n            [TerminalActions.BetOrGamble]: false,\n        });\n\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n    }\n\n    disable(): void {\n        super.disable();\n\n        this.terminalActions.disableAllActions();\n        AppContext.clientHost.actionsUpdated(this.getAllTerminalActions());\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/FireBird/FireBirdGambleUserControls.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\nimport { ClientHost, Communication, GameEngine, Platforms } from \"neo-games\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { BaseActions } from \"../Common/Actions/BaseActions\";\nimport { UserControls } from \"../Common/UserControls/UserControls\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { Paytable } from \"../Common/Paytable/Paytable\";\nimport { GameData } from \"../Common/Datas/GameData\";\nimport { GameActions } from \"../Common/Actions/GameActions\";\nimport { BaseController } from \"../../GameComponents/Base/BaseController\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { BalanceManager } from \"../../Managers/BalanceManager\";\nimport { LimitDialog } from \"../Common/Dialogs/LimitDialog\";\nimport { ResponsibleDialog1 } from \"../Common/Dialogs/ResponsibleDialog1\";\nimport { FreeRoundBonus } from \"../Common/Bonuses/FreeRoundBonus\";\nimport { Jackpot } from \"../Common/Bonuses/Jackpot\";\nimport { BetHigherThanMinDialog } from \"../Common/Dialogs/BetHigherThanMinDialog\";\nimport { FreeRoundBonusDialog } from \"../Common/Dialogs/FreeRoundBonusDialog\";\nimport { FreeRoundBonusIcon } from \"../Common/Dialogs/FreeRoundBonusIcon\";\n\nvar GameModules = Communication.Game.GameModules;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class MobileBaseUserControls extends UserControls {\n    protected _controller: BaseController;\n\n    private _betSettings: HTMLElement;\n    private _userControls: HTMLElement;\n    private _fsUserControls: HTMLElement;\n    private _userControls_supreme: HTMLElement;\n    private _paytable: Paytable;\n    private _afterWinDelay: FrameTimerEventEmitter;\n    private _autoplayDelay: FrameTimerEventEmitter;\n\n    private _wasCalclulated: boolean = true;\n    private _unColectedWin: number = 0;\n    private _unColectedWinDelay: FrameTimerEventEmitter;\n    private _machineStopped: boolean = true;\n\n    private _prepareNewGameRound: FrameTimerEventEmitter;\n\n    protected _userControlsShowDelay: FrameTimerEventEmitter;\n\n    private longIntro: boolean = false;\n\n    constructor() {\n        super(\"base\");\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.registerActions();\n\n        this._afterWinDelay = CreateFrameTimer(\"afterWinDelay\");\n        this._afterWinDelay.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._autoplayDelay = CreateFrameTimer(\"autoplayDelay\");\n        this._autoplayDelay.on(FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\n\n        this._unColectedWinDelay = CreateFrameTimer(\"unColectedWinDelay\");\n        this._unColectedWinDelay.on(FrameTimerEvents.Complete, this.unColectedWinDelay.bind(this));\n\n        this._userControls = document.getElementById(\"userControls\");\n        this._fsUserControls = document.getElementById(\"freespinsUserControls\");\n\n        this._betSettings = document.getElementById(\"betSettings\");\n        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n            this._betSettings.classList.add(HtmlController.DisabledClass);\n        }\n        this._prepareNewGameRound = CreateFrameTimer(\"prepareNewGameRound\");\n        this._prepareNewGameRound.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._userControlsShowDelay = CreateFrameTimer(\"userControlsShowDelay\");\n        this._userControlsShowDelay.on(FrameTimerEvents.Complete, this.userControlsShowDelay.bind(this));\n    }\n\n    addController(controller: BaseController): void {\n        this._controller = controller;\n        this._controller.on(BaseController.SpinReceived, this.spinReceived.bind(this));\n        this._controller.on(BaseController.MachineStopped, this.machineStopped.bind(this));\n        this._controller.on(BaseController.WinCalculationFinished, this.winCalculationFinished.bind(this));\n        this._controller.on(BaseController.AllWinsFinished, this.allWinsFinished.bind(this));\n        this._controller.on(BaseController.IntroFinished, this.introFinished.bind(this));\n        this._controller.on(BaseController.OutroFinished, this.outroFinished.bind(this));\n        this._controller.on(BaseController.QuickWinCalculationFinished, this.quickWinCalculationFinished.bind(this));\n    }\n\n    registerActions(): void {\n        this.actions.registerActions({\n            [BaseActions.ActionAutoplay]: false,\n            [BaseActions.ActionAutoplayStop]: false,\n            [BaseActions.ActionBaseCollect]: false,\n            [BaseActions.ActionBetCycle]: false,\n            [BaseActions.ActionBetPlus]: false,\n            [BaseActions.ActionBetMinus]: false,\n            [BaseActions.ActionSpin]: false,\n            [BaseActions.ActionSpinStop]: false,\n        });\n\n        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n            this._betSettings.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    initReceived(): void {\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\n\n        super.initReceived();\n\n        this._controller.initReceived();\n\n        this._paytable = new Paytable();\n        this._paytable.initialize();\n\n        if (GameManager.gameResponse != null) {\n            if (!(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\n                DataManager.updateGameDataFromModule(\n                    GameData.DataTotalWin,\n                    GameManager.gameResponse.totalWin.toString(),\n                );\n            }\n        }\n\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n        }\n\n        DataManager.updateDataElements();\n    }\n\n    collectReceived(): void {\n        FreeRoundBonus.enableUi();\n        Platforms.Platforms.roundEnded({\n            id: GameManager.gameResponse.roundId,\n            win: this._unColectedWin,\n            balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n        });\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\n\n        super.collectReceived();\n\n        this._wasCalclulated = true;\n        DataManager.Collectable = true;\n        DataManager.updateDataElements();\n\n        this.prepareNewGameRound();\n\n        if (AppContext.gameConfiguration.CollectOnUnCalculatedWin && this._unColectedWin > 0) {\n            DataManager.updateDataElement(GameData.DataTotalWin, this._unColectedWin.toString());\n            this.changeWinBox(true);\n        } else {\n            if (!(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\n                DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            }\n            this.changeWinBox();\n        }\n        this._unColectedWinDelay.stop();\n        //this._unColectedWinDelay.start(75);\n        this._unColectedWin = 0;\n\n        if (FreeRoundBonus.isLastFrb) {\n            FreeRoundBonus.endFreeRounds();\n            ModuleManager.disableBase();\n            return;\n        }\n    }\n\n    restoreGameRound(collect: boolean = false): void {\n        super.collectReceived();\n        this.changeWinBox(collect);\n\n        FreeRoundBonus.enableUi();\n\n        DataManager.Collectable = true;\n\n        if (this._unColectedWin == 0) {\n            this._controller.resetWinAnimator();\n        }\n        this.prepareNewGameRound();\n    }\n\n    spinReceived(): void {\n        FreeRoundBonus.frbSpin();\n\n        if (DataManager.quickspinEnabled()) {\n            // auto quick stop\n            this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n            HtmlController.updateActionElements(this.getAllActions());\n            HtmlController.dispatchUiAction(\"\");\n            DataManager.updateDataElement(GameData.DataRoundId);\n            this._controller.stop();\n        } else {\n            this.actions.changeActionState(\n                BaseActions.ActionSpinStop,\n                AppContext.gameConfiguration.GameEnableReelsStop,\n            );\n            HtmlController.updateActionElements(this.getAllActions());\n            DataManager.updateDataElement(GameData.DataRoundId);\n        }\n    }\n\n    dispatchAction(action: string): void {\n        if (ModuleManager.gambleActive() || ModuleManager.freespinsActive()) {\n            return;\n        }\n\n        if (action === GameActions.ActionSpinOrStop) {\n            if (this.actions.getActionState(BaseActions.ActionSpin)) {\n                action = BaseActions.ActionSpin;\n            } else if (this.actions.getActionState(BaseActions.ActionSpinStop)) {\n                action = BaseActions.ActionSpinStop;\n            } else {\n                return;\n            }\n        }\n\n        if (this.actions.getActionState(action)) {\n            if (action === BaseActions.ActionBaseCollect) {\n                this.changeWinBox(true);\n            } else {\n                this.changeWinBox();\n            }\n\n            PlayList.play(\"SND_Click\");\n            super.dispatchAction(action);\n\n            switch (action) {\n                case BaseActions.ActionSpin:\n                    this.spin();\n                    break;\n                case BaseActions.ActionSpinStop:\n                    this.stop();\n                    break;\n                case BaseActions.ActionAutoplay:\n                    this.autoplay();\n                    break;\n                case BaseActions.ActionAutoplayStop:\n                    this.autoplayStop();\n                    break;\n                case BaseActions.ActionBetCycle:\n                    this.changeBet(false, false, true);\n                    break;\n                case BaseActions.ActionBetPlus:\n                    this.changeBet(false, false, false);\n                    break;\n                case BaseActions.ActionBetMinus:\n                    this.changeBet(true, false, false);\n                    break;\n                case BaseActions.ActionBaseCollect:\n                    this.collect();\n                    break;\n            }\n        }\n    }\n\n    collect(): void {\n        if (!this._wasCalclulated) {\n            if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0) {\n                Platforms.Platforms.win(GameManager.baseResponse.currentWin);\n            }\n        }\n\n        super.collect();\n\n        ModuleManager.disableGamble();\n        this.disable();\n        this.playCollectSound();\n\n        this._controller.collect();\n\n        LimitDialog.closeDialog();\n        GameManager.collect(GameModules.Base);\n\n        if (!(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\n            DataManager.updateDataElement(\n                GameData.DataTotalWin,\n                !AppContext.gameDefinition.Gamble ? \"0\" : this._unColectedWin.toString(),\n            );\n        }\n        //this._unColectedWinDelay.start(75);\n    }\n\n    unColectedWinDelay(): void {\n        DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n    }\n\n    spin(): void {\n        this._machineStopped = false;\n\n        FreeRoundBonus.disableUi();\n        if (FreeRoundBonus.hasNewActiveOffer()) {\n            if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\n                this.changeWinBox(true);\n                this.collect();\n            } else {\n                FreeRoundBonus.enableUi();\n            }\n            return;\n        }\n\n        if (this.checkJackpotMiniGame()) {\n            return;\n        }\n\n        if (\n            ResponsibleDialog1.showResponsibleDialog1OnCollect &&\n            !(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")\n        ) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox(true);\n                this.collect();\n            } else {\n                GameManager.canExit();\n                this.changeWinBox();\n            }\n\n            return;\n        }\n\n        if (BetHigherThanMinDialog.canOpenDialog()) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox(true);\n                this.collect();\n            }\n            BetHigherThanMinDialog.openDialog();\n            return;\n        }\n\n        if (Paytable.shouldOpen(true, true)) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox(true);\n                this.collect();\n            } else {\n                Paytable.show();\n            }\n            return;\n        }\n\n        if (\n            !DataManager.Autoplay &&\n            !this._wasCalclulated &&\n            !DataManager.GameRoundClosed &&\n            AppContext.gameConfiguration.CollectOnUnCalculatedWin\n        ) {\n            this.changeWinBox(true);\n            this.collect();\n            return;\n        } else {\n            this.changeWinBox();\n            if (!this._wasCalclulated) {\n                if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0) {\n                    Platforms.Platforms.win(GameManager.baseResponse.currentWin);\n                }\n            }\n        }\n\n        if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\n            const balanceTotal = parseFloat(DataManager.getDataById(GameData.DataBalanceTotal));\n            const balanceAfter = parseFloat(NumberUtils.add(GameManager.gameResponse.totalWin, balanceTotal));\n            Platforms.Platforms.roundEnded({\n                id: GameManager.gameResponse.roundId,\n                win: GameManager.gameResponse.totalWin,\n                balanceAfter: balanceAfter,\n                inSpin: true,\n            });\n        }\n\n        if (!Platforms.Platforms.canSpinOnCollect) {\n            this.autoplayStop();\n            this.changeWinBox(true);\n            this.collect();\n            return;\n        }\n\n        if (!BalanceManager.hasCredit(false, true)) {\n            DataManager.Autoplay = false;\n            ModuleManager.disableGamble();\n            this.prepareNewGameRound();\n            return;\n        }\n\n        DataManager.Collectable = false;\n        ModuleManager.disableGamble();\n        this.actions.disableAllActions();\n        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n            this._betSettings.classList.add(HtmlController.DisabledClass);\n        }\n        if (DataManager.Autoplay) {\n            if (\n                !DataManager.AutoplayStarted &&\n                GameManager.baseResponse != null &&\n                GameManager.baseResponse.totalWin != null &&\n                GameManager.baseResponse.totalWin > 0\n            ) {\n                DataManager.updateLossLimit(GameManager.baseResponse.totalWin);\n            }\n            DataManager.updateLossLimit();\n            this.actions.changeActionState(BaseActions.ActionAutoplayStop, DataManager.autoplayEnabled());\n        }\n        HtmlController.dispatchUiAction(\"\");\n        HtmlController.updateActionElements(this.getAllActions());\n        this.playCollectSound();\n\n        DataManager.updateTotalGain(true);\n        BalanceManager.fixBalance();\n        if (!DataManager.GameRoundClosed || (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\n            DataManager.updateDataElement(GameData.DataTotalWin);\n        }\n        this._controller.spin();\n\n        LimitDialog.closeDialog();\n\n        this._wasCalclulated = false;\n\n        Platforms.Platforms.roundStarted({\n            totalBet: BetManager.Bet,\n            freeRound: FreeRoundBonus.inFrb,\n            userAction: DataManager.getTrustedUserAction(BaseActions.ActionSpin),\n        });\n        Platforms.Platforms.spinStarted();\n        Platforms.Platforms.balanceUpdated({ amount: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)) });\n    }\n\n    stop(): void {\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n        HtmlController.updateActionElements(this.getAllActions());\n        HtmlController.dispatchUiAction(\"\");\n        DataManager.quickspinStopped();\n        this._controller.stop();\n    }\n\n    autoplayDelayed(): void {\n        this._autoplayDelay.stop();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        } else {\n            this.prepareNewGameRound();\n        }\n    }\n\n    autoplay(): void {\n        this._afterWinDelay.stop();\n\n        if (this.checkJackpotMiniGame()) {\n            return;\n        }\n\n        if (DataManager.AutoplayCount === \"∞\") {\n            DataManager.Autoplay = true;\n            DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n            this.spin();\n        } else {\n            DataManager.AutoplayCount = (parseInt(DataManager.AutoplayCount) - 1).toString();\n            if (parseInt(DataManager.AutoplayCount) >= 0) {\n                DataManager.Autoplay = true;\n                DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n                this.spin();\n            } else {\n                DataManager.Autoplay = false;\n                this.prepareNewGameRound();\n            }\n        }\n    }\n\n    autoplayStop(): void {\n        DataManager.Autoplay = false;\n\n        Platforms.Platforms.autoplayStop();\n\n        if (this._machineStopped) {\n            if (DataManager.GameRoundClosed) {\n                FreeRoundBonus.enableUi();\n                Platforms.Platforms.roundEnded();\n                if (FreeRoundBonus.isLastFrb) {\n                    FreeRoundBonus.endFreeRounds();\n                    ModuleManager.disableBase();\n                }\n            }\n        }\n\n        this.actions.changeActionState(BaseActions.ActionAutoplayStop, false);\n        HtmlController.updateActionElement(BaseActions.ActionAutoplayStop, false);\n    }\n\n    changeBet(decrease: boolean = false, max: boolean = false, cycle: boolean = false): void {\n        if (!DataManager.GameRoundClosed) {\n            this._unColectedWin = 0;\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            this.changeWinBox();\n            this.collect();\n        } else {\n            this._controller.collect();\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n            DataManager.updateDataElement(GameData.DataBalanceBonus);\n            DataManager.updateDataElement(GameData.DataBalanceReal);\n            DataManager.updateDataElement(GameData.DataBalanceTotal);\n            LimitDialog.closeDialog();\n        }\n        BetManager.changeBet(decrease, max, cycle);\n        this._paytable.updateDataValues();\n\n        if (BetManager.minBet) {\n            this.actions.changeActionState(BaseActions.ActionBetMinus, false);\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, false);\n            this.actions.changeActionState(BaseActions.ActionBetPlus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, true);\n        } else if (BetManager.maxBet) {\n            this.actions.changeActionState(BaseActions.ActionBetPlus, false);\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, false);\n            this.actions.changeActionState(BaseActions.ActionBetMinus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, true);\n        } else {\n            this.actions.changeActionState(BaseActions.ActionBetPlus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, true);\n            this.actions.changeActionState(BaseActions.ActionBetMinus, true);\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, true);\n        }\n    }\n\n    machineStopped(isHighWin: boolean): void {\n        this._machineStopped = true;\n        Platforms.Platforms.spinEnded();\n\n        DataManager.stopAutoplayIfLossLimit();\n        DataManager.stopAutoplayIfWinLimit();\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin === 0) {\n            FreeRoundBonus.enableUi();\n            Platforms.Platforms.roundEnded({\n                id: GameManager.gameResponse.roundId,\n                win: GameManager.gameResponse.totalWin,\n                balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n            });\n            if (FreeRoundBonus.isLastFrb) {\n                FreeRoundBonus.endFreeRounds();\n                ModuleManager.disableBase();\n                return;\n            }\n        }\n\n        this._unColectedWinDelay.stop();\n        this._unColectedWin = GameManager.gameResponse.totalWin;\n\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (ModuleManager.pickEnabled()) {\n            FreeRoundBonus.disableUi();\n            this.disable();\n            return;\n        }\n\n        if (DataManager.Autoplay) {\n            if (DataManager.AutoplayCount === 0 + \"\") {\n                DataManager.Autoplay = false;\n            }\n        }\n\n        if (GameManager.baseResponse.totalWin === 0) {\n            this._wasCalclulated = true;\n            DataManager.Collectable = true;\n        } else {\n            this._wasCalclulated = false;\n        }\n\n        ModuleManager.enableGamble();\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\n        this._afterWinDelay.stop();\n        if (isHighWin) {\n            this._afterWinDelay.start(80);\n        } else {\n            if (GameManager.baseResponse.totalWin > 0) {\n                this._afterWinDelay.start(30);\n            } else {\n                this.prepareNewGameRound();\n            }\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n\n        if (DataManager.Autoplay && GameManager.baseResponse.totalWin === 0) {\n            this._autoplayDelay.start(15);\n        }\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n            if (FreeRoundBonus.isLastFrb) {\n                this.disableAllActions();\n                return;\n            }\n        }\n\n        // Collect total win in last cumulative FRB round when GR isn't yet closed and there isn't current win\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\n            if (\n                !DataManager.GameRoundClosed &&\n                GameManager.baseResponse.totalWin > 0 &&\n                GameManager.baseResponse.currentWin === 0\n            ) {\n                this._controller.resetWinAnimator();\n                this.collect();\n                return;\n            }\n        }\n        //  Try to show RCI dialog by canExit() call when in FRB Cumulative and GameRound is closed\n        if (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\n            if (DataManager.GameRoundClosed) {\n                GameManager.canExit();\n            }\n        }\n    }\n\n    quickWinCalculationFinished(): void {\n        if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\n            Platforms.Platforms.win(GameManager.baseResponse.currentWin);\n        }\n\n        this._wasCalclulated = true;\n        DataManager.updateDataElement(GameData.DataTotalWin);\n    }\n\n    winCalculationFinished(): void {\n        if (DataManager.GameRoundClosed) {\n            Platforms.Platforms.roundEnded({\n                id: GameManager.gameResponse.roundId,\n                win: GameManager.gameResponse.totalWin,\n                balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\n            });\n        }\n\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            DataManager.updateDataElement(GameData.DataTotalWin);\n            return;\n        }\n\n        if (ModuleManager.pickEnabled()) {\n            return;\n        }\n\n        this._afterWinDelay.stop();\n\n        DataManager.updateDataElement(GameData.DataTotalWin);\n        if (DataManager.GameRoundClosed && !(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\n            DataManager.updateDataElements();\n        }\n        ModuleManager.enableGamble();\n        DataManager.Collectable = true;\n        this.prepareNewGameRound();\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n            if (!ModuleManager.gambleEnabled()) {\n                FreeRoundBonus.enableUi();\n            }\n            if (FreeRoundBonus.isLastFrb) {\n                this.disableAllActions();\n                return;\n            }\n        } else {\n            FreeRoundBonus.enableFrbExpiration();\n        }\n    }\n\n    allWinsFinished(): void {\n        FreeRoundBonus.enableFrbExpiration();\n\n        if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\n            Platforms.Platforms.win(GameManager.baseResponse.currentWin);\n        }\n\n        this._wasCalclulated = true;\n\n        if (ModuleManager.gambleActive()) {\n            this.disable();\n            return;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            ModuleManager.enableFreespins();\n            return;\n        }\n\n        if (ModuleManager.pickEnabled()) {\n            ModuleManager.enablePick();\n            this.disable();\n            return;\n        }\n\n        this._afterWinDelay.stop();\n        this.prepareNewGameRound();\n        ModuleManager.enableGamble();\n        if (DataManager.Autoplay && this.actions.getActionState(BaseActions.ActionAutoplayStop)) {\n            this.autoplay();\n        }\n\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n            if (FreeRoundBonus.isLastFrb) {\n                this._controller.resetWinAnimator();\n                FreeRoundBonus.endFreeRounds();\n                ModuleManager.disableBase();\n                return;\n            }\n        }\n\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\n            if (!DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\n                this._controller.resetWinAnimator();\n                this.collect();\n                return;\n            }\n        }\n    }\n\n    initIntro(): void {\n        super.initIntro();\n        this._controller.initIntro();\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            ModuleManager.enableFreespins();\n            this._controller.startConfigurator();\n            return;\n        }\n\n        if (ModuleManager.pickEnabled()) {\n            FreeRoundBonus.disableUi();\n            //this.disable();\n            return;\n        }\n\n        this.prepareNewGameRound();\n        ModuleManager.enableGamble();\n        this._unColectedWin = GameManager.gameResponse.totalWin;\n\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\n            if (DataManager.GameRoundClosed) {\n                FreeRoundBonus.endFreeRounds();\n                ModuleManager.disableBase();\n            }\n            return;\n        }\n    }\n\n    intro(long: boolean = false): void {\n        this._wasCalclulated = true;\n\n        //if(long) {\n        this._unColectedWin = GameManager.gameResponse.totalWin;\n        //}\n\n        this.longIntro = long;\n\n        if (DataManager.GameRoundClosed) {\n            DataManager.updateDataElement(GameData.DataBalanceBonus);\n            DataManager.updateDataElement(GameData.DataBalanceReal);\n            DataManager.updateDataElement(GameData.DataBalanceTotal);\n\n            DataManager.Collectable = true;\n        }\n\n        if (ModuleManager.freespinsEnabled()) {\n            this._controller.startConfigurator();\n        } else {\n            this._controller.intro(long);\n        }\n\n        this._userControlsShowDelay.start(10);\n    }\n\n    introFinished(): void {\n        if (DataManager.GameRoundClosed) {\n            Platforms.Platforms.roundEnded();\n        }\n        if (!ResponsibleDialog1.opened) {\n            DataManager.Autoplay = DataManager.AutoplayAfterGamble;\n        }\n\n        ModuleManager.enableGamble();\n        this._prepareNewGameRound.start(30);\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        }\n\n        this._userControlsShowDelay.start(10);\n\n        if (\n            this.longIntro &&\n            DataManager.GameRoundClosed &&\n            (FreeRoundBonus.id != null || FreeRoundBonus.otherOfferes.length > 0)\n        ) {\n            FreeRoundBonus.enableUi();\n            this.longIntro = false;\n        }\n\n        if (FreeRoundBonus.isLastFrb && DataManager.GameRoundClosed) {\n            this._prepareNewGameRound.stop(); // custom for RP\n            FreeRoundBonus.endFreeRounds();\n            ModuleManager.disableBase();\n            return;\n        }\n\n        // Collect total win in last cumulative FRB round when GR isn't yet closed\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\n            if (!DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\n                this._prepareNewGameRound.stop(); // custom for RP\n                ModuleManager.collect(GameModules.Base);\n            }\n        }\n    }\n\n    outro(): void {\n        if (!this._wasCalclulated) {\n            if (GameManager.gameResponse != null && GameManager.gameResponse.totalWin > 0) {\n                Platforms.Platforms.win(GameManager.gameResponse.totalWin);\n            }\n        }\n\n        this._afterWinDelay.stop();\n        this._autoplayDelay.stop();\n        DataManager.AutoplayAfterGamble = DataManager.Autoplay;\n        DataManager.Autoplay = false;\n        if (ModuleManager.freespinsActive()) {\n            DataManager.AutoplayAfterGamble = false;\n            if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n                this._userControls.classList.add(HtmlController.DisabledClass);\n            }\n\n            if (\n                this._fsUserControls != null &&\n                !this._fsUserControls.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._fsUserControls.classList.add(HtmlController.DisabledClass);\n            }\n\n            if (\n                this._userControls_supreme != null &&\n                !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n            }\n        } else if (ModuleManager.introModule(GameModules.Pick)) {\n            ModuleManager.introModule(GameModules.Pick);\n        }\n\n        this._controller.outro();\n    }\n\n    setAutoplayAfterFeature(value: boolean) {\n        DataManager.AutoplayAfterGamble = value;\n    }\n\n    outroFinished(): void {\n        if (ModuleManager.freespinsActive()) {\n            if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n                this._userControls.classList.add(HtmlController.DisabledClass);\n            }\n\n            if (\n                this._userControls_supreme != null &&\n                !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n            ) {\n                this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n            }\n\n            ModuleManager.introModule(GameModules.Freespins);\n        } else if (ModuleManager.pickActive()) {\n            //ModuleManager.introModule(GameModules.Pick);\n        } else {\n            ModuleManager.introModule(GameModules.Gamble);\n        }\n    }\n\n    prepareNewGameRound(): void {\n        this._afterWinDelay.stop();\n\n        if (this.prepareJackpotMiniGame()) {\n            return;\n        }\n\n        if (ResponsibleDialog1.opened) {\n            return;\n        }\n\n        BetHigherThanMinDialog.openDialog();\n        Paytable.openAtStart(true);\n\n        if (BetHigherThanMinDialog.canOpenDialog() && FreeRoundBonusDialog.dialogActive()) {\n            return;\n        }\n\n        if (DataManager.GameLimit) {\n            DataManager.Autoplay = false;\n            this.limit();\n        } else {\n            if (!DataManager.Autoplay) {\n                this.actions.changeActionStates({\n                    [BaseActions.ActionAutoplay]:\n                        (DataManager.GameRoundClosed ||\n                            (FreeRoundBonus.inFrb &&\n                                FreeRoundBonus.winPayMethod === \"cumulative\" &&\n                                !FreeRoundBonus.isLastFrb)) &&\n                        DataManager.autoplayEnabled(),\n                    [BaseActions.ActionAutoplayStop]: false,\n                    [BaseActions.ActionBaseCollect]:\n                        FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\"\n                            ? false\n                            : !DataManager.GameRoundClosed,\n                    [BaseActions.ActionBetCycle]: !ModuleManager.gambleEnabled(),\n                    [BaseActions.ActionBetPlus]: !BetManager.maxBet,\n                    [BaseActions.ActionBetMinus]: !BetManager.minBet,\n                    [BaseActions.ActionSpin]: !FreeRoundBonus.isLastFrb,\n                    [BaseActions.ActionSpinStop]: false,\n                });\n                if (this._betSettings != null) {\n                    if (!ModuleManager.gambleEnabled()) {\n                        if (this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n                            this._betSettings.classList.remove(HtmlController.DisabledClass);\n                        }\n                    } else {\n                        if (!this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n                            this._betSettings.classList.add(HtmlController.DisabledClass);\n                        }\n                    }\n\n                    if (FreeRoundBonus.inFrb) {\n                        if (!this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n                            this._betSettings.classList.add(HtmlController.DisabledClass);\n                        }\n                    }\n                }\n\n                if (DataManager.GameRoundClosed) {\n                    Platforms.Platforms.roundInit();\n                }\n            }\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    private prepareJackpotMiniGame(): boolean {\n        if (DataManager.GameRoundClosed && Jackpot.hasMiniGame() && !FreeRoundBonus.inFrb) {\n            if (Jackpot.hasInitializedGame() && this._wasCalclulated) {\n                DataManager.Autoplay = false;\n                this.resetWinAnimator();\n                this.disable();\n                FreeRoundBonus.disableUi();\n                Jackpot.startMiniGame();\n\n                return true;\n            } else {\n                const self = this;\n\n                //in nogamble we need to wait for winCalculated finish to not run minigame right after machinestopped\n                if (this._wasCalclulated) {\n                    Jackpot.initMiniGame(true, () => {\n                        self.resetWinAnimator();\n                        self.disable();\n                        DataManager.Autoplay = false;\n                        FreeRoundBonus.disableUi();\n                    });\n                }\n\n                //in case we have nogamble and pb within or after gr, check limit\n                if (DataManager.GameLimit) {\n                    DataManager.Autoplay = false;\n                    this.limit();\n                }\n\n                if (Jackpot.waitForMiniGameInitialization()) {\n                    //in case we have limit, disable all actions during animation and wait for minigame\n                    this.actions.disableAllActions();\n                    HtmlController.updateActionElements(this.getAllActions());\n                    if (\n                        this._betSettings != null &&\n                        !this._betSettings.classList.contains(HtmlController.DisabledClass)\n                    ) {\n                        this._betSettings.classList.add(HtmlController.DisabledClass);\n                    }\n\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    }\n\n    private checkJackpotMiniGame(): boolean {\n        if (!Jackpot.hasMiniGame() || FreeRoundBonus.inFrb) {\n            return false;\n        }\n\n        if (Jackpot.hasInitializedGame() || Jackpot.waitForMiniGameInitialization()) {\n            if (GameManager.gameResponse.totalWin > 0) {\n                this.changeWinBox();\n                this._wasCalclulated = true;\n\n                if (!DataManager.GameRoundClosed) {\n                    this.collect(); //collect will call prepareNewGameRound\n                } else {\n                    //in nogamble gameround is closed, we need to update balance, if we have totalwin > 0\n                    this.playCollectSound();\n                    DataManager.updateDataElements();\n                    this.prepareNewGameRound();\n                }\n            } else {\n                this.prepareNewGameRound();\n            }\n\n            return true;\n        } else {\n            Jackpot.initMiniGame(false, null);\n            Jackpot.disableMiniGameAutostart(); //if init was called from preparenewgameround\n\n            return false;\n        }\n    }\n\n    limit(): void {\n        LimitDialog.openDialog();\n\n        if (DataManager.GameRoundClosed) {\n            this.actions.changeActionStates({\n                [BaseActions.ActionAutoplay]: DataManager.autoplayEnabled(),\n                [BaseActions.ActionAutoplayStop]: false,\n                [BaseActions.ActionBaseCollect]: false,\n                [BaseActions.ActionBetCycle]: true,\n                [BaseActions.ActionBetPlus]: !BetManager.maxBet,\n                [BaseActions.ActionBetMinus]: !BetManager.minBet,\n                [BaseActions.ActionSpin]: true,\n                [BaseActions.ActionSpinStop]: false,\n            });\n            if (this._betSettings != null && this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n                this._betSettings.classList.remove(HtmlController.DisabledClass);\n            }\n        } else {\n            this.actions.changeActionStates({\n                [BaseActions.ActionAutoplay]: false,\n                [BaseActions.ActionAutoplayStop]: false,\n                [BaseActions.ActionBaseCollect]: true,\n                [BaseActions.ActionBetCycle]: false,\n                [BaseActions.ActionBetPlus]: false,\n                [BaseActions.ActionBetMinus]: false,\n                [BaseActions.ActionSpin]: false,\n                [BaseActions.ActionSpinStop]: false,\n            });\n            if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n                this._betSettings.classList.add(HtmlController.DisabledClass);\n            }\n        }\n    }\n\n    disable(): void {\n        this._afterWinDelay.stop();\n        this.actions.disableAllActions();\n        FreeRoundBonusIcon.disableActiveIcon();\n        HtmlController.updateActionElements(this.getAllActions());\n\n        this._controller.disableBase();\n\n        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n            this._betSettings.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    //disable base without reseting timer and win animations in winAnimator\n    //used in frb, to avoid not showing end message in last frb spin with win\n    private disableAllActions(): void {\n        this._afterWinDelay.stop();\n        this.actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\n            this._betSettings.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    /**\n     *\n     * @param {number} id\n     */\n    setActiveSceneInBasegame(id: number): void {}\n\n    setSceneAnimations(sceneIndex: number): void {}\n\n    updatePaytable(): void {}\n\n    userControlsShowDelay(): void {\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    resetWinAnimator(): void {\n        this._controller.resetWinAnimator();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Mobile/MobileBaseUserControls.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { UserControls } from \"../Common/UserControls/UserControls\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { GameData } from \"../Common/Datas/GameData\";\nimport { GameActions } from \"../Common/Actions/GameActions\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { LimitDialog } from \"../Common/Dialogs/LimitDialog\";\nimport { FreespinsController } from \"../../GameComponents/Freespins/FreespinsController\";\nimport { FreespinsActions } from \"../Common/Actions/FreespinsActions\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { Configuration } from \"../../Components/Configuration\";\nimport { FreeRoundBonus } from \"../Common/Bonuses/FreeRoundBonus\";\nimport { TweenLite } from \"gsap\";\n\nvar GameModules = Communication.Game.GameModules;\nvar WinType = Communication.Game.WinType;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class MobileFreespinsUserControls extends UserControls {\n    protected _controller: FreespinsController;\n\n    private _userControls: HTMLElement;\n    private _baseUserControls: HTMLElement;\n    private _userControls_supreme: HTMLElement;\n    private _afterWinDelay: FrameTimerEventEmitter;\n    private _autoplayDelay: FrameTimerEventEmitter;\n    private _backDelay: FrameTimerEventEmitter;\n    private _backButtonDelay: FrameTimerEventEmitter;\n    private _prepareNewGameRound: FrameTimerEventEmitter;\n    private _fsEnterEnableDelay: FrameTimerEventEmitter;\n\n    protected _userControlsShowDelay: FrameTimerEventEmitter;\n    protected _baseUserControlsShowDelay: FrameTimerEventEmitter;\n\n    private _fsBoards: Array<HTMLElement>;\n\n    private _wasCalclulated: boolean = true;\n\n    constructor() {\n        super(\"freespins\");\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.registerActions();\n\n        this._afterWinDelay = CreateFrameTimer(\"afterWinDelay\");\n        this._afterWinDelay.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._autoplayDelay = CreateFrameTimer(\"autoplayDelay\");\n        this._autoplayDelay.on(FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\n\n        this._backDelay = CreateFrameTimer(\"backDelay\");\n        this._backDelay.on(FrameTimerEvents.Complete, this.back.bind(this));\n\n        this._backButtonDelay = CreateFrameTimer(\"backButtonDelay\");\n        this._backButtonDelay.on(FrameTimerEvents.Complete, this.backButton.bind(this));\n\n        this._prepareNewGameRound = CreateFrameTimer(\"prepareNewGameRound\");\n        this._prepareNewGameRound.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\n\n        this._userControls = document.getElementById(\"freespinsUserControls\");\n\n        this._userControlsShowDelay = CreateFrameTimer(\"userControlsShowDelay\");\n        this._userControlsShowDelay.on(FrameTimerEvents.Complete, this.userControlsShowDelay.bind(this));\n\n        this._baseUserControlsShowDelay = CreateFrameTimer(\"userControlsShowDelay\");\n        this._baseUserControlsShowDelay.on(FrameTimerEvents.Complete, this.baseUserControlsShowDelay.bind(this));\n\n        this._fsEnterEnableDelay = CreateFrameTimer(\"fsEnterEnableDelay\");\n        this._fsEnterEnableDelay.on(FrameTimerEvents.Complete, this.fsEnterEnableDelay.bind(this));\n\n        this._fsBoards = [document.getElementById(\"fsCount\"), document.getElementById(\"fsMultiplier\")];\n    }\n\n    addController(controller: FreespinsController): void {\n        this._controller = controller;\n        this._controller.on(FreespinsController.StartReceived, this.startReceived.bind(this));\n        this._controller.on(FreespinsController.ConfirmReceived, this.confirmReceived.bind(this));\n        this._controller.on(FreespinsController.SpinReceived, this.spinReceived.bind(this));\n        this._controller.on(FreespinsController.EndReceived, this.endReceived.bind(this));\n        this._controller.on(FreespinsController.MachineStopped, this.machineStopped.bind(this));\n        this._controller.on(FreespinsController.WinCalculationFinished, this.winCalculationFinished.bind(this));\n        this._controller.on(FreespinsController.AllWinsFinished, this.allWinsFinished.bind(this));\n        this._controller.on(FreespinsController.IntroFinished, this.introFinished.bind(this));\n        this._controller.on(FreespinsController.OutroFinished, this.outroFinished.bind(this));\n        this._controller.on(\n            FreespinsController.QuickWinCalculationFinished,\n            this.quickWinCalculationFinished.bind(this),\n        );\n    }\n\n    registerActions(): void {\n        this.actions.registerActions({\n            [FreespinsActions.ActionStart]: false,\n            [FreespinsActions.ActionBack]: false,\n            [FreespinsActions.ActionAutoplay]: false,\n            [FreespinsActions.ActionAutoplayStop]: false,\n            [FreespinsActions.ActionSpin]: false,\n            [FreespinsActions.ActionSpinStop]: false,\n        });\n    }\n\n    initReceived(): void {\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\n        this._baseUserControls = document.getElementById(\"userControls\");\n\n        super.initReceived();\n\n        this._controller.initReceived();\n\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    restoreGameRound(): void {\n        this.prepareNewGameRound();\n    }\n\n    startReceived(finished: boolean): void {\n        // DataManager.updateDataElement(GameData.DataFreeSpinsRemainingCount, (GameManager.freespinsResponse.freeSpins.remainingCount).toString());\n        // DataManager.updateDataElement(GameData.DataFreeSpinsCount, (GameManager.freespinsResponse.freeSpins.totalCount).toString());\n\n        if (\n            this._baseUserControls != null &&\n            !this._baseUserControls.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._baseUserControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        // // this.actions.changeActionState(FreespinsActions.ActionSpinStop, AppContext.gameConfiguration.GameEnableReelsStop);\n        // // HtmlController.updateActionElements(this.getAllActions());\n        // this.prepareNewGameRound();\n\n        ModuleManager.outroModule(GameModules.Pick);\n    }\n\n    confirmReceived(): void {\n        ModuleManager.outroModule(GameModules.Base);\n    }\n\n    spinReceived(): void {\n        let fsCount = document.querySelector(\"#fsCount .value\");\n        let hide = TweenLite.to(fsCount, 0.1, { alpha: 0 });\n        hide.eventCallback(\"onComplete\", () => {\n            DataManager.updateDataElement(\n                GameData.DataFreeSpinsRemainingCount,\n                GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n            );\n\n            TweenLite.to(fsCount, 0.1, { alpha: 1 });\n        });\n\n        if (DataManager.quickspinEnabled()) {\n            // auto quick stop\n            this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n            HtmlController.updateActionElements(this.getAllActions());\n            HtmlController.dispatchUiAction(\"\");\n            this._controller.stop();\n        } else {\n            this.actions.changeActionState(\n                FreespinsActions.ActionSpinStop,\n                AppContext.gameConfiguration.GameEnableReelsStop,\n            );\n            HtmlController.updateActionElements(this.getAllActions());\n        }\n    }\n\n    endReceived(): void {\n        ModuleManager.outroModule(GameModules.Freespins);\n    }\n\n    dispatchAction(action: string): void {\n        if (action === GameActions.ActionSpinOrStop) {\n            if (this.actions.getActionState(FreespinsActions.ActionBack)) {\n                action = FreespinsActions.ActionBack;\n            } else if (this.actions.getActionState(FreespinsActions.ActionSpin)) {\n                action = FreespinsActions.ActionSpin;\n            } else if (this.actions.getActionState(FreespinsActions.ActionSpinStop)) {\n                action = FreespinsActions.ActionSpinStop;\n            } else {\n                return;\n            }\n        }\n\n        if (this.actions.getActionState(action)) {\n            PlayList.play(\"SND_Click\");\n            super.dispatchAction(action);\n\n            switch (action) {\n                case FreespinsActions.ActionStart:\n                    this.start();\n                    break;\n                case FreespinsActions.ActionBack:\n                    this.back();\n                    break;\n                case FreespinsActions.ActionSpin:\n                    this.spin();\n                    break;\n                case FreespinsActions.ActionSpinStop:\n                    this.stop();\n                    break;\n                case FreespinsActions.ActionAutoplay:\n                    this.autoplay();\n                    break;\n                case FreespinsActions.ActionAutoplayStop:\n                    this.autoplayStop();\n                    break;\n            }\n        }\n    }\n\n    start(id?: number): void {\n        this.actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n        this._controller.start(id);\n    }\n\n    spin(): void {\n        if (!this._wasCalclulated) {\n            if (GameManager.freespinsResponse != null && GameManager.freespinsResponse.currentWin > 0) {\n                Platforms.Platforms.win(GameManager.freespinsResponse.currentWin);\n            }\n        }\n\n        this.actions.disableAllActions();\n        if (DataManager.Autoplay) {\n            this.actions.changeActionState(FreespinsActions.ActionAutoplayStop, DataManager.autoplayEnabled());\n        }\n        HtmlController.dispatchUiAction(\"\");\n        DataManager.updateDataElement(GameData.DataTotalWin);\n        HtmlController.updateActionElements(this.getAllActions());\n        this._controller.spin();\n\n        Platforms.Platforms.spinStarted();\n    }\n\n    back(): void {\n        this._backDelay.stop();\n        this.disable();\n        ModuleManager.endFreespins();\n    }\n\n    stop(): void {\n        this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n        HtmlController.updateActionElements(this.getAllActions());\n        HtmlController.dispatchUiAction(\"\");\n        DataManager.quickspinStopped();\n        this._controller.stop();\n    }\n\n    end(): void {\n        if (GameManager.freespinsResponse != null && GameManager.freespinsResponse.totalWin > 0) {\n            Platforms.Platforms.win(GameManager.freespinsResponse.totalWin, true);\n        }\n\n        this._controller.end();\n    }\n\n    autoplayDelayed(): void {\n        this._autoplayDelay.stop();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        } else {\n            this.prepareNewGameRound();\n        }\n    }\n\n    autoplay(): void {\n        this._afterWinDelay.stop();\n\n        if (DataManager.AutoplayCount === \"∞\") {\n            DataManager.Autoplay = true;\n            DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n            this.spin();\n        } else {\n            DataManager.AutoplayCount = (parseInt(DataManager.AutoplayCount) - 1).toString();\n            if (parseInt(DataManager.AutoplayCount) >= 0) {\n                DataManager.Autoplay = true;\n                DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\n                this.spin();\n            } else {\n                DataManager.Autoplay = false;\n                this.prepareNewGameRound();\n            }\n        }\n    }\n\n    autoplayStop(): void {\n        DataManager.Autoplay = false;\n        this.actions.changeActionState(FreespinsActions.ActionAutoplayStop, false);\n        HtmlController.updateActionElement(FreespinsActions.ActionAutoplayStop, false);\n    }\n\n    backButton(): void {\n        this.actions.changeActionState(FreespinsActions.ActionBack, true);\n        HtmlController.updateActionElement(FreespinsActions.ActionBack, true);\n    }\n\n    machineStopped(isHighWin: boolean): void {\n        Platforms.Platforms.spinEnded();\n\n        if (GameManager.freespinsResponse.currentWin === 0) {\n            this._wasCalclulated = true;\n        } else {\n            this._wasCalclulated = false;\n        }\n\n        if (GameManager.freespinsResponse.currentWin > 0) {\n            //this._afterWinDelay.start(30);\n\n            let hasScatterFreespinWin = false;\n\n            for (let i = 0; i < GameManager.freespinsResponse.wins.length; i++) {\n                if (GameManager.freespinsResponse.wins[i].trigger === Communication.Game.WinTrigger.Scatter) {\n                    if (GameManager.freespinsResponse.wins[i].type === Communication.Game.WinType.freeSpins) {\n                        hasScatterFreespinWin = true;\n                    }\n                } else if (GameManager.freespinsResponse.wins[i].trigger === Communication.Game.WinTrigger.Way) {\n                    if (GameManager.freespinsResponse.wins[i].type === Communication.Game.WinType.Cash) {\n                    }\n                }\n            }\n\n            this._afterWinDelay.stop();\n            if (isHighWin) {\n                this._afterWinDelay.start(80);\n            } else {\n                if (GameManager.freespinsResponse.totalWin > 0) {\n                    this._afterWinDelay.start(30);\n                } else {\n                    this.prepareNewGameRound();\n                }\n            }\n        }\n\n        if (this.isLastFreespin()) {\n            this._afterWinDelay.stop();\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n            if (GameManager.freespinsResponse.currentWin === 0) {\n                if (GameManager.freespinsResponse.totalWin != null) {\n                    DataManager.updateGameDataFromModule(\n                        GameData.DataFreeSpinTotalWin,\n                        GameManager.freespinsResponse.totalWin.toString(),\n                    );\n                }\n                DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n\n                // Autostart Configurator in case of retrigger > 0. Else show back-button to basegame.\n                if (this.getRetriggerCount() > 0 && !DataManager.GameLimit) {\n                    this._backDelay.start(15);\n                } else {\n                    this._backButtonDelay.start(60);\n                }\n            }\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.actions.changeActionState(FreespinsActions.ActionSpinStop, false);\n\n        if (GameManager.freespinsResponse.currentWin === 0) {\n            this.prepareNewGameRound();\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n\n        if (DataManager.Autoplay && GameManager.freespinsResponse.currentWin === 0) {\n            this._autoplayDelay.start(15);\n        }\n    }\n\n    quickWinCalculationFinished(): void {\n        if (\n            GameManager.freespinsResponse != null &&\n            GameManager.freespinsResponse.currentWin > 0 &&\n            !this._wasCalclulated\n        ) {\n            Platforms.Platforms.win(GameManager.freespinsResponse.currentWin);\n        }\n\n        this._wasCalclulated = true;\n        DataManager.updateDataElement(GameData.DataTotalWin);\n    }\n\n    winCalculationFinished(): void {\n        this._afterWinDelay.stop();\n\n        DataManager.updateDataElement(GameData.DataTotalWin);\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinTotalWin,\n                GameManager.freespinsResponse.totalWin.toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n\n        if (this.isLastFreespin()) {\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n    }\n\n    allWinsFinished(): void {\n        if (\n            GameManager.freespinsResponse != null &&\n            GameManager.freespinsResponse.currentWin > 0 &&\n            !this._wasCalclulated\n        ) {\n            Platforms.Platforms.win(GameManager.freespinsResponse.currentWin);\n        }\n\n        this._wasCalclulated = true;\n\n        this._afterWinDelay.stop();\n\n        if (this.isLastFreespin()) {\n            DataManager.Autoplay = false;\n            this.actions.disableAllActions();\n\n            // Autostart Configurator in case of retrigger > 0. Else show back-button to basegame.\n            if (this.getRetriggerCount() > 0 && !DataManager.GameLimit) {\n                this.back();\n            } else {\n                this._backButtonDelay.start(60);\n            }\n\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n        if (DataManager.Autoplay) {\n            this.autoplay();\n        }\n    }\n\n    initIntro(): void {\n        FreeRoundBonus.disableUi();\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsMultiplier,\n            GameManager.freespinsResponse.freeSpins.multiplier.toString(),\n        );\n\n        DataManager.updateDataElement(GameData.DataTotalWin);\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinTotalWin,\n                GameManager.freespinsResponse.totalWin.toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n\n        super.initIntro();\n        this._controller.initIntro();\n        Platforms.Platforms.featureInit({ type: Communication.Game.GameModules.Freespins });\n\n        if (this.isLastFreespin()) {\n            this.actions.disableAllActions();\n\n            // Autostart Configurator in case of retrigger > 0. Else show back-button to basegame.\n            if (this.getRetriggerCount() > 0 && !DataManager.GameLimit) {\n                this._backDelay.start(15);\n            } else {\n                this._backButtonDelay.start(60);\n            }\n\n            HtmlController.updateActionElements(this.getAllActions());\n            return;\n        }\n\n        this.prepareNewGameRound();\n    }\n\n    intro(long: boolean = false): void {\n        FreeRoundBonus.disableUi();\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsCount,\n            GameManager.freespinsResponse.freeSpins.totalCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsMultiplier,\n            GameManager.freespinsResponse.freeSpins.multiplier.toString(),\n        );\n\n        for (let item of this._fsBoards) {\n            item.classList.remove(HtmlController.DisabledClass);\n        }\n\n        this._controller.intro(long);\n\n        this._userControlsShowDelay.start(100);\n    }\n\n    introFinished(): void {\n        if (this._userControls != null) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n        this._prepareNewGameRound.start(120);\n        this._userControlsShowDelay.start(100);\n    }\n\n    outro(): void {\n        DataManager.Autoplay = false;\n\n        this._controller.outro();\n\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    outroFinished(): void {\n        ModuleManager.introModule(GameModules.Base, true);\n\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    prepareNewGameRound(): void {\n        this._afterWinDelay.stop();\n\n        if (GameManager.freespinsResponse.totalWin != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinTotalWin,\n                GameManager.freespinsResponse.totalWin.toString(),\n            );\n        }\n        DataManager.updateDataElement(GameData.DataFreeSpinTotalWin);\n\n        if (DataManager.GameLimit) {\n            DataManager.Autoplay = false;\n            this.limit();\n        } else {\n            if (!DataManager.Autoplay) {\n                this.actions.changeActionStates({\n                    [FreespinsActions.ActionStart]: false,\n                    [FreespinsActions.ActionBack]: false,\n                    [FreespinsActions.ActionAutoplay]: !DataManager.Autoplay && DataManager.autoplayEnabled(),\n                    [FreespinsActions.ActionAutoplayStop]: DataManager.Autoplay && DataManager.autoplayEnabled(),\n                    [FreespinsActions.ActionSpin]: true,\n                    [FreespinsActions.ActionSpinStop]: false,\n                });\n            }\n        }\n\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    limit(): void {\n        LimitDialog.openDialog();\n\n        this.actions.changeActionStates({\n            [FreespinsActions.ActionStart]: false,\n            [FreespinsActions.ActionBack]: false,\n            [FreespinsActions.ActionAutoplay]: false,\n            [FreespinsActions.ActionAutoplayStop]: false,\n            [FreespinsActions.ActionSpin]: false,\n            [FreespinsActions.ActionSpinStop]: false,\n        });\n    }\n\n    fsEnterEnableDelay() {\n        this.actions.changeActionState(FreespinsActions.ActionStart, true);\n        HtmlController.updateActionElement(FreespinsActions.ActionStart, true);\n    }\n\n    enable(): void {\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsRemainingCount,\n            GameManager.freespinsResponse.freeSpins.remainingCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsCount,\n            GameManager.freespinsResponse.freeSpins.totalCount.toString(),\n        );\n        DataManager.updateDataElement(\n            GameData.DataFreeSpinsMultiplier,\n            GameManager.freespinsResponse.freeSpins.multiplier.toString(),\n        );\n\n        this._fsEnterEnableDelay.start(30);\n\n        this._controller.enable();\n\n        // if (this._baseUserControls != null && !this._baseUserControls.classList.contains(HtmlController.DisabledClass)) {\n        //     this._baseUserControls.classList.add(HtmlController.DisabledClass);\n        // }\n        //\n        // this._baseUserControlsShowDelay.start(100);\n    }\n\n    disable(): void {\n        this.actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    /**\n     *\n     * @returns {boolean}\n     */\n    private isLastFreespin(): boolean {\n        if (DataManager.GameLimit) {\n            this.limit();\n            return true;\n        }\n\n        if (\n            GameManager.freespinsResponse.freeSpins != null &&\n            GameManager.freespinsResponse.freeSpins.remainingCount != null &&\n            GameManager.freespinsResponse.freeSpins.remainingCount === 0\n        ) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Get remaining retriggers.\n     * @returns {number}\n     */\n    private getRetriggerCount(): number {\n        if (\n            GameManager.freespinsResponse.hasOwnProperty(\"customData\") &&\n            GameManager.freespinsResponse.customData[\"retriggerCount\"] != null\n        ) {\n            return GameManager.freespinsResponse.customData[\"retriggerCount\"];\n        }\n\n        return null;\n    }\n\n    userControlsShowDelay(): void {\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    baseUserControlsShowDelay(): void {\n        if (this._baseUserControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._baseUserControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (\n            this._userControls_supreme != null &&\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\n        ) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    overlayFsBoard(): void {\n        for (let item of this._fsBoards) {\n            if (item != null && !item.classList.contains(\"_overlayed\")) {\n                item.classList.add(\"_overlayed\");\n            }\n        }\n    }\n\n    removeOverlayFsBoard(): void {\n        for (let item of this._fsBoards) {\n            if (item != null && item.classList.contains(\"_overlayed\")) {\n                item.classList.remove(\"_overlayed\");\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Mobile/MobileFreespinsUserControls.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication } from \"neo-games\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { GambleUserControls } from \"../Common/UserControls/GambleUserControls\";\n\nvar GameModules = Communication.Game.GameModules;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class MobileGambleUserControls extends GambleUserControls {\n    // activate base background animations if we start game at gamble scene\n    initIntro(): void {\n        ModuleManager.setActiveSceneBackground(GameModules.Base, 0);\n\n        super.initIntro();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Mobile/MobileGambleUserControls.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Communication, Platforms } from \"neo-games\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { UserControls } from \"../Common/UserControls/UserControls\";\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\nimport { GameActions } from \"../Common/Actions/GameActions\";\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\nimport { PickActions } from \"../Common/Actions/PickActions\";\nimport { PickController } from \"../../GameComponents/Pick/PickController\";\nimport { GameManager } from \"../../Managers/GameManager\";\nimport { GameData } from \"../Common/Datas/GameData\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../Utils/FrameTimer\";\n\nvar GameModules = Communication.Game.GameModules;\nvar GameStatuses = Communication.Game.GameModuleStatus;\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class MobilePickUserControls extends UserControls {\n    protected _controller: PickController;\n\n    private _userControls: HTMLElement;\n    private _userControls_supreme: HTMLElement;\n    private _baseUserControls: HTMLElement;\n    private _pickCount: HTMLElement;\n    private _pickMultiplier: HTMLElement;\n    private _backDelay: FrameTimerEventEmitter;\n    private _backButtonDelay: FrameTimerEventEmitter;\n\n    private _fsConfiguratorText: HTMLElement;\n    private _fsCount: HTMLElement;\n    private _fsMultiplier: HTMLElement;\n\n    constructor() {\n        super(\"pick\");\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.registerActions();\n\n        this._userControls = document.getElementById(\"pickUserControls\");\n        this._fsConfiguratorText = document.getElementById(\"fsConfiguratorText\");\n\n        this._backDelay = CreateFrameTimer(\"backDelay\");\n        this._backDelay.on(FrameTimerEvents.Complete, this.back.bind(this));\n\n        this._backButtonDelay = CreateFrameTimer(\"backButtonDelay\");\n        this._backButtonDelay.on(FrameTimerEvents.Complete, this.backButton.bind(this));\n\n        this._pickCount = document.getElementById(\"pickCount\"); //todo  ???\n        if (this._pickCount == null) {\n            if (DEBUG) {\n                this.log(\"ERROR no pickCount\");\n            }\n        }\n\n        this._pickMultiplier = document.getElementById(\"pickMultiplier\"); //todo  ???\n        if (this._pickMultiplier == null) {\n            if (DEBUG) {\n                this.log(\"ERROR no pickMultiplier\");\n            }\n        }\n    }\n\n    addController(controller: PickController): void {\n        this._controller = controller;\n        this._controller.on(PickController.StartReceived, this.startReceived.bind(this));\n        this._controller.on(PickController.SelectReceived, this.selectReceived.bind(this));\n        this._controller.on(PickController.EndReceived, this.endReceived.bind(this));\n        this._controller.on(PickController.UpdateCounters, this.updateCounter.bind(this));\n        this._controller.on(PickController.UpdateCountersValues, this.updateCounterValues.bind(this));\n        this._controller.on(PickController.SelectComplete, this.selectComplete.bind(this));\n        this._controller.on(PickController.AllWinsFinished, this.allWinsFinished.bind(this));\n        this._controller.on(PickController.IntroFinished, this.introFinished.bind(this));\n        this._controller.on(PickController.Intro, this.intro.bind(this));\n        this._controller.on(PickController.OutroFinished, this.outroFinished.bind(this));\n        this._controller.on(PickController.Outro, this.outro.bind(this));\n    }\n\n    registerActions(): void {\n        this.actions.registerActions({\n            [PickActions.ActionSpot + 0]: false,\n            [PickActions.ActionSpot + 1]: false,\n            [PickActions.ActionSpot + 2]: false,\n            [PickActions.ActionSpot + 3]: false,\n            [PickActions.ActionSpot + 4]: false,\n            [PickActions.ActionSpot + 5]: false,\n            [PickActions.ActionSpot + 6]: false,\n            [PickActions.ActionSpot + 7]: false,\n            [PickActions.ActionSpot + 8]: false,\n        });\n    }\n\n    initReceived(): void {\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\n        this._baseUserControls = document.getElementById(\"userControls\");\n        this._fsCount = document.getElementById(\"fsCount\");\n        this._fsMultiplier = document.getElementById(\"fsMultiplier\");\n\n        super.initReceived();\n\n        this._controller.initReceived();\n\n        /*if (GameManager.pickResponse.multiplier != null) {\n            DataManager.updateGameDataFromModule(GameData.DataFreeSpinsMultiplier, GameManager.pickResponse.multiplier.toString());\n            DataManager.updateDataElement(GameData.DataFreeSpinsMultiplier, GameManager.pickResponse.multiplier.toString());\n        }*/\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"none\";\n        }\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n    }\n\n    startReceived(): void {\n        ModuleManager.outroModule(GameModules.Base);\n        ModuleManager.setAutoplayAfterFeature(false);\n    }\n\n    selectReceived(): void {\n        /*if(this._pickCount && this._pickCount.classList.contains('flash')) {\n            this._pickCount.classList.remove('flash');\n        }\n\n        if(this._pickMultiplier && this._pickMultiplier.classList.contains('flash')) {\n            this._pickMultiplier.classList.remove('flash');\n        }*/\n    }\n\n    endReceived(): void {\n        if (ModuleManager.freespinsEnabled()) {\n            ModuleManager.enableFreespins();\n        }\n    }\n\n    dispatchAction(action: string): void {\n        if (ModuleManager.pickEnabled() || ModuleManager.pickActive()) {\n            if (action === GameActions.ActionSpinOrStop) {\n                return;\n            }\n\n            if (this.actions.getActionState(action)) {\n                super.dispatchAction(action);\n\n                if (action.substr(0, PickActions.ActionSpot.length) === PickActions.ActionSpot) {\n                    let id: number = parseInt(action.substr(PickActions.ActionSpot.length, action.length));\n                    this._controller.select(id);\n                }\n                this.actions.disableAllActions();\n            }\n            HtmlController.updateActionElements(this.getAllActions());\n        }\n\n        // if((GameManager.freespinsResponse != null && GameManager.freespinsResponse.status != null && GameManager.freespinsResponse.status === GameStatuses.Disabled)\n        //     && (GameManager.gambleResponse == null || (GameManager.gambleResponse.status != null && GameManager.gambleResponse.status === GameStatuses.Disabled))) {\n        //     if(action == PickActions.ActionConfirm\n        //         || (\n        //             action === GameActions.ActionSpinOrStop\n        //             && GameManager.pickResponse\n        //             && GameManager.pickResponse.round\n        //             && GameManager.pickResponse.round.spots.filter(value => value.status === Communication.Game.PickRoundSpotStatus.Enabled).length == 0\n        //         )) {\n        //         this._controller.end();\n        //         this.actions.changeActionState(PickActions.ActionConfirm, false);\n        //         HtmlController.updateActionElement(PickActions.ActionConfirm, false);\n        //         return;\n        //     }\n        // }\n        //\n        // if (action === GameActions.ActionSpinOrStop) {\n        //     return;\n        // }\n        //\n        // if (this.actions.getActionState(action)) {\n        //     super.dispatchAction(action);\n        //\n        //     if(action == PickActions.ActionConfirm) {\n        //         this._controller.outro();\n        //     } else if(action.substr(0, PickActions.ActionSpot.length) === PickActions.ActionSpot) {\n        //         let id: number = parseInt(action.substr(PickActions.ActionSpot.length, action.length));\n        //         this._controller.select(id);\n        //     }\n        // }\n        // this.actions.disableAllActions();\n        // HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    start(): void {\n        this.actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n        this._controller.start();\n    }\n\n    back(): void {\n        this._backDelay.stop();\n        this.disable();\n        ModuleManager.endPick();\n    }\n\n    end(): void {\n        if (GameManager.pickResponse.count != null && GameManager.pickResponse.multiplier != null) {\n            DataManager.updateGameDataFromModule(\n                GameData.DataFreeSpinsCountMultiplier,\n                GameManager.pickResponse.count.toString() + \";\" + GameManager.pickResponse.multiplier.toString(),\n            );\n            DataManager.updateDataElement(\n                GameData.DataFreeSpinsCountMultiplier,\n                GameManager.pickResponse.count.toString() + \";\" + GameManager.pickResponse.multiplier.toString(),\n            );\n        }\n\n        this._controller.end();\n    }\n\n    backButton(): void {\n        this.actions.changeActionState(PickActions.ActionBack, true);\n        HtmlController.updateActionElement(PickActions.ActionBack, true);\n    }\n\n    allWinsFinished(): void {\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    initIntro(): void {\n        super.initIntro();\n        this._controller.initIntro();\n        Platforms.Platforms.featureInit({ type: Communication.Game.GameModules.Pick });\n        this.prepareNewGameRound(true);\n\n        if (this._fsConfiguratorText) {\n            this._fsConfiguratorText.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._fsCount) {\n            this._fsCount.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._fsMultiplier) {\n            this._fsMultiplier.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n\n        if (this._userControls != null) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._baseUserControls != null) {\n            this._baseUserControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    intro(long: boolean = false): void {\n        if (ModuleManager.pickEnabled()) {\n            if (this._userControls != null) {\n                this._userControls.classList.add(HtmlController.DisabledClass);\n            }\n\n            if (this._userControls_supreme != null) {\n                this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n            }\n\n            if (this._baseUserControls != null) {\n                this._baseUserControls.classList.add(HtmlController.DisabledClass);\n            }\n        }\n    }\n\n    introFinished(): void {\n        this.prepareNewGameRound();\n\n        if (this._fsConfiguratorText) {\n            this._fsConfiguratorText.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._fsCount) {\n            this._fsCount.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._fsMultiplier) {\n            this._fsMultiplier.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls != null) {\n            this._userControls.style.display = \"block\";\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.style.display = \"block\";\n        }\n\n        if (this._userControls != null) {\n            this._userControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._baseUserControls != null) {\n            this._baseUserControls.classList.remove(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    outro(): void {\n        if (this._fsConfiguratorText) {\n            this._fsConfiguratorText.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._fsCount) {\n            this._fsCount.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._fsMultiplier) {\n            this._fsMultiplier.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\n            this._userControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._userControls_supreme != null) {\n            this._userControls_supreme.classList.add(HtmlController.DisabledClass);\n        }\n\n        if (this._baseUserControls != null) {\n            this._baseUserControls.classList.add(HtmlController.DisabledClass);\n        }\n\n        this._controller.outro();\n    }\n\n    outroFinished(): void {\n        // ModuleManager.disablePick();\n        // ModuleManager.startFreespins();\n        ModuleManager.introModule(GameModules.Freespins, true);\n    }\n\n    prepareNewGameRound(init: boolean = false): void {\n        this.actions.changeActionStates({\n            [PickActions.ActionSpot + 0]: false,\n            [PickActions.ActionSpot + 1]: false,\n            [PickActions.ActionSpot + 2]: false,\n            [PickActions.ActionSpot + 3]: false,\n            [PickActions.ActionSpot + 4]: false,\n            [PickActions.ActionSpot + 5]: false,\n            [PickActions.ActionSpot + 6]: false,\n            [PickActions.ActionSpot + 7]: false,\n            [PickActions.ActionSpot + 8]: false,\n        });\n\n        if (\n            GameManager.pickResponse != null &&\n            GameManager.pickResponse.round != null &&\n            GameManager.pickResponse.round.spots != null\n        ) {\n            if (GameManager.pickResponse.round.remainingPicks === 0) {\n                if (!ModuleManager.freespinsEnabled()) {\n                    this.end();\n                } else {\n                    if (GameManager.pickResponse.count != null && GameManager.pickResponse.multiplier != null) {\n                        DataManager.updateGameDataFromModule(\n                            GameData.DataFreeSpinsCountMultiplier,\n                            GameManager.pickResponse.count.toString() +\n                                \";\" +\n                                GameManager.pickResponse.multiplier.toString(),\n                        );\n                        DataManager.updateDataElement(\n                            GameData.DataFreeSpinsCountMultiplier,\n                            GameManager.pickResponse.count.toString() +\n                                \";\" +\n                                GameManager.pickResponse.multiplier.toString(),\n                        );\n                    }\n                    ModuleManager.enableFreespins();\n                }\n                return;\n            }\n\n            for (let key in GameManager.pickResponse.round.spots) {\n                let id: number = GameManager.pickResponse.round.spots[key].id;\n                let status: string = GameManager.pickResponse.round.spots[key].status.toString();\n\n                if (id != null && status != null && status === \"enabled\") {\n                    this.actions.changeActionState(PickActions.ActionSpot + id, true);\n                }\n            }\n        }\n\n        DataManager.updateDataElement(GameData.DataFreeSpinsRemainingCount, GameManager.pickResponse.count.toString());\n        DataManager.updateDataElement(GameData.DataFreeSpinsMultiplier, GameManager.pickResponse.multiplier.toString());\n\n        HtmlController.updateActionElements(this.getAllActions());\n    }\n\n    updateCounter(): void {\n        console.warn(\"!\");\n        DataManager.updateDataElement(GameData.DataFreeSpinsRemainingCount, GameManager.pickResponse.count.toString());\n        DataManager.updateDataElement(GameData.DataFreeSpinsMultiplier, GameManager.pickResponse.multiplier.toString());\n        /*if(PickView.ActualValueType != '') {\n            if(PickView.ActualValueType === 'count') {\n                if(this._pickCount && !this._pickCount.classList.contains('flash')) {\n                    this._pickCount.classList.add('flash');\n                }\n            } else if(PickView.ActualValueType === 'multiplier') {\n                if(this._pickMultiplier && !this._pickMultiplier.classList.contains('flash')) {\n                    this._pickMultiplier.classList.add('flash');\n                }\n            }\n        }*/\n    }\n\n    updateCounterValues(): void {\n        /*if(PickView.ActualValue != -1 && PickView.ActualValueType != '') {\n            let count: number;\n            let multiplier: number;\n\n            if (PickView.ActualValueType === 'count') {\n                count = parseInt(DataManager.getDataById(GameData.DataFreeSpinsRemainingCount)) + PickView.ActualValue;\n                DataManager.updateGameDataFromModule(GameData.DataFreeSpinsRemainingCount, count.toString());\n                DataManager.updateDataElement(GameData.DataFreeSpinsRemainingCount, count.toString());\n            } else if (PickView.ActualValueType === 'multiplier') {\n                multiplier = parseInt(DataManager.getDataById(GameData.DataFreeSpinsMultiplier)) + PickView.ActualValue;\n                DataManager.updateGameDataFromModule(GameData.DataFreeSpinsMultiplier, multiplier.toString());\n                DataManager.updateDataElement(GameData.DataFreeSpinsMultiplier, multiplier.toString());\n            }\n        }*/\n    }\n\n    pickStartButton(): void {\n        if (this._baseUserControls != null && this._baseUserControls.classList.contains(HtmlController.DisabledClass)) {\n            this._baseUserControls.classList.remove(HtmlController.DisabledClass);\n        }\n    }\n\n    selectComplete(): void {\n        this.prepareNewGameRound();\n    }\n\n    enable(): void {\n        this.start();\n    }\n\n    disable(): void {\n        this.actions.disableAllActions();\n        HtmlController.updateActionElements(this.getAllActions());\n        //this.outro();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Mobile/MobilePickUserControls.ts\n **/","import { Utils, StringUtils, ArrayUtils, Logger, engineComponent } from \"neo-common\";\nimport { ShapeElement } from \"./ShapeElement\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { StageController } from \"../../StageController\";\nimport { Tweens, ITweenable } from \"../../Effects/Tweens\";\nimport { ParticleElementAttributes } from \"../../ComponentAttributes\";\nimport { IElement } from \"../Interfaces/IElement\";\n\n/**\n * BaseElementParticle class is class which creates holder for other display objects.\n * Also handle all basic properties of display object as X, Y, Rotation, Tween, Scale, Visible, Mask.\n * @class BaseElementParticle\n * @extends PIXI.Container\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class BaseElementParticle extends PIXI.particles.ParticleContainer implements ITweenable, IElement {\n    static _destroyOptions: PIXI.DestroyOptions = {\n        children: true,\n    };\n\n    private _uid: string;\n    private _cloned: boolean;\n    private __destroyed: boolean;\n    private _tweenEngine: string;\n\n    maskSprite: PIXI.Sprite;\n\n    constructor() {\n        super();\n\n        this._cloned = false;\n        this.__destroyed = false;\n\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                this._uid = PerfDebug.generateElementUID(this);\n                PerfDebug.newElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    public get tweenEngine(): string {\n        return this._tweenEngine;\n    }\n\n    /**\n     * @method _create - setup element from xml node\n     * @param node\n     * @private\n     */\n    _create(node: Element): void {\n        this.assertDestroyed(\"_create()\");\n\n        Tweens.removeTweens(this);\n\n        if (this.name == null) {\n            this.name = node.nodeName;\n        }\n\n        /*\n         * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\n         * @property Alpha\n         * @type Number\n         * @default 1\n         */\n        if (node.hasAttribute(\"Alpha\")) {\n            this.alpha = parseFloat(node.getAttribute(\"Alpha\"));\n        }\n\n        /*\n         * Rotation in degrees for this display object.\n         * @property Rotation\n         * @type Number\n         * @default 0\n         */\n        if (node.hasAttribute(\"Rotation\")) {\n            this.rotation = parseInt(node.getAttribute(\"Rotation\"));\n        }\n\n        /*\n         * Random rotation in degrees for this display object.\n         * @property StartRotation\n         * @type Number\n         * @default null\n         */\n        if (node.hasAttribute(\"StartRotation\")) {\n            if (node.getAttribute(\"StartRotation\") === \"random\") {\n                //this.rotation = Math.floor(Math.random() * 360);\n                this.rotation = Math.floor(Math.random() * 360) / 100;\n            }\n        }\n\n        /*\n         * The factor to stretch this display object horizontally.\n         * For example, setting scaleX to 2 will stretch the display object to twice its nominal width. To horizontally flip an object, set the scale to a negative number.\n         * @property ScaleX\n         * @type Number\n         * @default 1\n         */\n        if (node.hasAttribute(\"ScaleX\")) {\n            this.scale.x = parseFloat(node.getAttribute(\"scaleX\"));\n        }\n\n        /*\n         * The factor to stretch this display object vertically.\n         * For example, setting scaleY to 0.5 will stretch the display object to half its nominal height. To vertically flip an object, set the scale to a negative number.\n         * @property ScaleY\n         * @type Number\n         * @default 1\n         */\n        if (node.hasAttribute(\"ScaleY\")) {\n            this.scale.y = parseFloat(node.getAttribute(\"ScaleY\"));\n        }\n\n        /*\n         * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\n         * @property Scale\n         * @type Number\n         * @default 1\n         */\n        if (node.hasAttribute(\"Scale\")) {\n            this.scale.x = parseFloat(node.getAttribute(\"Scale\"));\n            this.scale.y = parseFloat(node.getAttribute(\"Scale\"));\n        }\n\n        /*\n         * X (horizontal) position of the display object, relative to its parent.\n         * @property X\n         * @type Number\n         * @default 0\n         */\n        if (node.hasAttribute(\"X\")) {\n            this.position.x = parseInt(node.getAttribute(\"X\"));\n        }\n\n        /*\n         * Y (vertical) position of the display object, relative to its parent.\n         * @property Y\n         * @type Number\n         * @default 0\n         */\n        if (node.hasAttribute(\"Y\")) {\n            this.position.y = parseInt(node.getAttribute(\"Y\"));\n        }\n\n        /*\n         * X pivot for container. Used mainly for scale tweening and rotation.\n         * @property PivotX\n         * @type number\n         * @default null\n         */\n        if (node.hasAttribute(\"PivotX\")) {\n            this.pivot.x = parseInt(node.getAttribute(\"PivotX\"));\n        }\n\n        /*\n         * Y pivot for container. Used mainly for scale tweening and rotation.\n         * @property PivotY\n         * @type number\n         * @default null\n         */\n        if (node.hasAttribute(\"PivotY\")) {\n            this.pivot.y = parseInt(node.getAttribute(\"PivotY\"));\n        }\n\n        /*\n         * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\n         * @property Visible\n         * @type Boolean\n         * @default true\n         */\n        if (node.hasAttribute(\"Visible\")) {\n            this.visible = StringUtils.parseBoolean(node.getAttribute(\"Visible\"));\n        }\n\n        /*\n         * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\n         * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n         * @property Mask\n         * @type ShapeElement\n         * @default null\n         */\n        if (node.hasAttribute(\"Mask\")) {\n            var next: Element = node.parentElement.firstElementChild;\n            while (next != null) {\n                if (next.nodeName === node.getAttribute(\"Mask\")) {\n                    var shapeElement: ShapeElement = new ShapeElement();\n                    shapeElement.create(next);\n                    this.mask = shapeElement;\n                }\n                next = next.nextElementSibling;\n            }\n\n            if (this.mask == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(\"Mask\"));\n                }\n            }\n        }\n\n        /*\n         * A ImageElement instance that defines a mask for this display object.\n         * The shape's transformation will be applied relative to the display object's parent coordinates (as if it were a child of the parent).\n         * @property BitmapMask\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"BitmapMask\")) {\n            var image = StageController.getTextureByResourceId(node.getAttribute(\"BitmapMask\"));\n\n            if (image != null) {\n                this.maskSprite = new PIXI.Sprite(image);\n                if (node.hasAttribute(\"BitmapMaskX\")) {\n                    this.maskSprite.position.x = parseFloat(node.getAttribute(\"BitmapMaskX\"));\n                }\n                if (node.hasAttribute(\"BitmapMaskY\")) {\n                    this.maskSprite.position.y = parseFloat(node.getAttribute(\"BitmapMaskY\"));\n                }\n                if (!node.hasAttribute(\"BitmapMaskShow\")) {\n                    this.addChild(this.maskSprite);\n                    this.mask = this.maskSprite;\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no image with name for mask: \" + node.getAttribute(\"BitmapMask\"));\n                }\n            }\n        }\n\n        this._positionTweenOnCreate(node);\n        this._scaleTweenOnCreate(node);\n        this._rotationTweenOnCreate(node);\n        this._alphaTweenOnCreate(node);\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.createElement(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     * Get scale-tweening-specific attributes from xml and fire the tween\n     * @method _scaleTweenOnCreate\n     * @param node is Element from xml\n     * @return void\n     */\n    private _positionTweenOnCreate(node: Element): void {\n        // todo: PositionTween attribute, which takes either one value that applies both for X and Y axis, or pairs of values in format \"(x1,y1);(x2,x2);(x3,x4)\"\n\n        if (\n            !node.hasAttribute(ParticleElementAttributes.POSITION_TWEEN_X) ||\n            !node.hasAttribute(ParticleElementAttributes.POSITION_TWEEN_Y)\n        ) {\n            return;\n        }\n\n        let tweenX: Array<number> = ArrayUtils.numberArray(\n            node.getAttribute(ParticleElementAttributes.POSITION_TWEEN_X),\n        );\n        let tweenY: Array<number> = ArrayUtils.numberArray(\n            node.getAttribute(ParticleElementAttributes.POSITION_TWEEN_Y),\n        );\n\n        if (tweenX == null || tweenY == null) {\n            if (DEBUG) {\n                this.log(\"WARNING wrong parameters for PositionTween\");\n            }\n\n            return;\n        }\n\n        const tweenDuration: number = node.hasAttribute(ParticleElementAttributes.POSITION_TWEEN_DURATION)\n            ? parseInt(node.getAttribute(ParticleElementAttributes.POSITION_TWEEN_DURATION))\n            : 120;\n        const tweenEase: string = node.hasAttribute(ParticleElementAttributes.POSITION_TWEEN_EASE)\n            ? node.getAttribute(ParticleElementAttributes.POSITION_TWEEN_EASE)\n            : null;\n        const position: string = node.hasAttribute(ParticleElementAttributes.POSITION_TWEEN_POSITION)\n            ? node.getAttribute(ParticleElementAttributes.POSITION_TWEEN_POSITION)\n            : null;\n\n        if (position == ParticleElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\n            tweenX = tweenX.map((value) => {\n                return value + this.position.x;\n            });\n\n            tweenY = tweenY.map((value) => {\n                return value + this.position.y;\n            });\n        }\n\n        Tweens.positionTween(this, { tweenX, tweenY, tweenEase, tweenDuration });\n    }\n\n    /**\n     * Get scale-tweening-specific attributes from xml and fire the tween\n     * @method _scaleTweenOnCreate\n     * @param node is Element from xml\n     * @return void\n     */\n    private _scaleTweenOnCreate(node: Element): void {\n        if (!node.hasAttribute(ParticleElementAttributes.SCALE_TWEEN)) {\n            return;\n        }\n\n        const tweenValues: Array<PIXI.Point> = BaseElementParticle._getPointsFromPointsAttribute(\n            node.getAttribute(ParticleElementAttributes.SCALE_TWEEN),\n        );\n        const tweenDuration: number = node.hasAttribute(ParticleElementAttributes.SCALE_TWEEN_DURATION)\n            ? parseInt(node.getAttribute(ParticleElementAttributes.SCALE_TWEEN_DURATION))\n            : 120;\n        const tweenEase: string = node.hasAttribute(ParticleElementAttributes.SCALE_TWEEN_EASE)\n            ? node.getAttribute(ParticleElementAttributes.SCALE_TWEEN_EASE)\n            : null;\n\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration });\n    }\n\n    /**\n     * Get rotation-tweening-specific attributes from xml and fire the tween\n     * @method _scaleTweenOnCreate\n     * @param node is Element from xml\n     * @return void\n     */\n    private _rotationTweenOnCreate(node: Element): void {\n        if (!node.hasAttribute(ParticleElementAttributes.ROTATION_TWEEN)) {\n            return;\n        }\n\n        const degrees: Array<number> = ArrayUtils.numberArray(\n            node.getAttribute(ParticleElementAttributes.ROTATION_TWEEN),\n        );\n\n        if (degrees == null) {\n            if (DEBUG) {\n                this.log(\"WARNING wrong parameters for RotationTween\");\n            }\n\n            return;\n        }\n\n        const tweenDuration: number = node.hasAttribute(ParticleElementAttributes.ROTATION_TWEEN_DURATION)\n            ? parseInt(node.getAttribute(ParticleElementAttributes.ROTATION_TWEEN_DURATION))\n            : 120;\n        const tweenEase: string = node.hasAttribute(ParticleElementAttributes.ROTATION_TWEEN_EASE)\n            ? node.getAttribute(ParticleElementAttributes.ROTATION_TWEEN_EASE)\n            : null;\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(ParticleElementAttributes.ROTATION_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(ParticleElementAttributes.ROTATION_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay });\n    }\n\n    /**\n     * Get alpha-tweening-specific attributes from xml and fire the tween\n     * @method _scaleTweenOnCreate\n     * @param node is Element from xml\n     * @return void\n     */\n    private _alphaTweenOnCreate(node: Element): void {\n        if (!node.hasAttribute(ParticleElementAttributes.ALPHA_TWEEN)) {\n            return;\n        }\n\n        const alphas: Array<number> = ArrayUtils.numberArray(node.getAttribute(ParticleElementAttributes.ALPHA_TWEEN));\n\n        if (alphas == null) {\n            if (DEBUG) {\n                this.log(\"WARNING wrong parameters for RotationTween\");\n            }\n            return;\n        }\n\n        const tweenDuration: number = node.hasAttribute(ParticleElementAttributes.ALPHA_TWEEN_DURATION)\n            ? parseInt(node.getAttribute(ParticleElementAttributes.ALPHA_TWEEN_DURATION))\n            : 120;\n        let tweenDelay: number = 0;\n        if (node.hasAttribute(ParticleElementAttributes.ALPHA_TWEEN_DELAY)) {\n            let tweenDelayArray: Array<number> = node\n                .getAttribute(ParticleElementAttributes.ALPHA_TWEEN_DELAY)\n                .split(\";\")\n                .map((value) => parseInt(value));\n            tweenDelay =\n                tweenDelayArray.length == 2\n                    ? Math.round(tweenDelayArray[0] + Math.random() * (tweenDelayArray[1] - tweenDelayArray[0]))\n                    : tweenDelayArray[0];\n        }\n        const tweenEase: string = node.hasAttribute(ParticleElementAttributes.ALPHA_TWEEN_EASE)\n            ? node.getAttribute(ParticleElementAttributes.ALPHA_TWEEN_EASE)\n            : null;\n\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay });\n    }\n\n    /**\n     * Converts string from \"points attribute\" into array of points. E.g. \"(1,6);(5,2);2;(2,4)\". Point can be specified as single value for both axex.\n     * @method _getPointsFromPointsAttribute\n     * @return Array<PIXI.Points>\n     */\n    private static _getPointsFromPointsAttribute(pointsString: string): any {\n        return pointsString\n            .replace(/\\s/g, \"\")\n            .split(\";\")\n            .map((valuesPair: string) => {\n                return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\n            })\n            .map((valuesPair: Array<string>) => {\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\n            });\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        this._create(node);\n    }\n\n    getDebugInfo(): string {\n        if (DEBUG) {\n            var debugInfoFn = (this as any).debugInfo;\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\n        }\n        return \"\";\n    }\n\n    /**\n     * @property cloned - indicates if element was cloned or not.\n     * @returns {boolean}\n     */\n    public get cloned(): boolean {\n        return this._cloned;\n    }\n\n    public get destroyed(): boolean {\n        return this.__destroyed;\n    }\n\n    /**\n     * @property uid - unique identifier of element.\n     * @returns {string}\n     */\n    public get uid(): string {\n        return this._uid;\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public get componentName(): string {\n        return (this as any).__componentName__;\n    }\n\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\n        this.assertDestroyed(\"destroy\");\n\n        if (Utils.isNullOrUndefined(options)) {\n            options = BaseElementParticle._destroyOptions;\n        }\n\n        this.internalDestroy(options);\n\n        if (!Utils.isNullOrUndefined(this.children)) {\n            super.destroy(options);\n        }\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.destroy(this);\n            }\n        }\n\n        this.__destroyed = true;\n    }\n\n    /**\n     * @method internalDestroy - cleanup resources\n     * @param options\n     */\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        Tweens.removeTweens(this);\n    }\n\n    public clone(): any {\n        throw new Error(\"Not implemented\");\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    protected removeAndDestroyChildren(): void {\n        this._removeAndDestroyChildren();\n    }\n\n    /**\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\n     */\n    _removeAndDestroyChildren(): void {\n        this.assertDestroyed(\"_removeAndDestroyChildren\");\n\n        var destroyOptions: PIXI.DestroyOptions = {\n            children: true,\n        };\n\n        if (this.children != null && this.children.length > 0) {\n            for (var i = this.children.length - 1; i >= 0; i--) {\n                if (this.children[i] != null) {\n                    (this.children[i] as any).destroy(destroyOptions);\n                }\n            }\n        }\n\n        this.removeChildren();\n    }\n\n    protected assertDestroyed(method: string): void {\n        if (DEBUG) {\n            if (this.__destroyed) {\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\n            }\n        }\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    protected markAsCloned(): void {\n        this._markAsCloned();\n    }\n\n    /**\n     * Marks element as cloned\n     */\n    _markAsCloned(): void {\n        this.assertDestroyed(\"markAsCloned()\");\n        this._cloned = true;\n\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\n        if (DEBUG) {\n            if (PERFDEBUG_ENABLED) {\n                PerfDebug.clone(this);\n\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\n            }\n        }\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    /**\n     * Log error into console\n     * @param message\n     */\n    protected logError(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.errorGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/BaseElementParticle.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { ActionSet } from \"../../ActionSet\";\nimport { LinkedElementAttributes } from \"../../ComponentAttributes\";\n\n/**\n * LinkedElement class is class which creates holder for other display objects.\n * Also handle all basic properties of display object as X, Y, Rotation, Tween, Scale, Visible, Mask (?)\n *\n * @class LinkedElement\n * @author Marek Turkovic\n */\n@engineComponent(ComponentTypes.LinkedElement)\nexport class LinkedElement {\n    constructor() {}\n\n    /**\n     *\n     * @param node\n     * @param nodeAttributes\n     */\n    public create(node: Element, nodeAttributes?: Element): void {\n        if (node.hasAttribute(LinkedElementAttributes.LINKED_TO_ID)) {\n            if (\n                ActionSet.ElementsToLink != null &&\n                ActionSet.ElementsToLink[node.getAttribute(LinkedElementAttributes.LINKED_TO_ID)] != null\n            ) {\n                let mainElement = ActionSet.ElementsToLink[node.getAttribute(LinkedElementAttributes.LINKED_TO_ID)];\n\n                if (nodeAttributes != null) {\n                    mainElement.updateByNode(nodeAttributes);\n                } else {\n                    mainElement.updateByNode(node);\n                }\n            }\n        }\n    }\n\n    /**\n     * @protected componentName - component type name.\n     * @returns {string}\n     */\n    public get componentName(): string {\n        return (this as any).__componentName__;\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    /**\n     * Log error into console\n     * @param s\n     */\n    protected logError(s: string): void {\n        if (DEBUG) {\n            let compName = (this as any).__componentName__;\n            Logger.errorGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/LinkedElement.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { ContainerElement } from \"./ContainerElement\";\nimport { ParticleElement, ParticleElementAttributes } from \"./ParticleElement\";\n\n@engineComponent(ComponentTypes.DisplayObject)\n// TODO add comments\nexport class ParticleGroupElement extends ContainerElement {\n    static DynamicKey: string = \"\";\n\n    private _emitOnce: boolean;\n    private _startType: string;\n\n    constructor() {\n        super();\n\n        this._emitOnce = false;\n        this._startType = \"\";\n    }\n\n    createByNode(node: Element): void {\n        super.createByNode(node);\n\n        this.visible = false;\n    }\n\n    updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(ParticleElementAttributes.EMIT_ONCE)) {\n            this._emitOnce = StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.EMIT_ONCE));\n        }\n\n        if (node.hasAttribute(ParticleElementAttributes.START_TYPE)) {\n            this._startType = node.getAttribute(ParticleElementAttributes.START_TYPE);\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.START) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.START))\n        ) {\n            if (StringUtils.isNullOrEmpty(ParticleGroupElement.DynamicKey)) {\n                this.start(this._emitOnce);\n            } else {\n                this.startSelected(this._emitOnce, ParticleGroupElement.DynamicKey);\n            }\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.STOPPING) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOPPING))\n        ) {\n            this.stopping();\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.STOP) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOP))\n        ) {\n            this.stop();\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.RESET) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.RESET))\n        ) {\n            if (StringUtils.isNullOrEmpty(ParticleGroupElement.DynamicKey)) {\n                this.reset();\n            } else {\n                this.resetSelected(ParticleGroupElement.DynamicKey);\n            }\n        }\n\n        if (\n            node.hasAttribute(ParticleElementAttributes.CLEAR) &&\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.CLEAR))\n        ) {\n            this.clear();\n        }\n    }\n\n    start(emitOnce: boolean = false): void {\n        this._emitOnce = emitOnce;\n        this.visible = true;\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs[key] instanceof ParticleElement) {\n                    this.childs[key].start(this._emitOnce, this._startType);\n                }\n            }\n        }\n    }\n\n    startSelected(emitOnce: boolean = false, particleKey: string): void {\n        if (!StringUtils.isNullOrEmpty(particleKey)) {\n            this._emitOnce = emitOnce;\n            this.visible = true;\n\n            if (this.childs != null) {\n                for (let key in this.childs) {\n                    if (key.indexOf(particleKey) > -1) {\n                        if (this.childs[key] instanceof ParticleElement) {\n                            this.childs[key].start(this._emitOnce, this._startType);\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    stopping(): void {\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs[key] instanceof ParticleElement) {\n                    this.childs[key].stopping();\n                }\n            }\n        }\n    }\n\n    stop(): void {\n        this.visible = false;\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs[key] instanceof ParticleElement) {\n                    this.childs[key].stop();\n                }\n            }\n        }\n    }\n\n    reset(): void {\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs[key] instanceof ParticleElement) {\n                    this.childs[key].reset();\n                }\n            }\n        }\n    }\n\n    resetSelected(particleKey: string): void {\n        if (!StringUtils.isNullOrEmpty(particleKey)) {\n            if (this.childs != null) {\n                for (let key in this.childs) {\n                    if (key.indexOf(particleKey) > -1) {\n                        if (this.childs[key] instanceof ParticleElement) {\n                            this.childs[key].reset();\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    clear(): void {\n        this.visible = false;\n        if (this.childs != null) {\n            for (let key in this.childs) {\n                if (this.childs[key] instanceof ParticleElement) {\n                    this.childs[key].clear();\n                }\n            }\n        }\n    }\n\n    /*clone(): ParticleGroupElement\n    {\n        let element: ParticleGroupElement = <ParticleGroupElement>super.clone();\n        element._emitOnce = this._emitOnce;\n        element._startType = this._startType;\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }*/\n\n    clone(): ParticleGroupElement {\n        let element: ParticleGroupElement = new ParticleGroupElement();\n\n        element.style = this.style;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n        element.visible = this.visible;\n        element.name = this.name;\n        element._emitOnce = this._emitOnce;\n        element._startType = this._startType;\n\n        element.childs = {};\n        element.removeChildren();\n        for (let key in this.childs) {\n            element.childs[key] = this.childs[key].clone();\n            element.addChild(element.childs[key]);\n        }\n\n        if (this.maskSprite != null) {\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\n            elementMask.position.x = this.maskSprite.position.x;\n            elementMask.position.y = this.maskSprite.position.y;\n\n            element.maskSprite = elementMask;\n            element.addChild(elementMask);\n            element.mask = elementMask;\n        }\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ParticleGroupElement.ts\n **/","import { ArrayUtils, StringUtils, Logger, engineComponent, Utils } from \"neo-common\";\nimport { ParticleStyle } from \"../Styles/ParticleStyle\";\nimport { StyleManager } from \"../../Managers/StyleManager\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { AnimationFrameBaseElement } from \"../../../AnimationFrame/AnimationFrame\";\nimport { StageController } from \"../../StageController\";\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\nimport { BaseElement } from \"./BaseElement\";\n\nvar protonProto: any = window[\"Proton\"];\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ProtonElement extends AnimationFrameBaseElement {\n    static Pool: Object = {};\n\n    private _animationName: string = \"\";\n\n    // style is mandatory\n    private _style: ParticleStyle;\n    private _styleName: string;\n    private _proton: Proton.Proton;\n    private _renderer: Proton.Renderer;\n    private _emitters: Array<Proton.Emitter>;\n\n    private _tint: number;\n    private _blendMode: number;\n    private _emitting: boolean;\n    private _stopping: boolean;\n    private _textures: Array<PIXI.Texture>;\n    private _animationSpeed: number;\n\n    private delayStartTimer: FrameTimerEventEmitter;\n    private delayStoppingTimer: FrameTimerEventEmitter;\n    private delayStopTimer: FrameTimerEventEmitter;\n\n    constructor() {\n        super();\n\n        this._emitting = false;\n        this._stopping = true;\n        //this._stopped = true;\n        this._animationSpeed = 1;\n        this._emitters = [];\n        this._proton = new protonProto() as Proton.Proton;\n\n        this.onProtonUpdate = this.onProtonUpdate.bind(this);\n        this.onParticleCreated = this.onParticleCreated.bind(this);\n        this.onParticleUpdate = this.onParticleUpdate.bind(this);\n        this.onParticleDead = this.onParticleDead.bind(this);\n        this.transformSprite = this.transformSprite.bind(this);\n        this.alphaDead = this.alphaDead.bind(this);\n        this.scaleDead = this.scaleDead.bind(this);\n\n        this.delayStartTimer = CreateFrameTimer(\"TimelineElement\");\n        this.delayStoppingTimer = CreateFrameTimer(\"TimelineElement\");\n        this.delayStopTimer = CreateFrameTimer(\"TimelineElement\");\n    }\n\n    protected frame_onFrame(): void {\n        this._proton.update();\n    }\n\n    protected get frame_name(): string {\n        return this._styleName;\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        this.super2._create(node);\n        /*\n         * Tint of animation. Hex color which colorize movie clip.\n         * @property Tint\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Tint\")) {\n            this._tint = parseInt(node.getAttribute(\"Tint\"), 16);\n        }\n\n        /*\n         * Blend mode for animation.\n         * Bleding modes:\n         *   0 = NORMAL;\n         *   1 = ADD;\n         *   2 = MULTIPLY;\n         *   3 = SCREEN;\n         *   4 = OVERLAY;\n         *   5 = DARKEN;\n         *   6 = LIGHTEN;\n         *   7 = COLOR_DODGE;\n         *   8 = COLOR_BURN;\n         *   9 = HARD_LIGHT;\n         *   10 = SOFT_LIGHT;\n         *   11 = DIFFERENCE;\n         *   12 = EXCLUSION;\n         *   13 = HUE;\n         *   14 = SATURATION;\n         *   15 = COLOR;\n         *   16 = LUMINOSITY;\n         * @property BlendMode\n         * @type number\n         * @default null\n         */\n        if (node.hasAttribute(\"BlendMode\")) {\n            this._blendMode = parseInt(node.getAttribute(\"BlendMode\"));\n        }\n\n        /*\n         * Style define animation. You can use one style on more than one place.\n         * Style for ParticleElement has to be instance of ParticleStyle.\n         * @property Style\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Style\") || node.hasAttribute(\"Style2\")) {\n            if (node.hasAttribute(\"Style\")) {\n                this._style = <ParticleStyle>StyleManager.Styles[node.getAttribute(\"Style\")];\n                this._styleName = this._style.node.nodeName;\n            } else {\n                this._style = <ParticleStyle>StyleManager.Styles[node.getAttribute(\"Style2\")];\n                this._styleName = this._style.node.nodeName;\n            }\n\n            if (this._style != null) {\n                var next: Element = this._style.node.firstElementChild;\n                while (next != null) {\n                    if (next.nodeName === \"Emitter\") {\n                        var emitter: Proton.Emitter = new Proton.Emitter();\n                        this._emitters.push(emitter);\n\n                        var emitterNext: Element = next.firstElementChild;\n                        while (emitterNext != null) {\n                            switch (emitterNext.nodeName) {\n                                case \"Rate\":\n                                    if (emitterNext.hasAttribute(\"Rate\")) {\n                                        var rate: Array<number> = ArrayUtils.numberArray(\n                                            emitterNext.getAttribute(\"Rate\"),\n                                        );\n                                        if (rate.length === 2) {\n                                            emitter.rate = new Proton.Rate(rate[0], rate[1]);\n                                        } else {\n                                            if (DEBUG) {\n                                                this.log(\n                                                    \"WARNING Rate has different number of parameters. It has to have two parameters.\",\n                                                );\n                                            }\n                                        }\n                                    } else if (\n                                        emitterNext.hasAttribute(\"RateStart\") &&\n                                        emitterNext.hasAttribute(\"RateEnd\")\n                                    ) {\n                                        var rateStart: Array<number> = ArrayUtils.numberArray(\n                                            emitterNext.getAttribute(\"RateStart\"),\n                                        );\n                                        var rateEnd: Array<number> = ArrayUtils.numberArray(\n                                            emitterNext.getAttribute(\"RateEnd\"),\n                                        );\n                                        emitter.rate = new Proton.Rate(\n                                            new Proton.Span(rateStart[0], rateStart[1]),\n                                            new Proton.Span(rateEnd[0], rateEnd[1]),\n                                        );\n                                    } else {\n                                        if (DEBUG) {\n                                            this.log(\"WARNING Rate has wrong attributes\");\n                                        }\n                                    }\n                                    break;\n                                case \"Initializers\":\n                                    this.createInitializers(emitterNext, this._emitters[this._emitters.length - 1]);\n                                    break;\n                                case \"Behaviours\":\n                                    this.createBehaviours(emitterNext, this._emitters[this._emitters.length - 1]);\n                                    break;\n                                default:\n                                    if (DEBUG) {\n                                        this.log(\"WARNING unknown type for emitter\");\n                                    }\n                            }\n                            emitterNext = emitterNext.nextElementSibling;\n                        }\n\n                        if (next.hasAttribute(\"Emit\")) {\n                            emitter.emit(next.getAttribute(\"Emit\"));\n                        } else {\n                            emitter.emit();\n                        }\n\n                        if (next.hasAttribute(\"X\")) {\n                            emitter[\"p\"].x = parseInt(next.getAttribute(\"X\"));\n                        }\n\n                        if (next.hasAttribute(\"Y\")) {\n                            emitter[\"p\"].y = parseInt(next.getAttribute(\"Y\"));\n                        }\n                    }\n                    next = next.nextElementSibling;\n                }\n\n                if (this._emitters != null) {\n                    for (var i = 0; i < this._emitters.length; i++) {\n                        this._proton.addEmitter(this._emitters[i]);\n                    }\n\n                    this._renderer = new Proton.Renderer(\"other\", this._proton);\n                    this._renderer.onProtonUpdate = this.onProtonUpdate;\n                    this._renderer.onParticleCreated = this.onParticleCreated;\n                    this._renderer.onParticleUpdate = this.onParticleUpdate;\n                    this._renderer.onParticleDead = this.onParticleDead;\n                    this._emitting = false;\n                    this.frame_stop();\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR no emitters\");\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no style with name: \" + node.getAttribute(\"Style\"));\n                }\n            }\n        }\n    }\n\n    public runAction(\n        startCanRange?: string,\n        durationCanRange?: string,\n        emit?: string,\n        stoppingCanRange?: string,\n        stopCanRange?: string,\n    ): void {\n        if (startCanRange) {\n            this.startByParam(startCanRange, durationCanRange, emit);\n        }\n\n        if (stoppingCanRange) {\n            this.stoppingByParam(stoppingCanRange);\n        }\n\n        if (stopCanRange) {\n            this.stopByParam(stopCanRange);\n        }\n    }\n\n    private startByParam(startCanRange: string, durationCanRange: string, emit: string): void {\n        if (startCanRange) {\n            let valueArray: Array<number> = startCanRange.split(\";\").map((value) => parseInt(value));\n            let value =\n                valueArray.length > 1\n                    ? valueArray[0] + (valueArray[0] + Math.round(Math.random() * (valueArray[1] - valueArray[0])))\n                    : valueArray[0];\n\n            if (!isNaN(value)) {\n                this.delayStartTimer.stop();\n                this.delayStartTimer.on(FrameTimerEvents.Complete, this.start.bind(this, emit));\n                this.delayStartTimer.start(value);\n                if (durationCanRange) {\n                    let durValueArray: Array<number> = durationCanRange.split(\";\").map((value) => parseInt(value));\n                    let durValue =\n                        durValueArray.length > 1\n                            ? durValueArray[0] +\n                              (durValueArray[0] + Math.round(Math.random() * (durValueArray[1] - durValueArray[0])))\n                            : durValueArray[0];\n                    if (!isNaN(durValue)) {\n                        this.delayStoppingTimer.stop();\n                        this.delayStoppingTimer.on(FrameTimerEvents.Complete, this.stopping.bind(this));\n                        this.delayStoppingTimer.start(value + durValue);\n                    }\n                }\n            } else if (StringUtils.parseBoolean(startCanRange)) {\n                this.start(emit);\n                if (durationCanRange) {\n                    let durValueArray: Array<number> = durationCanRange.split(\";\").map((value) => parseInt(value));\n                    let durValue =\n                        durValueArray.length > 1\n                            ? durValueArray[0] +\n                              (durValueArray[0] + Math.round(Math.random() * (durValueArray[1] - durValueArray[0])))\n                            : durValueArray[0];\n                    if (!isNaN(durValue)) {\n                        let emitValue = parseInt(emit) || 0;\n                        this.delayStoppingTimer.stop();\n                        this.delayStoppingTimer.on(FrameTimerEvents.Complete, this.stopping.bind(this));\n                        this.delayStoppingTimer.start(emitValue + durValue);\n                    }\n                }\n            }\n        }\n    }\n\n    private stoppingByParam(stoppingCanRange: string): void {\n        if (stoppingCanRange) {\n            let valueArray: Array<number> = stoppingCanRange.split(\";\").map((value) => parseInt(value));\n            let value =\n                valueArray.length > 1\n                    ? valueArray[0] + (valueArray[0] + Math.round(Math.random() * (valueArray[1] - valueArray[0])))\n                    : valueArray[0];\n            if (!isNaN(value)) {\n                this.delayStoppingTimer.stop();\n                this.delayStoppingTimer.on(FrameTimerEvents.Complete, this.stopping.bind(this));\n                this.delayStoppingTimer.start(value);\n            } else if (StringUtils.parseBoolean(stoppingCanRange)) {\n                this.stopping();\n            }\n        }\n    }\n\n    private stopByParam(stopCanRange: string): void {\n        if (stopCanRange) {\n            let valueArray: Array<number> = stopCanRange.split(\";\").map((value) => parseInt(value));\n            let value =\n                valueArray.length > 1\n                    ? valueArray[0] + (valueArray[0] + Math.round(Math.random() * (valueArray[1] - valueArray[0])))\n                    : valueArray[0];\n            if (!isNaN(value)) {\n                this.delayStopTimer.stop();\n                this.delayStopTimer.on(FrameTimerEvents.Complete, this.stop.bind(this));\n                this.delayStopTimer.start(value);\n            } else if (StringUtils.parseBoolean(stopCanRange)) {\n                this.stop();\n            }\n        }\n    }\n\n    public updateByNodeInherited(node: Element): void {\n        if (node.hasAttribute(ProtonElementAttributes.START)) {\n            this.startByParam(\n                node.getAttribute(ProtonElementAttributes.START),\n                node.getAttribute(ProtonElementAttributes.DURATION),\n                node.getAttribute(ProtonElementAttributes.EMIT),\n            );\n        }\n\n        if (node.hasAttribute(ProtonElementAttributes.STOPPING)) {\n            this.stoppingByParam(node.getAttribute(ProtonElementAttributes.STOPPING));\n        }\n\n        if (node.hasAttribute(ProtonElementAttributes.STOP)) {\n            this.stopByParam(node.getAttribute(ProtonElementAttributes.STOP));\n        }\n    }\n\n    start(emit: string = \"\"): void {\n        if (this._stopping) {\n            this._stopping = false;\n        }\n        if (this.isFrameStopped) {\n            if (this._renderer != null) {\n                this._renderer.stop();\n            }\n\n            this.removeChilds();\n\n            if (this._emitters != null && this._emitters.length > 0) {\n                if (emit != \"\") {\n                    for (var i: number = 0; i < this._emitters.length; i++) {\n                        this._emitters[i].emit(emit);\n                    }\n                }\n            }\n            if (this._renderer != null) {\n                this._renderer.start();\n                this._stopping = false;\n                this._emitting = true;\n                this.frame_start();\n            }\n        }\n    }\n\n    private stopping(): void {\n        this._emitting = false;\n        this._stopping = true;\n    }\n\n    private onProtonUpdate(): void {\n        var emmiter0 = this._emitters[0];\n\n        if (emmiter0[\"emitTotalTimes\"] === \"none\" && emmiter0[\"particles\"].length === 0) {\n            this._emitting = false;\n            this.frame_stop();\n            this._renderer.stop();\n\n            this.removeChilds();\n        }\n\n        if (this._stopping && !this._emitting && this.super2.children.length <= 0) {\n            this.frame_stop();\n            this._renderer.stop();\n        }\n    }\n\n    private onParticleCreated(particle: any): void {\n        if (this._stopping === false) {\n            particle.sprite = null;\n            if (particle.sprite != null) {\n                if (this._textures != null && this._textures.length > 0) {\n                    ProtonElement.Pool[this._animationName].push(particle.sprite);\n                    this.super2.removeChild(particle.sprite);\n                } else {\n                    ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\n                    this.super2.removeChild(particle.sprite);\n                }\n            }\n            let particleSprite: any;\n            if (this._textures != null && this._textures.length > 0) {\n                if (ProtonElement.Pool[this._animationName] == null) {\n                    ProtonElement.Pool[this._animationName] = [];\n                }\n\n                if (ProtonElement.Pool[this._animationName].length === 0) {\n                    particleSprite = new PIXI.extras.AnimatedSprite(this._textures);\n                    particleSprite.name = this._animationName;\n                } else {\n                    particleSprite = ProtonElement.Pool[this._animationName].shift();\n                }\n\n                particleSprite.loop = true;\n                particleSprite.animationSpeed = this._animationSpeed;\n                particleSprite.play();\n            } else {\n                if (ProtonElement.Pool[particle.target.textureCacheIds[0]] == null) {\n                    ProtonElement.Pool[particle.target.textureCacheIds[0]] = [];\n                }\n\n                if (ProtonElement.Pool[particle.target.textureCacheIds[0]].length === 0) {\n                    particleSprite = new PIXI.Sprite(particle.target);\n                    particleSprite.name = particle.target.textureCacheIds[0];\n                } else {\n                    particleSprite = ProtonElement.Pool[particle.target.textureCacheIds[0]].shift();\n                }\n            }\n            if (this._tint != null) {\n                particleSprite.tint = this._tint;\n            }\n\n            if (this._blendMode != null) {\n                particleSprite.blendMode = CustomUtils.getBlendMode(this._blendMode);\n            }\n\n            particleSprite.visible = true;\n            particle.sprite = particleSprite;\n            this.super2.addChild(particleSprite);\n        }\n    }\n\n    private onParticleUpdate(particle: any): void {\n        if (particle != null && particle.sprite != null) {\n            this.transformSprite(particle.sprite, particle);\n        }\n    }\n\n    private onParticleDead(particle: any) {\n        if (particle.sprite != null) {\n            particle.sprite.visible = false;\n            if (particle.sprite instanceof PIXI.extras.AnimatedSprite) {\n                particle.sprite.stop();\n            }\n            this.super2.removeChild(particle.sprite);\n        }\n\n        particle.sprite = null;\n        particle.dead = true;\n        particle = null;\n    }\n\n    /**\n     * Transform sprite in particle with proton.\n     * @method transformSprite\n     * @param particleSprite any\n     * @param particle any\n     * @return void\n     */\n    private transformSprite(particleSprite: any, particle: any) {\n        if (\n            particleSprite.transform != null &&\n            !Utils.isNullOrUndefined(particleSprite) &&\n            !Utils.isNullOrUndefined(particle)\n        ) {\n            particleSprite.visible = true;\n            particleSprite.position.x = particle.p.x;\n            particleSprite.position.y = particle.p.y;\n            particleSprite.scale.x = particle.scale;\n            particleSprite.scale.y = particle.scale;\n            particleSprite.anchor.x = 0.5;\n            particleSprite.anchor.y = 0.5;\n            particleSprite.alpha = particle.alpha;\n            particleSprite.rotation = (particle.rotation * Math.PI) / 180;\n        } else {\n            particle.dead = true;\n        }\n    }\n\n    /**\n     * Stop emitting particles.\n     * @method stop\n     * @return void\n     */\n    stop(): void {\n        this._emitting = false;\n        this._stopping = true;\n        this.frame_stop();\n\n        for (var i: number = 0; i < this._emitters.length; i++) {\n            this._emitters[i].resetParticles();\n        }\n\n        if (this._renderer != null) {\n            this._renderer.stop();\n        }\n\n        this.removeChilds();\n    }\n\n    removeChilds(): void {\n        if (this.super2.children != null) {\n            let i: number = 0;\n            while (this.super2.children.length !== 0) {\n                if (this.super2.children[0] != null) {\n                    if (this._textures != null && this._textures.length > 0) {\n                        (this.super2.children[0] as PIXI.extras.AnimatedSprite).stop();\n                        ProtonElement.Pool[this._animationName].push(this.super2.children[0]);\n                    } else {\n                        ProtonElement.Pool[this.super2.children[0].name].push(this.super2.children[0]);\n                    }\n                    this.super2.removeChild(this.super2.children[0]);\n                }\n            }\n        }\n    }\n\n    internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        this._emitting = false;\n        this._stopping = true;\n        this.frame_stop();\n        this._textures = null;\n\n        if (this._emitters != null && this._emitters.length > 0) {\n            for (var i = 0; i < this._emitters.length; i++) {\n                if (this._emitters[i] != null) {\n                    this._proton.removeEmitter(this._emitters[i]);\n                    this._emitters[i].destroy();\n                    this._emitters[i] = null;\n                }\n            }\n        }\n\n        // removeEmitter\n        // particleSleep\n        // destroy\n\n        if (this._renderer != null) {\n            this._renderer.stop();\n            this._renderer = null;\n        }\n\n        this._proton.destroy();\n        this._proton = null;\n\n        this.removeChilds();\n    }\n\n    /**\n     * Create initializers from xml for emitter instance.\n     * Initializers create start values and behaviour for particle instances.\n     * @method createInitializers\n     * @param node is Element from xml\n     * @param emitter Proton.Emitter\n     * @return void\n     */\n    private createInitializers(node: Element, emitter: Proton.Emitter): void {\n        var next: Element = node.firstElementChild;\n        while (next != null) {\n            switch (next.nodeName) {\n                case \"ImageTarget\":\n                    var imageTarget: Proton.ImageTarget = this.addImageTarget(next);\n                    if (imageTarget != null) {\n                        emitter.addInitialize(imageTarget);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING ImageTarget is null\");\n                        }\n                    }\n                    break;\n                case \"AnimationTarget\":\n                    this.addAnimationTarget(next);\n                    break;\n                case \"Radius\":\n                    var radius: Proton.Radius = this.addRadius(next);\n                    if (radius != null) {\n                        emitter.addInitialize(radius);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Radius is null\");\n                        }\n                    }\n                    break;\n                case \"Mass\":\n                    var mass: Proton.Mass = this.addMass(next);\n                    if (mass != null) {\n                        emitter.addInitialize(mass);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Mass is null\");\n                        }\n                    }\n                    break;\n                case \"Life\":\n                    var life: Proton.Life = this.addLife(next);\n                    if (life != null) {\n                        emitter.addInitialize(life);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Life is null\");\n                        }\n                    }\n                    break;\n                case \"Position\":\n                    var position: Proton.Position = this.addPosition(next);\n                    if (position != null) {\n                        emitter.addInitialize(position);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Position is null\");\n                        }\n                    }\n                    break;\n                case \"Velocity\":\n                    var velocity: Proton.Velocity = this.addVelocity(next);\n                    if (velocity != null) {\n                        emitter.addInitialize(velocity);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Velocity is null\");\n                        }\n                    }\n                    break;\n                default:\n                    if (DEBUG) {\n                        this.log(\"WARNING unknown initializer\");\n                    }\n            }\n            next = next.nextElementSibling;\n        }\n    }\n\n    /**\n     * Add initializer ImageTarget.\n     * This initializer add images instead of shapes as particles.\n     * Example:\n     *   <ImageTarget Image=\"IMAGE_1;IMAGE_2;IMAGE_3;IMAGE_4;IMAGE_5;IMAGE_6\" />\n     * @method addImageTarget\n     * @param node is Element from xml\n     * @return void\n     */\n    private addImageTarget(node: Element): Proton.Radius {\n        if (node.hasAttribute(\"Image\")) {\n            var arr: Array<string> = node.getAttribute(\"Image\").split(\";\");\n            var arrTextures: Array<PIXI.Texture> = [];\n            for (var i: number = 0; i < arr.length; i++) {\n                var resourceId = arr[i];\n                var texture: PIXI.Texture = StageController.getTextureByResourceId(resourceId);\n                if (texture != null) {\n                    arrTextures.push(texture);\n                }\n            }\n            if (arrTextures != null && arrTextures.length > 0) {\n                return new Proton.ImageTarget(arrTextures);\n            } else {\n                return null;\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Image target has no attribute Image\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Add initializer animation as target for particle.\n     * Example:\n     *   <AnimationTarget Animation=\"[AnimationId]\" Speed=\"1\" Frames=\"numberOfFrames\" />\n     * @method addAnimationTarget\n     * @param node is Element from xml\n     * @return void\n     */\n    private addAnimationTarget(node: Element): void {\n        if (node.hasAttribute(\"Animation\") && node.hasAttribute(\"Frames\")) {\n            if (node.hasAttribute(\"Speed\")) {\n                this._animationSpeed = parseFloat(node.getAttribute(\"Speed\"));\n            }\n\n            this._animationName = node.getAttribute(\"Animation\");\n\n            this._textures = [];\n            for (var i = 0; i < parseInt(node.getAttribute(\"Frames\")) - 1; i++) {\n                var val = i < 10 ? \"0\" + i : i;\n                var texture: PIXI.Texture = PIXI.Texture.fromFrame(node.getAttribute(\"Animation\") + \"00\" + val);\n                this._textures.push(texture);\n            }\n        }\n    }\n\n    /**\n     * Add initializer Mass.\n     * Example:\n     *   <Mass Mass=\"1;5\" />\n     * @method addMass\n     * @param node is Element from xml\n     * @return Proton.Mass\n     */\n    private addMass(node: Element): Proton.Mass {\n        if (node.hasAttribute(\"Mass\")) {\n            var arr: Array<number> = ArrayUtils.numberArray(node.getAttribute(\"Mass\"));\n            if (arr.length === 3) {\n                return new Proton.Mass(arr[0], arr[1], arr[2]);\n            } else if (arr.length === 2) {\n                return new Proton.Mass(arr[0], arr[1]);\n            } else if (arr.length === 1) {\n                return new Proton.Mass(arr[0]);\n            } else {\n                if (DEBUG) {\n                    this.log(\"WARNING Mass attribute doesnt have parameters\");\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING no attribute Mass in Mass initializer\");\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Add initializer Radius.\n     * Example:\n     *   <Radius Radius=\"50;130\" />\n     * @method addRadius\n     * @param node is Element from xml\n     * @return Proton.Radius\n     */\n    private addRadius(node: Element): Proton.Radius {\n        if (node.hasAttribute(\"Radius\")) {\n            var arr: Array<number> = ArrayUtils.numberArray(node.getAttribute(\"Radius\"));\n            if (arr.length === 3) {\n                return new Proton.Radius(arr[0], arr[1], arr[2]);\n            } else if (arr.length === 2) {\n                return new Proton.Radius(arr[0], arr[1]);\n            } else if (arr.length === 1) {\n                return new Proton.Radius(arr[0]);\n            } else {\n                if (DEBUG) {\n                    this.log(\"WARNING Radius attribute doesnt have parameters\");\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING no attribute Radius in Radius initializer\");\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Add initializer Life.\n     * Example:\n     *   <Life Life=\"20\" />\n     * @method addLife\n     * @param node is Element from xml\n     * @return Proton.Life\n     */\n    private addLife(node: Element): Proton.Life {\n        if (node.hasAttribute(\"Life\")) {\n            var arr: Array<number> = ArrayUtils.numberArray(node.getAttribute(\"Life\"));\n            if (arr.length === 3) {\n                return new Proton.Life(arr[0], arr[1], arr[2]);\n            } else if (arr.length === 2) {\n                return new Proton.Life(arr[0], arr[1]);\n            } else if (arr.length === 1) {\n                return new Proton.Life(arr[0]);\n            } else {\n                if (DEBUG) {\n                    this.log(\"WARNING Life attribute doesnt have parameters\");\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING no attribute Life in Life initializer\");\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Add initializer Position. Position use zones. See method getZone().\n     * Example:\n     *   <Position>\n     *       <RectZone X=\"0\" Y=\"0\" Width=\"1000\" Height=\"1000\" />\n     *   </Position>\n     * @method addPosition\n     * @param node is Element from xml\n     * @return Proton.Position\n     */\n    private addPosition(node: Element): Proton.Position {\n        var zone: Element = node.firstElementChild;\n        if (zone != null) {\n            return new Proton.Position(this.getZone(zone));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Position has no zone\");\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Add initializer Velocity.\n     * Example:\n     *   <Velocity RPan=\"0.1;0.3\" ThaPan=\"0;360\" Type=\"polar\" />\n     * @method addVelocity\n     * @param node is Element from xml\n     * @return Proton.Velocity\n     */\n    private addVelocity(node: Element): Proton.Velocity {\n        var rpan: Array<number>;\n        var thapan: Array<number>;\n        var type: string;\n\n        if (node.getAttribute(\"RPan\")) {\n            rpan = ArrayUtils.numberArray(node.getAttribute(\"RPan\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING no attribute RPan in Velocity\");\n            }\n        }\n\n        if (node.getAttribute(\"ThaPan\")) {\n            thapan = ArrayUtils.numberArray(node.getAttribute(\"ThaPan\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING no attribute ThaPan in Velocity\");\n            }\n        }\n\n        if (node.getAttribute(\"Type\")) {\n            type = node.getAttribute(\"Type\");\n        }\n\n        if (rpan != null && thapan != null) {\n            var rpanSpan: any;\n            if (rpan.length === 2) {\n                rpanSpan = new Proton.Span(rpan[0], rpan[1]);\n            } else {\n                rpanSpan = rpan[0];\n            }\n\n            var thapanSpan: any;\n            if (thapan.length === 2) {\n                thapanSpan = new Proton.Span(thapan[0], thapan[1]);\n            } else {\n                thapanSpan = thapan[0];\n            }\n            if (type != null) {\n                return new Proton.Velocity(rpanSpan, thapanSpan, type);\n            } else {\n                return new Proton.Velocity(rpanSpan, thapanSpan);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING missing some attribute in Velocity\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Return zone from xml.\n     * @method getZone\n     * @param node is Element from xml\n     * @return any\n     */\n    private getZone(node: Element): any {\n        switch (node.nodeName) {\n            case \"RectZone\":\n                var rectZoneX: number;\n                var rectZoneY: number;\n                var rectZoneWidth: number;\n                var rectZoneHeight: number;\n\n                if (node.hasAttribute(\"X\")) {\n                    rectZoneX = parseInt(node.getAttribute(\"X\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute X in RectZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Y\")) {\n                    rectZoneY = parseInt(node.getAttribute(\"Y\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Y in RectZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Width\")) {\n                    rectZoneWidth = parseInt(node.getAttribute(\"Width\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Width in RectZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Height\")) {\n                    rectZoneHeight = parseInt(node.getAttribute(\"Height\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Height in RectZone\");\n                    }\n                }\n\n                if (rectZoneX != null && rectZoneY != null && rectZoneWidth != null && rectZoneHeight != null) {\n                    return new Proton.RectZone(rectZoneX, rectZoneY, rectZoneWidth, rectZoneHeight);\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING missing some attributes in RectZone\");\n                    }\n                }\n                break;\n            case \"LineZone\":\n                var lineZoneX: number;\n                var lineZoneY: number;\n                var lineZoneWidth: number;\n                var lineZoneHeight: number;\n                var lineZoneDirection: string;\n\n                if (node.hasAttribute(\"X\")) {\n                    lineZoneX = parseInt(node.getAttribute(\"X\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute X in LineZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Y\")) {\n                    lineZoneY = parseInt(node.getAttribute(\"Y\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Y in LineZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Width\")) {\n                    lineZoneWidth = parseInt(node.getAttribute(\"Width\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Width in LineZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Height\")) {\n                    lineZoneHeight = parseInt(node.getAttribute(\"Height\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Height in LineZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Direction\")) {\n                    lineZoneDirection = node.getAttribute(\"Direction\");\n                }\n\n                if (lineZoneX != null && lineZoneY != null && lineZoneWidth != null && lineZoneHeight != null) {\n                    if (lineZoneDirection != null) {\n                        return new Proton.LineZone(\n                            lineZoneX,\n                            lineZoneY,\n                            lineZoneWidth,\n                            lineZoneHeight,\n                            lineZoneDirection,\n                        );\n                    } else {\n                        return new Proton.LineZone(lineZoneX, lineZoneY, lineZoneWidth, lineZoneHeight);\n                    }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING missing some attributes in LineZone\");\n                    }\n                }\n\n                break;\n            case \"CircleZone\":\n                var circleZoneX: number;\n                var circleZoneY: number;\n                var circleZoneRadius: number;\n\n                if (node.hasAttribute(\"X\")) {\n                    circleZoneX = parseInt(node.getAttribute(\"X\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute X in CircleZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Y\")) {\n                    circleZoneY = parseInt(node.getAttribute(\"Y\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Y in CircleZone\");\n                    }\n                }\n\n                if (node.hasAttribute(\"Radius\")) {\n                    circleZoneRadius = parseInt(node.getAttribute(\"Radius\"));\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING no attribute Radius in CircleZone\");\n                    }\n                }\n\n                if (circleZoneX != null && circleZoneY != null && circleZoneRadius != null) {\n                    return new Proton.CircleZone(circleZoneX, circleZoneY, circleZoneRadius);\n                } else {\n                    if (DEBUG) {\n                        this.log(\"WARNING missing some attributes in CircleZone\");\n                    }\n                }\n                break;\n            default:\n                if (DEBUG) {\n                    this.log(\"WARNING unknown type zone: \" + node.nodeName);\n                }\n        }\n        return null;\n    }\n\n    /**\n     * Create behaviours from xml for emitter instance.\n     * This bevaiours will define behaviour of particle when particle is alive.\n     * @method createBehaviours\n     * @param node is Element from xml\n     * @param emitter Proton.Emitter\n     * @return void\n     */\n    private createBehaviours(node: Element, emitter: Proton.Emitter): void {\n        var next: Element = node.firstElementChild;\n        while (next != null) {\n            switch (next.nodeName) {\n                case \"AlphaDead\":\n                    if (next.hasAttribute(\"Age\")) {\n                        emitter.addBehaviour(this.alphaDead(parseFloat(next.getAttribute(\"Age\"))));\n                    } else {\n                        emitter.addBehaviour(this.alphaDead(1));\n                    }\n                    break;\n                case \"ScaleDead\":\n                    emitter.addBehaviour(this.scaleDead());\n                    break;\n                case \"Alpha\":\n                    var alpha: Proton.Alpha = this.addAlpha(next);\n                    if (alpha != null) {\n                        emitter.addBehaviour(alpha);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Alpha is null\");\n                        }\n                    }\n                    break;\n                case \"Scale\":\n                    var scale: Proton.Scale = this.addScale(next);\n                    if (scale != null) {\n                        emitter.addBehaviour(scale);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Scale is null\");\n                        }\n                    }\n                    break;\n                case \"Rotate\":\n                    var rotate: Proton.Rotate = this.addRotate(next);\n                    if (rotate != null) {\n                        emitter.addBehaviour(rotate);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Rotate is null\");\n                        }\n                    }\n                    break;\n                case \"Color\":\n                    var color: Proton.Color = this.addColor(next);\n                    if (color != null) {\n                        emitter.addBehaviour(color);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Color is null\");\n                        }\n                    }\n                    break;\n                case \"CrossZone\":\n                    var crossZone: Proton.CrossZone = this.addCrossZone(next);\n                    if (crossZone != null) {\n                        emitter.addBehaviour(crossZone);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING CrossZone is null\");\n                        }\n                    }\n                    break;\n                case \"RandomDrift\":\n                    var randomDrift: Proton.RandomDrift = this.addRandomDrift(next);\n                    if (randomDrift != null) {\n                        emitter.addBehaviour(randomDrift);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING RandomDrift is null\");\n                        }\n                    }\n                    break;\n                case \"Gravity\":\n                    var gravity: Proton.Gravity = this.addGravity(next);\n                    if (gravity != null) {\n                        emitter.addBehaviour(gravity);\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING Gravity is null\");\n                        }\n                    }\n                    break;\n                default:\n                    if (DEBUG) {\n                        this.log(\"WARNING unknown behaviour\");\n                    }\n            }\n            next = next.nextElementSibling;\n        }\n    }\n\n    /**\n     * AlphaDead is custom custom dead behaviour. After particle reach some age particle will fade out to alpha 0.\n     * Example:\n     *   <AlphaDead Age=\"10\" />\n     * @method alphaDead\n     * @param age number\n     * @return any\n     */\n    alphaDead(age: number): any {\n        var self: any = this;\n        return {\n            initialize: function (particle: any) {},\n            applyBehaviour: function (particle: any) {\n                if (particle.age >= age) {\n                    particle[\"transform\"][\"alphaA\"] = 1;\n                    particle[\"transform\"][\"alphaB\"] = 0;\n                }\n\n                if (particle.age >= particle.life) {\n                    if (particle.sprite != null) {\n                        if (this._textures != null && this._textures.length > 0) {\n                            ProtonElement.Pool[this._animationName].push(particle.sprite);\n                        } else {\n                            ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\n                        }\n                        self.super2.removeChild(particle.sprite);\n                    }\n                    particle.sprite = null;\n                    particle.dead = true;\n                    particle = null;\n                }\n            },\n        };\n    }\n\n    /**\n     * ScaleDead is custom custom dead behaviour. After particle reach some energy particle will scale down to zero.\n     * Example:\n     *   <ScaleDead />\n     * @method scaleDead\n     * @return any\n     */\n    scaleDead(): any {\n        var self: any = this;\n        return {\n            initialize: function (particle: any) {\n                particle.scale = 0;\n            },\n            applyBehaviour: function (particle: any) {\n                if (particle.energy >= 2 / 3) {\n                    particle.scale = (1 - particle.energy) * 3;\n                } else if (particle.energy <= 1 / 3) {\n                    particle.scale = particle.energy * 3;\n                }\n                if (particle.scale < 0) {\n                    if (particle.sprite != null) {\n                        if (this._textures != null && this._textures.length > 0) {\n                            ProtonElement.Pool[this._animationName].push(particle.sprite);\n                        } else {\n                            ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\n                        }\n                        self.super2.removeChild(particle.sprite);\n                    }\n                    particle.sprite = null;\n                    particle.dead = true;\n                    particle = null;\n                }\n            },\n        };\n    }\n\n    /**\n     * Add behaviour Alpha.\n     * Example:\n     *   <Alpha Start=\"0\" End=\"1\" Life=\"5\" />\n     * @method addAlpha\n     * @param node is Element from xml\n     * @return Proton.Alpha\n     */\n    private addAlpha(node: Element): Proton.Alpha {\n        var start: number;\n        var end: number;\n        var life: number;\n\n        if (node.hasAttribute(\"Start\")) {\n            start = parseFloat(node.getAttribute(\"Start\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Alpha has no attribute Start\");\n            }\n        }\n\n        if (node.hasAttribute(\"End\")) {\n            end = parseFloat(node.getAttribute(\"End\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Alpha has no attribute End\");\n            }\n        }\n\n        if (node.hasAttribute(\"Life\")) {\n            life = parseFloat(node.getAttribute(\"Life\"));\n        }\n\n        if (start != null && end != null) {\n            if (life != null) {\n                return new Proton.Alpha(start, end, life);\n            } else {\n                return new Proton.Alpha(start, end);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Alpha has no Start or End attribute\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Add behaviour Scale.\n     * Example:\n     *   <Scale Start=\"1\" End=\"1.5\" />\n     * @method addScale\n     * @param node is Element from xml\n     * @return Proton.Scale\n     */\n    private addScale(node: Element): Proton.Scale {\n        var start: Array<number>;\n        var end: Array<number>;\n        var life: number;\n\n        if (node.hasAttribute(\"Start\")) {\n            start = ArrayUtils.numberArray(node.getAttribute(\"Start\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Scale has no attribute Start\");\n            }\n        }\n\n        if (node.hasAttribute(\"End\")) {\n            end = ArrayUtils.numberArray(node.getAttribute(\"End\"));\n        }\n\n        if (node.hasAttribute(\"Life\")) {\n            life = parseFloat(node.getAttribute(\"Life\"));\n        }\n\n        if (start != null) {\n            var startSpan: any;\n            if (start.length === 2) {\n                startSpan = new Proton.Span(start[0], start[1]);\n            } else {\n                startSpan = start[0];\n            }\n\n            var endSpan: any;\n            if (end != null) {\n                if (end.length === 2) {\n                    endSpan = new Proton.Span(end[0], end[1]);\n                } else {\n                    endSpan = end[0];\n                }\n            }\n\n            if (startSpan != null && endSpan != null && life != null) {\n                return new Proton.Scale(startSpan, endSpan, life);\n            } else if (startSpan != null && endSpan != null) {\n                return new Proton.Scale(startSpan, endSpan);\n            } else {\n                return new Proton.Scale(startSpan);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Scale has no Start or End attribute\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Add behaviour Rotate.\n     * Example:\n     *   <Rotate Start=\"0;360\" End=\"-0.5;0.5\" Style=\"add\" />\n     * @method addRotate\n     * @param node is Element from xml\n     * @return Proton.Rotate\n     */\n    private addRotate(node: Element): Proton.Rotate {\n        var start: Array<any>;\n        var end: Array<any>;\n        var style: string;\n\n        if (node.hasAttribute(\"Start\")) {\n            start = node\n                .getAttribute(\"Start\")\n                .split(\";\")\n                .map((value) => (isNaN(parseFloat(value)) ? value : parseFloat(value)));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Rotate has no attribute Start\");\n            }\n        }\n\n        if (node.hasAttribute(\"End\")) {\n            end = node\n                .getAttribute(\"End\")\n                .split(\";\")\n                .map((value) => (isNaN(parseFloat(value)) ? value : parseFloat(value)));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Rotate has no attribute End\");\n            }\n        }\n\n        if (node.hasAttribute(\"Style\")) {\n            style = node.getAttribute(\"Style\");\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Style has no attribute End\");\n            }\n        }\n\n        var startSpan: any = new Proton.Span(start[0], start.length > 1 ? start[1] : start[0]);\n\n        var endSpan: any = null;\n        if (end && end.length > 0) {\n            endSpan = new Proton.Span(end[0], end.length > 1 ? end[1] : end[0]);\n        }\n\n        return new Proton.Rotate(startSpan, endSpan, style);\n    }\n\n    /**\n     * Add behaviour RandomDrift.\n     * Example:\n     *   <RandomDrift DriftX=\"5\" DriftY=\"0\" Delay=\"0.15\"/>\n     * @method addRandomDrift\n     * @param node is Element from xml\n     * @return Proton.RandomDrift\n     */\n    private addRandomDrift(node: Element): Proton.RandomDrift {\n        var driftX: number;\n        var driftY: number;\n        var delay: number;\n\n        if (node.hasAttribute(\"DriftX\")) {\n            driftX = parseFloat(node.getAttribute(\"DriftX\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING RandomDrift has no attribute DriftX\");\n            }\n        }\n\n        if (node.hasAttribute(\"DriftY\")) {\n            driftY = parseFloat(node.getAttribute(\"DriftY\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING RandomDrift has no attribute DriftY\");\n            }\n        }\n\n        if (node.hasAttribute(\"Delay\")) {\n            delay = parseFloat(node.getAttribute(\"Delay\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING RandomDrift has no attribute Delay\");\n            }\n        }\n\n        if (driftX != null && driftY != null && delay != null) {\n            return new Proton.RandomDrift(driftX, driftY, delay);\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING RandomDrift has no valid attributes\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Add behaviour Gravity.\n     * Example:\n     *   <Gravity Gravity=\"5\" />\n     * @method addGravity\n     * @param node is Element from xml\n     * @return Proton.Gravity\n     */\n    private addGravity(node: Element): Proton.Gravity {\n        var gravity: number;\n\n        if (node.hasAttribute(\"Gravity\")) {\n            gravity = parseFloat(node.getAttribute(\"Gravity\"));\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Gravity has no attribute Gravity\");\n            }\n        }\n\n        if (gravity != null) {\n            return new Proton.Gravity(gravity);\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Gravity has no valid attributes\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Add behaviour Color.\n     * Example:\n     *   <Color Color=\"FFFFFF\" EndColor=\"000000\" />\n     * @method addColor\n     * @param node is Element from xml\n     * @return Proton.Color\n     */\n    private addColor(node: Element): Proton.Color {\n        var i: number;\n        var arr: Array<string>;\n        var endArr: Array<string>;\n        var color: Array<string> = [];\n        var endColor: Array<string> = [];\n\n        if (node.hasAttribute(\"Color\")) {\n            arr = node.getAttribute(\"Color\").split(\";\");\n            for (i = 0; i < arr.length; i++) {\n                color.push(StringUtils.hexColor(arr[i]));\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Color has no attribute Color\");\n            }\n        }\n\n        if (node.hasAttribute(\"EndColor\")) {\n            endArr = node.getAttribute(\"EndColor\").split(\";\");\n            for (i = 0; i < endArr.length; i++) {\n                endColor.push(StringUtils.hexColor(endArr[i]));\n            }\n        }\n\n        if (color.length > 0) {\n            if (endColor.length > 0) {\n                return new Proton.Color(color, endColor);\n            } else {\n                return new Proton.Color(color);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING Color has no Color attribute\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Add behaviour CrossZone. CrossZone is used for collisions. Need some zone. See method getZone().\n     * Example:\n     *   <CrossZone Type=\"bound\">\n     *       <LineZone X=\"0\" Y=\"0\" Width=\"1000\" Height=\"1000\" Direction=\"down\" />\n     *   </CrossZone>\n     * @method addCrossZone\n     * @param node is Element from xml\n     * @return Proton.CrossZone\n     */\n    private addCrossZone(node: Element): Proton.CrossZone {\n        var zone: any;\n        var type: string;\n\n        if (node.firstElementChild != null) {\n            zone = this.getZone(node.firstElementChild);\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING no zone in CrossZone\");\n            }\n        }\n\n        if (node.hasAttribute(\"Type\")) {\n            type = node.getAttribute(\"Type\");\n        }\n\n        if (zone != null) {\n            if (type != null) {\n                return new Proton.CrossZone(zone, type);\n            } else {\n                return new Proton.CrossZone(zone);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"WARNING no zone in CrossZone\");\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n\n    clone(): ProtonElement {\n        var element: ProtonElement = new ProtonElement();\n\n        element.super2.position.x = this.super2.position.x;\n        element.super2.position.y = this.super2.position.y;\n        element.super2.pivot.x = this.super2.pivot.x;\n        element.super2.pivot.y = this.super2.pivot.y;\n        element.super2.scale.x = this.super2.scale.x;\n        element.super2.scale.y = this.super2.scale.y;\n        element.super2.visible = this.super2.visible;\n        var node: Element = document.createElement(\"particle\");\n        node.setAttribute(\"Style2\", this._styleName);\n\n        element.create(node);\n        element.super2._markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\nexport const ProtonElementAttributes = {\n    EMIT: \"Emit\",\n    START: \"Start\",\n    STOP: \"Stop\",\n    STOPPING: \"Stopping\",\n    DURATION: \"Duration\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ProtonElement.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { BaseElement } from \"./BaseElement\";\nimport { Vibration } from \"../../../Utils/Vibration\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class VibrationElement extends BaseElement {\n    createByNode(node: Element): void {\n        //\n    }\n\n    updateByNode(node: Element): void {\n        if (node.hasAttribute(VibrationElementAttributes.PATTERN)) {\n            const pattern = ArrayUtils.numberArray(node.getAttribute(VibrationElementAttributes.PATTERN));\n            Vibration.vibrate(pattern);\n        }\n    }\n\n    clone(): VibrationElement {\n        const element: VibrationElement = new VibrationElement();\n        return element;\n    }\n}\n\nexport const VibrationElementAttributes = {\n    PATTERN: \"Pattern\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/VibrationElement.ts\n **/","import { DataManager } from \"../Managers/DataManager\";\n\nexport class Vibration {\n    /**\n     * To perform multiple vibration, an array needs to be passed as the parameter.\n     * First value represents vibration time (milliseconds), second value represents pause time (milliseconds),\n     * third value represents vibration time, and this goes on with each alternate value.\n     * Basically it is performed as a series of [VIBRATION] [PAUSE] [VIBRATION] [PAUSE] [VIBRATION] [PAUSE]...\n     *\n     * Use 0 to force stop vibration\n     *\n     * @param pattern\n     */\n    public static vibrate(pattern: number | Array<number> = 0): void {\n        if (!DataManager.VibrationEnabled) {\n            return;\n        }\n\n        if (navigator.vibrate == null) {\n            return;\n        }\n\n        navigator.vibrate(pattern);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Vibration.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\nimport { AnimationStyleAttributes } from \"../../ComponentAttributes\";\n\n/**\n * The animation style is used for defined behaviour animation from sprite sheet.\n * Example:\n *   <AnimationStyle Class=\"AnimationStyle\" Animation=\"[libraryID]\" StartFrame=\"0\" EndFrame=\"0\" Loop=\"false\" Stop=\"false\" />\n * @class AnimationStyle\n * @extends Style\n */\n@engineComponent(ComponentTypes.Style)\nexport class AnimationStyle extends Style {\n    // store only name of animation in style\n    // element will create new instnce of animation not style\n    animation: string;\n\n    frames: Array<string>;\n\n    // settings for animation\n    startFrame: number;\n    endFrame: number;\n    speed: number;\n    loop: boolean;\n    stop: boolean;\n    alpha: number;\n    tint: number;\n    blendMode: number;\n    reverse: boolean;\n\n    // for InsideAnimationElement\n    node: Element;\n\n    constructor() {\n        super();\n\n        // set default values\n        this.animation = \"\";\n        this.frames = null;\n        this.startFrame = 0;\n        this.speed = 1;\n        this.loop = false;\n        this.stop = false;\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        /**\n         * Store node for InsideAnimationElement\n         *\n         * todo Toto sa pouziva?\n         * @type {Element}\n         */\n        this.node = node;\n\n        if (node.hasAttribute(AnimationStyleAttributes.ANIMATION)) {\n            this.animation = node.getAttribute(AnimationStyleAttributes.ANIMATION);\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.FRAMES)) {\n            this.frames = node.getAttribute(AnimationStyleAttributes.FRAMES).split(\";\");\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.START_FRAME)) {\n            this.startFrame = parseInt(node.getAttribute(AnimationStyleAttributes.START_FRAME));\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.END_FRAME)) {\n            this.endFrame = parseInt(node.getAttribute(AnimationStyleAttributes.END_FRAME));\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.LOOP)) {\n            this.loop = StringUtils.parseBoolean(node.getAttribute(AnimationStyleAttributes.LOOP));\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.STOP)) {\n            this.stop = StringUtils.parseBoolean(node.getAttribute(AnimationStyleAttributes.STOP));\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.SPEED)) {\n            this.speed = parseFloat(node.getAttribute(AnimationStyleAttributes.SPEED));\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.ALPHA)) {\n            this.alpha = parseFloat(node.getAttribute(AnimationStyleAttributes.ALPHA));\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.TINT)) {\n            this.tint = parseInt(node.getAttribute(AnimationStyleAttributes.TINT), 16);\n        }\n\n        if (node.hasAttribute(AnimationStyleAttributes.BLEND_MODE)) {\n            this.blendMode = CustomUtils.getBlendMode(parseInt(node.getAttribute(AnimationStyleAttributes.BLEND_MODE)));\n        }\n        if (node.hasAttribute(AnimationStyleAttributes.REVERSE)) {\n            this.reverse = StringUtils.parseBoolean(node.getAttribute(AnimationStyleAttributes.REVERSE));\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/AnimationStyle.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n/**\n * ContainerStyle only holds xml node for container elements.\n * Example:\n *   <ContainerStyle Class=\"ContainerStyle\">\n *       <Child1 />\n *       <Child2 />\n *       ...\n *       <ChildX />\n *   </ContainerStyle>\n * @class ContainerStyle\n * @extends Style\n */\n@engineComponent(ComponentTypes.Style)\nexport class ContainerStyle extends Style {\n    node: Element;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        // store node for container elements\n        this.node = node;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/ContainerStyle.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n@engineComponent(ComponentTypes.Style)\nexport class ProtonStyle extends Style {\n    node: Element;\n\n    constructor() {\n        super();\n    }\n\n    create(node: Element) {\n        super.create(node);\n\n        this.node = node;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/ProtonStyle.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\nimport { AnimationStyleAttributes } from \"../../ComponentAttributes\";\n\n/**\n * The animation style is used for defined behaviour animation from sprite sheet.\n * Example:\n *   <ShapeStyle Class=\"ShapeStyle\" ... />\n * @class ShapeStyle\n * @extends Style\n */\n@engineComponent(ComponentTypes.Style)\nexport class ShapeStyle extends Style {\n    lineWidth: number;\n\n    // for InsideAnimationElement\n    node: Element;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        /**\n         * Store node for InsideAnimationElement\n         *\n         * todo Toto sa pouziva?\n         * @type {Element}\n         */\n        this.node = node;\n\n        if (node.hasAttribute(\"LineWidth\")) {\n            this.lineWidth = parseInt(node.getAttribute(\"LineWidth\"));\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/ShapeStyle.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { Style } from \"./Style\";\nimport { ContainerElement } from \"../Graphics/ContainerElement\";\nimport { ComponentTypes } from \"../../ComponentTypes\";\n\n/**\n * TimelineStyle create container from child <elements> and holds xml nodes of frames for this element.\n * Example:\n *   <TimelineStyle Class=\"TimelineStyle\">\n *      <Elements>\n *           <Child1 />\n *           <Child2 X=\"0\" />\n *           ...\n *      </Elements>\n *      <TimeLine>\n *          <Frame Frame=\"0\">\n *              <Child2 X=\"50\" />\n *          </Frame>\n *          <Frame Frame=\"CASE2\">\n *              <Child1 X=\"200\" />\n *          </Frame>\n *      </TimeLine>\n *      <SoundTimeline>\n *          <Frame Frame=\"0\">\n *              <Song Song=\"ID\" Play=\"true\" />\n *          </Frame>\n *          <Frame Frame=\"CASE2\">\n *              <Song Song=\"ID\" Play=\"false\" />\n *          </Frame>\n *      </SoundTimeline>\n *   </TimelineStyle>\n * @class TimelineStyle\n * @extends Style\n */\n@engineComponent(ComponentTypes.Style)\nexport class TimelineStyle extends Style {\n    container: ContainerElement;\n\n    // xml nodes added to object by fframe\n    frames: Object;\n    framesSounds: Object;\n    outro: Element;\n    outroSounds: Element;\n\n    constructor() {\n        super();\n\n        this.frames = {};\n        this.framesSounds = {};\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            switch (next.nodeName) {\n                case \"Elements\":\n                    this.container = new ContainerElement();\n                    this.container.create(next);\n                    break;\n                case \"TimeLine\":\n                    var nextCase: Element = next.firstElementChild;\n                    while (nextCase != null) {\n                        if (nextCase.hasAttribute(\"Frame\")) {\n                            if (this.frames[nextCase.getAttribute(\"Frame\")] !== null) {\n                                this.frames[nextCase.getAttribute(\"Frame\")] = nextCase;\n                            } else {\n                                if (DEBUG) {\n                                    this.log(\n                                        \"ERROR case \" +\n                                            nextCase.getAttribute(\"Frame\") +\n                                            \" already exist in switchStyle \" +\n                                            node.nodeName,\n                                    );\n                                }\n                            }\n                        }\n                        if (nextCase.nodeName === \"Outro\") {\n                            this.outro = nextCase;\n                        }\n                        nextCase = nextCase.nextElementSibling;\n                    }\n                    break;\n                case \"SoundTimeline\":\n                    var nextCase: Element = next.firstElementChild;\n                    while (nextCase != null) {\n                        if (nextCase.hasAttribute(\"Frame\")) {\n                            if (this.framesSounds[nextCase.getAttribute(\"Frame\")] !== null) {\n                                this.framesSounds[nextCase.getAttribute(\"Frame\")] = nextCase;\n                            } else {\n                                if (DEBUG) {\n                                    this.log(\n                                        \"ERROR case \" +\n                                            nextCase.getAttribute(\"Frame\") +\n                                            \" already exist in switchStyle \" +\n                                            node.nodeName,\n                                    );\n                                }\n                            }\n                        }\n                        if (nextCase.nodeName === \"Outro\") {\n                            this.outroSounds = nextCase;\n                        }\n                        nextCase = nextCase.nextElementSibling;\n                    }\n                    break;\n            }\n            next = next.nextElementSibling;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/TimelineStyle.ts\n **/","import { Logger } from \"neo-common\";\nimport { Resource } from \"./Resource\";\n\n/**\n * The SndResource is used for holding songs from preloading. Supported all types of songs.\n * @class SndResource\n * @extends Resource\n */\nexport class SndResource extends Resource {\n    static Sounds: { [id: string]: AudioBuffer } = {};\n\n    /**\n     * Return song by id.\n     * @method getSongById\n     * @param id id of song in files.xml\n     * @return AudioBuffer\n     */\n    static getSongById(id: string): AudioBuffer {\n        if (this.Sounds != null) {\n            return this.Sounds[id];\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no sounds\");\n            }\n        }\n        if (DEBUG) {\n            this.log(\"ERROR no song: \" + id);\n        }\n        return null;\n    }\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @return void\n     */\n    static log(s: string): void {\n        if (DEBUG) {\n            Logger.debugGroup(\"SndResource\", s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Resources/SndResource.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { ShapeElement } from \"../Components/Elements/Graphics/ShapeElement\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class EllipseElement extends ShapeElement {\n    private _rx: number;\n    private _ry: number;\n\n    constructor() {\n        super();\n    }\n\n    public updateByNode(node: Element): boolean {\n        let redraw: boolean = false;\n\n        if (node.hasAttribute(EllipseElementAttributes.POSITION_X)) {\n            this.position.x = parseInt(node.getAttribute(EllipseElementAttributes.POSITION_X));\n        }\n\n        if (node.hasAttribute(EllipseElementAttributes.POSITION_Y)) {\n            this.position.y = parseInt(node.getAttribute(EllipseElementAttributes.POSITION_Y));\n        }\n\n        if (node.hasAttribute(EllipseElementAttributes.CX)) {\n            this._x = parseInt(node.getAttribute(EllipseElementAttributes.CX));\n            redraw = true;\n        }\n        if (node.hasAttribute(EllipseElementAttributes.CY)) {\n            this._y = parseInt(node.getAttribute(EllipseElementAttributes.CY));\n            redraw = true;\n        }\n        if (node.hasAttribute(EllipseElementAttributes.RX)) {\n            this._rx = parseInt(node.getAttribute(EllipseElementAttributes.RX));\n            redraw = true;\n        }\n        if (node.hasAttribute(EllipseElementAttributes.RY)) {\n            this._ry = parseInt(node.getAttribute(EllipseElementAttributes.RY));\n            redraw = true;\n        }\n\n        if (!super.updateByNode(node)) {\n            if (redraw) {\n                this.redraw();\n                return true;\n            } else {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    public redraw(): void {\n        this.clear();\n        this.beginFill(this._color, this._fillAlpha);\n        this.lineStyle(this._lineWidth, this._lineColor, this._lineAlpha);\n        this.drawEllipse(this._x, this._y, this._rx, this._ry);\n        this.endFill();\n    }\n\n    clone(): EllipseElement {\n        let element: EllipseElement = new EllipseElement();\n        element.removeChildren();\n\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.tint = this.tint;\n        element.blendMode = this.blendMode;\n        element.name = this.name;\n        element._tweenEngine = this._tweenEngine;\n\n        element._lineWidth = this._lineWidth;\n        element._lineColor = this._lineColor;\n        element._lineAlpha = this._lineAlpha;\n        element._fillAlpha = this._fillAlpha;\n        element._color = this._color;\n\n        element._x = this._x;\n        element._y = this._y;\n        element._rx = this._rx;\n        element._ry = this._ry;\n\n        element.redraw();\n\n        return element;\n    }\n}\n\nexport const EllipseElementAttributes = {\n    /*\n     * Array of semicolon-separated X;Y coordinates, e.g. \"0;10;20;10;30;30\"\n     */\n    CX: \"CX\",\n    CY: \"CY\",\n    RX: \"RX\",\n    RY: \"RY\",\n\n    POSITION_X: \"PositionX\",\n    POSITION_Y: \"PositionY\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/EllipseElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\nimport { ImageElement } from \"../Components/Elements/Graphics/ImageElement\";\nimport { AnimationElement } from \"../Components/Elements/Graphics/AnimationElement\";\nimport { CustomUtils } from \"../Utils/CustomUtils\";\n\n/**\n * Container element to simulate PNG-based (full transparency) ImageElement via a pair of ImageElements/AnimationElements -\n * on the bottom, a full transparency PNG mask (black only with alpha channel); above it a no transparency JPEG\n * version of the original ImageElement with additive blend mode.\n * The aim of ImageGroupElement is to simplify configuration and improve animation performance.\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ImageGroupElement extends BaseElement {\n    // full transparency black PNG mask ImageElement/AnimationElement\n    maskElement: ImageElement | AnimationElement;\n    // no transparency additive ImageElement/AnimationElement\n    imageElement: ImageElement | AnimationElement;\n\n    _tint: number = 0xffffff;\n    blendMode: number = 0;\n\n    constructor() {\n        super();\n    }\n\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        if (this.maskElement) {\n            this.removeChild(this.maskElement);\n            this.maskElement.destroy();\n            this.maskElement = null;\n        }\n        if (this.imageElement) {\n            this.removeChild(this.imageElement);\n            this.imageElement.destroy();\n            this.imageElement = null;\n        }\n    }\n\n    get tint(): number {\n        return this._tint;\n    }\n\n    set tint(tintColor: number) {\n        this._tint = tintColor;\n        if (this.imageElement) {\n            this.imageElement.tint = this._tint;\n        }\n        if (this.maskElement) {\n            this.maskElement.tint = this._tint;\n        }\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    public createByNode(node: Element): void {\n        super.createByNode(node);\n        this.updateByNode(node);\n    }\n\n    public updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(ImageGroupElementAttributes.BLEND_MODE)) {\n            this.blendMode = CustomUtils.getBlendMode(\n                parseInt(node.getAttribute(ImageGroupElementAttributes.BLEND_MODE)),\n            );\n        }\n\n        let imageName: string = null;\n\n        let imageNode: Element = this.parseChild(node, \"IMAGE_ELEMENT\");\n        if (imageNode != null) {\n            if (imageNode.hasAttribute(\"Image\")) {\n                imageName = imageNode.getAttribute(\"Image\");\n            }\n            if (imageNode.hasAttribute(\"Image\") || imageNode.hasAttribute(\"Style\")) {\n                if (this.imageElement) {\n                    this.removeChild(this.imageElement);\n                    this.imageElement.destroy();\n                    this.imageElement = null;\n                }\n            }\n            imageNode.setAttribute(\"BlendMode\", \"1\");\n            if (this.imageElement) {\n                this.imageElement.updateByNode(imageNode);\n            } else {\n                switch (imageNode.getAttribute(\"Class\")) {\n                    case \"ImageElement\":\n                        this.imageElement = new ImageElement();\n                        this.imageElement.create(imageNode);\n                        this.addChild(this.imageElement);\n                        break;\n                    case \"AnimationElement\":\n                        this.imageElement = new AnimationElement();\n                        this.imageElement.create(imageNode);\n                        this.addChild(this.imageElement);\n                        break;\n                }\n            }\n        }\n\n        let maskNode: Element = this.parseChild(node, \"MASK_ELEMENT\");\n        if (maskNode != null) {\n            if (maskNode.hasAttribute(\"Image\")) {\n                // shorthand: <... ImageElement=\"GFX_image\" MaskImage=\"\" ...> results in <... ImageElement=\"GFX_image\" MaskImage=\"GFX_image_mask\" ...>\n                switch (maskNode.getAttribute(\"Image\")) {\n                    case \"_\":\n                    case \"\":\n                    case \"default\":\n                        if (imageName) {\n                            maskNode.setAttribute(\"Image\", imageName + \"_mask\");\n                        }\n                        break;\n                }\n            }\n            if (maskNode.hasAttribute(\"Image\") || maskNode.hasAttribute(\"Style\")) {\n                if (this.maskElement) {\n                    this.removeChild(this.maskElement);\n                    this.maskElement.destroy();\n                    this.maskElement = null;\n                }\n            }\n            if (this.maskElement) {\n                this.maskElement.updateByNode(maskNode);\n            } else {\n                switch (maskNode.getAttribute(\"Class\")) {\n                    case \"ImageElement\":\n                        this.maskElement = new ImageElement();\n                        this.maskElement.create(maskNode);\n                        this.addChildAt(this.maskElement, 0);\n                        break;\n                    case \"AnimationElement\":\n                        this.maskElement = new AnimationElement();\n                        this.maskElement.create(maskNode);\n                        this.addChildAt(this.maskElement, 0);\n                        break;\n                }\n            }\n        }\n\n        if (node.hasAttribute(ImageGroupElementAttributes.TINT)) {\n            this.tint = parseInt(node.getAttribute(ImageGroupElementAttributes.TINT), 16);\n        }\n        if (\n            node.hasAttribute(ImageGroupElementAttributes.STOP) ||\n            node.hasAttribute(ImageGroupElementAttributes.PLAY) ||\n            node.hasAttribute(ImageGroupElementAttributes.REVERSE)\n        ) {\n            if (this.imageElement instanceof AnimationElement || this.maskElement instanceof AnimationElement) {\n                let tempNode: Element = document.createElement(\"UpdateNode\");\n                if (node.hasAttribute(ImageGroupElementAttributes.STOP)) {\n                    tempNode.setAttribute(\n                        ImageGroupElementAttributes.STOP,\n                        node.getAttribute(ImageGroupElementAttributes.STOP),\n                    );\n                }\n                if (node.hasAttribute(ImageGroupElementAttributes.PLAY)) {\n                    tempNode.setAttribute(\n                        ImageGroupElementAttributes.PLAY,\n                        node.getAttribute(ImageGroupElementAttributes.PLAY),\n                    );\n                }\n                if (node.hasAttribute(ImageGroupElementAttributes.REVERSE)) {\n                    tempNode.setAttribute(\n                        ImageGroupElementAttributes.REVERSE,\n                        node.getAttribute(ImageGroupElementAttributes.REVERSE),\n                    );\n                }\n                if (this.imageElement instanceof AnimationElement) {\n                    this.imageElement.updateByNode(tempNode);\n                }\n                if (this.maskElement instanceof AnimationElement) {\n                    this.maskElement.updateByNode(tempNode);\n                }\n            }\n        }\n\n        switch (this.blendMode) {\n            case 0:\n                if (this.imageElement) {\n                    this.imageElement.blendMode = CustomUtils.getBlendMode(1);\n                }\n                if (this.maskElement) {\n                    this.maskElement.blendMode = CustomUtils.getBlendMode(this.blendMode);\n                }\n                break;\n            default:\n                if (this.imageElement) {\n                    this.imageElement.blendMode = CustomUtils.getBlendMode(this.blendMode);\n                }\n                if (this.maskElement) {\n                    this.maskElement.blendMode = CustomUtils.getBlendMode(this.blendMode);\n                }\n                break;\n        }\n    }\n\n    private parseChild(node: Element, keyPrefix: string = \"MASK_ELEMENT\"): Element {\n        let tempNode: Element = null;\n        let attributePrefix: string = ImageGroupElementAttributes[keyPrefix];\n        if (!attributePrefix) {\n            if (DEBUG) {\n                this.log(\"Unknown key prefix: '\" + keyPrefix + \"'\");\n            }\n            return;\n        }\n        if (node.hasAttribute(ImageGroupElementAttributes[keyPrefix])) {\n            if (tempNode == null) {\n                tempNode = document.createElement(attributePrefix + \"Node\");\n            }\n            tempNode.setAttribute(\"Class\", \"ImageElement\");\n            tempNode.setAttribute(\"Image\", node.getAttribute(ImageGroupElementAttributes[keyPrefix]));\n        }\n        if (node.hasAttribute(ImageGroupElementAttributes[keyPrefix + \"_STYLE\"])) {\n            if (tempNode == null) {\n                tempNode = document.createElement(attributePrefix + \"Node\");\n            }\n            tempNode.setAttribute(\"Class\", \"AnimationElement\");\n            tempNode.setAttribute(\"Style\", node.getAttribute(ImageGroupElementAttributes[keyPrefix + \"_STYLE\"]));\n        }\n        for (let key in ImageGroupElementAttributes) {\n            if (key.substring(0, 5) == \"ATTR_\") {\n                let attributeName = ImageGroupElementAttributes[key];\n                if (node.hasAttribute(attributePrefix + attributeName)) {\n                    if (tempNode == null) {\n                        tempNode = document.createElement(attributePrefix + \"Node\");\n                    }\n                    tempNode.setAttribute(attributeName, node.getAttribute(attributePrefix + attributeName));\n                }\n            }\n        }\n        return tempNode;\n    }\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return ContainerElement\n     */\n    clone(): ImageGroupElement {\n        let element: ImageGroupElement = new ImageGroupElement();\n\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.skew.x = this.skew.x;\n        element.skew.y = this.skew.y;\n        element.visible = this.visible;\n        element.name = this.name;\n\n        element.removeChildren();\n\n        if (this.maskElement) {\n            element.maskElement = this.maskElement.clone();\n            element.addChild(element.maskElement);\n        }\n        if (this.imageElement) {\n            element.imageElement = this.imageElement.clone();\n            element.addChild(element.imageElement);\n        }\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\nconst ImageGroupElementAttributes = {\n    DEBUG: \"Debug\",\n\n    MASK_ELEMENT: \"MaskElement\",\n    MASK_ELEMENT_STYLE: \"MaskElementStyle\",\n    IMAGE_ELEMENT: \"ImageElement\",\n    IMAGE_ELEMENT_STYLE: \"ImageElementStyle\",\n\n    ATTR_CLASS: \"Class\",\n    ATTR_PIVOT_X: \"PivotX\",\n    ATTR_PIVOT_Y: \"PivotY\",\n    ATTR_POSITION_X: \"PositionX\",\n    ATTR_POSITION_Y: \"PositionY\",\n    ATTR_ROTATION: \"Rotation\",\n    ATTR_SCALE: \"Scale\",\n    ATTR_SCALE_X: \"ScaleX\",\n    ATTR_SCALE_Y: \"ScaleY\",\n    ATTR_SKEW_X: \"SkewX\",\n    ATTR_SKEW_Y: \"SkewY\",\n    ATTR_X: \"X\",\n    ATTR_Y: \"Y\",\n\n    BLEND_MODE: \"BlendMode\",\n\n    PLAY: \"Play\",\n    REVERSE: \"Reverse\",\n    STOP: \"Stop\",\n\n    TINT: \"Tint\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/ImageGroupElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Tweens } from \"../Components/Effects/Tweens\";\nimport { ImageTextCounterElement } from \"../Components/Elements/Texts/ImageTextCounterElement\";\nimport { ImageTextElement } from \"../Components/Elements/Texts/ImageTextElement\";\nimport { ImageElement } from \"../Components/Elements/Graphics/ImageElement\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ImageTextCounterElement2 extends ImageTextCounterElement {\n    //******************************************************************************************************************\n    //  VARIABLES\n    //******************************************************************************************************************\n\n    public imageText: ImageTextElement;\n\n    //******************************************************************************************************************\n    //  CREATE, UPDATE\n    //******************************************************************************************************************\n\n    public createByNode(node: Element) {\n        super.createByNode(node);\n\n        if (this.imageText == null) {\n            if (this.font != null) {\n                this.imageText = new ImageTextElement();\n                this.imageText.visible = false;\n                this.imageText.font = this.font + \"Blend\";\n                this.imageText.text = this.text;\n                this.imageText.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font + \"Blend\" });\n                this.imageText.addChild(this.imageText.bitmapText);\n\n                this.addChild(this.imageText);\n            }\n        }\n    }\n\n    public updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(\"Glow\")) {\n            this.glowAsHighWin();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  REALIGN\n    //******************************************************************************************************************\n\n    public realign(): void {\n        super.realign();\n\n        this.imageText.position.x = this.bitmapText.position.x;\n        this.imageText.position.y = this.bitmapText.position.y;\n    }\n\n    //******************************************************************************************************************\n    //  START\n    //******************************************************************************************************************\n\n    protected onCountTo(): void {\n        super.onCountTo();\n\n        this.imageText.bitmapText.text = this.bitmapText.text;\n    }\n\n    //******************************************************************************************************************\n    //  GLOW\n    //******************************************************************************************************************\n\n    public glowAsWin(): void {\n        this.imageText.visible = true;\n\n        Tweens.removeTweens(this.imageText, \"all\");\n        Tweens.alphaTween(this.imageText, {\n            alphas: [0, 1],\n            tweenDuration: 5,\n            tweenDelay: 20,\n            callbackFunction: (): void => {\n                Tweens.removeTweens(this.imageText, \"all\");\n                Tweens.alphaTween(this.imageText, {\n                    alphas: [1, 1, 0],\n                    tweenDuration: 30,\n                    callbackFunction: (): void => {\n                        this.imageText.visible = false;\n                    },\n                });\n            },\n        });\n    }\n\n    public glowAsHighWin(): void {\n        this.imageText.visible = true;\n\n        Tweens.removeTweens(this.imageText, \"all\");\n        Tweens.alphaTween(this.imageText, {\n            alphas: [0, 1],\n            tweenDuration: 5,\n            callbackFunction: (): void => {\n                Tweens.removeTweens(this.imageText, \"all\");\n                Tweens.alphaTween(this.imageText, {\n                    alphas: [1, 1, 0],\n                    tweenDuration: 60,\n                    callbackFunction: (): void => {\n                        this.imageText.visible = false;\n                    },\n                });\n            },\n        });\n    }\n\n    //******************************************************************************************************************\n    //  CLONE\n    //******************************************************************************************************************\n\n    public clone(): ImageTextCounterElement {\n        let element: ImageTextCounterElement2 = new ImageTextCounterElement2();\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n\n        element.font = this.font;\n        element.text = this.text;\n        element.textAlign = this.textAlign;\n        element.textBaseline = this.textBaseline;\n\n        element.from = this.from;\n        element.to = this.to;\n        element.duration = this.duration;\n        element.round = this.round;\n\n        element.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\n        element.addChild(element.bitmapText);\n\n        element.imageText = this.imageText.clone();\n        element.imageText.visible = false;\n        element.addChild(element.imageText);\n\n        element.realign();\n        element.markAsCloned();\n\n        return element;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/ImageTextCounterElement2.ts\n **/","import { Machine } from \"../GameComponents/Machine\";\nimport { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Symbols } from \"../GameComponents/Symbols\";\nimport { TimelineElement } from \"../Components/Elements/Graphics/TimelineElement\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { DataManager } from \"../Managers/DataManager\";\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\nimport { Reel2 } from \"../GameComponents/Reel2\";\nimport { Configuration } from \"../Components/Configuration\";\nimport { Reel } from \"../GameComponents/Reel\";\nimport { ReelExtended } from \"./ReelExtended\";\nimport { IReelTeasingAttributes, TeasingComponent } from \"./TeasingComponent\";\nimport { TeasingBonus } from \"./TeasingBonus\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class MachineExtended extends Machine {\n    private _allowTeasing: boolean;\n    private ledStripeTeasing?: string;\n    private ledStripeNormal?: string;\n\n    private teaseOnDelay: number = 1000;\n\n    private _forceStop: boolean = false;\n\n    get forceStop(): boolean {\n        return this._forceStop;\n    }\n\n    initialize(symbols: Symbols, reels: Array<Array<number>>): void {\n        let ledConfig: Element = Configuration.Configurations[\"TeasingLedStripeConfiguration\"];\n        if (ledConfig) {\n            this.ledStripeTeasing = ledConfig.hasAttribute(\"OnEnter\") ? ledConfig.getAttribute(\"OnEnter\") : null;\n            this.ledStripeNormal = ledConfig.hasAttribute(\"OnExit\") ? ledConfig.getAttribute(\"OnExit\") : null;\n        }\n\n        super.initialize(symbols, reels);\n    }\n\n    spinStop(event: any, force: boolean = false, fromServer: boolean = false, legal: boolean = false): void {\n        this._forceStop = force;\n\n        if (fromServer) {\n            this._stoppedFromServer = true;\n            if (this._legalStopTimer != null) {\n                clearTimeout(this._legalStopTimer);\n            }\n            if (this.verifyMinGameRoundDurationConditions()) {\n                this._legalStopTimer = setTimeout(\n                    () => this.spinStop(null, false, false, true),\n                    this.getLegalRemainingSpinDuration(),\n                );\n            } else {\n                this._stoppedFromLegal = true;\n            }\n        } else if (legal) {\n            if (this._legalStopTimer != null) {\n                clearTimeout(this._legalStopTimer);\n            }\n            this._stoppedFromLegal = true;\n        } else {\n            this._stopTimer.stop();\n            this._stoppedFromMachine = true;\n        }\n\n        if (force) {\n            if (this._legalStopTimer != null) {\n                clearTimeout(this._legalStopTimer);\n            }\n            this._stoppedFromLegal = true;\n            this._stopTimer.stop();\n            this._stoppedFromMachine = true;\n        }\n\n        if (DEBUG) {\n            this.log(\"spinStop \" + force);\n        }\n\n        if (this._stoppedFromServer && this._stoppedFromMachine && this._stoppedFromLegal) {\n            if (\n                !ModuleManager.freespinsActive() &&\n                !(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")\n            ) {\n                DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\n                DataManager.updateDataElement(GameData.DataTotalWinDenom, \"0\");\n            }\n\n            let rta: Array<IReelTeasingAttributes>;\n\n            if (this.elementInstance[\"teasing\"] != null) {\n                this.elementInstance[\"teasing\"].forEach((teasingComponent: TeasingComponent) => {\n                    let reelTeasingAttributes = teasingComponent.checkOnInit({\n                        force: force,\n                        stoppedSymbols: this._stoppedSymbolsArray,\n                    });\n                    if (teasingComponent.teasingEnabled) {\n                        rta = reelTeasingAttributes;\n                    }\n                }, this);\n            }\n\n            if (this._reels != null) {\n                for (let i: number = 0; i < this._reelCount; i++) {\n                    if (this._reels[i] != null) {\n                        if (this._stoppedSymbolsArray.length !== 0) {\n                            this._reels[i].setData(this._stoppedSymbolsArray[i]);\n\n                            if (typeof rta !== \"undefined\") {\n                                this._reels[i].spinStop(force, rta[i].stopDelay);\n                            } else {\n                                this._reels[i].spinStop(force);\n                            }\n                        } else {\n                            if (DEBUG) {\n                                this.log(\"ERROR no stopped symbols\");\n                            }\n                        }\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"ERROR no reel with index: \" + i);\n                        }\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"ERROR no reels\");\n                }\n            }\n        }\n    }\n\n    private getReel(reelIndex: number): ReelExtended {\n        return <ReelExtended>this._reels[reelIndex];\n    }\n\n    onReelStopped(reelIndex: number): void {\n        let currentReel = this.getReel(reelIndex);\n\n        PlayList.play(\"SND_BaseRotationEnd\" + reelIndex);\n\n        this._stoppedReelIndexes++;\n        this.actualReelStopped = reelIndex;\n        currentReel.visible = false;\n        this.emit(Machine.ReelStopped, this._allowTeasing);\n\n        if (this._stoppedReelIndexes === this._reelCount || this.respin != null) {\n            PlayList.stop(\"SND_BaseRotation\", 10);\n            PlayList.stop(\"SND_BaseRotationStart\", 10);\n            if (this._legalStopTimer != null) {\n                clearTimeout(this._legalStopTimer);\n            }\n            this._stopTimer.stop();\n            this._reelsContainer.visible = false;\n\n            if (DEBUG) {\n                const old = AppContext.gameConfiguration.MinGameRoundDuration;\n                const current = AppContext.gameConfiguration.GameRoundMinSpan;\n                const minDuration = current > 0 ? current : old > 0 ? old : 0;\n                const spinDuration = Date.now() - this._startSpinTime;\n\n                if (spinDuration > minDuration || !this.verifyMinGameRoundDurationConditions()) {\n                    this.log(\"Spin time duration: \" + spinDuration + \" ms\");\n                } else {\n                    console.log(\"%cError spin time duration:\" + spinDuration + \" ms\", \"color: #ff9900\");\n                }\n            }\n\n            this.emit(Machine.MachineStopped);\n        }\n    }\n\n    protected createReels(reels: Array<Array<number>>): void {\n        for (let i: number = 0; i < this._reelCount; i++) {\n            this._reels.push(new ReelExtended());\n        }\n\n        for (let i: number = 0; i < this._reelCount; i++) {\n            const reel = this._reels[i];\n\n            if (this._reelConfiguration != null) {\n                let configs: Array<string> = this._reelConfiguration.split(\";\");\n                for (let j: number = 0; j < configs.length; j++) {\n                    reel.configure(Configuration.Configurations[configs[j]]);\n                }\n            }\n            reel.visible = false;\n            //reel.initialize(i, this._symbols, reels[i], this._reelX[i], this._reelY[i], this._visibleSymbolCount, 1, 1, this._symbolWidth, this._symbolHeight, this._startDelay * i, this._stopDelay * i);\n            reel.initialize(\n                i > 0 ? this._reels[i - 1] : null,\n                i < this._reelCount - 1 ? this._reels[i + 1] : null,\n                i,\n                this._symbols,\n                reels[i],\n                this._reelX[i],\n                this._reelY[i],\n                this._visibleSymbolCount,\n                1,\n                1,\n                this._symbolWidth,\n                this._symbolHeight,\n                this._startDelay * i,\n                this._stopDelay * i,\n            );\n            reel.on(Reel.ReelStopped, this.onReelStopped.bind(this));\n            reel.on(Reel.ReelStopping, this.onReelStopping.bind(this));\n            this._reelsContainer.addChild(reel);\n        }\n        this._reelsContainer.visible = false;\n    }\n\n    public onReelStopping(reelIndex: number): void {\n        if (this.elementInstance[\"teasing\"] != null) {\n            this.elementInstance[\"teasing\"].forEach((teasingComponent: TeasingBonus) => {\n                let tease: boolean = teasingComponent.animateTeasing(reelIndex);\n                if (this._reels[reelIndex + 1]) {\n                    this.getReel(reelIndex + 1).setTeasing(tease, tease ? this.teaseOnDelay : 0);\n                }\n            });\n        }\n\n        if (this._stoppedReelIndexes + 1 === this._reelCount || this._forceStop) {\n            if (this.elementInstance[\"teasing\"] != null) {\n                this.elementInstance[\"teasing\"].forEach((teasingComponent: TeasingBonus) => {\n                    teasingComponent.finishTeasing(reelIndex);\n                });\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/MachineExtended.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Reel } from \"../GameComponents/Reel\";\nimport { Symbol } from \"../GameComponents/Symbol\";\nimport { SymbolExtended } from \"./SymbolExtended\";\nimport { Reel2 } from \"../GameComponents/Reel2\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class ReelExtended extends Reel {\n    private teaseDelayTimer: number = null;\n\n    public showSymbols(): void {\n        this.shouldBeStopping = false;\n        this.isStopping = false;\n        this.stoppingCounter = 0;\n        this.isTeasing = false;\n        this.teasingSymbols = [];\n\n        this.x = this.positionX;\n        this.y = this.positionY;\n\n        while (this.currentSymbols.length > 0) {\n            this.returnSymbol(this.currentSymbols.pop());\n        }\n\n        for (let i = 0; i < this.symbolBottomCount + this.symbolCount + this.symbolTopCount; i++) {\n            let symbolId: number;\n            let symbolCase: string;\n\n            if (i < this.symbolBottomCount) {\n                symbolId =\n                    this.strip[\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase = i === this.symbolBottomCount - 1 ? Symbol.CaseRotation : Symbol.CaseBlur;\n            } else if (i < this.symbolBottomCount + this.symbolCount) {\n                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - i - 1];\n                symbolCase = Symbol.CaseRotation;\n            } else {\n                symbolId =\n                    this.strip[\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase = i === this.symbolBottomCount + this.symbolCount ? Symbol.CaseRotation : Symbol.CaseBlur;\n            }\n\n            if (symbolId == 10 && symbolCase == Symbol.CaseRotation) {\n                symbolCase = Symbol.CaseEmpty;\n            }\n\n            this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\n\n            this.addChildAt(this.currentSymbols[0], 0);\n        }\n\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            const symbol = this.currentSymbols[i];\n            symbol.x = -symbol.offsetX;\n            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\n        }\n    }\n\n    protected spinRoll(): void {\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            if (\n                this.currentSymbols[i].getCurrentCase() === Symbol.CaseBlur ||\n                this.currentSymbols[i].getCurrentCase() === SymbolExtended.CaseTeasingBlur\n            ) {\n                continue;\n            }\n\n            if (this.currentSymbols[i].getCurrentCase() != Symbol.CaseRotation) {\n                this.currentSymbols[i].goToCase(Symbol.CaseRotation);\n            }\n        }\n\n        super.spinRoll();\n    }\n\n    protected updateReel(): void {\n        this.returnSymbol(this.currentSymbols.pop());\n\n        if (this.shouldBeStopping && !this.isStopping) {\n            if (this.previousReel === null) {\n                this.isStopping = true;\n            } else if (this.previousReel.isReelStopping()) {\n                this.isStopping = true;\n            }\n        }\n\n        this.stripIndex = (this.stripIndex - 1 + this.strip.length) % this.strip.length;\n\n        let symbolId = this.strip[this.stripIndex];\n        let symbolCase = Symbol.CaseBlur;\n\n        if (this.isStopping) {\n            if (this.stoppingCounter < this.symbolBottomCount) {\n                symbolId =\n                    this.strip[\n                        (this.data.index +\n                            this.symbolBottomCount +\n                            this.symbolCount -\n                            this.stoppingCounter -\n                            1 +\n                            this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase =\n                    this.stoppingCounter === this.symbolBottomCount - 1 ? Symbol.CaseRotation : Symbol.CaseBlur;\n            } else if (this.stoppingCounter < this.symbolBottomCount + this.symbolCount) {\n                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - this.stoppingCounter - 1];\n                symbolCase = Symbol.CaseRotation;\n            } else {\n                symbolId =\n                    this.strip[\n                        (this.data.index +\n                            this.symbolBottomCount +\n                            this.symbolCount -\n                            this.stoppingCounter -\n                            1 +\n                            this.strip.length) %\n                            this.strip.length\n                    ];\n                symbolCase =\n                    this.stoppingCounter === this.symbolBottomCount + this.symbolCount\n                        ? Symbol.CaseRotation\n                        : Symbol.CaseBlur;\n            }\n\n            this.stoppingCounter++;\n        }\n\n        if (this.isTeasing && symbolCase == Symbol.CaseBlur) {\n            symbolCase = SymbolExtended.CaseTeasingBlur;\n        }\n\n        this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\n\n        this.addChildAt(this.currentSymbols[0], 0);\n\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            const symbol = this.currentSymbols[i];\n            symbol.x = -symbol.offsetX;\n            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\n        }\n\n        if (\n            this.isStopping &&\n            this.stoppingCounter === this.symbolBottomCount + this.symbolCount + this.symbolTopCount\n        ) {\n            this.spinPostRoll();\n        } else {\n            this.spinRoll();\n        }\n    }\n\n    public setTeasing(toValue: boolean, delay: number): void {\n        if (delay) {\n            if (this.teaseDelayTimer) {\n                clearTimeout(this.teaseDelayTimer);\n            }\n            this.teaseDelayTimer = setTimeout(\n                function (toValue: boolean) {\n                    this.isTeasing = toValue;\n                }.bind(this, toValue),\n                delay,\n            );\n        } else {\n            if (this.teaseDelayTimer) {\n                clearTimeout(this.teaseDelayTimer);\n                this.teaseDelayTimer = null;\n            }\n            this.isTeasing = toValue;\n        }\n    }\n\n    public spinStart(delay?: number): void {\n        this.shouldBeStopping = false;\n        this.isStopping = false;\n        this.stoppingCounter = 0;\n        this.isTeasing = false;\n        this.teasingSymbols = [];\n        this.rollSpeed = this.speed;\n        this.stripIndex = (this.data.index - this.symbolTopCount + this.strip.length) % this.strip.length;\n\n        if (delay > 0) {\n            setTimeout(() => {\n                this.spinPreRoll();\n            }, delay);\n        } else {\n            this.spinPreRoll();\n        }\n    }\n\n    public hasDice(): boolean {\n        return this.data.symbols.indexOf(10) !== -1;\n    }\n\n    public isReelTeasing(): boolean {\n        return this.isTeasing;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/ReelExtended.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Symbol } from \"../GameComponents/Symbol\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class SymbolExtended extends Symbol {\n    static CaseTeasingBlur: string = \"TEASING_BLUR\";\n    static CasePulse: string = \"PULSE\";\n\n    create(node: Element): void {\n        super.create(node);\n    }\n\n    clone(): Symbol {\n        let element: SymbolExtended = new SymbolExtended();\n\n        element.elements = this.elements.clone();\n        element.addChild(element.elements);\n\n        element.style = this.style;\n        element.offsetX = this.offsetX;\n        element.offsetY = this.offsetY;\n        element.symbolWidth = this.symbolWidth;\n        element.symbolHeight = this.symbolHeight;\n        element.visible = this.visible;\n        element.case = this.case;\n        element.style = this.style;\n        element.zIndex = this.zIndex;\n        element.type = this.type;\n        element.hasWinFrame = this.hasWinFrame;\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n\n    getChild(el: string): BaseElement {\n        if (this.elements.childs.hasOwnProperty(el)) {\n            return this.elements.childs[el];\n        }\n\n        return null;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/SymbolExtended.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { ShapeElement } from \"../Components/Elements/Graphics/ShapeElement\";\nimport { PathElementNode } from \"./PathElementNode\";\nimport { PathElementNodeMoveto } from \"./PathElementNodeMoveto\";\nimport { PathElementNodeLineto } from \"./PathElementNodeLineto\";\nimport { PathElementNodeCurvetoQuadratic } from \"./PathElementNodeCurvetoQuadratic\";\nimport { PathElementNodeCurvetoBezier } from \"./PathElementNodeCurvetoBezier\";\nimport { PathElementNodeArcto } from \"./PathElementNodeArcto\";\nimport { PathElementNodeClosepath } from \"./PathElementNodeClosepath\";\nimport { Tweens } from \"../Components/Effects/Tweens\";\nimport { Attributes } from \"../Utils/Attributes\";\n\nexport interface PathElementNodeGroup {\n    element: PathElementNode;\n    index: number;\n    absolute: boolean;\n}\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class PathElement extends ShapeElement {\n    private _path: Array<PathElementNode>;\n\n    private _pathTweenArray: Array<Array<PathElementNode>>;\n    private _pathTweenFrom: Array<PathElementNode>;\n    private _pathTweenTo: Array<PathElementNode>;\n    private _pathTweenIndex: number;\n    private _pathTweenLastIndex: number;\n\n    constructor() {\n        super();\n    }\n\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\n        Tweens.removeTweens(this);\n        this._path = null;\n        this._pathTweenArray = null;\n        this._pathTweenFrom = null;\n        this._pathTweenTo = null;\n    }\n\n    public updateByNode(node: Element): boolean {\n        let redraw: boolean = false;\n\n        if (node.hasAttribute(PathElementAttributes.POSITION_X)) {\n            this.position.x = parseInt(node.getAttribute(PathElementAttributes.POSITION_X));\n        }\n\n        if (node.hasAttribute(PathElementAttributes.POSITION_Y)) {\n            this.position.y = parseInt(node.getAttribute(PathElementAttributes.POSITION_Y));\n        }\n\n        if (node.hasAttribute(PathElementAttributes.PATH)) {\n            this._path = this.parsePath(node.getAttribute(PathElementAttributes.PATH));\n            redraw = true;\n        }\n\n        this.runPathTween(node);\n\n        if (!super.updateByNode(node)) {\n            if (redraw) {\n                this.redraw();\n                return true;\n            } else {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    private parsePath(input: string): Array<PathElementNode> {\n        input = input.replace(/\\s+/g, \" \").replace(/^\\s+|\\s+$/, \"\");\n        let pathArray: Array<string> = input.split(\" \");\n        let pathData: Array<PathElementNode> = [];\n\n        let lastNode: PathElementNode;\n        let lastMoveto: PathElementNodeMoveto;\n        let lastWasAbsolute: boolean = true;\n\n        for (let index = 0; index < pathArray.length; null) {\n            let out = this.parseNode(pathArray, index, lastNode, lastMoveto, lastWasAbsolute);\n            if (!out || !out.element) {\n                this.logError(\n                    'Error parsing path: \"' + input + '\" close to \"' + pathArray.slice(index).join(\" \") + '\"',\n                );\n                break;\n            }\n            lastNode = out.element;\n            lastWasAbsolute = out.absolute;\n            if (out.element instanceof PathElementNodeMoveto && out.element.command == \"M\") {\n                lastMoveto = out.element;\n            }\n            pathData.push(lastNode);\n            index = out.index;\n        }\n\n        return pathData;\n    }\n\n    private parseNode(\n        array: Array<string>,\n        index: number,\n        lastPoint: PathElementNode = null,\n        lastMoveto: PathElementNodeMoveto = null,\n        lastWasAbsolute: boolean = true,\n    ): PathElementNodeGroup {\n        if (array.length <= index) {\n            return null;\n        }\n        let command: string = /[mMlLcCqQaAzZ]/.test(array[index][0]) ? array[index][0] : null;\n        let noCommand: boolean = command == null;\n        let relative: boolean;\n        if (!command) {\n            index--;\n            if (!lastPoint) {\n                command = \"M\";\n            } else {\n                switch (lastPoint.command) {\n                    case \"M\":\n                        command = \"L\";\n                        break;\n                    default:\n                        command = lastPoint.command;\n                }\n                relative = !lastWasAbsolute;\n            }\n        } else {\n            relative = command == command.toLowerCase();\n        }\n        let concat: boolean = false;\n        if (!noCommand && array[index].length > 1) {\n            // concat shorthand, e.g. \"C100,20\"\n            concat = true;\n        } else {\n            index++;\n        }\n\n        let out: PathElementNodeGroup = {\n            element: null,\n            index: null,\n            absolute: !relative,\n        };\n\n        switch (command) {\n            case \"M\":\n            case \"m\":\n                if (array.length < index) {\n                    return null;\n                }\n                let m1 = this.parsePair(concat ? array[index].substr(1) : array[index]);\n                out.element = new PathElementNodeMoveto(\n                    (relative && lastPoint != null ? lastPoint.x : 0) + m1.x,\n                    (relative && lastPoint != null ? lastPoint.y : 0) + m1.y,\n                );\n                out.index = index + 1;\n                break;\n            case \"L\":\n            case \"l\":\n                if (array.length < index) {\n                    return null;\n                }\n                let l1 = this.parsePair(concat ? array[index].substr(1) : array[index]);\n                out.element = new PathElementNodeLineto(\n                    (relative && lastPoint != null ? lastPoint.x : 0) + l1.x,\n                    (relative && lastPoint != null ? lastPoint.y : 0) + l1.y,\n                );\n                out.index = index + 1;\n                break;\n\n            case \"Q\":\n            case \"q\":\n                if (array.length + 1 < index) {\n                    return null;\n                }\n                let q1 = this.parsePair(concat ? array[index].substr(1) : array[index]);\n                let q2 = this.parsePair(array[index + 1]);\n                out.element = new PathElementNodeCurvetoQuadratic(\n                    (relative && lastPoint != null ? lastPoint.x : 0) + q1.x,\n                    (relative && lastPoint != null ? lastPoint.y : 0) + q1.y,\n                    (relative && lastPoint != null ? lastPoint.x : 0) + q2.x,\n                    (relative && lastPoint != null ? lastPoint.y : 0) + q2.y,\n                );\n                out.index = index + 2;\n                break;\n\n            case \"C\":\n            case \"c\":\n                if (array.length + 2 < index) {\n                    return null;\n                }\n                let c1 = this.parsePair(concat ? array[index].substr(1) : array[index]);\n                let c2 = this.parsePair(array[index + 1]);\n                let c3 = this.parsePair(array[index + 2]);\n                out.element = new PathElementNodeCurvetoBezier(\n                    (relative && lastPoint != null ? lastPoint.x : 0) + c1.x,\n                    (relative && lastPoint != null ? lastPoint.y : 0) + c1.y,\n                    (relative && lastPoint != null ? lastPoint.x : 0) + c2.x,\n                    (relative && lastPoint != null ? lastPoint.y : 0) + c2.y,\n                    (relative && lastPoint != null ? lastPoint.x : 0) + c3.x,\n                    (relative && lastPoint != null ? lastPoint.y : 0) + c3.y,\n                );\n                out.index = index + 3;\n                break;\n\n            case \"A\":\n            case \"a\":\n                if (array.length + 2 < index) {\n                    return null;\n                }\n                let a1 = this.parsePair(concat ? array[index].substr(1) : array[index]);\n                let a2 = this.parsePair(array[index + 1]);\n                let a3 = parseFloat(array[index + 2]);\n                out.element = new PathElementNodeArcto(\n                    (relative && lastPoint != null ? lastPoint.x : 0) + a1.x,\n                    (relative && lastPoint != null ? lastPoint.y : 0) + a1.y,\n                    (relative && lastPoint != null ? lastPoint.x : 0) + a2.x,\n                    (relative && lastPoint != null ? lastPoint.y : 0) + a2.y,\n                    a3,\n                );\n                out.index = index + 3;\n                break;\n\n            case \"Z\":\n            case \"z\":\n                if (lastMoveto) {\n                    out.element = new PathElementNodeClosepath(lastMoveto.x, lastMoveto.y);\n                    out.index = index + 1;\n                }\n\n                break;\n        }\n        return out;\n    }\n\n    private parsePair(pair: string): PIXI.Point {\n        let arr = pair.split(\",\").map((value) => parseFloat(value));\n        return new PIXI.Point(arr.length > 0 ? arr[0] : null, arr.length > 1 ? arr[1] : null);\n    }\n\n    private runPathTween(node: Element): void {\n        if (!node.hasAttribute(PathElementAttributes.PATH_TWEEN)) {\n            return;\n        }\n\n        Tweens.removeTweens(this, \"pathIndex\");\n\n        this._pathTweenLastIndex = null;\n\n        let tweenValues: Array<number> = [];\n\n        let lastPath: Object;\n\n        this._pathTweenArray = node\n            .getAttribute(PathElementAttributes.PATH_TWEEN)\n            .split(\";\")\n            .map((value, index) => {\n                let out: Array<PathElementNode>;\n                if (\n                    index == 0 &&\n                    node.getAttribute(PathElementAttributes.PATH_TWEEN) ==\n                        PathElementAttributes.PATH_TWEEN_POSITION_VALUE.SMOOTH\n                ) {\n                    out = [];\n                    this._path.forEach((node) => {\n                        out.push(node.clone());\n                    });\n                } else {\n                    out = this.parsePath(value);\n                }\n                if (!lastPath) {\n                    lastPath = {};\n                }\n                let anyChange: boolean = false;\n                out.forEach((value, index) => {\n                    if (lastPath[index] && lastPath[index].equalTo(value)) {\n                        out[index] = null;\n                    } else {\n                        lastPath[index] = value;\n                        anyChange = true;\n                    }\n                });\n                if (!anyChange) {\n                    out = null;\n                    tweenValues.push(tweenValues.length ? tweenValues[tweenValues.length - 1] : 0);\n                } else {\n                    if (tweenValues.length) {\n                        tweenValues[tweenValues.length - 1] = tweenValues.length - 1;\n                    }\n                    tweenValues.push(tweenValues.length);\n                }\n                return out;\n            });\n\n        const tween: string = \"tweenIndex\";\n        const tweenEase: Array<string> = ArrayUtils.stringArray(\n            node.getAttribute(PathElementAttributes.PATH_TWEEN_EASE) || \"linear\",\n        );\n        const tweenDuration: Array<number> = [\n            Attributes.assignIntAttribute(node, PathElementAttributes.PATH_TWEEN_DURATION, 120),\n        ];\n        let tweenDelay: Array<number> = [\n            Attributes.assignIntAttribute(node, PathElementAttributes.PATH_TWEEN_DELAY, 0),\n        ];\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(node, PathElementAttributes.PATH_TWEEN_LOOP, null);\n        const keyTimes: Array<number> = node.hasAttribute(PathElementAttributes.PATH_TWEEN_KEY_TIMES)\n            ? ArrayUtils.numberArray(node.getAttribute(PathElementAttributes.PATH_TWEEN_KEY_TIMES))\n            : null;\n\n        Tweens.customTween(this, { tween, tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop, keyTimes });\n    }\n\n    get tweenIndex(): number {\n        return this._pathTweenIndex;\n    }\n\n    set tweenIndex(value: number) {\n        this._pathTweenIndex = value;\n        let index = Math.floor(this._pathTweenIndex);\n        let ratio = this._pathTweenIndex - index;\n        if (index >= this._pathTweenArray.length - 1) {\n            index = this._pathTweenArray.length - 2;\n            ratio = 1;\n        }\n        if (index != this._pathTweenLastIndex) {\n            this._pathTweenLastIndex = index;\n            if (this._pathTweenArray[index]) {\n                this._pathTweenFrom = this._pathTweenArray[index];\n            }\n            if (this._pathTweenArray[index + 1]) {\n                this._pathTweenTo = this._pathTweenArray[index + 1] ? this._pathTweenArray[index + 1] : null;\n            }\n        }\n        let redraw: boolean = false;\n        if (!this._pathTweenFrom || !this._pathTweenTo) {\n            return;\n        }\n        this._path.forEach((node, i) => {\n            if (this._pathTweenFrom[i] != null && this._pathTweenTo[i] != null) {\n                redraw = true;\n                node.setInterpolatedTo(this._pathTweenFrom[i], this._pathTweenTo[i], ratio);\n            }\n        });\n        if (redraw) {\n            this.redraw();\n        }\n    }\n\n    public redraw(): void {\n        this.clear();\n        this.beginFill(this._color, this._fillAlpha);\n        this.lineStyle(this._lineWidth, this._lineColor, this._lineAlpha);\n\n        if (this._path) {\n            this._path.forEach((node) => {\n                node.draw(this);\n            });\n        }\n\n        this.endFill();\n    }\n\n    clone(): PathElement {\n        let element: PathElement = new PathElement();\n        element.removeChildren();\n\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.tint = this.tint;\n        element.blendMode = this.blendMode;\n        element.name = this.name;\n        element._tweenEngine = this._tweenEngine;\n\n        element._lineWidth = this._lineWidth;\n        element._lineColor = this._lineColor;\n        element._lineAlpha = this._lineAlpha;\n        element._fillAlpha = this._fillAlpha;\n        element._color = this._color;\n        element._path = [];\n\n        this._path.forEach((node) => {\n            element._path.push(node.clone());\n        });\n\n        element.redraw();\n\n        return element;\n    }\n}\n\nexport const PathElementAttributes = {\n    /*\n     * SVG-like path attribute, e.g. \"M 100,200 L 200,300 C 100,200 300,400 150,200 Z\"\n     */\n    PATH: \"Path\",\n\n    PATH_TWEEN: \"PathTween\",\n    PATH_TWEEN_EASE: \"PathTweenEase\",\n    PATH_TWEEN_DURATION: \"PathTweenDuration\",\n    PATH_TWEEN_DELAY: \"PathTweenDelay\",\n    PATH_TWEEN_POSITION: \"PathTweenPath\",\n    PATH_TWEEN_POSITION_VALUE: {\n        ABSOLUTE: \"absolute\",\n        SMOOTH: \"smooth\",\n    },\n    PATH_TWEEN_LOOP: \"PathTweenLoop\",\n    /* Array of offsets of individual tween values relative to total duration\n     * e.g. 0;0.25;1 with duration 100 meaning first value at T=0, second at T=25, last at T=100\n     */\n    PATH_TWEEN_KEY_TIMES: \"PathTweenKeyTimes\",\n\n    POSITION_X: \"PositionX\",\n    POSITION_Y: \"PositionY\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PathElement.ts\n **/","import { PathElementNode } from \"./PathElementNode\";\n\n/**\n * Path absolute MoveTo command, e.g. \"M 100,200\"\n */\nexport class PathElementNodeMoveto extends PathElementNode {\n    constructor(x: number, y: number) {\n        super(x, y);\n        this.command = \"M\";\n    }\n\n    public draw(graphics: PIXI.Graphics) {\n        graphics.moveTo(this.x, this.y);\n    }\n\n    public clone(): PathElementNodeMoveto {\n        return new PathElementNodeMoveto(this.x, this.y);\n    }\n\n    public setInterpolatedTo(from: PathElementNode, to: PathElementNode, ratio: number): void {\n        this.x = from.x + (to.x - from.x) * ratio;\n        this.y = from.y + (to.y - from.y) * ratio;\n    }\n\n    public equalTo(to: PathElementNodeMoveto): boolean {\n        return this.x === to.x && this.y === to.y;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PathElementNodeMoveto.ts\n **/","/*\n * Abstract class for other path nodes, see SVG specifications ( https://www.w3.org/TR/SVG11/paths.html )\n *  and PIXI.Graphics docs ( http://pixijs.download/dev/docs/PIXI.Graphics.htm )\n */\nexport class PathElementNode {\n    public command: string;\n    public x: number;\n    public y: number;\n\n    constructor(x: number, y: number) {\n        this.x = x;\n        this.y = y;\n    }\n\n    public draw(graphics: PIXI.Graphics) {\n        throw \"Method not implemented: draw\";\n    }\n\n    public clone(): PathElementNode {\n        throw \"Method not implemented: clone\";\n    }\n\n    public setInterpolatedTo(from: PathElementNode, to: PathElementNode, ratio: number): void {\n        throw \"Method not implemented: getInterpolation\";\n    }\n\n    public equalTo(to: PathElementNode): boolean {\n        throw \"Method not implemented: equalTo\";\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PathElementNode.ts\n **/","import { PathElementNodeMoveto } from \"./PathElementNodeMoveto\";\n\n/**\n * Path absolute LineTo command, e.g. \"L 100,200\"\n */\nexport class PathElementNodeLineto extends PathElementNodeMoveto {\n    constructor(x: number, y: number) {\n        super(x, y);\n        this.command = \"L\";\n    }\n\n    public draw(graphics: PIXI.Graphics) {\n        graphics.lineTo(this.x, this.y);\n    }\n\n    public clone(): PathElementNodeLineto {\n        return new PathElementNodeLineto(this.x, this.y);\n    }\n\n    public setInterpolatedTo(from: PathElementNodeLineto, to: PathElementNodeLineto, ratio: number): void {\n        this.x = from.x + (to.x - from.x) * ratio;\n        this.y = from.y + (to.y - from.y) * ratio;\n    }\n\n    public equalTo(to: PathElementNodeLineto): boolean {\n        return this.x === to.x && this.y === to.y;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PathElementNodeLineto.ts\n **/","import { PathElementNodeMoveto } from \"./PathElementNodeMoveto\";\n\n/**\n * Path absolute quadratic CurveTo command, e.g. \"Q 100,50 100,200\"\n */\nexport class PathElementNodeCurvetoQuadratic extends PathElementNodeMoveto {\n    public cx1: number;\n    public cy1: number;\n\n    constructor(cx1: number, cy1: number, x: number, y: number) {\n        super(x, y);\n        this.cx1 = cx1;\n        this.cy1 = cy1;\n        this.command = \"Q\";\n    }\n\n    public draw(graphics: PIXI.Graphics) {\n        graphics.quadraticCurveTo(this.cx1, this.cy1, this.x, this.y);\n    }\n\n    public clone(): PathElementNodeCurvetoQuadratic {\n        return new PathElementNodeCurvetoQuadratic(this.cx1, this.cy1, this.x, this.y);\n    }\n\n    public setInterpolatedTo(\n        from: PathElementNodeCurvetoQuadratic,\n        to: PathElementNodeCurvetoQuadratic,\n        ratio: number,\n    ): void {\n        this.x = from.x + (to.x - from.x) * ratio;\n        this.y = from.y + (to.y - from.y) * ratio;\n        this.cx1 = from.cx1 + (to.cx1 - from.cx1) * ratio;\n        this.cy1 = from.cy1 + (to.cy1 - from.cy1) * ratio;\n    }\n\n    public equalTo(to: PathElementNodeCurvetoQuadratic): boolean {\n        return this.x === to.x && this.y === to.y && this.cx1 === to.cx1 && this.cy1 === to.cy1;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PathElementNodeCurvetoQuadratic.ts\n **/","import { PathElementNodeCurvetoQuadratic } from \"./PathElementNodeCurvetoQuadratic\";\n\n/**\n * Path absolute CurveTo command, e.g. \"C 50,50 100,-50 100,200\"\n */\nexport class PathElementNodeCurvetoBezier extends PathElementNodeCurvetoQuadratic {\n    public cx2: number;\n    public cy2: number;\n\n    constructor(cx1: number, cy1: number, cx2: number, cy2: number, x: number, y: number) {\n        super(cx1, cy1, x, y);\n        this.cx2 = cx2;\n        this.cy2 = cy2;\n        this.command = \"C\";\n    }\n\n    public draw(graphics: PIXI.Graphics) {\n        graphics.bezierCurveTo(this.cx1, this.cy1, this.cx2, this.cy2, this.x, this.y);\n    }\n\n    public clone(): PathElementNodeCurvetoBezier {\n        return new PathElementNodeCurvetoBezier(this.cx1, this.cy1, this.cx2, this.cy2, this.x, this.y);\n    }\n\n    public setInterpolatedTo(\n        from: PathElementNodeCurvetoBezier,\n        to: PathElementNodeCurvetoBezier,\n        ratio: number,\n    ): void {\n        this.x = from.x + (to.x - from.x) * ratio;\n        this.y = from.y + (to.y - from.y) * ratio;\n        this.cx1 = from.cx1 + (to.cx1 - from.cx1) * ratio;\n        this.cy1 = from.cy1 + (to.cy1 - from.cy1) * ratio;\n        this.cx2 = from.cx2 + (to.cx2 - from.cx2) * ratio;\n        this.cy2 = from.cy2 + (to.cy2 - from.cy2) * ratio;\n    }\n\n    public equalTo(to: PathElementNodeCurvetoBezier): boolean {\n        return (\n            this.x === to.x &&\n            this.y === to.y &&\n            this.cx1 === to.cx1 &&\n            this.cy1 === to.cy1 &&\n            this.cx2 === to.cx2 &&\n            this.cy2 === to.cy2\n        );\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PathElementNodeCurvetoBezier.ts\n **/","import { PathElementNodeMoveto } from \"./PathElementNodeMoveto\";\n\n/**\n * Path absolute ArcTo command, e.g. \"A 50,50 100,-50 50 100,200\"\n */\nexport class PathElementNodeArcto extends PathElementNodeMoveto {\n    public x1: number;\n    public y1: number;\n    public r: number;\n\n    constructor(x1: number, y1: number, x: number, y: number, r: number) {\n        super(x, y);\n        this.x1 = x1;\n        this.y1 = y1;\n        this.r = r;\n        this.command = \"A\";\n    }\n\n    public draw(graphics: PIXI.Graphics) {\n        graphics.arcTo(this.x1, this.y1, this.x, this.y, this.r);\n    }\n\n    public clone(): PathElementNodeArcto {\n        return new PathElementNodeArcto(this.x1, this.y1, this.x, this.y, this.r);\n    }\n\n    public setInterpolatedTo(from: PathElementNodeArcto, to: PathElementNodeArcto, ratio: number): void {\n        this.x = from.x + (to.x - from.x) * ratio;\n        this.y = from.y + (to.y - from.y) * ratio;\n        this.x1 = from.x1 + (to.x1 - from.x1) * ratio;\n        this.y1 = from.y1 + (to.y1 - from.y1) * ratio;\n        this.r = from.r + (to.r - from.r) * ratio;\n    }\n\n    public equalTo(to: PathElementNodeArcto): boolean {\n        return this.x === to.x && this.y === to.y && this.x1 === to.x1 && this.r === to.r;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PathElementNodeArcto.ts\n **/","import { PathElementNodeMoveto } from \"./PathElementNodeMoveto\";\n\n/**\n * Path absolute MoveTo command, e.g. \"M 100,200\"\n */\nexport class PathElementNodeClosepath extends PathElementNodeMoveto {\n    constructor(x: number, y: number) {\n        super(x, y);\n        this.command = \"Z\";\n    }\n\n    public draw(graphics: PIXI.Graphics) {\n        graphics.lineTo(this.x, this.y);\n        graphics.moveTo(this.x, this.y);\n    }\n\n    public clone(): PathElementNodeClosepath {\n        return new PathElementNodeClosepath(this.x, this.y);\n    }\n\n    public setInterpolatedTo(from: PathElementNodeClosepath, to: PathElementNodeClosepath, ratio: number): void {\n        this.x = from.x + (to.x - from.x) * ratio;\n        this.y = from.y + (to.y - from.y) * ratio;\n    }\n\n    public equalTo(to: PathElementNodeClosepath): boolean {\n        return this.x === to.x && this.y === to.y;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PathElementNodeClosepath.ts\n **/","import { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\nimport { StringUtils, engineComponent } from \"neo-common\";\nimport { StageController } from \"../Components/StageController\";\nimport { ImageElement, ImageElementAttributes } from \"../Components/Elements/Graphics/ImageElement\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\nimport { Attributes } from \"../Utils/Attributes\";\nimport { PlaneRopeStyle } from \"./PlaneRopeStyle\";\nimport { StyleManager } from \"../Components/Managers/StyleManager\";\nimport { CustomUtils } from \"../Utils/CustomUtils\";\n\n/**\n * !!! WARNING !!! this class does not support texture in spritesheets format !!!\n * PlaneRopeElement class is class which creates holder for image from resources with plane or rope effect\n * Example:\n *   <PlaneRopeElement Class=\"PlaneRopeElement\" TypeAnimation=\"plane\" AxisOfWaves=\"xy\" NumberOfPointsX=\"20\" NumberOfPointsY=\"20\" Amplitude=\"2\" Wavelength=\"0.15\" Speed=\"0.004\" Image=\"[imageId]\" X=\"0\" Y=\"0\"/>\n *   OR\n *   <PlaneRopeElement Style=\"PRS_Style\" />\n * @class PlaneRopeElement\n * @extends BaseElement\n */\n@engineComponent(ComponentTypes.DisplayObject)\nexport class PlaneRopeElement extends BaseElement {\n    private _planeOrRope: string;\n    private _timerAnimate: FrameTimerEventEmitter;\n    private _delayStopTimer: FrameTimerEventEmitter;\n    private _count: number;\n    private _originalVertices: Float32Array;\n    private _mesh: PIXI.mesh.Mesh;\n    private _meshVerticesBackup: Float32Array;\n    private _points: Array<PIXI.Point> = [];\n    private _originalPoints: Array<PIXI.Point> = [];\n    private _graphics: PIXI.Graphics;\n    private _labelText: Array<PIXI.Text> = [];\n    private _debugTextColor: string;\n    private _created: boolean;\n    private _debug: boolean;\n    private _numberOfPointsX: number;\n    private _numberOfPointsY: number;\n    private _amplitude: number;\n    private _wavelength: number;\n    private _speed: number;\n    private _axisOfWaves: string;\n    private _blendMode: number;\n    private _resource: ImageElement;\n    private _curtainSpeed: number;\n    private _curtainAmplitude: number;\n    private _curtainCount: number;\n    private _duration: number;\n    private _actualFrame: number;\n    private _style: PlaneRopeStyle;\n    //private _elements: ContainerElement;\n    private _framesArray: Array<number>;\n    private _framesPositionPointsArrayX: Object;\n    private _framesPositionPointsArrayY: Object;\n    private _typeFrames: string;\n    private _loop: boolean;\n    private _typePosition: string;\n    private _canvasPadding: number = 1;\n    private running: boolean = false;\n\n    constructor() {\n        super();\n        this._planeOrRope = \"plane\";\n        this._count = 0;\n        this._numberOfPointsX = 20;\n        this._numberOfPointsY = 20;\n        this._amplitude = 3;\n        this._wavelength = 0.15;\n        this._speed = 0.004;\n        this._axisOfWaves = \"xy\";\n        this._created = false;\n        this._blendMode = 0; // NORMAL\n        this._debug = false;\n        this._curtainSpeed = 0;\n        this._curtainAmplitude = 0;\n        this._curtainCount = 0;\n        this._duration = -1; // -1 NO DURATION == LOOP\n        this._actualFrame = 0;\n        this._loop = false;\n        this._typePosition = \"relative\";\n        this._typeFrames = \"linear\";\n\n        this._timerAnimate = CreateFrameTimer(\"planeTimer\");\n        this._timerAnimate.on(FrameTimerEvents.Complete, this.animate.bind(this));\n        this._delayStopTimer = CreateFrameTimer(\"delayStopTimer\");\n        this._delayStopTimer.on(FrameTimerEvents.Complete, this.stop.bind(this));\n    }\n\n    //******************************************************************************************************************\n    //  INITIALIZATION\n    //******************************************************************************************************************\n\n    public createByNode(node: Element): void {\n        if (!this._created) {\n            if (this.name == null) {\n                this.name = node.nodeName;\n            }\n\n            if (DEBUG) {\n                if (\n                    node.hasAttribute(PlaneRopeElementAttributes.DEBUG) &&\n                    node.getAttribute(PlaneRopeElementAttributes.DEBUG) === \"true\"\n                ) {\n                    debugger;\n                    this._debug = true;\n\n                    if (node.hasAttribute(PlaneRopeElementAttributes.DEBUG_TEXT_COLOR)) {\n                        this._debugTextColor = node.getAttribute(PlaneRopeElementAttributes.DEBUG_TEXT_COLOR);\n                    }\n                }\n            }\n\n            super.createByNode(node);\n\n            if (node.hasAttribute(PlaneRopeElementAttributes.NUMBER_OF_POINTS_X)) {\n                this._numberOfPointsX = parseInt(node.getAttribute(PlaneRopeElementAttributes.NUMBER_OF_POINTS_X));\n            }\n\n            if (node.hasAttribute(PlaneRopeElementAttributes.NUMBER_OF_POINTS_Y)) {\n                this._numberOfPointsY = parseInt(node.getAttribute(PlaneRopeElementAttributes.NUMBER_OF_POINTS_Y));\n            }\n\n            if (node.hasAttribute(PlaneRopeElementAttributes.TYPE_FRAMES)) {\n                this._typeFrames = node.getAttribute(PlaneRopeElementAttributes.TYPE_FRAMES);\n            }\n\n            if (node.hasAttribute(PlaneRopeElementAttributes.TYPE_POSITION)) {\n                this._typePosition = node.getAttribute(PlaneRopeElementAttributes.TYPE_POSITION);\n            }\n\n            if (node.hasAttribute(PlaneRopeElementAttributes.LOOP)) {\n                this._loop = node.getAttribute(PlaneRopeElementAttributes.LOOP) == \"true\";\n            }\n\n            if (node.hasAttribute(PlaneRopeElementAttributes.STYLE) || this._style != null) {\n                if (this._style == null) {\n                    this._style = <PlaneRopeStyle>(\n                        StyleManager.Styles[node.getAttribute(PlaneRopeElementAttributes.STYLE)]\n                    );\n                }\n\n                if (this._style != null) {\n                    // if (this._style.container != null) {\n                    //     if (node.hasAttribute(PlaneRopeElementAttributes.CLONE) && StringUtils.parseBoolean(node.getAttribute(PlaneRopeElementAttributes.CLONE))) {\n                    //         this._elements = this._style.container.clone();\n                    //     } else {\n                    //         this._elements = this._style.container;\n                    //     }\n                    //\n                    //     this.addChild(this._elements);\n\n                    // All number of frames\n                    if (this._style.frames != null) {\n                        this._framesArray = [];\n\n                        for (let key in this._style.frames) {\n                            this._framesArray.push(parseInt(key));\n                        }\n\n                        // MAX frame\n                        this._duration = this._framesArray[this._framesArray.length - 1];\n                    } else {\n                        if (DEBUG) {\n                            this.log(\"WARNING no planerope\");\n                        }\n                    }\n\n                    // position of all points X\n                    if (this._style.positionX != null) {\n                        this._framesPositionPointsArrayX = this._style.positionX;\n\n                        for (let x in this._framesPositionPointsArrayX) {\n                            let xArray: Array<number> = this._framesPositionPointsArrayX[x].split(\";\").map(parseFloat);\n\n                            if (xArray.length != this._numberOfPointsX * this._numberOfPointsY) {\n                                if (DEBUG) {\n                                    this.log(\n                                        \"WARNING FRAME: \" +\n                                            x.toString() +\n                                            \" the number of points X is not equal to the total number of points (X*Y)\",\n                                    );\n                                }\n                            }\n                        }\n                    }\n\n                    // position of all points Y\n                    if (this._style.positionY != null) {\n                        this._framesPositionPointsArrayY = this._style.positionY;\n\n                        for (let y in this._framesPositionPointsArrayY) {\n                            let yArray: Array<number> = this._framesPositionPointsArrayY[y].split(\";\").map(parseFloat);\n\n                            if (yArray.length != this._numberOfPointsX * this._numberOfPointsY) {\n                                if (DEBUG) {\n                                    this.log(\n                                        \"WARNING FRAME: \" +\n                                            y.toString() +\n                                            \" the number of points Y is not equal to the total number of points (X*Y)\",\n                                    );\n                                }\n                            }\n                        }\n                    }\n\n                    // type of animation frames\n                    if (this._typeFrames === \"linear\") {\n                        if (this._framesArray.length > 1 && this._framesArray.length != this._duration) {\n                            let previousDefinedFrameIndex: number = 0;\n                            let nextDefinedFrameIndex: number = 1;\n\n                            for (let i: number = 0; i < this._duration; i++) {\n                                if (\n                                    i > this._framesArray[previousDefinedFrameIndex] &&\n                                    i < this._framesArray[nextDefinedFrameIndex] &&\n                                    (i != this._framesArray[i] || this._framesArray[i] == null) &&\n                                    nextDefinedFrameIndex <= this._framesArray.length - 1\n                                ) {\n                                    let prevFrame: number = this._framesArray[previousDefinedFrameIndex];\n                                    let nextFrame: number = this._framesArray[nextDefinedFrameIndex];\n                                    let diffFrames: number = nextFrame - prevFrame; //- 1;\n\n                                    let ArrayPrevValuesX: Array<number> = this._framesPositionPointsArrayX[prevFrame]\n                                        .split(\";\")\n                                        .map(parseFloat);\n                                    let ArrayNextValuesX: Array<number> = this._framesPositionPointsArrayX[nextFrame]\n                                        .split(\";\")\n                                        .map(parseFloat);\n\n                                    let ArrayPrevValuesY: Array<number> = this._framesPositionPointsArrayY[prevFrame]\n                                        .split(\";\")\n                                        .map(parseFloat);\n                                    let ArrayNextValuesY: Array<number> = this._framesPositionPointsArrayY[nextFrame]\n                                        .split(\";\")\n                                        .map(parseFloat);\n\n                                    for (let newFrame: number = i; newFrame < nextFrame; newFrame++) {\n                                        let newFrameValuesStringX: string = \"\";\n                                        let newFrameValuesStringY: string = \"\";\n\n                                        if (this._framesPositionPointsArrayX[newFrame] == null) {\n                                            for (let x: number = 0; x < ArrayPrevValuesX.length; x++) {\n                                                let diffValue: number =\n                                                    (ArrayNextValuesX[x] - ArrayPrevValuesX[x]) / diffFrames;\n                                                newFrameValuesStringX += Math.round(\n                                                    ArrayPrevValuesX[x] + diffValue * (newFrame + 1 - i),\n                                                );\n\n                                                if (x < ArrayPrevValuesX.length - 1) {\n                                                    newFrameValuesStringX += \";\";\n                                                }\n                                            }\n\n                                            // ADD new frame\n                                            this._framesPositionPointsArrayX[newFrame] = newFrameValuesStringX;\n                                        }\n\n                                        if (this._framesPositionPointsArrayY[newFrame] == null) {\n                                            for (let y: number = 0; y < ArrayPrevValuesY.length; y++) {\n                                                let diffValue: number =\n                                                    (ArrayNextValuesY[y] - ArrayPrevValuesY[y]) / diffFrames;\n                                                newFrameValuesStringY += Math.round(\n                                                    ArrayPrevValuesY[y] + diffValue * (newFrame + 1 - i),\n                                                );\n\n                                                if (y < ArrayPrevValuesY.length - 1) {\n                                                    newFrameValuesStringY += \";\";\n                                                }\n                                            }\n\n                                            // ADD new frame\n                                            this._framesPositionPointsArrayY[newFrame] = newFrameValuesStringY;\n                                        }\n                                    }\n\n                                    previousDefinedFrameIndex = nextDefinedFrameIndex;\n                                    nextDefinedFrameIndex++;\n                                    i = nextFrame;\n                                }\n                            }\n                        }\n                    }\n                    // } else {\n                    //     if (DEBUG) {\n                    //         this.log('WARNING no children');\n                    //     }\n                    // }\n                } else {\n                    if (DEBUG) {\n                        this.log(\"ERROR no style with name: \" + node.getAttribute(PlaneRopeElementAttributes.STYLE));\n                    }\n                }\n            } else {\n                if (DEBUG) {\n                    this.log(\"WARNING no style (PlaneRopeStyle) for PlaneRopeElement\");\n                }\n            }\n\n            if (node.hasAttribute(ImageElementAttributes.BLEND_MODE)) {\n                this._blendMode = this.getBlendModeByString(\n                    Attributes.assignStringAttribute(node, ImageElementAttributes.BLEND_MODE, this._blendMode),\n                );\n            }\n\n            if (node.hasAttribute(ImageElementAttributes.IMAGE) && this._resource == null) {\n                this._resource = new ImageElement(\n                    StageController.getTextureByResourceId(node.getAttribute(ImageElementAttributes.IMAGE)),\n                );\n                this._resource.blendMode = CustomUtils.getBlendMode(this._blendMode);\n            }\n\n            if (node.hasAttribute(PlaneRopeElementAttributes.AMPLITUDE)) {\n                this._amplitude = parseInt(node.getAttribute(PlaneRopeElementAttributes.AMPLITUDE));\n            }\n\n            if (node.hasAttribute(PlaneRopeElementAttributes.WAVELENGTH)) {\n                this._wavelength = parseFloat(node.getAttribute(PlaneRopeElementAttributes.WAVELENGTH));\n            }\n\n            if (node.hasAttribute(PlaneRopeElementAttributes.SPEED)) {\n                this._speed = parseFloat(node.getAttribute(PlaneRopeElementAttributes.SPEED));\n            }\n\n            if (node.hasAttribute(PlaneRopeElementAttributes.TYPE_ANIMATION)) {\n                this._planeOrRope = node.getAttribute(PlaneRopeElementAttributes.TYPE_ANIMATION);\n            }\n\n            if (node.hasAttribute(PlaneRopeElementAttributes.AXIS_OF_WAVES)) {\n                this._axisOfWaves = node.getAttribute(PlaneRopeElementAttributes.AXIS_OF_WAVES);\n            }\n\n            if (node.hasAttribute(PlaneRopeElementAttributes.CURTAIN_SPEED)) {\n                this._curtainSpeed = parseInt(node.getAttribute(PlaneRopeElementAttributes.CURTAIN_SPEED));\n            }\n\n            if (node.hasAttribute(PlaneRopeElementAttributes.CURTAIN_AMPLITUDE)) {\n                this._curtainAmplitude = parseInt(node.getAttribute(PlaneRopeElementAttributes.CURTAIN_AMPLITUDE));\n            }\n\n            if (node.hasAttribute(PlaneRopeElementAttributes.CANVAS_PADDING)) {\n                this._canvasPadding = parseInt(node.getAttribute(PlaneRopeElementAttributes.CANVAS_PADDING));\n            }\n\n            this.createMesh();\n            this.animate(); // WARNING !!! this is necessary for the first deformation of the original texture, the original undeformed texture is never displayed\n            if (this._mesh) {\n                // BACKUP vertices after deformed texture\n                this._meshVerticesBackup = this._mesh.vertices.slice(0); // deformation mesh\n            }\n            this._created = true;\n        }\n    }\n\n    public updateByNode(node: Element): void {\n        if (DEBUG) {\n            if (\n                node.hasAttribute(PlaneRopeElementAttributes.DEBUG) &&\n                node.getAttribute(PlaneRopeElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n                this._debug = true;\n            }\n        }\n\n        super.updateByNode(node);\n\n        if (node.hasAttribute(PlaneRopeElementAttributes.LOOP)) {\n            this._loop = node.getAttribute(PlaneRopeElementAttributes.LOOP) === \"true\";\n        }\n\n        if (node.hasAttribute(PlaneRopeElementAttributes.START)) {\n            let delay = 0;\n            if (node.getAttribute(PlaneRopeElementAttributes.START).split(\";\").length > 1) {\n                let from = parseInt(node.getAttribute(PlaneRopeElementAttributes.START).split(\";\")[0]);\n                let to = parseInt(node.getAttribute(PlaneRopeElementAttributes.START).split(\";\")[1]);\n                delay = from + Math.round(Math.random() * (to - from));\n            } else {\n                delay = parseInt(node.getAttribute(PlaneRopeElementAttributes.START));\n                if (isNaN(delay)) {\n                    delay = 0;\n                }\n            }\n            this.start(delay);\n            this._count = 0; // reset start angle position to 0 etc. \"sin(this._count)\"\n            this._curtainCount = 0;\n        }\n\n        if (node.hasAttribute(PlaneRopeElementAttributes.STOP)) {\n            //this.stop();\n            this._delayStopTimer.start(parseInt(node.getAttribute(PlaneRopeElementAttributes.STOP)));\n        }\n\n        if (node.hasAttribute(PlaneRopeElementAttributes.CURTAIN_SPEED)) {\n            this._curtainSpeed = parseInt(node.getAttribute(PlaneRopeElementAttributes.CURTAIN_SPEED));\n        }\n\n        if (node.hasAttribute(PlaneRopeElementAttributes.CURTAIN_AMPLITUDE)) {\n            this._curtainAmplitude = parseInt(node.getAttribute(PlaneRopeElementAttributes.CURTAIN_AMPLITUDE));\n        }\n    }\n\n    //******************************************************************************************************************\n    //  MESH\n    //******************************************************************************************************************\n\n    private createMesh(): void {\n        if (this._planeOrRope === \"rope\") {\n            // ROPE\n            let ropeLength = this._resource.texture.width;\n\n            for (let i = 0; i < this._numberOfPointsX; i++) {\n                this._points.push(new PIXI.Point(i * (ropeLength / (this._numberOfPointsX - 1)), 0));\n                this._originalPoints.push(new PIXI.Point(i * (ropeLength / (this._numberOfPointsX - 1)), 0));\n            }\n\n            if (this._points && this._points.length > 0) {\n                this._mesh = new PIXI.mesh.Rope(this._resource.texture, this._points);\n                if (this._mesh) {\n                    this._mesh.width = this._resource.texture.width;\n                    this._mesh.height = this._resource.texture.height;\n                    this._mesh.blendMode = CustomUtils.getBlendMode(this._blendMode);\n                    this._mesh.canvasPadding = this._canvasPadding;\n                    this.addChild(this._mesh);\n                }\n            }\n        } else if (\n            this._planeOrRope === \"plane\" ||\n            this._planeOrRope === \"regularGrid\" ||\n            this._planeOrRope === \"curtain\"\n        ) {\n            // PLANE and REGULAR GRID\n            this._mesh = new PIXI.mesh.Plane(this._resource.texture, this._numberOfPointsX, this._numberOfPointsY);\n            this._mesh.drawMode = PIXI.DRAW_MODES.LINE_LOOP;\n\n            if (this._mesh) {\n                this._mesh.width = this._resource.texture.width;\n                this._mesh.height = this._resource.texture.height;\n                this._mesh.blendMode = CustomUtils.getBlendMode(this._blendMode);\n                this._mesh.canvasPadding = this._canvasPadding;\n                this.addChild(this._mesh);\n\n                this._originalVertices = this._mesh.vertices.slice(0);\n            }\n        } else {\n        }\n\n        if (this._debug === true) {\n            this._graphics = new PIXI.Graphics();\n            if (this._graphics) {\n                this.addChild(this._graphics);\n            }\n\n            if (this._debugTextColor != null && this._debugTextColor != \"undefined\") {\n                this._labelText = [];\n                if (this._labelText) {\n                    for (let i: number = 0; i < this._numberOfPointsX * this._numberOfPointsY; i++) {\n                        let text = new PIXI.Text(i + 1 + \"\");\n                        text.style.fill = this._debugTextColor;\n                        this._labelText.push(text);\n                        this.addChild(this._labelText[i]);\n                    }\n                }\n            }\n        }\n\n        //this._timer.start(20);\n    }\n\n    private animate(): void {\n        let stopTimer: boolean = false;\n\n        this._count += this._speed;\n\n        if (this._count >= 2 * Math.PI) {\n            this._count = this._count % (2 * Math.PI);\n        }\n\n        if (this._planeOrRope === \"rope\") {\n            // ROPE\n            if (this._mesh && this._created === true && this._points && this._points.length > 0) {\n                let xArray: Array<number>;\n                let yArray: Array<number>;\n\n                if (\n                    this._actualFrame >= 0 &&\n                    this._framesPositionPointsArrayX[this._actualFrame] != null &&\n                    this._framesPositionPointsArrayX[this._actualFrame] != \"undefined\" &&\n                    this._framesPositionPointsArrayY[this._actualFrame] != null &&\n                    this._framesPositionPointsArrayY[this._actualFrame] != \"undefined\"\n                ) {\n                    xArray = this._framesPositionPointsArrayX[this._actualFrame].split(\";\").map(parseFloat);\n                    yArray = this._framesPositionPointsArrayY[this._actualFrame].split(\";\").map(parseFloat);\n                }\n\n                if (\n                    xArray != null &&\n                    xArray.length > 0 &&\n                    xArray.length == this._numberOfPointsX * this._numberOfPointsY &&\n                    yArray != null &&\n                    yArray.length > 0 &&\n                    yArray.length == this._numberOfPointsX * this._numberOfPointsY\n                ) {\n                    for (let i = 0; i < this._points.length; i++) {\n                        if (\n                            this._typePosition === \"relative\" ||\n                            this._typePosition == null ||\n                            this._typePosition == \"undefined\"\n                        ) {\n                            // X points\n                            this._points[i].x = this._originalPoints[i].x + xArray[i];\n                            // Y points\n                            this._points[i].y = this._originalPoints[i].y + yArray[i];\n                        } else if (this._typePosition === \"absolute\") {\n                            // X points\n                            this._points[i].x = xArray[i];\n                            // Y points\n                            this._points[i].y = yArray[i];\n                        }\n                    }\n                }\n            }\n\n            if (this._debug === true) {\n                this.renderPointsRope();\n            }\n        } else if (this._planeOrRope === \"plane\") {\n            // PLANE\n            if (this._mesh && this._mesh.vertices) {\n                for (let i = 0; i < this._mesh.vertices.length; i++) {\n                    if (\n                        (this._axisOfWaves === \"x\" && i % 2 == 1) ||\n                        ((this._axisOfWaves === \"y\" || this._axisOfWaves === \"yx\") && i % 2 == 0) ||\n                        this._axisOfWaves === \"xy\"\n                    ) {\n                        this._mesh.vertices[i] =\n                            this._originalVertices[i] + this._amplitude * Math.sin(this._count + i * this._wavelength);\n                    } else if (this._axisOfWaves === \"yx\" && i % 2 == 1) {\n                        this._mesh.vertices[i] =\n                            this._originalVertices[i] - this._amplitude * Math.sin(this._count + i * this._wavelength);\n                    } else {\n                    }\n                }\n            }\n\n            if (this._debug === true) {\n                this.renderPointsPlane();\n            }\n        } else if (this._planeOrRope === \"regularGrid\") {\n            // REGULAR GRID\n            if (\n                this._mesh &&\n                this._mesh.vertices &&\n                this._created === true &&\n                this._framesPositionPointsArrayX != null &&\n                this._framesPositionPointsArrayY != null\n            ) {\n                let xArray: Array<number>;\n                let yArray: Array<number>;\n\n                if (\n                    this._actualFrame >= 0 &&\n                    this._framesPositionPointsArrayX[this._actualFrame] != null &&\n                    this._framesPositionPointsArrayX[this._actualFrame] != \"undefined\" &&\n                    this._framesPositionPointsArrayY[this._actualFrame] != null &&\n                    this._framesPositionPointsArrayY[this._actualFrame] != \"undefined\"\n                ) {\n                    xArray = this._framesPositionPointsArrayX[this._actualFrame].split(\";\").map(parseFloat);\n                    yArray = this._framesPositionPointsArrayY[this._actualFrame].split(\";\").map(parseFloat);\n                }\n\n                if (\n                    xArray != null &&\n                    xArray.length > 0 &&\n                    xArray.length == this._numberOfPointsX * this._numberOfPointsY &&\n                    yArray != null &&\n                    yArray.length > 0 &&\n                    yArray.length == this._numberOfPointsX * this._numberOfPointsY\n                ) {\n                    for (let i = 0; i < this._mesh.vertices.length; i++) {\n                        if (\n                            this._typePosition === \"relative\" ||\n                            this._typePosition == null ||\n                            this._typePosition == \"undefined\"\n                        ) {\n                            if (i % 2 == 0) {\n                                // X points\n                                this._mesh.vertices[i] = this._originalVertices[i] + xArray[i / 2];\n                            } else {\n                                // Y points\n                                this._mesh.vertices[i] = this._originalVertices[i] + yArray[(i + 1) / 2 - 1];\n                            }\n                        } else if (this._axisOfWaves === \"yx\" && i % 2 == 1) {\n                            if (i % 2 == 0) {\n                                // X points\n                                this._mesh.vertices[i] = xArray[i / 2];\n                            } else {\n                                // Y points\n                                this._mesh.vertices[i] = yArray[(i + 1) / 2 - 1];\n                            }\n                        }\n                    }\n                }\n            }\n\n            if (this._debug === true) {\n                this.renderPointsPlane();\n            }\n        } else if (this._planeOrRope === \"curtain\") {\n            // CURTAIN\n            if (\n                this._curtainSpeed > 0 &&\n                this._numberOfPointsX > 0 &&\n                this._numberOfPointsY > 0 &&\n                this._mesh.vertices.length == this._meshVerticesBackup.length\n            ) {\n                for (let i = 0; i < this._mesh.vertices.length; i++) {\n                    let row_index: number = parseInt((i / (this._numberOfPointsX * 2)).toString()).valueOf();\n                    let col_index: number = parseInt(((i / 2) % this._numberOfPointsX).toString()).valueOf();\n\n                    if (i % 2 == 0) {\n                        // % 2 == 0 is X point\n                        if (row_index % 2 == 0) {\n                            this._mesh.vertices[i] =\n                                this._meshVerticesBackup[i] -\n                                this._curtainAmplitude *\n                                    (row_index + 1) *\n                                    (this._numberOfPointsX - (col_index + 1)) *\n                                    Math.sin(this._curtainCount);\n                        } else {\n                            this._mesh.vertices[i] =\n                                this._meshVerticesBackup[i] +\n                                this._curtainAmplitude *\n                                    (row_index + 1) *\n                                    (this._numberOfPointsX - (col_index + 1)) *\n                                    Math.sin(this._curtainCount);\n                        }\n                    }\n                }\n\n                this._curtainCount += Math.PI / this._curtainSpeed;\n\n                // curtain has only angle from 0 to 180 degrees (0 rad to PI rad)\n                if (this._curtainCount > Math.PI) {\n                    // end of animation, show original vertices, then this timer stop\n                    this._curtainSpeed = 0; // off curtain\n                    this._curtainCount = 0;\n                    stopTimer = true;\n                }\n            }\n\n            if (this._debug === true) {\n                this.renderPointsPlane();\n            }\n        } else {\n            // bad type of planerope\n        }\n\n        //-----------------------------------\n\n        if (this._created === true) {\n            if (this._duration >= 0) {\n                this._actualFrame++;\n            }\n\n            if ((this._duration >= 0 && this._actualFrame > this._duration) || stopTimer == true) {\n                this.stop();\n            } else {\n                // first step not start timer (creating mesh) and can stop timer by boolean\n                this._timerAnimate.start(0);\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  FOR DEBUG, RENDER POINTS\n    //******************************************************************************************************************\n\n    private renderPointsRope(): void {\n        if (this._graphics) {\n            if (this._points != null && this._points.length > 0) {\n                this._graphics.clear();\n\n                this._graphics.lineStyle(2, 0xffc2c2);\n                this._graphics.moveTo(this._points[0].x, this._points[0].y);\n\n                for (let i = 1; i < this._points.length; i++) {\n                    this._graphics.lineTo(this._points[i].x, this._points[i].y);\n                }\n\n                for (let i = 0; i < this._points.length; i++) {\n                    this._graphics.beginFill(0xff0022);\n                    this._graphics.drawCircle(this._points[i].x, this._points[i].y, 10);\n                    this._graphics.endFill();\n\n                    if (\n                        this._debugTextColor != null &&\n                        this._debugTextColor != \"undefined\" &&\n                        this._labelText != null\n                    ) {\n                        if (this._labelText[i] != null) {\n                            this._labelText[i].x = this._points[i].x;\n                            this._labelText[i].y = this._points[i].y;\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    private renderPointsPlane(): void {\n        if (this._graphics) {\n            if (this._mesh && this._mesh.vertices.length > 0) {\n                this._graphics.clear();\n\n                this._graphics.moveTo(this._mesh.vertices[0], this._mesh.vertices[1]);\n\n                for (let i = 0; i < this._mesh.vertices.length; i++) {\n                    this._graphics.beginFill(0xff0022);\n                    this._graphics.drawCircle(this._mesh.vertices[i], this._mesh.vertices[++i], 5);\n                    this._graphics.endFill();\n\n                    if (\n                        this._debugTextColor != null &&\n                        this._debugTextColor != \"undefined\" &&\n                        this._labelText != null\n                    ) {\n                        if (this._labelText[(i - 1) / 2] != null) {\n                            this._labelText[(i - 1) / 2].x = this._mesh.vertices[i - 1];\n                            this._labelText[(i - 1) / 2].y = this._mesh.vertices[i];\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CONTROLS\n    //******************************************************************************************************************\n\n    public start(startDelay: number = 0): void {\n        if (this.running) {\n            return;\n        }\n\n        if (startDelay < 0) {\n            startDelay = 20;\n        }\n\n        this._timerAnimate.stop();\n        this._timerAnimate.start(startDelay);\n        this.running = true;\n    }\n\n    public stop(): void {\n        this._timerAnimate.stop();\n        this.running = false;\n        this._actualFrame = 0;\n\n        if (this._loop) {\n            this.start();\n        }\n    }\n\n    //******************************************************************************************************************\n    //  BLEND\n    //******************************************************************************************************************\n\n    /**\n     * Important! The WebGL renderer only supports the NORMAL, ADD, MULTIPLY and SCREEN blend modes.\n     * Anything else will silently act like NORMAL.\n     *\n     * @param mode\n     * @returns {number}\n     */\n    public getBlendModeByString(mode: string): number {\n        mode = mode.toString();\n        switch (mode) {\n            case \"0\":\n            case \"normal\":\n                return PIXI.BLEND_MODES.NORMAL;\n            case \"1\":\n            case \"add\":\n                return PIXI.BLEND_MODES.ADD;\n            case \"2\":\n            case \"multiply\":\n                return PIXI.BLEND_MODES.MULTIPLY;\n            case \"3\":\n            case \"screen\":\n                return PIXI.BLEND_MODES.SCREEN;\n            case \"4\":\n            case \"overlay\":\n                return PIXI.BLEND_MODES.OVERLAY;\n            case \"5\":\n            case \"darken\":\n                return PIXI.BLEND_MODES.DARKEN;\n            case \"6\":\n            case \"lighten\":\n                return PIXI.BLEND_MODES.LIGHTEN;\n            case \"7\":\n            case \"color_dodge\":\n                return PIXI.BLEND_MODES.COLOR_DODGE;\n            case \"8\":\n            case \"color_burn\":\n                return PIXI.BLEND_MODES.COLOR_BURN;\n            case \"9\":\n            case \"hard_light\":\n                return PIXI.BLEND_MODES.HARD_LIGHT;\n            case \"10\":\n            case \"soft_light\":\n                return PIXI.BLEND_MODES.SOFT_LIGHT;\n            case \"11\":\n            case \"difference\":\n                return PIXI.BLEND_MODES.DIFFERENCE;\n            case \"12\":\n            case \"exclusion\":\n                return PIXI.BLEND_MODES.EXCLUSION;\n            case \"13\":\n            case \"hue\":\n                return PIXI.BLEND_MODES.HUE;\n            case \"14\":\n            case \"saturation\":\n                return PIXI.BLEND_MODES.SATURATION;\n            case \"15\":\n            case \"color\":\n                return PIXI.BLEND_MODES.COLOR;\n            case \"16\":\n            case \"luminosity\":\n                return PIXI.BLEND_MODES.LUMINOSITY;\n            default:\n                if (DEBUG) {\n                    this.log(\"ERROR Unknown blending mode \" + mode + \". Used default mode NORMAL.\");\n                }\n                return PIXI.BLEND_MODES.NORMAL;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  CLONE\n    //******************************************************************************************************************\n\n    /**\n     * Clone method used for cloning instance of this element with his main properties.\n     * @method clone\n     * @return PlaneRopeElement\n     */\n    clone(): PlaneRopeElement {\n        let element: PlaneRopeElement = new PlaneRopeElement();\n        element._numberOfPointsX = this._numberOfPointsX;\n        element._numberOfPointsY = this._numberOfPointsY;\n        element._amplitude = this._amplitude;\n        element._wavelength = this._wavelength;\n        element._speed = this._speed;\n        element._axisOfWaves = this._axisOfWaves;\n        element._resource = this._resource.clone();\n        element._blendMode = this._blendMode;\n        element._planeOrRope = this._planeOrRope;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.visible = this.visible;\n        element._debug = this._debug;\n        element._debugTextColor = this._debugTextColor;\n        element._canvasPadding = this._canvasPadding;\n        element._style = this._style;\n        element._loop = this._loop;\n        // element._created = this._created;\n        // element._count = this._count;\n        // element._duration = this._duration;\n        // element._framesPositionPointsArrayX = this._framesPositionPointsArrayX;\n        // element._framesPositionPointsArrayY = this._framesPositionPointsArrayY;\n        // element._mesh = this._mesh;\n\n        let node: Element = document.createElement(this.name);\n        element.create(node);\n        element._markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\nexport const PlaneRopeElementAttributes = {\n    /** Canvas padding for mesh (overlay of mesh polygons to avoid gaps)\n     * @property CanvasPadding\n     * @type number\n     * @default 1\n     */\n    CANVAS_PADDING: \"CanvasPadding\",\n    /**\n     * debug attribute must be parent only\n     * */\n    DEBUG: \"Debug\",\n    /** Text color for DEBUG, showing number of point\n     * @property DebugTextColor\n     * @type string\n     * @default \"#FFFA00\"\n     */\n    DEBUG_TEXT_COLOR: \"DebugTextColor\",\n    /**\n     * plane, rope and other\n     * @property TypeAnimation\n     * @type string\n     * @default plane\n     * VALUES:\n     *      rope\n     *      plane\n     *      curtain\n     *      regularGrid\n     */\n    TYPE_ANIMATION: \"TypeAnimation\",\n    /**\n     * number of points in axis X,\n     * for 'plane, curtain, regularGrid' is number of columns\n     * for 'rope' is number of points in line axis X\n     * @property NumberOfPointsX\n     * @type number\n     * @default 0\n     * */\n    NUMBER_OF_POINTS_X: \"NumberOfPointsX\",\n    /**\n     * number of points in axis Y,\n     * for 'plane, curtain, regularGrid' is number of rows\n     * for 'rope' is number of points Y, must be value 1\n     * @property NumberOfPointsY\n     * @type number\n     * @default 0\n     * */\n    NUMBER_OF_POINTS_Y: \"NumberOfPointsY\",\n    /**\n     * size of Amplitude moving points\n     * for type 'plane'\n     * @property Amplitude\n     * @type number\n     * @default 0\n     * */\n    AMPLITUDE: \"Amplitude\",\n    /**\n     * size of the angle\n     * for type 'plane'\n     * @property Wavelength\n     * @type number\n     * @default 0\n     * */\n    WAVELENGTH: \"Wavelength\",\n    /**\n     * speed of trigonometric animation\n     * for type 'plane'\n     * @property Speed\n     * @type number\n     * @default 0\n     * */\n    SPEED: \"Speed\",\n\n    /**\n     * function axis, x, y, xy, yx\n     * for type 'plane'\n     * @property AxisOfWaves\n     * @type string\n     * @default xy\n     */\n    AXIS_OF_WAVES: \"AxisOfWaves\",\n\n    /**\n     * start animation with delay\n     * @property Start\n     * @type number\n     * @default 0\n     */\n    START: \"Start\",\n    /**\n     * stop animation with delay\n     * @property Stop\n     * @type number\n     * @default 0\n     */\n    STOP: \"Stop\",\n    /**\n     * loop animation with delay\n     * @property Loop\n     * @type number\n     * @default 0\n     * */\n    LOOP: \"Loop\",\n\n    /**\n     * speed of curtain\n     * for type 'curtain'\n     * @property CurtainSpeed\n     * @type number\n     * @default 0\n     * */\n    CURTAIN_SPEED: \"CurtainSpeed\",\n    /**\n     * amplitude of curtain\n     * for type 'curtain'\n     * @property CurtainAmplitude\n     * @type number\n     * @default 0\n     * */\n    CURTAIN_AMPLITUDE: \"CurtainAmplitude\",\n\n    /**\n     * clone\n     * @property Clone\n     * @type bool\n     * @default false\n     * */\n    CLONE: \"Clone\",\n    /**\n     * style of 'PlaneRopeStyle'\n     * @property Style\n     * @type string\n     * @default ''\n     * */\n    STYLE: \"Style\",\n\n    /**\n     * the type of frame calculation between frames\n     * @property TypeFrames\n     * @type string\n     * @default 'linear'\n     * VALUES:\n     *      linear - automatic calculation position for frames, for example if defined frame 1 and 100, then frames 2-99 position will be calculated\n     * */\n    TYPE_FRAMES: \"TypeFrames\",\n\n    /**\n     * the type of use of positions\n     * for type 'rope, regularGrid'\n     * @property TypePosition\n     * @type string\n     * @default 'relative'\n     * VALUES:\n     *      relative - calculation position from original to relative shift\n     *      absolute - calculation position to absolute screen position\n     * */\n    TYPE_POSITION: \"TypePosition\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PlaneRopeElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { Style } from \"../Components/Elements/Styles/Style\";\n\n/**\n *\n * Example:\n *   <PlaneRopeStyle Class=\"PlaneRopeStyle\">\n         <Animation>\n             <Frame Frame=\"0\">\n             <X MoveAllPointsX=\"0;0;0;0;0;0;0;0;0\"/>\n             <Y MoveAllPointsY=\"0;0;0;0;0;0;0;0;0\"/>\n             </Frame>\n\n             <Frame Frame=\"30\">\n             <X MoveAllPointsX=\"0;0;0;-10;0;10;0;0;0\"/>\n             <Y MoveAllPointsY=\"0;-10;0;0;0;0;0;10;0\"/>\n             </Frame>\n\n             <Frame Frame=\"60\">\n             <X MoveAllPointsX=\"0;0;0;-20;0;20;0;0;0\"/>\n             <Y MoveAllPointsY=\"0;-20;0;0;0;0;0;20;0\"/>\n             </Frame>\n\n             <Frame Frame=\"90\">\n             <X MoveAllPointsX=\"0;0;0;-30;0;30;0;0;0\"/>\n             <Y MoveAllPointsY=\"0;-30;0;0;0;0;0;30;0\"/>\n             </Frame>\n\n             <Frame Frame=\"120\">\n             <X MoveAllPointsX=\"0;0;0;-20;0;20;0;0;0\"/>\n             <Y MoveAllPointsY=\"0;-20;0;0;0;0;0;20;0\"/>\n             </Frame>\n         </Animation>\n     </PlaneRopeStyle>\n * @class TimelineStyle\n * @extends Style\n */\n@engineComponent(ComponentTypes.Style)\nexport class PlaneRopeStyle extends Style {\n    // container: ContainerElement;\n\n    // xml nodes added to object by frame\n    frames: Object;\n    positionX: Object;\n    positionY: Object;\n\n    constructor() {\n        super();\n\n        this.frames = {};\n        this.positionX = {};\n        this.positionY = {};\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        let next: Element = node.firstElementChild;\n        while (next != null) {\n            switch (next.nodeName) {\n                // case 'Elements':\n                //     this.container = new ContainerElement();\n                //     this.container.create(next);\n                //     break;\n                case \"Animation\":\n                    var nextCase: Element = next.firstElementChild;\n                    while (nextCase != null) {\n                        if (nextCase.hasAttribute(\"Frame\")) {\n                            if (this.frames[nextCase.getAttribute(\"Frame\")] !== null) {\n                                this.frames[nextCase.getAttribute(\"Frame\")] = nextCase;\n\n                                let nextChild: Element = nextCase.firstElementChild;\n                                while (nextChild != null) {\n                                    if (nextChild.hasAttribute(\"MoveAllPointsX\")) {\n                                        this.positionX[nextCase.getAttribute(\"Frame\")] =\n                                            nextChild.getAttribute(\"MoveAllPointsX\");\n                                    } else if (nextChild.hasAttribute(\"MoveAllPointsY\")) {\n                                        this.positionY[nextCase.getAttribute(\"Frame\")] =\n                                            nextChild.getAttribute(\"MoveAllPointsY\");\n                                    }\n                                    nextChild = nextChild.nextElementSibling;\n                                }\n                            } else {\n                                if (DEBUG) {\n                                    this.log(\n                                        \"ERROR case \" +\n                                            nextCase.getAttribute(\"Frame\") +\n                                            \" already exist in PlaneRopeStyle \" +\n                                            node.nodeName,\n                                    );\n                                }\n                            }\n                        }\n                        nextCase = nextCase.nextElementSibling;\n                    }\n                    break;\n            }\n            next = next.nextElementSibling;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PlaneRopeStyle.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { ShapeElement } from \"../Components/Elements/Graphics/ShapeElement\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class PolygonElement extends ShapeElement {\n    private _points: Array<PIXI.Point>;\n\n    constructor() {\n        super();\n    }\n\n    public updateByNode(node: Element): boolean {\n        let redraw: boolean = false;\n\n        if (node.hasAttribute(PolygonElementAttributes.POINTS)) {\n            let pointArray: Array<string> = node.getAttribute(PolygonElementAttributes.POINTS).split(\";\");\n            this._points = [];\n            let lastPoint: PIXI.Point;\n            pointArray.forEach((value: string, index: number) => {\n                if (index % 2) {\n                    lastPoint.y = parseInt(value);\n                } else {\n                    lastPoint = new PIXI.Point(parseInt(value), 0);\n                    this._points.push(lastPoint);\n                }\n            });\n\n            redraw = true;\n        }\n\n        if (!super.updateByNode(node)) {\n            if (redraw) {\n                this.redraw();\n                return true;\n            } else {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    public redraw(): void {\n        this.clear();\n        this.beginFill(this._color, this._fillAlpha);\n        this.lineStyle(this._lineWidth, this._lineColor, this._lineAlpha);\n        this.drawPolygon(this._points);\n        this.endFill();\n    }\n\n    clone(): ShapeElement {\n        let element: PolygonElement = new PolygonElement();\n        element.removeChildren();\n\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.tint = this.tint;\n        element.blendMode = this.blendMode;\n        element.name = this.name;\n        element._tweenEngine = this._tweenEngine;\n\n        element._lineWidth = this._lineWidth;\n        element._lineColor = this._lineColor;\n        element._lineAlpha = this._lineAlpha;\n        element._fillAlpha = this._fillAlpha;\n        element._color = this._color;\n        element._points = [];\n        this._points.forEach((point) => {\n            element._points.push(new PIXI.Point(point.x, point.y));\n        });\n\n        element.redraw();\n\n        return element;\n    }\n}\n\nexport const PolygonElementAttributes = {\n    /*\n     * Array of semicolon-separated X;Y coordinates, e.g. \"0;10;20;10;30;30\"\n     */\n    POINTS: \"Points\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PolygonElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { BezierPlugin } from \"gsap\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\nimport { StageController } from \"../Components/StageController\";\nimport { AnimationStyle } from \"../Components/Elements/Styles/AnimationStyle\";\nimport { StyleManager } from \"../Components/Managers/StyleManager\";\nimport { Tweens } from \"../Components/Effects/Tweens\";\nimport { CustomUtils } from \"../Utils/CustomUtils\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class RopeElement extends BaseElement {\n    private _rope: PIXI.mesh.Rope;\n    private _texture: PIXI.Texture;\n    private _pointsCount: number;\n    private _bezierPoints: Array<PIXI.Point>;\n    private _pointsData: Array<any>;\n    private _pointsDataBuffer: Array<PIXI.Point>;\n    private _originalPoints: Array<PIXI.Point> = [];\n    private _blendMode: number;\n    private _animationStyle: AnimationStyle;\n    private _hasAnimationStyle: boolean;\n    private _frame: number;\n    private _tint: number;\n    private _curviness: number;\n    private _continue: boolean;\n    private _isPlaying: boolean;\n    private _debug: boolean;\n    private _created: boolean;\n    private _graphics: PIXI.Graphics;\n    private _pointsAnimationAmplitude: number;\n    private _pointsAnimationSpeed: number;\n    private _pointsAnimationWavelength: number;\n    private _canvasPadding: number = 1;\n    private _angleCount: number;\n    private _delayStartTimer: FrameTimerEventEmitter;\n    private _delayStopTimer: FrameTimerEventEmitter;\n\n    constructor() {\n        super();\n\n        this._rope = null;\n        this._pointsCount = 100;\n        this._bezierPoints = [];\n        this._pointsData = [];\n        this._pointsDataBuffer = [];\n        this._blendMode = 0;\n        this._animationStyle = null;\n        this._hasAnimationStyle = false;\n        this._frame = 0;\n        this._tint = null;\n        this._curviness = 1;\n        this._continue = false;\n        this._isPlaying = false;\n        this._debug = false;\n        this._created = false;\n        this._pointsAnimationAmplitude = 0;\n        this._pointsAnimationSpeed = 0;\n        this._pointsAnimationWavelength = 0;\n        this._angleCount = 0;\n\n        this._delayStartTimer = CreateFrameTimer(\"delayStartTimer\");\n        this._delayStartTimer.on(FrameTimerEvents.Complete, this.start.bind(this));\n        this._delayStopTimer = CreateFrameTimer(\"delayStopTimer\");\n        this._delayStopTimer.on(FrameTimerEvents.Complete, this.stop.bind(this));\n    }\n\n    public createByNode(node: Element): void {\n        if (!this._created) {\n            if (DEBUG) {\n                if (\n                    node.hasAttribute(RopeElementAttributes.DEBUG) &&\n                    node.getAttribute(RopeElementAttributes.DEBUG) === \"true\"\n                ) {\n                    debugger;\n                    this._debug = true;\n                }\n            }\n\n            super.createByNode(node);\n\n            if (node.hasAttribute(RopeElementAttributes.POINTS_COUNT)) {\n                this._pointsCount = parseInt(node.getAttribute(RopeElementAttributes.POINTS_COUNT));\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.POINTS_ANIMATION_AMPLITUDE)) {\n                this._pointsAnimationAmplitude = parseFloat(\n                    node.getAttribute(RopeElementAttributes.POINTS_ANIMATION_AMPLITUDE),\n                );\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.POINTS_ANIMATION_SPEED)) {\n                this._pointsAnimationSpeed = parseFloat(\n                    node.getAttribute(RopeElementAttributes.POINTS_ANIMATION_SPEED),\n                );\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.POINTS_ANIMATION_WAVELENGTH)) {\n                this._pointsAnimationWavelength = parseFloat(\n                    node.getAttribute(RopeElementAttributes.POINTS_ANIMATION_WAVELENGTH),\n                );\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.BLEND_MODE)) {\n                this._blendMode = CustomUtils.getBlendMode(\n                    parseInt(node.getAttribute(RopeElementAttributes.BLEND_MODE)),\n                );\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.CURVINESS)) {\n                this._curviness = parseFloat(node.getAttribute(RopeElementAttributes.CURVINESS));\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.TINT)) {\n                if (node.getAttribute(RopeElementAttributes.TINT) === \"0\") {\n                    this._tint = null;\n                } else {\n                    this._tint = parseInt(node.getAttribute(RopeElementAttributes.TINT), 16);\n                }\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.POINTS)) {\n                let pointsData = this.formatPoints(node.getAttribute(RopeElementAttributes.POINTS));\n                let bezierData = BezierPlugin.bezierThrough(pointsData);\n\n                this._bezierPoints = this.getBezierStepPoints(bezierData, this._pointsCount);\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.IMAGE)) {\n                let textureName = node.getAttribute(RopeElementAttributes.IMAGE);\n                if (textureName.indexOf(\"ANI_\") === 0) {\n                    this._animationStyle = <AnimationStyle>StyleManager.Styles[textureName];\n                    if (this._animationStyle != null) {\n                        textureName = this._animationStyle.animation + \"0000\";\n                        this._hasAnimationStyle = true;\n                    } else {\n                        this._hasAnimationStyle = false;\n                    }\n                }\n\n                this._texture = StageController.getTextureByResourceId(textureName);\n                if (this._texture != null) {\n                    if (this._bezierPoints.length == 0) {\n                        for (let i: number = 0; i < this._pointsCount; i++) {\n                            this._bezierPoints.push(\n                                new PIXI.Point(Math.round(this._texture.width / (this._pointsCount - 1)) * i, 0),\n                            );\n                        }\n                    }\n\n                    for (let i: number = 0; i < this._bezierPoints.length; i++) {\n                        this._originalPoints.push(new PIXI.Point(this._bezierPoints[i].x, this._bezierPoints[i].y));\n                    }\n\n                    this._rope = new PIXI.mesh.Rope(this._texture, this._bezierPoints);\n                    this._rope.blendMode = CustomUtils.getBlendMode(this._blendMode);\n                    this._rope.canvasPadding = this._canvasPadding;\n\n                    if (this._tint != null) {\n                        this._rope.tint = this._tint;\n                    }\n\n                    this.addChild(this._rope);\n\n                    if (this._debug === true) {\n                        this._graphics = new PIXI.Graphics();\n                        if (this._graphics) {\n                            this.addChild(this._graphics);\n                        }\n                    }\n                }\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.CANVAS_PADDING)) {\n                this._canvasPadding = parseInt(node.getAttribute(RopeElementAttributes.CANVAS_PADDING));\n            }\n\n            this._created = true;\n        }\n    }\n\n    /**\n     * Add base points to buffer.\n     * @param {Array<any>} points\n     */\n    public addPoints(points: Array<PIXI.Point>): void {\n        this._pointsDataBuffer = this._pointsDataBuffer.concat(points);\n    }\n\n    /**\n     * Get base points to buffer.\n     */\n    public getPoints(): Array<any> {\n        return this._pointsData;\n    }\n\n    /**\n     *\n     * @param {Element} node\n     */\n    public updateByNode(node: Element): void {\n        if (this._created) {\n            if (DEBUG) {\n                if (\n                    node.hasAttribute(RopeElementAttributes.DEBUG) &&\n                    node.getAttribute(RopeElementAttributes.DEBUG) === \"true\"\n                ) {\n                    debugger;\n                    this._debug = true;\n                }\n            }\n\n            super.updateByNode(node);\n\n            if (node.hasAttribute(RopeElementAttributes.POINTS)) {\n                let XMLpointsData: Array<PIXI.Point> = this.formatPoints(\n                    node.getAttribute(RopeElementAttributes.POINTS),\n                );\n                this._pointsData = [];\n\n                if (\n                    node.hasAttribute(RopeElementAttributes.REVERSE_POINTS) &&\n                    StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.REVERSE_POINTS))\n                ) {\n                    this._pointsData = XMLpointsData.concat(this._pointsDataBuffer).reverse();\n                } else {\n                    this._pointsData = this._pointsDataBuffer.concat(XMLpointsData);\n                }\n                this._pointsDataBuffer = [];\n                this.updatePoints(this._pointsData);\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.GLOBAL_POINTS)) {\n                this._pointsData = this.formatPoints(node.getAttribute(RopeElementAttributes.POINTS), true);\n                this.updatePoints(this._pointsData);\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.TINT)) {\n                if (this._rope != null) {\n                    if (node.getAttribute(RopeElementAttributes.TINT) === \"0\") {\n                        this._tint = null;\n                    } else {\n                        this._tint = parseInt(node.getAttribute(RopeElementAttributes.TINT), 16);\n                    }\n                    this._rope.tint = this._tint;\n                }\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.IMAGE)) {\n                let textureName = node.getAttribute(RopeElementAttributes.IMAGE);\n                if (textureName.indexOf(\"ANI_\") === 0) {\n                    this._animationStyle = <AnimationStyle>StyleManager.Styles[textureName];\n                    if (this._animationStyle != null) {\n                        textureName = this._animationStyle.animation + \"0000\";\n                        this._hasAnimationStyle = true;\n                    } else {\n                        this._hasAnimationStyle = false;\n                    }\n                }\n\n                this._texture = StageController.getTextureByResourceId(textureName);\n                if (this._texture != null) {\n                    if (this._rope != null) {\n                        this._rope.texture = this._texture;\n                    }\n                }\n            }\n\n            if (\n                node.hasAttribute(RopeElementAttributes.CONTINUE) &&\n                StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.CONTINUE))\n            ) {\n                this._continue = StringUtils.parseBoolean(node.getAttribute(RopeElementAttributes.CONTINUE));\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.START)) {\n                //this.start();\n                this._delayStartTimer.start(parseInt(node.getAttribute(RopeElementAttributes.START)));\n            }\n\n            if (node.hasAttribute(RopeElementAttributes.STOP)) {\n                //this.stop();\n                this._delayStopTimer.start(parseInt(node.getAttribute(RopeElementAttributes.STOP)));\n            }\n        }\n    }\n\n    /**\n     *\n     */\n    private start(): void {\n        if (this._animationStyle != null && this._hasAnimationStyle === true) {\n            if (!this._continue || !this._isPlaying) {\n                Tweens.removeTweens(this, \"_frame\");\n\n                Tweens.customTween(this, {\n                    tween: \"_frame\",\n                    tweenValues: [0, this._animationStyle.endFrame],\n                    tweenDuration: [60 / this._animationStyle.speed],\n                    tweenEase: [\"linear\"],\n                    tweenLoop: this._animationStyle.loop,\n                    callbackType: \"onUpdate\",\n                    callbackFunction: this.updateTexture,\n                    callbackScope: this,\n                    callbackParams: [\"{self}\"],\n                });\n\n                this._isPlaying = true;\n            }\n        } else {\n            if (this._hasAnimationStyle === false) {\n                if (!this._continue || !this._isPlaying) {\n                    Tweens.removeTweens(this, \"_frame\");\n\n                    Tweens.customTween(this, {\n                        tween: \"_frame\",\n                        tweenValues: [0, 59],\n                        tweenDuration: [60],\n                        tweenEase: [\"linear\"],\n                        tweenLoop: true,\n                        callbackType: \"onUpdate\",\n                        callbackFunction: this.updateTexture,\n                        callbackScope: this,\n                        callbackParams: [\"{self}\"],\n                    });\n\n                    this._isPlaying = true;\n                }\n            }\n        }\n    }\n\n    /**\n     *\n     */\n    private stop(): void {\n        // if (!this._continue) {\n        Tweens.removeTweens(this, \"_frame\");\n        this._isPlaying = false;\n        // }\n    }\n\n    /**\n     *\n     * @param self\n     */\n    private updateTexture(self: any): void {\n        if (this._animationStyle != null) {\n            if (this._animationStyle.startFrame != null && this._animationStyle.endFrame != null) {\n                if (Math.abs(this._animationStyle.startFrame - this._animationStyle.endFrame) > 0) {\n                    let currentFrame: number = Math.round(this._frame);\n\n                    if (currentFrame > self.previousValue || currentFrame == 0) {\n                        this._rope.texture = StageController.getTextureByResourceId(\n                            this._animationStyle.animation + this.zerosPad(currentFrame, 4),\n                        );\n                    }\n                    self.previousValue = currentFrame;\n                }\n            }\n        }\n\n        this.animateMeshPoints();\n\n        if (this._debug === true) {\n            this.renderPointsRope();\n        }\n    }\n\n    /**\n     *\n     * @param num\n     * @param size\n     */\n    private zerosPad(num: number, size: number): string {\n        let s = num + \"\";\n        while (s.length < size) s = \"0\" + s;\n        return s;\n    }\n\n    private animateMeshPoints(): void {\n        if (this._rope != null && this._pointsCount != null && this._originalPoints != null) {\n            if (this._pointsAnimationSpeed > 0) {\n                this._angleCount += this._pointsAnimationSpeed;\n\n                if (this._angleCount >= 2 * Math.PI) {\n                    this._angleCount = this._angleCount % (2 * Math.PI);\n                }\n\n                for (let i: number = 0; i < this._pointsCount; i++) {\n                    this._rope.points[i].y =\n                        this._originalPoints[i].y +\n                        this._pointsAnimationAmplitude *\n                            Math.sin(this._angleCount + i * this._pointsAnimationWavelength);\n                    //this._rope.vertices[i] = this._originalPoints[i].y + (this._pointsAnimationAmplitude * Math.sin(this._angleCount + i * this._pointsAnimationWavelength));\n                }\n            }\n        }\n    }\n\n    /**\n     *\n     * @param {Array<any>} points\n     */\n    private updateMeshPoints(points: Array<any>): void {\n        if (this._rope != null) {\n            for (let i: number = 0; i < this._pointsCount; i++) {\n                this._rope.points[i].x = points[i].x;\n                this._rope.points[i].y = points[i].y;\n            }\n        }\n    }\n\n    /**\n     *\n     * @param {Array<any>} points\n     */\n    public updatePoints(points: Array<any>): void {\n        let bezierData = BezierPlugin.bezierThrough(points, this._curviness);\n        this._bezierPoints = this.getBezierStepPoints(bezierData, this._pointsCount);\n\n        this.updateMeshPoints(this._bezierPoints);\n    }\n\n    /**\n     *\n     * @param {string} points\n     * @param {boolean} useGlobal\n     * @returns {Array<PIXI.Point>}\n     */\n    private formatPoints(points: string, useGlobal: boolean = false): Array<PIXI.Point> {\n        let result: Array<PIXI.Point> = [];\n        let regex = /\\[(.*?)\\]/g;\n        let data = points.match(regex);\n\n        for (let i: number = 0; i < data.length; i++) {\n            let pointArray = data[i].substring(1, data[i].length - 1).split(\",\");\n\n            if (pointArray.length == 2) {\n                let x = this.formatPoint(pointArray[0], \"x\", useGlobal);\n                let y = this.formatPoint(pointArray[1], \"y\", useGlobal);\n\n                result.push(new PIXI.Point(x, y));\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     *\n     * @param {string} value\n     * @param {string} id\n     * @param {boolean} useGlobal\n     * @returns {number}\n     */\n    private formatPoint(value: string, id: string, useGlobal: boolean = false): number {\n        let result: number;\n        if (value == \"c\") {\n            result = this[id];\n        } else {\n            if (useGlobal) {\n                result = this[id] + (parseInt(value) - this.getGlobalPosition()[id]);\n            } else {\n                result = parseInt(value);\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     *\n     * @param data\n     * @param {number} length\n     * @returns {Array<PIXI.Point>}\n     */\n    private getBezierStepPoints(data: any, length: number): Array<PIXI.Point> {\n        let segmentLength = length / data.x.length;\n        let pointPerSegment: Array<number> = [];\n        let bezierStepPoints: Array<PIXI.Point> = [];\n\n        if (data.x.length > 1) {\n            segmentLength = Math.round(segmentLength);\n            let sum = 0;\n            for (let i: number = 0; i < data.x.length - 1; i++) {\n                pointPerSegment.push(segmentLength);\n                sum += segmentLength;\n            }\n            pointPerSegment.push(length - sum);\n        } else {\n            pointPerSegment = [segmentLength];\n        }\n\n        let time = 0;\n        for (let i: number = 0; i < data.x.length; i++) {\n            for (let j: number = 0; j < pointPerSegment[i]; j++) {\n                if (i + 1 < data.x.length) {\n                    time = j / pointPerSegment[i];\n                } else {\n                    time = j / (pointPerSegment[i] - 1);\n                }\n                bezierStepPoints.push(this.bezier(time, data.x[i], data.y[i]));\n            }\n        }\n\n        return bezierStepPoints;\n    }\n\n    /**\n     *\n     * @param {number} t\n     * @param {IBezierData} dataX\n     * @param {IBezierData} dataY\n     * @returns {PIXI.Point}\n     */\n    private bezier(t: number, dataX: IBezierData, dataY: IBezierData): PIXI.Point {\n        let cX = 3 * dataX.ba,\n            bX = 3 * (dataX.c - dataX.b) - cX,\n            aX = dataX.da - cX - bX;\n\n        let cY = 3 * dataY.ba,\n            bY = 3 * (dataY.c - dataY.b) - cY,\n            aY = dataY.da - cY - bY;\n\n        let x = aX * Math.pow(t, 3) + bX * Math.pow(t, 2) + cX * t + dataX.a;\n        let y = aY * Math.pow(t, 3) + bY * Math.pow(t, 2) + cY * t + dataY.a;\n\n        return new PIXI.Point(x, y);\n    }\n\n    //******************************************************************************************************************\n    //  FOR DEBUG, RENDER POINTS\n    //******************************************************************************************************************\n\n    private renderPointsRope(): void {\n        if (this._graphics) {\n            if (this._rope != null && this._rope.points.length > 0) {\n                this._graphics.clear();\n\n                this._graphics.lineStyle(2, 0xffc2c2);\n                this._graphics.moveTo(this._rope.points[0].x, this._rope.points[0].y);\n\n                for (let i = 1; i < this._rope.points.length; i++) {\n                    this._graphics.lineTo(this._rope.points[i].x, this._rope.points[i].y);\n                }\n\n                for (let i = 0; i < this._rope.points.length; i++) {\n                    this._graphics.beginFill(0xff0022);\n                    this._graphics.drawCircle(this._rope.points[i].x, this._rope.points[i].y, 4);\n                    this._graphics.endFill();\n                }\n            }\n        }\n    }\n\n    /**\n     *\n     * @returns {RopeElement}\n     */\n    clone(): RopeElement {\n        let element: RopeElement = new RopeElement();\n\n        element.visible = this.visible;\n        element.alpha = this.alpha;\n        element.position.x = this.position.x;\n        element.position.y = this.position.y;\n        element.pivot.x = this.pivot.x;\n        element.pivot.y = this.pivot.y;\n        element.scale.x = this.scale.x;\n        element.scale.y = this.scale.y;\n        element.rotation = this.rotation;\n        element._debug = this._debug;\n        element._canvasPadding = this._canvasPadding;\n        element._pointsCount = this._pointsCount;\n        element._texture = this._texture;\n        element._blendMode = this._blendMode;\n        element._animationStyle = this._animationStyle;\n        element._frame = this._frame;\n        element._tint = this._tint;\n        element._pointsAnimationAmplitude = this._pointsAnimationAmplitude;\n        element._pointsAnimationSpeed = this._pointsAnimationSpeed;\n        element._pointsAnimationWavelength = this._pointsAnimationWavelength;\n        element._created = true;\n        element._continue = this._continue;\n        element._isPlaying = this._isPlaying;\n\n        element._bezierPoints = [];\n        for (let i = 0; i < this._bezierPoints.length; i++) {\n            element._bezierPoints.push(new PIXI.Point(this._bezierPoints[i].x, this._bezierPoints[i].y));\n        }\n\n        element._originalPoints = [];\n        for (let i = 0; i < this._originalPoints.length; i++) {\n            element._originalPoints.push(new PIXI.Point(this._originalPoints[i].x, this._originalPoints[i].y));\n        }\n\n        if (element._texture != null) {\n            element._rope = new PIXI.mesh.Rope(element._texture, element._bezierPoints);\n        }\n\n        if (element._rope != null) {\n            element._rope.blendMode = element._blendMode;\n            element.addChild(element._rope);\n        }\n\n        element.markAsCloned(); // must be called last before return!\n        return element;\n    }\n}\n\nexport interface IBezierData {\n    a: number;\n    b: number;\n    ba: number;\n    c: number;\n    ca: number;\n    d: number;\n    da: number;\n}\n\nconst RopeElementAttributes = {\n    /** Canvas padding for mesh (overlay of mesh polygons to avoid gaps)\n     * @property CanvasPadding\n     * @type number\n     * @default 1\n     */\n    CANVAS_PADDING: \"CanvasPadding\",\n    /**\n     * Debug attribute must be parent only\n     * */\n    DEBUG: \"Debug\",\n    /**\n     * Blend mode of mesh object.\n     * @property BlendMode\n     * @default 0\n     */\n    BLEND_MODE: \"BlendMode\",\n    /**\n     * Bezier curviness.\n     * @default 1\n     */\n    CURVINESS: \"Curviness\",\n    /**\n     * Start animation in random frame.\n     * @default false\n     */\n    RANDOM_START_FRAME: \"RandomStartFrame\",\n    /**\n     * Start time of the first animation loop. Automatically set RandomStartFrame to false.\n     * @default false\n     */\n    TIME: \"Time\",\n    /**\n     * Global points, pairs of X,Y coords for mesh.\n     * @property Points\n     * @default null\n     */\n    GLOBAL_POINTS: \"GlobalPoints\",\n    /**\n     * Reference to image from resources.\n     * @property Image\n     * @default 0\n     */\n    IMAGE: \"Image\",\n    /**\n     * Points, pairs of X,Y coords for mesh.\n     * @property Points\n     * @default null\n     */\n    POINTS: \"Points\",\n    /**\n     * Number of X,Y points for mesh. Higher make mesh detailed.\n     * @property PointsCount\n     * @default 100\n     */\n    POINTS_COUNT: \"PointsCount\",\n    /**\n     * Reverse collected input points.\n     */\n    REVERSE_POINTS: \"ReversePoints\",\n    /**\n     * Amplitude animation every points Y axis if 'PointsAnimationSpeed' > 0\n     * * @property PointsAnimationAmplitude\n     * @default 0\n     */\n    POINTS_ANIMATION_AMPLITUDE: \"PointsAnimationAmplitude\",\n    /**\n     * Speed animation every points Y axis if > 0\n     * @property PointsAnimationSpeed\n     * @default 0\n     */\n    POINTS_ANIMATION_SPEED: \"PointsAnimationSpeed\",\n    /**\n     * Wavelength animation every points Y axis if 'PointsAnimationSpeed' > 0\n     * @property PointsAnimationWavelength\n     * @default 0\n     */\n    POINTS_ANIMATION_WAVELENGTH: \"PointsAnimationWavelength\",\n    /**\n     * Start animation\n     * @property Start\n     * @default 0\n     */\n    START: \"Start\",\n    /**\n     * If true, animation will not be stopped and restarted, when START is fired\n     * @property Continue\n     * @default false\n     */\n    CONTINUE: \"Continue\",\n    /**\n     * Stop animation\n     * @property Stop\n     * @default 0\n     */\n    STOP: \"Stop\",\n    /**\n     * Tint of image. Hex color which colorize movie clip.\n     * @property Tint\n     * @default null\n     */\n    TINT: \"Tint\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/RopeElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class SoundElement extends BaseElement {\n    private soundName: string = null;\n\n    private _loop: boolean = false;\n    private _reset: boolean = false;\n\n    private _playing: boolean = false;\n    private _scheduledPlay: boolean = false;\n    private _scheduledStop: boolean = false;\n\n    private _fadeInTime: number = 0;\n    private _fadeOutTime: number = 0;\n\n    private _timer: FrameTimerEventEmitter;\n\n    constructor() {\n        super();\n        this._timer = CreateFrameTimer(\"TimelineElement\");\n    }\n\n    public createByNode(node: Element): void {\n        super.createByNode(node);\n    }\n\n    /**\n     * @param node\n     */\n    public updateByNode(node: Element): void {\n        if (!node) {\n            this.logError(\"No node specified for element update!\");\n            return;\n        }\n\n        if (DEBUG) {\n            if (\n                node.hasAttribute(SoundElementAttributes.DEBUG) &&\n                node.getAttribute(SoundElementAttributes.DEBUG) === \"true\"\n            ) {\n                debugger;\n            }\n        }\n\n        if (node.hasAttribute(SoundElementAttributes.LOOP)) {\n            // this._loop = StringUtils.parseBoolean(node.getAttribute(SoundElementAttributes.LOOP));\n\n            let value: string = node.getAttribute(SoundElementAttributes.LOOP);\n            let intValue: number = parseInt(value);\n            this._loop = true;\n            if (value === \"true\") {\n                this.schedulePlay(0);\n            } else if (!isNaN(intValue)) {\n                this.schedulePlay(intValue);\n            }\n        }\n\n        if (node.hasAttribute(SoundElementAttributes.RESET)) {\n            this._reset = StringUtils.parseBoolean(node.getAttribute(SoundElementAttributes.RESET));\n        }\n\n        if (node.hasAttribute(SoundElementAttributes.FADE_IN)) {\n            this._fadeInTime = parseInt(node.getAttribute(SoundElementAttributes.FADE_IN));\n        }\n\n        if (node.hasAttribute(SoundElementAttributes.FADE_OUT)) {\n            this._fadeOutTime = parseInt(node.getAttribute(SoundElementAttributes.FADE_OUT));\n        }\n\n        if (node.hasAttribute(SoundElementAttributes.NAME)) {\n            let newName: string = node.getAttribute(SoundElementAttributes.NAME);\n            if (this.soundName != newName) {\n                this.stop();\n                this.soundName = node.getAttribute(SoundElementAttributes.NAME);\n            }\n        }\n\n        if (node.hasAttribute(SoundElementAttributes.STOP)) {\n            let value: string = node.getAttribute(SoundElementAttributes.STOP);\n            let intValue: number = parseInt(value);\n            if (value === \"true\") {\n                this.scheduleStop(0);\n            } else if (!isNaN(intValue)) {\n                this.scheduleStop(intValue);\n            }\n        }\n\n        if (node.hasAttribute(SoundElementAttributes.PLAY)) {\n            let value: string = node.getAttribute(SoundElementAttributes.PLAY);\n            let intValue: number = parseInt(value);\n            if (value === \"true\") {\n                this.schedulePlay(0);\n            } else if (!isNaN(intValue)) {\n                this.schedulePlay(intValue);\n            }\n        }\n    }\n\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {}\n\n    public clone(): any {\n        let element = new SoundElement();\n        element.soundName = this.soundName;\n        element._fadeInTime = this._fadeInTime;\n        element._fadeOutTime = this._fadeOutTime;\n        element._loop = this._loop;\n        element._reset = this._reset;\n        element._playing = this._playing;\n        element._scheduledPlay = this._scheduledPlay;\n        element._scheduledStop = this._scheduledStop;\n\n        element.markAsCloned();\n        return element;\n    }\n\n    private schedulePlay(delay: number = 0): void {\n        this._timer.stop();\n        this._timer.removeAllListeners();\n        if (delay > 0) {\n            this._scheduledPlay = true;\n            this._timer.once(FrameTimerEvents.Complete, this.play.bind(this));\n            this._timer.start(delay);\n        } else {\n            this.play();\n        }\n    }\n\n    private scheduleStop(delay: number = 0): void {\n        this._timer.stop();\n        this._timer.removeAllListeners();\n        if (delay > 0) {\n            this._scheduledStop = true;\n            this._timer.once(FrameTimerEvents.Complete, this.stop.bind(this));\n            this._timer.start(delay);\n        } else {\n            this.stop();\n        }\n    }\n\n    private play(): void {\n        if (this.soundName == null) {\n            return;\n        }\n        if (this._playing) {\n            if (this._reset) {\n                this.stop();\n            } else {\n                return;\n            }\n        }\n        this._timer.stop();\n        this._timer.removeAllListeners();\n        this._playing = true;\n        this._scheduledPlay = false;\n        if (this._loop) {\n            PlayList.loop(this.soundName, this._fadeInTime, this._reset);\n        } else {\n            PlayList.play(this.soundName, this._fadeInTime, this._reset);\n        }\n    }\n\n    private stop(): void {\n        if (this.soundName == null) {\n            return;\n        }\n        if (this._playing) {\n            this._timer.stop();\n            this._timer.removeAllListeners();\n            PlayList.stop(this.soundName, this._fadeOutTime);\n            if (this._fadeOutTime) {\n                this._timer.once(FrameTimerEvents.Complete, this.reset.bind(this));\n                this._timer.start(this._fadeOutTime);\n            } else {\n                this.reset();\n            }\n        }\n    }\n\n    private reset(): void {\n        this._timer.stop();\n        this._timer.removeAllListeners();\n        this._playing = false;\n        this._scheduledPlay = false;\n        this._scheduledStop = false;\n        if (this.soundName && PlayList.isPlaying(this.soundName)) {\n            PlayList.stop(this.soundName);\n        }\n    }\n}\n\nexport const SoundElementAttributes = {\n    DEBUG: \"Debug\",\n\n    NAME: \"Name\",\n    LOOP: \"Loop\",\n    RESET: \"Reset\",\n    FADE_IN: \"FadeIn\",\n    FADE_OUT: \"FadeOut\",\n    PLAY: \"Play\",\n    STOP: \"Stop\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/SoundElement.ts\n **/","import { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\nimport { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { StageController } from \"../Components/StageController\";\nimport { ImageElementAttributes } from \"../Components/Elements/Graphics/ImageElement\";\nimport { CustomUtils } from \"../Utils/CustomUtils\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nclass TilingImageElement extends BaseElement {\n    private image: PIXI.extras.TilingSprite;\n\n    private _tint: number = 0xffffff;\n\n    constructor() {\n        super();\n    }\n\n    get tint(): number {\n        return this._tint;\n    }\n\n    set tint(tintIn: number) {\n        this._tint = tintIn;\n        if (this.image) {\n            this.image.tint = this._tint;\n        }\n    }\n\n    public updateByNode(node: Element): void {\n        super.updateByNode(node);\n\n        if (node.hasAttribute(TilingImageElementAttributes.IMAGE)) {\n            if (!this.image) {\n                let texture = StageController.getTextureByResourceId(node.getAttribute(ImageElementAttributes.IMAGE));\n                this.image = new PIXI.extras.TilingSprite(texture);\n                this.addChild(this.image);\n            } else {\n                this.image.texture = StageController.getTextureByResourceId(\n                    node.getAttribute(ImageElementAttributes.IMAGE),\n                );\n            }\n        }\n\n        if (node.hasAttribute(TilingImageElementAttributes.TINT)) {\n            this.tint = parseInt(node.getAttribute(TilingImageElementAttributes.TINT));\n        }\n\n        if (!this.image) {\n            return;\n        }\n\n        if (node.hasAttribute(TilingImageElementAttributes.BLEND_MODE)) {\n            this.image.blendMode = CustomUtils.getBlendMode(\n                parseInt(node.getAttribute(TilingImageElementAttributes.BLEND_MODE)),\n            );\n        }\n\n        if (node.hasAttribute(TilingImageElementAttributes.TILE_POSITION_X)) {\n            this.image.position.x = parseInt(node.getAttribute(TilingImageElementAttributes.TILE_POSITION_X));\n        }\n        if (node.hasAttribute(TilingImageElementAttributes.TILE_POSITION_Y)) {\n            this.image.position.y = parseInt(node.getAttribute(TilingImageElementAttributes.TILE_POSITION_Y));\n        }\n\n        if (node.hasAttribute(TilingImageElementAttributes.TILE_SCALE_X)) {\n            this.image.scale.x = parseInt(node.getAttribute(TilingImageElementAttributes.TILE_SCALE_X));\n        }\n        if (node.hasAttribute(TilingImageElementAttributes.TILE_SCALE_Y)) {\n            this.image.scale.y = parseInt(node.getAttribute(TilingImageElementAttributes.TILE_SCALE_Y));\n        }\n\n        if (node.hasAttribute(TilingImageElementAttributes.HEIGHT)) {\n            this.image.height = parseInt(node.getAttribute(TilingImageElementAttributes.HEIGHT));\n        }\n        if (node.hasAttribute(TilingImageElementAttributes.WIDTH)) {\n            this.image.width = parseInt(node.getAttribute(TilingImageElementAttributes.WIDTH));\n        }\n    }\n}\n\nexport const TilingImageElementAttributes = {\n    BLEND_MODE: \"BlendMode\",\n    HEIGHT: \"Height\",\n    IMAGE: \"Image\",\n    TILE_POSITION_X: \"TilePositionX\",\n    TILE_POSITION_Y: \"TilePositionY\",\n    TILE_SCALE_X: \"TileScaleX\",\n    TILE_SCALE_Y: \"TileScaleY\",\n    TINT: \"Tint\",\n    WIDTH: \"Width\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/TilingImageElement.ts\n **/","import { WinAnimator, WinAnimatorAttributes } from \"../GameComponents/WinAnimator\";\nimport { engineComponent, NumberUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\nimport { Symbol } from \"../GameComponents/Symbol\";\nimport { Symbols } from \"../GameComponents/Symbols\";\nimport { Payline } from \"../GameComponents/Payline\";\nimport { Paylines } from \"../GameComponents/Paylines\";\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\nimport { Communication } from \"neo-games\";\nimport { ImageTextCounterElement } from \"../Components/Elements/Texts/ImageTextCounterElement\";\nimport { PlayList } from \"../Components/Sounds/PlayList\";\nimport { Tweens } from \"../Components/Effects/Tweens\";\nimport { BetManager } from \"../Managers/BetManager\";\nimport { AppContext } from \"../../Common/AppContext\";\nimport { ImageTextCounterElement2 } from \"./ImageTextCounterElement2\";\nimport { BaseView } from \"../GameComponents/Base/BaseView\";\nimport { ISymbolTeasingAttributes, SymbolTeasingActions, TeasingComponent } from \"./TeasingComponent\";\nimport { TimelineElement } from \"../Components/Elements/Graphics/TimelineElement\";\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\nimport { FreespinsView } from \"../GameComponents/Freespins/FreespinsView\";\nimport { Settings } from \"./Settings\";\nimport { MachineConfigurationAttributes, ReelConfigurationAttributes } from \"../Components/Configuration\";\nimport { ModuleManager } from \"../Managers/ModuleManager\";\nimport { GameManager } from \"../Managers/GameManager\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class WinAnimatorExtended extends WinAnimator {\n    // this is a FS animator\n    private isFS: boolean = false;\n\n    private _paylines: Paylines;\n\n    protected elementInstance: Array<Object> = [];\n\n    private _paylineWinDelay: number = 60; /* Delay between win lines */\n    private _paylineWinEndDelay: number = 90; /* Delay after win lines, before cycle */\n    private _paylineCycleDelay: number = 90; /* Delay between cycle lines */\n\n    private _paylineEvaluation: string = WinAnimatorExtendedAttributes.PAYLINE_EVALUATION_TYPES.TOGETHER;\n\n    private _winScaleConstantAdditive: number = 1;\n    private _winScaleConstantMultiplicative: number = 0;\n    private _winScaleDuration: number = 45;\n    private _winScaleEase: string = \"backOut\";\n    private _winScaleKeyTimes: Array<number> = [0, 0, 1, 1];\n\n    private _activeElementsNames: Array<string> = [];\n    private _activeElements: Array<SwitchElement> = [];\n    private _activeElementsCase: string;\n\n    private _customData: Object = {};\n\n    private _cycleAnimationName: string = \"Value\";\n\n    private _counterPlayed: boolean = false;\n\n    protected counter: ImageTextCounterElement2;\n    protected currentCounterStep: number;\n\n    private starTimerStack: Array<FrameTimerEventEmitter> = [];\n\n    private wasForce: boolean;\n    private _scatterDelay: number = 500;\n    private _scatterTimeout: number = null;\n\n    // pre roll height in pixels\n    private _preRoll: number = 180;\n    // pre roll speed in frames\n    private _preRollSpeed: number = 10;\n    // delay to start rotation in frames\n    private _startDelay: number = 2;\n\n    private _inCycleWin: boolean = false;\n\n    protected static readonly CaseNormal = \"NORMAL\";\n    protected static readonly CaseWin = \"WIN\";\n    protected static readonly CaseNoWin = \"NOWIN\";\n    protected static readonly CaseHighWin = \"HIGHWIN\";\n    protected static readonly CaseReset = \"RESET\";\n    protected static readonly CaseIdle = \"IDLE\";\n\n    protected static readonly CasePrefixNormal = \"\";\n    protected static readonly CasePrefixFreeSpins = \"FS_\";\n\n    protected static readonly CaseSuffixCycle = \"_CYCLE\";\n    protected static readonly CaseSuffixOutro = \"_OUTRO\";\n\n    protected static readonly ShowFirstWinsStep = \"showFirstWinsStep\";\n    protected static readonly EndFirstWinsStep = \"endFirstWinsStep\";\n    protected static readonly FinishWin = \"finishWin\";\n\n    initialize(\n        symbols: Symbols,\n        paylines?: Paylines,\n        noWinSymbolsContainer?: ContainerElement,\n        symbolsContainer?: ContainerElement,\n        parent?: BaseView | FreespinsView,\n    ): void {\n        this._paylines = paylines;\n\n        super.initialize(symbols, paylines, noWinSymbolsContainer, symbolsContainer);\n\n        if (!this.value && this._cycleAnimationName && this.childs[this._cycleAnimationName]) {\n            this.value = this.childs[this._cycleAnimationName];\n            this.animationsContainer.addChild(this.value);\n        }\n\n        if (parent) {\n            this._activeElementsNames.forEach((elementName) => {\n                if (parent.childs[elementName] && parent.childs[elementName] instanceof SwitchElement) {\n                    this._activeElements.push(parent.childs[elementName]);\n                }\n            });\n        }\n\n        // Add paylines as child due to reorder containers\n        //this.addChild(this._paylines);\n    }\n\n    protected createAnimations(): void {\n        super.createAnimations();\n\n        for (let animation of this.animations) {\n            animation.on(\"softOutro\", this.softOutro.bind(this));\n        }\n    }\n\n    /**\n     *\n     * @param {Object} element\n     */\n    public addElementInstance(element: Object): void {\n        this.elementInstance[Object.keys(element)[0]] = element[Object.keys(element)[0]];\n    }\n\n    configure(node: Element): void {\n        super.configure(node);\n\n        if (node.hasAttribute(WinAnimatorExtendedAttributes.PAYLINE_WIN_DELAY)) {\n            this._paylineWinDelay = parseInt(node.getAttribute(WinAnimatorExtendedAttributes.PAYLINE_WIN_DELAY));\n        }\n\n        if (node.hasAttribute(WinAnimatorExtendedAttributes.PAYLINE_WIN_DELAY)) {\n            this._paylineWinEndDelay = parseInt(node.getAttribute(WinAnimatorExtendedAttributes.PAYLINE_WIN_END_DELAY));\n        }\n\n        if (node.hasAttribute(WinAnimatorExtendedAttributes.PAYLINE_CYCLE_DELAY)) {\n            this._paylineCycleDelay = parseInt(node.getAttribute(WinAnimatorExtendedAttributes.PAYLINE_CYCLE_DELAY));\n        }\n\n        if (node.hasAttribute(WinAnimatorExtendedAttributes.PAYLINE_EVALUATION)) {\n            let eValue = node.getAttribute(WinAnimatorExtendedAttributes.PAYLINE_EVALUATION).toLowerCase();\n            for (let val in WinAnimatorExtendedAttributes.PAYLINE_EVALUATION_TYPES) {\n                if (WinAnimatorExtendedAttributes.PAYLINE_EVALUATION_TYPES[val] == eValue) {\n                    this._paylineEvaluation = WinAnimatorExtendedAttributes.PAYLINE_EVALUATION_TYPES[val];\n                }\n            }\n        }\n\n        // Win counter scaling\n        if (node.hasAttribute(WinAnimatorExtendedAttributes.WIN_SCALE_CONSTANT_ADDITIVE)) {\n            this._winScaleConstantAdditive = parseFloat(\n                node.getAttribute(WinAnimatorExtendedAttributes.WIN_SCALE_CONSTANT_ADDITIVE),\n            );\n        }\n        if (node.hasAttribute(WinAnimatorExtendedAttributes.WIN_SCALE_CONSTANT_MULTIPLICATIVE)) {\n            this._winScaleConstantMultiplicative = parseFloat(\n                node.getAttribute(WinAnimatorExtendedAttributes.WIN_SCALE_CONSTANT_MULTIPLICATIVE),\n            );\n        }\n        if (node.hasAttribute(WinAnimatorExtendedAttributes.WIN_SCALE_DURATION)) {\n            this._winScaleDuration = parseInt(node.getAttribute(WinAnimatorExtendedAttributes.WIN_SCALE_DURATION));\n        }\n        if (node.hasAttribute(WinAnimatorExtendedAttributes.WIN_SCALE_EASE)) {\n            this._winScaleEase = node.getAttribute(WinAnimatorExtendedAttributes.WIN_SCALE_EASE);\n        }\n        if (node.hasAttribute(WinAnimatorExtendedAttributes.WIN_SCALE_KEY_TIMES)) {\n            let newTimes: Array<number> = node\n                .getAttribute(WinAnimatorExtendedAttributes.WIN_SCALE_KEY_TIMES)\n                .split(\";\")\n                .map((value) => parseFloat(value));\n            if (newTimes && newTimes.length == 4) {\n                this._winScaleKeyTimes = newTimes;\n            } else {\n                this.logError(\n                    \"Incorrect value of \" +\n                        WinAnimatorExtendedAttributes.WIN_SCALE_KEY_TIMES +\n                        \" attribute: '\" +\n                        node.getAttribute(WinAnimatorExtendedAttributes.WIN_SCALE_KEY_TIMES) +\n                        \"'.\\n\" +\n                        \"Expected four semicolon-separated numeric values ranged <0;1> in non-descending order, e.g. '0;0;0.5;1'\",\n                );\n            }\n        }\n\n        if (node.hasAttribute(WinAnimatorExtendedAttributes.CYCLE_ANIMATION)) {\n            this._cycleAnimationName = node.getAttribute(WinAnimatorExtendedAttributes.CYCLE_ANIMATION);\n        }\n\n        if (node.getAttribute(WinAnimatorExtendedAttributes.IS_FS_ANIMATOR) == \"true\") {\n            this.isFS = true;\n        }\n\n        if (node.hasAttribute(WinAnimatorExtendedAttributes.ACTIVE_ELEMENTS)) {\n            this._activeElementsNames = node.getAttribute(WinAnimatorExtendedAttributes.ACTIVE_ELEMENTS).split(\";\");\n        }\n\n        if (node.hasAttribute(ReelConfigurationAttributes.PRE_ROLL)) {\n            this._preRoll = parseInt(node.getAttribute(ReelConfigurationAttributes.PRE_ROLL));\n        }\n\n        if (node.hasAttribute(ReelConfigurationAttributes.PRE_ROLL_SPEED)) {\n            this._preRollSpeed = parseInt(node.getAttribute(ReelConfigurationAttributes.PRE_ROLL_SPEED));\n        }\n\n        if (node.hasAttribute(MachineConfigurationAttributes.START_DELAY)) {\n            this._startDelay = parseInt(node.getAttribute(MachineConfigurationAttributes.START_DELAY));\n        }\n    }\n\n    public hide() {\n        this.visible = false;\n        this.symbolsContainer.visible = false;\n        this.noWinSymbolsContainer.visible = false;\n        this.animationsContainer.visible = false;\n    }\n\n    public show() {\n        this.visible = true;\n        this.symbolsContainer.visible = true;\n        this.noWinSymbolsContainer.visible = true;\n        this.animationsContainer.visible = true;\n    }\n\n    //******************************************************************************************************************\n    //  ON REEL STOPPED, SHOW SYMBOLS\n    //******************************************************************************************************************\n\n    public onReelStopped(reelsData: Array<Communication.Game.IReel>, reelIndex: number, force: boolean = false): void {\n        //super.onReelStopped(reelsData, reelIndex);\n\n        this.wasForce = force;\n        this.currentReels = reelsData;\n\n        for (let i = 0; i < reelsData[reelIndex].symbols.length; i++) {\n            this.removeCurrentSymbol(reelIndex, i);\n        }\n\n        for (let i = 0; i < reelsData[reelIndex].symbols.length; i++) {\n            this.addCurrentSymbol(reelIndex, i);\n        }\n\n        if (this.elementInstance[\"teasing\"] != null) {\n            let sta: Array<Array<ISymbolTeasingAttributes>>;\n            if (this.elementInstance[\"teasing\"] != null) {\n                this.elementInstance[\"teasing\"].forEach(function (teasingComponent: TeasingComponent) {\n                    let symbolsTeasingAttributes = teasingComponent.checkSymbolsPerReel(reelIndex);\n                    sta = symbolsTeasingAttributes;\n                }, this);\n            }\n\n            if (!force) {\n                for (let i = 0; i <= reelIndex; i++) {\n                    for (let j = 0; j < this.currentSymbols[i].length; j++) {\n                        if (this.currentSymbols[i][j] != null) {\n                            if (typeof sta !== \"undefined\") {\n                                switch (sta[i][j].action) {\n                                    case SymbolTeasingActions.NORMAL:\n                                        if (this.allowSymbolGoToCase(i, j, Symbol.CaseNormal)) {\n                                            this.currentSymbols[i][j].goToCase(Symbol.CaseNormal);\n                                        }\n                                        break;\n                                    case SymbolTeasingActions.IMPACT:\n                                        if (this.allowSymbolGoToCase(i, j, Symbol.CaseImpact)) {\n                                            this.currentSymbols[i][j].goToCase(Symbol.CaseImpact);\n                                        }\n                                        break;\n                                    case SymbolTeasingActions.IMPACT_TEASE:\n                                        if (this.allowSymbolGoToCase(i, j, Symbol.CaseImpactTease)) {\n                                            this.currentSymbols[i][j].goToCase(Symbol.CaseImpactTease);\n                                        }\n                                        break;\n                                    case SymbolTeasingActions.IMPACT_NOWIN:\n                                        if (this.allowSymbolGoToCase(i, j, Symbol.CaseImpactNowin)) {\n                                            this.currentSymbols[i][j].goToCase(Symbol.CaseImpactNowin);\n                                        }\n                                        break;\n                                    case SymbolTeasingActions.NOWIN:\n                                        if (this.allowSymbolGoToCase(i, j, Symbol.CaseNowin)) {\n                                            this.currentSymbols[i][j].goToCase(Symbol.CaseNowin);\n                                        }\n                                        break;\n                                    case SymbolTeasingActions.TEASE:\n                                        if (this.allowSymbolGoToCase(i, j, Symbol.CaseTeaser)) {\n                                            this.currentSymbols[i][j].goToCase(Symbol.CaseTeaser);\n                                        }\n                                        break;\n                                }\n                            } else {\n                                if (i == reelIndex && this.allowSymbolGoToCase(i, j, Symbol.CaseImpact)) {\n                                    this.currentSymbols[i][j].goToCase(Symbol.CaseImpact);\n                                } else if (this.allowSymbolGoToCase(i, j, Symbol.CaseNormal)) {\n                                    this.currentSymbols[i][j].goToCase(Symbol.CaseNormal);\n                                }\n                            }\n                        }\n                    }\n                }\n            } else {\n                for (let i = 0; i <= reelIndex; i++) {\n                    for (let j = 0; j < this.currentSymbols[i].length; j++) {\n                        if (this.currentSymbols[i][j] != null) {\n                            if (typeof sta !== \"undefined\") {\n                                switch (sta[i][j].action) {\n                                    case SymbolTeasingActions.IMPACT:\n                                        if (this.allowSymbolGoToCase(i, j, Symbol.CaseImpact)) {\n                                            this.currentSymbols[i][j].goToCase(Symbol.CaseImpact);\n                                        }\n                                        break;\n                                    case SymbolTeasingActions.NORMAL:\n                                        if (this.allowSymbolGoToCase(i, j, Symbol.CaseNormal)) {\n                                            this.currentSymbols[i][j].goToCase(Symbol.CaseNormal);\n                                        }\n                                        break;\n                                    case SymbolTeasingActions.IMPACT_TEASE:\n                                        if (this.allowSymbolGoToCase(i, j, Symbol.CaseImpactTease)) {\n                                            this.currentSymbols[i][j].goToCase(Symbol.CaseImpactTease);\n                                        }\n                                        break;\n                                    case SymbolTeasingActions.IMPACT_NOWIN:\n                                        if (this.allowSymbolGoToCase(i, j, Symbol.CaseImpactNowin)) {\n                                            this.currentSymbols[i][j].goToCase(Symbol.CaseImpactNowin);\n                                        }\n                                        break;\n                                    case SymbolTeasingActions.NOWIN:\n                                        if (this.allowSymbolGoToCase(i, j, Symbol.CaseNowin)) {\n                                            this.currentSymbols[i][j].goToCase(Symbol.CaseNowin);\n                                        }\n                                        break;\n                                }\n                            } else {\n                                if (i == reelIndex && this.allowSymbolGoToCase(i, j, Symbol.CaseImpact)) {\n                                    this.currentSymbols[i][j].goToCase(Symbol.CaseImpact);\n                                } else if (this.allowSymbolGoToCase(i, j, Symbol.CaseNormal)) {\n                                    this.currentSymbols[i][j].goToCase(Symbol.CaseNormal);\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  WINS\n    //******************************************************************************************************************\n\n    showWins(wins: Array<Communication.Game.IWin>, win: number): boolean {\n        this.resetCounter();\n\n        let ret = super.showWins(wins, win);\n\n        if (wins == null || wins.length === 0) {\n            this.startStarAnimation();\n        }\n\n        if (win > 0) {\n            if (this.currentMultiplierIndex > 1) {\n                // priority: current FS prefix + HIGH + number -> current FS prefix + HIGH -> HIGH + number -> HIGH -> other FS prefix + HIGH + number + other FS prefix + HIGH\n                this.setActiveElementCaseArray([\n                    (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                        WinAnimatorExtended.CaseHighWin +\n                        this.currentMultiplierIndex,\n                    (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                        WinAnimatorExtended.CaseHighWin,\n                    WinAnimatorExtended.CaseHighWin + this.currentMultiplierIndex,\n                    WinAnimatorExtended.CaseHighWin,\n                    (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                        WinAnimatorExtended.CaseHighWin +\n                        this.currentMultiplierIndex,\n                    (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                        WinAnimatorExtended.CaseHighWin,\n                ]);\n            } else {\n                // priority: current FS prefix + WIN -> WIN -> other FS prefix + WIN\n                this.setActiveElementCaseArray([\n                    (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                        WinAnimatorExtended.CaseWin,\n                    WinAnimatorExtended.CaseWin,\n                    (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                        WinAnimatorExtended.CaseWin,\n                ]);\n            }\n            //PlayList.stop(\"SND_BaseLoop\", 30);\n        } else {\n            // priority: current FS prefix + NOWIN -> NOWIN -> other FS prefix + NOWIN\n            this.setActiveElementCaseArray([\n                (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                    WinAnimatorExtended.CaseNoWin,\n                WinAnimatorExtended.CaseNoWin,\n                (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                    WinAnimatorExtended.CaseNoWin,\n            ]);\n        }\n\n        return ret;\n    }\n\n    protected showFirstWins(): void {\n        if (this.currentMultiplierIndex === 0 || this.currentMultiplierIndex === 1) {\n            this.currentCounterStep = 0;\n\n            this.startTimer(WinAnimatorExtended.ShowFirstWinsStep, 15);\n        } else {\n            if (ModuleManager.freespinsActive()) {\n                ModuleManager.overlayFsBoard();\n            }\n            super.showFirstWins();\n        }\n    }\n\n    protected showCustomInitWin(): void {\n        super.showCustomInitWin();\n        if (this.currentWins) {\n            this.currentWins.forEach((win) => {\n                if (win.trigger === Communication.Game.WinTrigger.Scatter) {\n                    this.startTimer(WinAnimatorExtended.EndFirstWinsStep, this._paylineWinDelay);\n                }\n            });\n        }\n    }\n\n    protected putSymbolsOnTop(symbols: Array<Symbol>): void {\n        while (this.symbolsContainer.children[0]) {\n            this.noWinSymbolsContainer.addChild(this.symbolsContainer.children[0]);\n        }\n        symbols.forEach((symbol) => {\n            this.symbolsContainer.addChild(symbol);\n        });\n    }\n\n    protected showFirstWinsStep(): void {\n        const win = this.currentWins[this.currentCounterStep];\n\n        this.allPaylinesGoToCase(Payline.CaseNowin);\n        this.allSymbolsGoToCase(Symbol.CaseNowin, true);\n\n        for (let i = 0; i < this.currentWins.length; i++) {\n            this.winPaylineGoToCase(i, Payline.CaseNormal);\n            this.winSymbolsGoToCase(i, Symbol.CaseNormal, false);\n        }\n\n        if (this._paylineEvaluation === WinAnimatorExtendedAttributes.PAYLINE_EVALUATION_TYPES.SEPARATE) {\n            this.winPaylineGoToCase(this.currentCounterStep, Payline.CaseWin);\n            const symbols = this.winSymbolsGoToCase(this.currentCounterStep, Symbol.CaseWin, false);\n            this.putSymbolsOnTop(symbols);\n        } else {\n            for (let i = 0; i < this.currentWins.length; i++) {\n                this.winSymbolsGoToCase(i, Symbol.CaseWin, false);\n                this.winPaylineGoToCase(i, Payline.CaseWin);\n            }\n            this.currentCounterStep = this.currentWins.length - 1;\n        }\n\n        if (win.amount > 0) {\n            this.runCounterStep();\n        }\n\n        this.currentCounterStep++;\n\n        this.startTimer(\n            this.currentCounterStep < this.currentWins.length\n                ? WinAnimatorExtended.ShowFirstWinsStep\n                : WinAnimatorExtended.FinishWin,\n            this._paylineWinDelay,\n        );\n    }\n\n    protected endFirstWinsStep(): void {\n        this.currentCounterStep = null;\n        this.timerStatus = null;\n\n        this.emit(WinAnimator.FinishWinAnimator);\n\n        this.currentCycle = 0;\n\n        // PlayList.stop('SND_BaseLoop', 30);\n        // PlayList.loop(\"SND_CycleLoop\", 30);\n        /*\n        let isScatter = false;\n        if(this.currentWins) {\n            this.currentWins.forEach(win => {\n                if(win.trigger === Communication.Game.WinTrigger.Scatter) {\n                    isScatter = true;\n                }\n            });\n        }\n*/\n        if (!this._inCycleWin) {\n            this.cycleWins();\n        }\n    }\n\n    protected finishWin(): void {\n        this.emit(WinAnimator.FinishWinCalculation);\n\n        this.runCounterOutro();\n\n        let endDelay: number = this._paylineWinEndDelay;\n\n        // if scatter, no delay\n        if (this.currentWins) {\n            this.currentWins.forEach((win) => {\n                if (win.trigger === Communication.Game.WinTrigger.Scatter) {\n                    endDelay = 0;\n                }\n            });\n        }\n\n        this.startTimer(WinAnimatorExtended.EndFirstWinsStep, endDelay);\n    }\n\n    protected finishFirstWins(): void {\n        // PlayList.stop('SND_BaseLoop', 30);\n        // PlayList.loop(\"SND_CycleLoop\", 30);\n\n        // if (this.currentMultiplierIndex > 1) {\n        super.finishFirstWins();\n        // }\n    }\n\n    protected cycleWins(): void {\n        if (this.currentWin <= 0) {\n            return;\n        }\n\n        this._inCycleWin = true;\n        let skipCycle: boolean = false;\n        if (\n            this.currentWins[this.currentCycle].trigger === Communication.Game.WinTrigger.Scatter &&\n            this.currentWins[this.currentCycle].type === Communication.Game.WinType.freeSpins\n        ) {\n            this.allSymbolsGoToCase(Symbol.CaseNormal, true);\n            skipCycle = true;\n        } else {\n            PlayList.play(\"SND_BaseRecapWinline\");\n            // PlayList.loop(\"SND_CycleLoop\");\n\n            // e.g. \"WIN\" -> \"WIN_CYCLE\", \"HIGH1\" -> \"HIGH1_CYCLE\"\n            //this.setActiveElementCase(this.getActiveElementCase() + WinAnimatorExtended.CaseSuffixCycle);\n\n            this.allSymbolsGoToCase(Symbol.CaseNowin, true);\n            this.allPaylinesGoToCase(Payline.CaseNowin);\n\n            for (let i = 0; i < this.currentWins.length; i++) {\n                this.winSymbolsGoToCase(i, Symbol.CaseNormal, false);\n                this.winPaylineGoToCase(i, Payline.CaseNormal);\n            }\n\n            let symbols = this.winSymbolsGoToCase(this.currentCycle, Symbol.CaseCycle, true);\n            this.winPaylineGoToCase(this.currentCycle, Payline.CaseCycle);\n\n            this.putSymbolsOnTop(symbols);\n\n            this.currentCycle = (this.currentCycle + 1) % this.currentWins.length;\n        }\n\n        if (skipCycle) {\n            this.stopTimer();\n            this.startTimer(WinAnimator.CycleWins, 1);\n        } else {\n            if (this.currentWins.length > 1) {\n                this.stopTimer();\n                this.startTimer(WinAnimator.CycleWins, this._paylineCycleDelay);\n            }\n        }\n    }\n\n    protected getCycleWinsDelay(): number {\n        return 90;\n    }\n\n    protected onCalculationFinished(): void {\n        super.onCalculationFinished();\n        //this._counterPlayed = false;\n    }\n\n    protected onAnimationFinished(): void {\n        super.onAnimationFinished();\n    }\n    protected softOutro(): void {\n        if (ModuleManager.freespinsActive()) {\n            if (this.currentMultiplierIndex > 1) {\n                ModuleManager.removeOverlayFsBoard();\n            }\n        }\n    }\n\n    reset(showLastSymbols: boolean, spin: boolean = false): boolean {\n        if (!showLastSymbols) {\n            this.stopStarAnimation();\n        }\n\n        if (this._scatterTimeout) {\n            clearTimeout(this._scatterTimeout);\n            this._scatterTimeout = null;\n        }\n\n        this._inCycleWin = false;\n        this.softOutro();\n\n        // resets to current case w/o \"_CYCLE\" suffix + \"_OUTRO\" suffix; OR sets to \"RESET\"\n        let activeCase = this.getActiveElementCase();\n        let caseReg = new RegExp(WinAnimatorExtended.CaseSuffixCycle + \"$\");\n        if (caseReg.test(activeCase)) {\n            this.setActiveElementCaseArray([\n                activeCase.replace(caseReg, \"\") + WinAnimatorExtended.CaseSuffixOutro,\n                WinAnimatorExtended.CaseReset,\n            ]);\n        } else {\n            this.setActiveElementCaseArray([\n                activeCase + WinAnimatorExtended.CaseSuffixOutro,\n                WinAnimatorExtended.CaseReset,\n            ]);\n        }\n\n        let outroPlayed = false;\n\n        switch (this.timerStatus) {\n            case WinAnimatorExtended.ShowFirstWinsStep:\n                this.runCounterOutro(true);\n                outroPlayed = true;\n                break;\n            case WinAnimatorExtended.FinishWin:\n                this.runCounterOutro(true);\n                outroPlayed = true;\n                this.currentCounterStep = null;\n                this.timerStatus = null;\n                this.currentCycle = 0;\n                break;\n            case WinAnimatorExtended.EndFirstWinsStep:\n                this.currentCounterStep = null;\n                this.timerStatus = null;\n                this.currentCycle = 0;\n                break;\n        }\n\n        if (this.currentCounterStep != null) {\n            this.currentCounterStep = null;\n\n            if (!outroPlayed) {\n                this.runCounterOutro(true);\n            }\n        }\n\n        if (showLastSymbols) {\n            this.startStarAnimation();\n        }\n\n        // PlayList.stop(\"SND_CycleLoop\");\n        // PlayList.loop(\"SND_BaseLoop\", 30);\n        if (spin) {\n            for (let reelIndex = 0; reelIndex < this.currentSymbols.length; reelIndex++) {\n                for (let rowIndex = 0; rowIndex < this.currentSymbols[reelIndex].length; rowIndex++) {\n                    const symbol = this.currentSymbols[reelIndex][rowIndex];\n\n                    if (symbol != null && Settings.SymbolsNoTrim.indexOf(symbol.id + 1) != -1) {\n                        if (this.elementInstance[\"wildContainer\"] != null) {\n                            //this.currentSymbols[reelIndex][rowIndex].visible = false;\n                            // symbol.alpha = 0.5;\n                            this.currentSymbols[reelIndex][rowIndex] = null;\n                            this.elementInstance[\"wildContainer\"].addChild(symbol);\n\n                            if (\n                                symbol.getCurrentCase() !== Symbol.CaseNormal ||\n                                symbol.getCurrentCase() !== Symbol.CaseIdle\n                            ) {\n                                symbol.goToCase(Symbol.CaseNormal);\n                            }\n\n                            symbol.goToCase(Symbol.CaseRotation);\n\n                            Tweens.positionTween(symbol, {\n                                tweenDelay: this._startDelay * reelIndex,\n                                tweenX: [symbol.x, symbol.x, symbol.x],\n                                tweenY: [symbol.y, symbol.y - this._preRoll, symbol.y],\n                                tweenDuration: this._preRollSpeed * 2,\n                                callbackFunction: (): void => {\n                                    this.symbolsContainer.addChild(symbol);\n                                    symbol.goToCase(Symbol.CaseEmpty);\n                                    this.currentSymbols[reelIndex][rowIndex] = symbol;\n                                },\n                            });\n                        }\n                    }\n                }\n            }\n        }\n\n        PlayList.stop(\"SND_CycleLoop\");\n        // PlayList.loop(\"SND_BaseLoop\", 30);\n\n        return super.reset(showLastSymbols);\n    }\n\n    public respinReset(respin: number): boolean {\n        return true;\n    }\n\n    protected idle(): void {\n        this.setActiveElementCaseArray([\n            (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                WinAnimatorExtended.CaseIdle,\n            WinAnimatorExtended.CaseNoWin,\n            (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                WinAnimatorExtended.CaseIdle,\n        ]);\n        super.idle();\n    }\n\n    //******************************************************************************************************************\n    //  SHOW INIT WINS\n    //******************************************************************************************************************\n\n    public showInitWins(wins: Array<Communication.Game.IWin>, win: number): void {\n        this.resetCounter();\n\n        super.showInitWins(wins, win);\n\n        this.startStarAnimation();\n\n        if (win > 0) {\n            if (this.currentMultiplierIndex > 1) {\n                // priority: current FS prefix + HIGH + number -> current FS prefix + HIGH -> HIGH + number -> HIGH -> other FS prefix + HIGH + number + other FS prefix + HIGH\n                this.setActiveElementCaseArray([\n                    (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                        WinAnimatorExtended.CaseHighWin +\n                        this.currentMultiplierIndex,\n                    (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                        WinAnimatorExtended.CaseHighWin,\n                    WinAnimatorExtended.CaseHighWin + this.currentMultiplierIndex,\n                    WinAnimatorExtended.CaseHighWin,\n                    (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                        WinAnimatorExtended.CaseHighWin +\n                        this.currentMultiplierIndex,\n                    (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                        WinAnimatorExtended.CaseHighWin,\n                ]);\n            } else {\n                // priority: current FS prefix + WIN -> WIN -> other FS prefix + WIN\n                this.setActiveElementCaseArray([\n                    (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                        WinAnimatorExtended.CaseWin,\n                    WinAnimatorExtended.CaseWin,\n                    (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                        WinAnimatorExtended.CaseWin,\n                ]);\n            }\n            PlayList.stop(\"SND_BaseLoop\", 30);\n        } else {\n            // priority: current FS prefix + NOWIN -> NOWIN -> other FS prefix + NOWIN\n            this.setActiveElementCaseArray([\n                (this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                    WinAnimatorExtended.CaseNoWin,\n                WinAnimatorExtended.CaseNoWin,\n                (!this.isFS ? WinAnimatorExtended.CasePrefixFreeSpins : WinAnimatorExtended.CasePrefixNormal) +\n                    WinAnimatorExtended.CaseNoWin,\n            ]);\n        }\n    }\n\n    //******************************************************************************************************************\n    //  ACTIVE ELEMENTS\n    //******************************************************************************************************************\n\n    /**\n     * Attempts to switch all Active Elements to the earliest case from array the element can be switched to.\n     * Elements with no case from the list are ignored.\n     * @param s Array of names of cases to try to switch to\n     * @param emitEvent\n     * @param delay Switch delay\n     */\n    private setActiveElementCaseArray(s: Array<string>, emitEvent: boolean = false, delay?: number) {\n        if (!s.length) {\n            return;\n        }\n        if (!this.visible) {\n            return;\n        }\n        this._activeElementsCase = s[0];\n        this._activeElements.forEach((element) => {\n            for (let i = 0; i < s.length; i++) {\n                if (element.hasCase(s[i])) {\n                    element.goToCase(s[i], emitEvent, delay);\n                    break;\n                }\n            }\n        });\n    }\n\n    /**\n     * Attempts to switch all Active Elements to the given case if they have this case.\n     * Elements without the case are ignored.\n     * @param s Case name\n     * @param emitEvent\n     * @param delay\n     */\n    private setActiveElementCase(s: string, emitEvent: boolean = false, delay?: number) {\n        if (!this.visible) {\n            return;\n        }\n        this._activeElementsCase = s;\n        this._activeElements.forEach((element) => {\n            if (element.hasCase(s)) {\n                element.goToCase(s, emitEvent, delay);\n            }\n        });\n    }\n\n    /**\n     * Returns last case switched to, or the first case from a list switched to.\n     */\n    private getActiveElementCase(): string {\n        return this._activeElementsCase;\n    }\n\n    //******************************************************************************************************************\n    //  TIMER\n    //******************************************************************************************************************\n\n    protected onTimerComplete(): void {\n        this.timer.stop();\n\n        switch (this.timerStatus) {\n            case WinAnimatorExtended.ShowFirstWinsStep:\n                this.showFirstWinsStep();\n                break;\n            case WinAnimatorExtended.EndFirstWinsStep:\n                this.endFirstWinsStep();\n                break;\n            case WinAnimatorExtended.FinishWin:\n                this.finishWin();\n                break;\n            default:\n                super.onTimerComplete();\n                break;\n        }\n    }\n\n    //******************************************************************************************************************\n    //  COUNTER\n    //******************************************************************************************************************\n\n    protected resetCounter(): void {\n        if (!this.animations || !this.animations[this.getAnimationIndex()]) {\n            return;\n        }\n        Tweens.removeTweens(this.animations[this.getAnimationIndex()], \"all\");\n        this.animations[this.getAnimationIndex()].visible = false;\n    }\n\n    protected runCounterStep(): void {\n        if (!this.animations || !this.animations[this.getAnimationIndex()]) {\n            return;\n        }\n        // play sound\n        //PlayList.play('SND_BasePayline' + Math.min(this.currentCounterStep + 1, 16));\n        //PlayList.play('SND_BasePayline');\n\n        // calculate from and to values\n        let amountFrom = \"0\";\n        let amountTo = \"0\";\n        for (let i = 0; i <= this.currentCounterStep; i++) {\n            const win = this.currentWins[i];\n\n            if (win.type === Communication.Game.WinType.Cash) {\n                /*\n                if (i < this.currentCounterStep) {\n                    amountFrom += this.currentWins[i].amount;\n                }*/\n\n                amountTo = NumberUtils.add(amountTo, this.currentWins[i].amount);\n            }\n        }\n\n        // start animation from->to\n\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n            ImageTextCounterElement.Round = true;\n            this.animations[this.getAnimationIndex()].play(\n                parseInt(NumberUtils.devide(amountTo, BetManager.CoinSize).toString()),\n                parseInt(NumberUtils.devide(amountFrom, BetManager.CoinSize).toString()),\n            );\n        } else {\n            ImageTextCounterElement.Round = false;\n            this.animations[this.getAnimationIndex()].play(parseFloat(amountTo), parseFloat(amountFrom));\n        }\n\n        // if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\n        //     ImageTextCounterElement.Round = true;\n        //     this.animations[this.getAnimationIndex()].play(parseInt(NumberUtils.devide(amountTo, BetManager.CoinSize)), parseInt(NumberUtils.devide(amountFrom, BetManager.CoinSize)));\n        // } else {\n        //     ImageTextCounterElement.Round = false;\n        //     this.animations[this.getAnimationIndex()].play(amountTo, amountFrom);\n        // }\n        this.animations[this.getAnimationIndex()].visible = true;\n\n        // win scale animation\n        Tweens.removeTweens(this.animations[this.getAnimationIndex()], \"all\");\n\n        if (this._winScaleConstantMultiplicative == 0) {\n            this.animations[this.getAnimationIndex()].scale.x = this._winScaleConstantAdditive;\n            this.animations[this.getAnimationIndex()].scale.y = this._winScaleConstantAdditive;\n            return;\n        }\n\n        let scaleFrom =\n            this._winScaleConstantAdditive +\n            (this._winScaleConstantMultiplicative * this.currentCounterStep) / this.currentWins.length;\n        let scaleTo =\n            this._winScaleConstantAdditive +\n            (this._winScaleConstantMultiplicative * (this.currentCounterStep + 1)) / this.currentWins.length;\n\n        Tweens.scaleTween(this.animations[this.getAnimationIndex()], {\n            tweenValues: [\n                new PIXI.Point(scaleFrom, scaleFrom),\n                new PIXI.Point(scaleFrom, scaleFrom),\n                new PIXI.Point(scaleTo, scaleTo),\n                new PIXI.Point(scaleTo, scaleTo),\n            ],\n            keyTimes: this._winScaleKeyTimes,\n            tweenDuration: this._winScaleDuration,\n            tweenEase: this._winScaleEase,\n        });\n\n        this._counterPlayed = true;\n    }\n\n    public setCustomData(value: any) {\n        this._customData = value;\n    }\n\n    protected runCounterOutro(reset: boolean = false): void {\n        if (!this.animations || !this.animations[this.getAnimationIndex()] || !this._counterPlayed) {\n            return;\n        }\n        Tweens.removeTweens(this.animations[this.getAnimationIndex()], \"all\");\n\n        let scale =\n            this._winScaleConstantAdditive +\n            (this._winScaleConstantMultiplicative * (reset ? this.currentWins.length : this.currentCounterStep)) /\n                this.currentWins.length;\n        this.animations[this.getAnimationIndex()].scale.x = scale;\n        this.animations[this.getAnimationIndex()].scale.y = scale;\n        this.animations[this.getAnimationIndex()].winValue = this.currentWin;\n        this.animations[this.getAnimationIndex()].goToOutro();\n\n        this._counterPlayed = false;\n    }\n\n    /**\n     * Finish high win animations and start cycle win animations.\n     * @method finishHighWins\n     * @return void\n     */\n    private finishHighWins(): void {\n        // PlayList.loop(\"SND_CycleLoop\", 120);\n        this.onAnimationFinished();\n        this.emit(WinAnimator.FinishWinAnimator);\n    }\n\n    public getCurrentMultiplierIndex(): number {\n        return this.currentMultiplierIndex;\n    }\n\n    //******************************************************************************************************************\n    //  STAR ANIMATION\n    //******************************************************************************************************************\n\n    private startStarAnimation(): void {\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            let row = this.currentSymbols[i];\n            for (let j = 0; j < row.length; j++) {\n                let symbol = row[j] as Symbol;\n                var children = symbol.getChildElements();\n\n                for (let key in children) {\n                    if (key.lastIndexOf(\"Star\", 0) === 0) {\n                        let star = children[key] as TimelineElement;\n                        if (star !== null) {\n                            let timer = CreateFrameTimer(\"symbol\" + i + j + \"_\" + key);\n                            this.starTimerStack.push(timer);\n\n                            let rand = Math.floor(Math.random() * 100 * ((i + 1) * (j + 1))) + 1;\n\n                            timer.start(rand);\n                            timer.on(FrameTimerEvents.Complete, () => {\n                                star.play();\n                            });\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    //******************************************************************************************************************\n    //  SYMBOLS\n    //******************************************************************************************************************\n\n    /**\n     *\n     * @param {number} reelIndex\n     * @param {number} symbolIndex\n     */\n    protected addCurrentSymbol(reelIndex: number, symbolIndex: number): void {\n        super.addCurrentSymbol(reelIndex, symbolIndex);\n        this.sortChildrenByZindex();\n    }\n\n    /**\n     *\n     * @param {number} winIndex\n     * @param {string} caseType\n     * @param {boolean} useValue\n     */\n    protected winSymbolsGoToCase(winIndex: number, caseType: string, useValue: boolean): Array<Symbol> {\n        const win = this.currentWins[winIndex];\n        const symbols = super.winSymbolsGoToCase(winIndex, caseType, useValue);\n        if (useValue && symbols.length > 0 && win.amount > 0) {\n            this.value.position.x = symbols[0].position.x + symbols[0].offsetX + this.symbolWidth / 2;\n            this.value.position.y = symbols[0].position.y + symbols[0].offsetY + this.symbolHeight / 2;\n            this.value.scale.x = this.value.scale.y = 1;\n            this.value.visible = true;\n            this.value.play(win.amount);\n        }\n\n        this.sortChildrenByZindex();\n\n        return symbols;\n    }\n\n    /**\n     * Sorts children of container by symbols zIndex attribute.\n     */\n    protected sortChildrenByZindex(): void {\n        this.symbolsContainer.children.sort((a: any, b: any) => {\n            if (a.hasOwnProperty(\"zIndex\") && b.hasOwnProperty(\"zIndex\")) {\n                a.zIndex = a.zIndex || 0;\n                b.zIndex = b.zIndex || 0;\n\n                return a.zIndex - b.zIndex;\n            }\n            return 0;\n        });\n    }\n\n    protected allSymbolsGoToCase(caseType: string, noWin: boolean): void {\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            for (let j = 0; j < this.currentSymbols[i].length; j++) {\n                const symbol = this.currentSymbols[i][j];\n\n                if (symbol !== null && this.allowSymbolGoToCase(i, j, caseType)) {\n                    symbol.goToCase(caseType);\n\n                    if (noWin) {\n                        this.noWinSymbolsContainer.addChild(symbol);\n                    } else {\n                        this.symbolsContainer.addChild(symbol);\n                    }\n                }\n            }\n        }\n\n        this.sortChildrenByZindex();\n    }\n\n    protected allowSymbolGoToCase(reelIndex: number, symbolIndex: number, caseType: string): boolean {\n        if (\n            caseType == Symbol.CaseNormal &&\n            this.currentSymbols[reelIndex][symbolIndex].getCurrentCase() == Symbol.CaseIdle\n        ) {\n            return false;\n        }\n        return super.allowSymbolGoToCase(reelIndex, symbolIndex, caseType);\n    }\n\n    showSymbols(reelsData: Array<Communication.Game.IReel>): void {\n        this.currentReels = reelsData;\n\n        for (let i = 0; i < reelsData.length; i++) {\n            for (let j = 0; j < reelsData[i].symbols.length; j++) {\n                this.removeCurrentSymbol(i, j);\n            }\n        }\n\n        for (let i = 0; i < reelsData.length; i++) {\n            for (let j = 0; j < reelsData[i].symbols.length; j++) {\n                this.addCurrentSymbol(i, j);\n            }\n        }\n    }\n\n    private stopStarAnimation(): void {\n        for (let i = 0; i < this.currentSymbols.length; i++) {\n            let row = this.currentSymbols[i];\n            for (let j = 0; j < row.length; j++) {\n                let symbol = row[j] as Symbol;\n                var children = symbol.getChildElements();\n\n                for (let key in children) {\n                    if (key.lastIndexOf(\"Star\", 0) === 0) {\n                        let star = children[key] as TimelineElement;\n                        if (star !== null) {\n                            star.stop();\n                        }\n                    }\n                }\n            }\n        }\n\n        for (let i = 0, len = this.starTimerStack.length; i < len; i++) {\n            let timer = this.starTimerStack.pop();\n            timer.stop();\n        }\n    }\n\n    protected getIdleDelay(): number {\n        return 160;\n    }\n\n    protected getIdleActiveElementsCount(): number {\n        return 2;\n    }\n\n    public isHighWin(win: number): boolean {\n        return win / BetManager.Bet >= this.multipliers[2];\n    }\n}\n\nexport const WinAnimatorExtendedAttributes = {\n    /*\n     * List of child SwitchElements which should be set to different cases at different times (e.g. \"WIN\", \"NOWIN\", \"CYCLE\"...) if possible\n     * @property ActiveElements\n     * @type string\n     * @default \"\"\n     */\n    ACTIVE_ELEMENTS: \"ActiveElements\",\n\n    PAYLINE_DURATION: \"PaylineDuration\",\n    PAYLINE_WIN_DELAY: \"PaylineWinDelay\",\n    PAYLINE_WIN_END_DELAY: \"PaylineWinEndDelay\",\n    PAYLINE_CYCLE_DELAY: \"PaylineCycleDelay\",\n    PAYLINE_EVALUATION: \"PaylineEvaluation\",\n    PAYLINE_EVALUATION_TYPES: {\n        SEPARATE: \"separate\",\n        TOGETHER: \"together\",\n    },\n\n    CYCLE_ANIMATION: \"CycleAnimation\",\n\n    IS_FS_ANIMATOR: \"FreeSpinAnimator\",\n\n    /**\n     * For 0th-multiplier (regular win) counter, in each step (win), the counter goes through scaling animation:\n     *      ScaleTween = ScaleStart;ScaleStart;ScaleEnd;ScaleEnd\n     *      (this allows tweaking through keytimes)\n     * Where:\n     *      ScaleStart = A + M * current / max\n     *      ScaleEnd = A + M * (current+1) / max\n     * Where:\n     *      A = Additive Constant\n     *      M = Multiplicative Constant\n     *      current = current win step\n     *      max = total win step\n     */\n\n    /*\n     * @property WinScaleConstantAdditive\n     * @type number\n     * @default 1\n     */\n    WIN_SCALE_CONSTANT_ADDITIVE: \"WinScaleConstantAdditive\",\n    /*\n     * @property WinScaleConstantMultiplicative\n     * @type number\n     * @default 0\n     */\n    WIN_SCALE_CONSTANT_MULTIPLICATIVE: \"WinScaleConstantMultiplicative\",\n    /*\n     * @property WinScaleDuration\n     * @type number\n     * @default 30\n     */\n    WIN_SCALE_DURATION: \"WinScaleDuration\",\n    /*\n     * @property WinScaleEase\n     * @type string\n     * @default \"backOut\"\n     */\n    WIN_SCALE_EASE: \"WinScaleEase\",\n    /*\n     * Key times of regular win scale animations;\n     * @property WinScaleKeyTimes\n     * @type string\n     * @default \"0;0;1;1\"\n     */\n    WIN_SCALE_KEY_TIMES: \"WinScaleKeyTimes\",\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/WinAnimatorExtended.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { SwitchElement } from \"../../Components/Elements/Graphics/SwitchElement\";\n\n@engineComponent(ComponentTypes.DisplayObject)\nexport class Spot extends SwitchElement {\n    delayedTimer: FrameTimerEventEmitter;\n    delayedCase: string;\n    enabled: boolean;\n\n    constructor() {\n        super();\n\n        this.delayedTimer = CreateFrameTimer(\"delayedTimer\");\n        this.enabled = false;\n    }\n\n    delayedGoToCase(delay: number, delayedCase: string): void {\n        this.delayedCase = delayedCase;\n\n        this.delayedTimer.stop();\n        this.delayedTimer.removeAllListeners(FrameTimerEvents.Complete);\n        this.delayedTimer.on(FrameTimerEvents.Complete, this.delayedToCase.bind(this));\n        this.delayedTimer.start(delay);\n    }\n\n    private delayedToCase(): void {\n        if (this.delayedCase != null || this.delayedCase != \"\") {\n            this.delayedTimer.stop();\n            this.delayedTimer.removeAllListeners(FrameTimerEvents.Complete);\n            this.goToCase(this.delayedCase);\n            this.delayedCase = \"\";\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Pick/Spot.ts\n **/","import { engineComponent, StringUtils, Utils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { HtmlController } from \"../HtmlController\";\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlBetSelectorContainerElement extends HtmlContainerElement {\n    private _popup: HTMLDivElement;\n    private _values: Array<HTMLDivElement>;\n    private _height: string;\n\n    protected block: boolean;\n    protected timeout: number;\n\n    constructor() {\n        super();\n\n        BetManager.CoinCountContainer = this;\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this._popup = <HTMLDivElement>document.createElement(\"div\");\n        this._popup.classList.add(\"display\");\n        this._popup.classList.add(\"popupBig\");\n\n        if (this.instance != null) {\n            this.instance.appendChild(this._popup);\n        }\n\n        this.block = true;\n        this.createTimeout();\n    }\n\n    addValues(): void {\n        if (\n            AppContext.gameConfiguration.UseCoins &&\n            BetManager.Coins != null &&\n            BetManager.CoinSize != null &&\n            this._popup != null\n        ) {\n            this._values = [];\n            this._popup.innerHTML = \"\";\n            let i: number = 0;\n            for (let key in BetManager.Coins) {\n                if (BetManager.CoinSize === parseFloat(key)) {\n                    for (let j: number = 0; j < BetManager.Coins[key].length; j++) {\n                        BetManager.Coins[key].sort(BetManager.sortNumber);\n                        BetManager.Coins[key].reverse();\n\n                        let popupItem: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                        popupItem.classList.add(\"popupItem\");\n                        popupItem.onclick = this.onValueClick.bind(this);\n                        popupItem.setAttribute(\"CoinCount\", BetManager.Coins[key][j].toString());\n                        if (BetManager.CoinCount != null && BetManager.CoinCount == BetManager.Coins[key][j]) {\n                            popupItem.classList.add(\"_active\");\n                        }\n                        let popupItemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                        popupItemValue.classList.add(\"popupValue\");\n                        popupItemValue.innerText = BetManager.Coins[key][j].toString();\n\n                        popupItem.appendChild(popupItemValue);\n                        this._values.push(popupItem);\n                        this._popup.appendChild(popupItem);\n                        i++;\n                    }\n                }\n            }\n\n            this._height = 60 * i + 48 + \"px\";\n        }\n    }\n\n    private onValueClick(e: any): void {\n        if (this.block) {\n            return;\n        }\n\n        this.setTimeout();\n        if (\n            e != null &&\n            e.currentTarget != null &&\n            e.currentTarget.hasAttribute(\"CoinCount\") &&\n            BetManager.CoinCount != null\n        ) {\n            let coinCount: number = parseFloat(e.currentTarget.getAttribute(\"CoinCount\"));\n            if (coinCount === BetManager.CoinCount) {\n                this.disable();\n            } else {\n                if (this._values != null) {\n                    for (let i: number = 0; i < this._values.length; i++) {\n                        if (this._values[i].hasAttribute(\"CoinCount\")) {\n                            if (parseFloat(this._values[i].getAttribute(\"CoinCount\")) === coinCount) {\n                                this._values[i].classList.add(\"_active\");\n                            } else {\n                                this._values[i].classList.remove(\"_active\");\n                            }\n                        }\n                    }\n                    HtmlController.dispatchAction(BaseActions.ActionCoinCountSelectValue + coinCount);\n                    this.disable();\n                }\n            }\n        }\n    }\n\n    changeValue(): void {\n        if (this._values != null) {\n            for (let i: number = 0; i < this._values.length; i++) {\n                if (this._values[i].hasAttribute(\"CoinCount\")) {\n                    if (parseFloat(this._values[i].getAttribute(\"CoinCount\")) === BetManager.CoinCount) {\n                        this._values[i].classList.add(\"_active\");\n                    } else {\n                        this._values[i].classList.remove(\"_active\");\n                    }\n                }\n            }\n        }\n    }\n\n    toggle(): void {\n        if (this._values != null && this._values.length <= 1) {\n            return;\n        }\n\n        if (this.instance != null) {\n            if (this.instance.classList.contains(\"_disabled\")) {\n                this.block = false;\n                this.setTimeout();\n                if (this._height != null) {\n                    this.instance.style.height = this._height;\n                }\n                this.instance.classList.remove(\"_disabled\");\n            } else {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    disable(): void {\n        if (this.instance != null) {\n            if (!this.instance.classList.contains(\"_disabled\")) {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    protected createTimeout(): void {\n        this.timeout = null;\n    }\n\n    protected setTimeout(): void {\n        this.clearTimeOut();\n\n        const duration = AppContext.gameConfiguration.SelectorRolloutDuration;\n\n        if (duration > 0) {\n            this.timeout = setTimeout((): void => {\n                this.disable();\n            }, duration * 1000);\n        }\n    }\n\n    protected clearTimeOut(): void {\n        if (!Utils.isNullOrUndefined(this.timeout)) {\n            clearTimeout(this.timeout);\n\n            this.timeout = null;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlBetSelectorContainerElement.ts\n **/","import { engineComponent, StringUtils, Utils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { HtmlController } from \"../HtmlController\";\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\nimport { Languages } from \"../../Utils/Languages\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlBetSelectorContainerElement2 extends HtmlContainerElement {\n    private _popup: HTMLDivElement;\n    private _values: Array<HTMLDivElement>;\n    private _height: string;\n\n    protected block: boolean;\n    protected timeout: number;\n\n    constructor() {\n        super();\n\n        BetManager.BetContainer = this;\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this._popup = <HTMLDivElement>document.createElement(\"div\");\n        this._popup.classList.add(\"display\");\n        this._popup.classList.add(\"popupBig\");\n\n        if (this.instance != null) {\n            this.instance.appendChild(this._popup);\n        }\n\n        this.block = true;\n        this.createTimeout();\n    }\n\n    addValues(): void {\n        if (!AppContext.gameConfiguration.UseCoins && BetManager.TotalBets != null && this._popup != null) {\n            this._values = [];\n            this._popup.innerHTML = \"\";\n            let count: number = 0;\n            for (let i: number = BetManager.TotalBets.length - 1; i >= 0; i--) {\n                let popupItem: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                popupItem.classList.add(\"popupItem\");\n                popupItem.onclick = this.onValueClick.bind(this);\n                popupItem.setAttribute(\"Bet\", BetManager.TotalBets[i].toString());\n                if (BetManager.Bet != null && BetManager.Bet == BetManager.TotalBets[i]) {\n                    popupItem.classList.add(\"_active\");\n                }\n                let popupItemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                popupItemValue.classList.add(\"popupValue\");\n\n                popupItemValue.innerText = Languages.formatText(\n                    Languages.FormatMoney,\n                    BetManager.TotalBets[i].toString(),\n                );\n\n                popupItem.appendChild(popupItemValue);\n                this._values.push(popupItem);\n                this._popup.appendChild(popupItem);\n                count++;\n            }\n\n            this._height = 60 * count + 48 + \"px\";\n        }\n    }\n\n    private onValueClick(e: any): void {\n        if (this.block) {\n            return;\n        }\n\n        this.setTimeout();\n        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Bet\") && BetManager.Bet != null) {\n            let bet: number = parseFloat(e.currentTarget.getAttribute(\"Bet\"));\n            if (bet === BetManager.Bet) {\n                this.disable();\n            } else {\n                if (this._values != null) {\n                    for (let i: number = 0; i < this._values.length; i++) {\n                        if (this._values[i].hasAttribute(\"Bet\")) {\n                            if (parseFloat(this._values[i].getAttribute(\"Bet\")) === bet) {\n                                this._values[i].classList.add(\"_active\");\n                            } else {\n                                this._values[i].classList.remove(\"_active\");\n                            }\n                        }\n                    }\n                    HtmlController.dispatchAction(BaseActions.ActionBetSelectValue + bet);\n                    this.disable();\n                }\n            }\n        }\n    }\n\n    changeValue(): void {\n        if (this._values != null) {\n            for (let i: number = 0; i < this._values.length; i++) {\n                if (this._values[i].hasAttribute(\"Bet\")) {\n                    if (parseFloat(this._values[i].getAttribute(\"Bet\")) === BetManager.Bet) {\n                        this._values[i].classList.add(\"_active\");\n                    } else {\n                        this._values[i].classList.remove(\"_active\");\n                    }\n                }\n            }\n        }\n    }\n\n    toggle(): void {\n        if (this._values != null && this._values.length <= 1) {\n            return;\n        }\n\n        if (this.instance != null) {\n            if (this.instance.classList.contains(\"_disabled\")) {\n                this.block = false;\n                this.setTimeout();\n                if (this._height != null) {\n                    this.instance.style.height = this._height;\n                }\n                this.instance.classList.remove(\"_disabled\");\n            } else {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    disable(): void {\n        if (this.instance != null) {\n            if (!this.instance.classList.contains(\"_disabled\")) {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    protected createTimeout(): void {\n        this.timeout = null;\n    }\n\n    protected setTimeout(): void {\n        this.clearTimeOut();\n\n        const duration = AppContext.gameConfiguration.SelectorRolloutDuration;\n\n        if (duration > 0) {\n            this.timeout = setTimeout((): void => {\n                this.disable();\n            }, duration * 1000);\n        }\n    }\n\n    protected clearTimeOut(): void {\n        if (!Utils.isNullOrUndefined(this.timeout)) {\n            clearTimeout(this.timeout);\n\n            this.timeout = null;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlBetSelectorContainerElement2.ts\n **/","import { engineComponent, StringUtils, Utils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { HtmlController } from \"../HtmlController\";\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlDenomContainerElement extends HtmlContainerElement {\n    private _popup: HTMLDivElement;\n    private _values: Array<HTMLDivElement>;\n    private _height: string;\n\n    protected block: boolean;\n    protected timeout: number;\n\n    constructor() {\n        super();\n\n        BetManager.DenomContainer = this;\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this._popup = <HTMLDivElement>document.createElement(\"div\");\n        this._popup.classList.add(\"display\");\n        this._popup.classList.add(\"popupBig\");\n\n        if (this.instance != null) {\n            this.instance.appendChild(this._popup);\n        }\n\n        this.block = true;\n        this.createTimeout();\n    }\n\n    addValues(): void {\n        if (\n            this._values == null &&\n            AppContext.gameConfiguration.UseCoins &&\n            BetManager.Coins != null &&\n            this._popup != null\n        ) {\n            this._values = [];\n            let i: number = 0;\n            let coinSizes: Array<string> = [];\n            for (let key in BetManager.Coins) {\n                coinSizes.push(key);\n            }\n            coinSizes.sort(BetManager.sortNumber);\n            coinSizes.reverse();\n\n            for (i = 0; i < coinSizes.length; i++) {\n                let popupItem: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                popupItem.classList.add(\"popupItem\");\n                popupItem.onclick = this.onValueClick.bind(this);\n                popupItem.setAttribute(\"CoinSize\", coinSizes[i]);\n                if (BetManager.CoinSize != null && BetManager.CoinSize == parseFloat(coinSizes[i])) {\n                    popupItem.classList.add(\"_active\");\n                }\n                let popupItemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                popupItemValue.classList.add(\"popupValue\");\n                popupItemValue.innerText = coinSizes[i];\n\n                popupItem.appendChild(popupItemValue);\n                this._values.push(popupItem);\n                this._popup.appendChild(popupItem);\n            }\n\n            this._height = 60 * i + 48 + \"px\";\n        }\n    }\n\n    private onValueClick(e: any): void {\n        if (this.block) {\n            return;\n        }\n\n        this.setTimeout();\n        if (\n            e != null &&\n            e.currentTarget != null &&\n            e.currentTarget.hasAttribute(\"CoinSize\") &&\n            BetManager.CoinSize != null\n        ) {\n            let coinSize: number = parseFloat(e.currentTarget.getAttribute(\"CoinSize\"));\n            if (coinSize === BetManager.CoinSize) {\n                this.disable();\n            } else {\n                if (this._values != null) {\n                    for (let i: number = 0; i < this._values.length; i++) {\n                        if (this._values[i].hasAttribute(\"CoinSize\")) {\n                            if (parseFloat(this._values[i].getAttribute(\"CoinSize\")) === coinSize) {\n                                this._values[i].classList.add(\"_active\");\n                            } else {\n                                this._values[i].classList.remove(\"_active\");\n                            }\n                        }\n                    }\n                    HtmlController.dispatchAction(BaseActions.ActionDenomSelectValue + coinSize);\n                    this.disable();\n                }\n            }\n        }\n    }\n\n    toggle(): void {\n        if (this._values != null && this._values.length <= 1) {\n            return;\n        }\n        if (this.instance != null) {\n            if (this.instance.classList.contains(\"_disabled\")) {\n                this.block = false;\n                this.setTimeout();\n                if (this._height != null) {\n                    this.instance.style.height = this._height;\n                }\n                this.instance.classList.remove(\"_disabled\");\n            } else {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    disable(): void {\n        if (this.instance != null) {\n            if (!this.instance.classList.contains(\"_disabled\")) {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    protected createTimeout(): void {\n        this.timeout = null;\n    }\n\n    protected setTimeout(): void {\n        this.clearTimeOut();\n\n        const duration = AppContext.gameConfiguration.SelectorRolloutDuration;\n\n        if (duration > 0) {\n            this.timeout = setTimeout((): void => {\n                this.disable();\n            }, duration * 1000);\n        }\n    }\n\n    protected clearTimeOut(): void {\n        if (!Utils.isNullOrUndefined(this.timeout)) {\n            clearTimeout(this.timeout);\n\n            this.timeout = null;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlDenomContainerElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlButtonElement } from \"../Elements/HtmlButtonElement\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { HtmlController } from \"../HtmlController\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlHideButtonElement extends HtmlButtonElement {\n    private _hideClass: string = \"\";\n\n    constructor() {\n        super();\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        HtmlController.HideButtons.push(this);\n\n        if (node.hasAttribute(\"HideClass\")) {\n            this._hideClass = node.getAttribute(\"HideClass\");\n        }\n\n        if (this.instance != null) {\n            if (!AppContext.gameConfiguration.HideAmountsEnabled) {\n                this.instance.classList.add(\"_hidden\");\n            }\n            this.instance.onclick = this.toggle.bind(this);\n\n            if (AppContext.current.getHideAmounts() && this._hideClass === \"_hideCredit\") {\n                this.toggle();\n            }\n        }\n    }\n\n    public unHide(credit: boolean = false): void {\n        if (\n            this.instance != null &&\n            this._hideClass != \"\" &&\n            (this._hideClass === \"_hideBet\" || (credit && this._hideClass === \"_hideCredit\"))\n        ) {\n            let elements: HTMLCollectionOf<Element> = document.getElementsByClassName(this._hideClass);\n            let display: string = \"block\";\n\n            if (this.instance.classList.contains(\"_off\")) {\n                this.instance.classList.remove(\"_off\");\n                if (!this.instance.classList.contains(\"_on\")) {\n                    this.instance.classList.add(\"_on\");\n                }\n            }\n\n            for (var i: number = 0; i < elements.length; i++) {\n                var element: HTMLElement = <HTMLElement>elements[i];\n                if (element != null) {\n                    element.style.display = display;\n                }\n            }\n\n            if (this._hideClass === \"_hideCredit\") {\n                if (display === \"block\") {\n                    AppContext.current.setHideAmounts(false);\n                } else {\n                    AppContext.current.setHideAmounts(true);\n                }\n            }\n        }\n    }\n\n    private toggle(): void {\n        if (this.instance != null && this._hideClass != \"\") {\n            PlayList.play(\"SND_Click\");\n            let elements: HTMLCollectionOf<Element> = document.getElementsByClassName(this._hideClass);\n            let display: string = \"none\";\n\n            if (this.instance.classList.contains(\"_on\")) {\n                this.instance.classList.remove(\"_on\");\n                if (!this.instance.classList.contains(\"_off\")) {\n                    this.instance.classList.add(\"_off\");\n                }\n            } else {\n                this.instance.classList.remove(\"_off\");\n                if (!this.instance.classList.contains(\"_on\")) {\n                    this.instance.classList.add(\"_on\");\n                    display = \"block\";\n                }\n            }\n\n            for (var i: number = 0; i < elements.length; i++) {\n                var element: HTMLElement = <HTMLElement>elements[i];\n                if (element != null) {\n                    element.style.display = display;\n                }\n            }\n\n            if (this._hideClass === \"_hideCredit\") {\n                if (display === \"block\") {\n                    AppContext.current.setHideAmounts(false);\n                } else {\n                    AppContext.current.setHideAmounts(true);\n                }\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlHideButtonElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { HtmlContainerElement } from \"./HtmlContainerElement\";\nimport { HtmlController } from \"../HtmlController\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { Scaling } from \"../../Utils/Scaling\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { DataManager } from \"../../Managers/DataManager\";\n\n/**\n * HtmlButtonElement id <div /> element with behaviour of button.\n * Can have also text inside of div.\n * Example:\n *   <div Class=\"HtmlButtonElement\">Text</div>\n *\n * @class HtmlButtonElement\n * @extends HtmlElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlButtonElement extends HtmlContainerElement {\n    static Click: string = \"click\";\n    static TouchStart: string = \"touchstart\";\n    static TouchEnd: string = \"touchend\";\n    static MouseOver: string = \"mouseover\";\n\n    action: string;\n    uiaction: Array<string>;\n\n    private touchLock: boolean;\n    private touchLockTimer: number;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        /*\n         * UIAction will handle click on this element and run uiaction on controller.\n         * @property UIAction\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"UIAction\")) {\n            this.uiaction = node.getAttribute(\"UIAction\").split(\";\");\n            if (!node.hasAttribute(\"Test\")) {\n                this.setTestAttributes(node.getAttribute(\"UIAction\"));\n            } else {\n                this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\n            }\n            for (var i: number = 0; i < this.uiaction.length; i++) {\n                HtmlController.registerUiActionElement(this.uiaction[i], this);\n            }\n        }\n\n        /*\n         * Action will handle click on this element and run action on controller.\n         * @property Action\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Action\")) {\n            this.action = node.getAttribute(\"Action\");\n            this.setTestAttributes(node.getAttribute(\"Action\"));\n\n            HtmlController.registerActionElement(node.getAttribute(\"Action\"), this);\n        }\n\n        /*\n         * Test is html data attribute for automated testing support.\n         * @property Test\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Test\")) {\n            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\n        }\n\n        if (this.action != null || this.uiaction != null) {\n            this.instance.addEventListener(HtmlButtonElement.Click, this.onClick.bind(this));\n            if (this.action != null) {\n                this.instance.classList.add(HtmlController.DisabledClass);\n            }\n\n            //sticky hover fix\n            this.instance.addEventListener(HtmlButtonElement.TouchStart, this.onTouchStart.bind(this));\n            this.instance.addEventListener(HtmlButtonElement.TouchEnd, this.onTouchEnd.bind(this));\n\n            this.instance.addEventListener(\"gesturestart\", Scaling.preventPropagation);\n            this.instance.addEventListener(\"gesturechange\", Scaling.preventPropagation);\n            this.instance.addEventListener(\"gestureend\", Scaling.preventPropagation);\n            this.instance.addEventListener(\"touchmove\", Scaling.preventPropagation);\n            if (AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\n                this.instance.addEventListener(HtmlButtonElement.MouseOver, this.onMouseOver.bind(this));\n            }\n        }\n    }\n\n    setTestAttributes(action: string): void {\n        this.instance.dataset[\"test\"] = this.renameTestAttributeValue(action);\n    }\n    renameTestAttributeValue(action: string): string {\n        let isGamblePortraitButton: boolean =\n            action.indexOf(\"GAMBLE_\") != -1 && this.instance.classList.contains(\"btnGamble\");\n        action = isGamblePortraitButton ? `${action}_PORTRAIT` : action;\n        switch (action) {\n            case \"QUICKSPIN_DIALOG_OFF\":\n                if (this.instance.classList.contains(\"smallCloseBtn\")) return \"QUICKSPIN_DIALOG_CLOSE\";\n                return \"QUICKSPIN_DIALOG_NO\";\n            case \"QUICKSPIN_TOGGLE;QUICKSPIN_DIALOG_OFF\":\n                return \"QUICKSPIN_DIALOG_YES\";\n            case \"SETTINGS_OFF\":\n                if (this.instance.classList.contains(\"smallCloseBtn\")) return \"SETTINGS_CLOSE\";\n                if (\n                    this.instance.classList.contains(\"dialogBtn\") ||\n                    this.instance.classList.contains(\"settingsPageBtn\")\n                )\n                    return \"SETTINGS_OK\";\n                return \"SETTINGS_BACK\";\n            case \"QUICKSPIN_TOGGLE\":\n                return \"SETTINGS_TOGGLE\";\n            case \"EMPTY\":\n                return \"SIMILAR_GAMES_EXIT\";\n            case \"EXIT2\":\n                return \"EXIT_GAME\";\n            case \"EXIT\":\n                return \"HOME\";\n            case \"HELP_OFF\":\n                if (this.instance.classList.contains(\"closeBtn\")) return \"HELP_CLOSE\";\n                return \"HELP_BACK\";\n            case \"PAYTABLE_OFF\":\n                if (this.instance.classList.contains(\"closeBtn\")) return \"PAYTABLE_CLOSE\";\n                return \"PAYTABLE_BACK\";\n            case \"SETTINGS_ON\":\n                return \"SETTINGS\";\n            case \"HELP_ON\":\n                return \"HELP\";\n            case \"PAYTABLE_ON\":\n                return \"PAYTABLE\";\n            default:\n                return action;\n        }\n    }\n\n    registerEvents(): void {\n        if (this.action != null || this.uiaction != null) {\n            this.instance.addEventListener(HtmlButtonElement.Click, this.onClick.bind(this));\n            if (this.action != null) {\n                this.instance.classList.add(HtmlController.DisabledClass);\n            }\n        }\n    }\n\n    /**\n     * Handler for click event.\n     * Dispatch action for HtmlController.\n     * @method onClick\n     * @return void\n     */\n    onClick(e?: Event): void {\n        if (DEBUG) {\n            this.log(\"onClick action: \" + this.action + \" uiaction: \" + this.uiaction);\n        }\n\n        if (this.instance != null && !this.instance.classList.contains(HtmlController.DisabledClass)) {\n            if (e && !e.isTrusted && AppContext.gameConfiguration.DisableUntrustedClicks) {\n                //due to BUG 2225\n                if (AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\n                    this.log(`Untrusted action: ${this.action}, ui: ${this.action}`);\n                    return;\n                }\n            }\n            if (e && e.isTrusted) {\n                DataManager.addTrustedUserAction(this.action);\n            }\n            if (this.action != null) {\n                HtmlController.dispatchAction(this.action);\n            }\n\n            if (this.uiaction != null) {\n                for (var i: number = 0; i < this.uiaction.length; i++) {\n                    HtmlController.dispatchUiAction(this.uiaction[i]);\n                }\n            }\n        }\n    }\n\n    onTouchStart(): void {\n        clearTimeout(this.touchLockTimer);\n        this.touchLock = true;\n\n        if (this.instance != null && !this.instance.classList.contains(\"noHover\")) {\n            this.instance.classList.add(\"noHover\");\n        }\n    }\n\n    onTouchEnd(): void {\n        this.touchLockTimer = setTimeout(() => {\n            this.touchLock = false;\n        }, 20);\n    }\n\n    onMouseOver(): void {\n        if (this.instance != null && this.instance.classList.contains(\"noHover\") && !this.touchLock) {\n            this.instance.classList.remove(\"noHover\");\n        }\n    }\n\n    /**\n     * Enable / disable button.\n     * @method changeState\n     * @param value boolean\n     * @return void\n     */\n    changeState(value: boolean): void {\n        if (this.instance != null) {\n            if (value) {\n                this.instance.classList.remove(HtmlController.DisabledClass);\n            } else {\n                this.instance.classList.add(HtmlController.DisabledClass);\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no instance\");\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlButtonElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { HtmlController } from \"../HtmlController\";\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlLanuageContainerElement extends HtmlContainerElement {\n    private _flags: Object = {};\n    private _values: Object = {};\n\n    constructor() {\n        super();\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this.addValues();\n    }\n\n    addValues(): void {\n        let languages: Array<string> = AppContext.current.getAllowedLanguages();\n        if (this.instance != null && languages != null) {\n            for (let i: number = 0; i < languages.length; i++) {\n                let flag: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                flag.classList.add(\"flag\");\n                flag.classList.add(languages[i]);\n                flag.style.display = \"none\";\n                flag.setAttribute(\"Lng\", languages[i]);\n                flag.onclick = this.onValueClick.bind(this);\n                let value: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                value.classList.add(\"value\");\n                value.style.display = \"none\";\n                value.setAttribute(\"Lng\", languages[i]);\n                //value.innerText = languages[i].toUpperCase();\n                value.onclick = this.onValueClick.bind(this);\n\n                if (\n                    AppContext.current.getCurrentLanguage() != null &&\n                    languages[i] == AppContext.current.getCurrentLanguage()\n                ) {\n                    flag.style.display = \"block\";\n                    value.style.display = \"block\";\n                }\n\n                this._flags[languages[i]] = flag;\n                this._values[languages[i]] = value;\n                this.instance.appendChild(flag);\n                this.instance.appendChild(value);\n            }\n        }\n    }\n\n    private onValueClick(e: any): void {\n        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Lng\")) {\n            PlayList.play(\"SND_Click\");\n            let lang: string = e.currentTarget.getAttribute(\"Lng\");\n\n            if (this._flags != null) {\n                for (let key in this._flags) {\n                    this._flags[key].style.display = \"none\";\n                }\n            }\n\n            if (this._values != null) {\n                for (let key in this._values) {\n                    this._values[key].style.display = \"none\";\n                }\n            }\n            HtmlController.dispatchUiAction(\"\");\n            this.changeLanguage();\n        }\n    }\n\n    changeLanguage(): void {\n        let actual: string = AppContext.current.getCurrentLanguage();\n        let languages: Array<string> = AppContext.current.getAllowedLanguages();\n        let next: string = \"\";\n\n        if (actual != null && languages != null) {\n            let index: number = 0;\n            for (let i: number = 0; i < languages.length; i++) {\n                if (languages[i] === actual) {\n                    index = i;\n                }\n            }\n\n            if (languages[index + 1] != null) {\n                next = languages[index + 1];\n            } else {\n                next = languages[0];\n            }\n        }\n\n        if (this._flags[next] != null) {\n            this._flags[next].style.display = \"block\";\n        }\n        if (this._values[next] != null) {\n            this._values[next].style.display = \"block\";\n        }\n        AppContext.current.setLanguage(next);\n    }\n\n    disable(): void {\n        if (this.instance != null) {\n            if (!this.instance.classList.contains(\"_disabled\")) {\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlLanguageContainerElement.ts\n **/","import { engineComponent, StringUtils, Utils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\nimport { HtmlButtonElement } from \"../Elements/HtmlButtonElement\";\nimport { HtmlController } from \"../HtmlController\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlSoundContainerElement extends HtmlContainerElement {\n    // private _levels: Array<string> = ['0%', '25%', '50%', '100%'];\n    private _levels: Array<string> = [\"\", \"\", \"\", \"\"];\n    private _levelsClasses: Array<string> = [\"_off\", \"_on1\", \"_on2\", \"_on3\"];\n    private _index: number = 3;\n\n    private _popup: HTMLDivElement;\n    private _backgroundSound: HTMLDivElement;\n    private _values: Array<HTMLDivElement>;\n    private _soundButton: HTMLDivElement;\n\n    private _height: string;\n\n    protected block: boolean;\n    protected timeout: number;\n\n    constructor() {\n        super();\n\n        HtmlController.SoundContainer = this;\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        this._soundButton = <HTMLDivElement>document.getElementById(\"soundButton\");\n\n        this._popup = <HTMLDivElement>document.createElement(\"div\");\n        this._popup.classList.add(\"display\");\n        this._popup.classList.add(\"popupSmall\");\n\n        if (AppContext.current.isBackgroundMusicEnabled) {\n            this._backgroundSound = <HTMLDivElement>document.createElement(\"div\");\n            this._backgroundSound.classList.add(\"popupItem\");\n            let backgroundSoundChild: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n            backgroundSoundChild.classList.add(\"popupValue\");\n            backgroundSoundChild.classList.add(\"bgSound\");\n            if (AppContext.current.getBackgroundMusic()) {\n                backgroundSoundChild.classList.add(\"_on\");\n            } else {\n                backgroundSoundChild.classList.add(\"_off\");\n                DataManager.BackSoundsPlayingFromGame = false;\n                PlayList.stopAllInGroup(\"BackgroundMusic\");\n            }\n            backgroundSoundChild.onclick = this.onBackgroundClick.bind(this);\n            this._backgroundSound.appendChild(backgroundSoundChild);\n        }\n\n        if (this.instance != null) {\n            this.instance.appendChild(this._popup);\n            if (this._backgroundSound != null) {\n                this._popup.appendChild(this._backgroundSound);\n            }\n            if (AppContext.current.isBackgroundMusicEnabled) {\n                this._popup.parentElement.classList.add(\"bgOn\");\n            }\n        }\n\n        this.addValues();\n\n        this.block = true;\n        this.createTimeout();\n    }\n\n    addValues(): void {\n        if (this._values == null && this._popup != null) {\n            this._values = [];\n\n            for (let i: number = 0; i < this._levels.length; i++) {\n                let popupItem: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                popupItem.classList.add(\"popupItem\");\n                popupItem.onclick = this.onValueClick.bind(this);\n                popupItem.setAttribute(\"Level\", i.toString());\n                let popupItemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                popupItemValue.classList.add(\"popupValue\");\n                popupItemValue.innerText = this._levels[i];\n                popupItem.appendChild(popupItemValue);\n\n                if (i == 0 && !AppContext.current.isMuteVolumeAllowed) {\n                    popupItem.style.display = \"none\";\n                }\n\n                this._values.push(popupItem);\n                this._popup.appendChild(popupItem);\n            }\n            if (!AppContext.current.isMuteVolumeAllowed) {\n                if (AppContext.current.isBackgroundMusicEnabled) {\n                    this._height = 60 + ((this._levels.length - 1) * 60 + 48) + \"px\";\n                } else {\n                    this._height = (this._levels.length - 1) * 60 + 48 + \"px\";\n                }\n            } else {\n                if (AppContext.current.isBackgroundMusicEnabled) {\n                    this._height = 60 + (this._levels.length * 60 + 48) + \"px\";\n                } else {\n                    this._height = this._levels.length * 60 + 48 + \"px\";\n                }\n            }\n        }\n    }\n\n    private onValueClick(e: any): void {\n        if (this.block) {\n            return;\n        }\n\n        this.setTimeout();\n        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Level\")) {\n            PlayList.play(\"SND_Click\");\n            let level: number = parseFloat(e.currentTarget.getAttribute(\"Level\"));\n            if (level === this._index) {\n            } else {\n                this._index = level;\n                if (this._values != null) {\n                    for (let i: number = 0; i < this._values.length; i++) {\n                        if (this._values[i].hasAttribute(\"Level\")) {\n                            if (parseFloat(this._values[i].getAttribute(\"Level\")) === level) {\n                                this._values[i].classList.add(\"_active\");\n                            } else {\n                                this._values[i].classList.remove(\"_active\");\n                            }\n                        }\n                    }\n                }\n                AppContext.current.setVolume(level);\n            }\n        }\n        this.changeSoundButton();\n    }\n\n    private onBackgroundClick(e: any): void {\n        if (this.block) {\n            return;\n        }\n\n        this.setTimeout();\n        if (e != null && e.currentTarget != null) {\n            PlayList.play(\"SND_Click\");\n            if (e.currentTarget.classList.contains(\"_on\")) {\n                e.currentTarget.classList.remove(\"_on\");\n                if (!e.currentTarget.classList.contains(\"_off\")) {\n                    e.currentTarget.classList.add(\"_off\");\n                }\n                DataManager.BackSoundsPlayingFromGame = false;\n                AppContext.current.setBackgroundMusic(false);\n                PlayList.stopAllInGroup(\"BackgroundMusic\");\n            } else {\n                e.currentTarget.classList.remove(\"_off\");\n                if (!e.currentTarget.classList.contains(\"_on\")) {\n                    e.currentTarget.classList.add(\"_on\");\n                }\n                DataManager.BackSoundsPlayingFromGame = true;\n                AppContext.current.setBackgroundMusic(true);\n                PlayList.stopAllInGroup(\"BackgroundMusic\", true);\n            }\n        }\n    }\n\n    setLevel(level: number): void {\n        this._index = level;\n        if (this._values != null) {\n            for (let i: number = 0; i < this._values.length; i++) {\n                if (i === level) {\n                    if (!this._values[i].classList.contains(\"_active\")) {\n                        this._values[i].classList.add(\"_active\");\n                    }\n                } else {\n                    this._values[i].classList.remove(\"_active\");\n                }\n            }\n        }\n        this.changeSoundButton();\n    }\n\n    changeSoundButton(): void {\n        if (this._soundButton != null) {\n            if (this._levelsClasses[this._index] != null) {\n                for (let i: number = 0; i < this._levelsClasses.length; i++) {\n                    this._soundButton.classList.remove(this._levelsClasses[i]);\n                }\n                this._soundButton.classList.add(this._levelsClasses[this._index]);\n            }\n        }\n    }\n\n    toggle(): void {\n        if (this.instance != null) {\n            if (this.instance.classList.contains(\"_disabled\")) {\n                this.block = false;\n                this.setTimeout();\n                if (this._height != null) {\n                    this.instance.style.height = this._height;\n                }\n                this.instance.classList.remove(\"_disabled\");\n            } else {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    disable(): void {\n        if (this.instance != null) {\n            if (!this.instance.classList.contains(\"_disabled\")) {\n                this.block = true;\n                this.clearTimeOut();\n                this.instance.removeAttribute(\"style\");\n                this.instance.classList.add(\"_disabled\");\n            }\n        }\n    }\n\n    protected createTimeout(): void {\n        this.timeout = null;\n    }\n\n    protected setTimeout(): void {\n        this.clearTimeOut();\n\n        const duration = AppContext.gameConfiguration.SelectorRolloutDuration;\n\n        if (duration > 0) {\n            this.timeout = setTimeout((): void => {\n                this.disable();\n            }, duration * 1000);\n        }\n    }\n\n    protected clearTimeOut(): void {\n        if (!Utils.isNullOrUndefined(this.timeout)) {\n            clearTimeout(this.timeout);\n\n            this.timeout = null;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlSoundContainerElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlButtonElement } from \"./HtmlButtonElement\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { HtmlController } from \"../HtmlController\";\nimport { HtmlAutoplayItemButtonElement } from \"./HtmlAutoplayItemButtonElement\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlAutoplayButtonElement extends HtmlButtonElement {\n    private _simpleAutoplayCounts: Array<HtmlAutoplayItemButtonElement>;\n\n    constructor() {\n        super();\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        if (AppContext.gameConfiguration.AutoplayMode === \"basic\") {\n            this.createBasicMode();\n        } else if (AppContext.gameConfiguration.AutoplayMode === \"simple\") {\n            this.createSimpleMode();\n        } else if (AppContext.gameConfiguration.AutoplayMode === \"advanced\") {\n            this.createAdvancedMode();\n        } else {\n            this.createBasicMode();\n        }\n\n        if (this.instance != null) {\n            this.instance.parentElement.removeChild(this.instance);\n        }\n    }\n\n    private createBasicMode(): void {\n        this.removeOtherMode(\"simpleAutoplayButton\");\n        this.removeOtherMode(\"advancedAutoplayButton\");\n    }\n\n    private createSimpleMode(): void {\n        this.removeOtherMode(\"basicAutoplayButton\");\n        this.removeOtherMode(\"advancedAutoplayButton\");\n\n        this._simpleAutoplayCounts = [];\n        let holder: HTMLElement = document.getElementById(\"autoplaySelectorHolder\");\n        if (holder != null) {\n            if (\n                AppContext.gameConfiguration.AutoplayCounts != null &&\n                AppContext.gameConfiguration.AutoplayCounts.length > 0\n            ) {\n                AppContext.gameConfiguration.AutoplayCounts.reverse();\n                for (let i: number = 0; i < AppContext.gameConfiguration.AutoplayCounts.length; i++) {\n                    let button: HtmlAutoplayItemButtonElement = new HtmlAutoplayItemButtonElement();\n                    let text: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                    button.action = \"AUTOPLAY\";\n                    button.registerEvents();\n                    text.classList.add(\"autoplayCnt\");\n                    if (AppContext.gameConfiguration.AutoplayCounts[i] == -1) {\n                        text.innerText = \"∞\";\n                        button.autoplayCount = \"∞\";\n                    } else {\n                        text.innerText = AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\n                        button.autoplayCount = AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\n                    }\n                    button.instance.dataset[\"test\"] = `AUTOPLAY_WIN_CNT_${i + 1}`;\n\n                    if (button.instance != null) {\n                        button.instance.classList.add(\"autoplayItem\");\n                        button.instance.appendChild(text);\n                        HtmlController.registerActionElement(\"AUTOPLAY\", button);\n                        if (holder != null) {\n                            holder.appendChild(button.instance);\n                        }\n                    }\n                }\n            }\n        }\n\n        // <div CssClass=\"autoplayItem\" Class=\"HtmlAutoplayItemButtonElement\" Action=\"AUTOPLAY\" AUTOPLAY_COUNT=\"10\">\n        //     <span CssClass=\"autoplayCnt\" Class=\"HtmlText\">10</span>\n        // </div>\n    }\n\n    private createAdvancedMode(): void {\n        this.removeOtherMode(\"basicAutoplayButton\");\n        this.removeOtherMode(\"simpleAutoplayButton\");\n    }\n\n    private removeOtherMode(cls: string): void {\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\n        for (var i: number = 0; i < elements.length; i++) {\n            var element: HTMLElement = <HTMLElement>elements[i];\n            if (element != null) {\n                element.remove();\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlAutoplayButtonElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlButtonElement } from \"./HtmlButtonElement\";\nimport { HtmlController } from \"../HtmlController\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\nimport { DataManager } from \"../../Managers/DataManager\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlAutoplayItemButtonElement extends HtmlButtonElement {\n    autoplayCount: string = \"∞\";\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        if (node.hasAttribute(\"AUTOPLAY_COUNT\")) {\n            this.autoplayCount = node.getAttribute(\"AUTOPLAY_COUNT\");\n        }\n    }\n\n    onClick(): void {\n        if (this.autoplayCount != null) {\n            DataManager.AutoplayCount = this.autoplayCount;\n        }\n        PlayList.play(\"SND_Click\");\n        super.onClick();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlAutoplayItemButtonElement.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"./HtmlContainerElement\";\nimport { HtmlController } from \"../HtmlController\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { BetManager } from \"../../Managers/BetManager\";\nimport { GameData } from \"../../Channels/Common/Datas/GameData\";\nimport { DataManager } from \"../../Managers/DataManager\";\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlAutoplayDialogContainerElement extends HtmlContainerElement {\n    private _autoplayDialogCounts: Array<HTMLElement> = [];\n    private _autoplayDialogLossLimit: Array<HTMLElement> = [];\n    private _autoplayDialogWinLimit: Array<HTMLElement> = [];\n\n    private _lossValueElement: HTMLElement;\n    private _winValueElement: HTMLElement;\n\n    private _button: HTMLElement;\n\n    private _count: string = \"∞\";\n    private _loss: string = \"∞\";\n    private _win: string = \"∞\";\n\n    constructor() {\n        super();\n    }\n    create(node: Element): void {\n        super.create(node);\n\n        this.createCounts();\n        this.createLossLimits();\n        this.createWinLimits();\n\n        this._lossValueElement = document.getElementById(\"autoplayDialogLossLimitValue\");\n        this._winValueElement = document.getElementById(\"autoplayDialogWinLimitValue\");\n        this._button = document.getElementById(\"autoplayDialogButton\");\n        this._button.onclick = this.runAutoplay.bind(this);\n\n        this.reset();\n    }\n\n    private createCounts(): void {\n        if (HtmlController.ContainerElementsById[\"autoplayDialogCounts\"] != null) {\n            let element: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplayDialogCounts\"];\n            if (element != null && element.instance != null) {\n                if (\n                    AppContext.gameConfiguration.AutoplayCounts != null &&\n                    AppContext.gameConfiguration.AutoplayCounts.length > 0\n                ) {\n                    for (let i: number = 0; i < AppContext.gameConfiguration.AutoplayCounts.length; i++) {\n                        let item: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                        let itemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"span\");\n                        item.classList.add(\"settingItem\");\n                        itemValue.classList.add(\"settingValue\");\n                        if (AppContext.gameConfiguration.AutoplayCounts[i] == -1) {\n                            itemValue.innerText = \"∞\";\n                            item.setAttribute(\"Val\", \"∞\");\n                        } else {\n                            itemValue.innerText = AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\n                            item.setAttribute(\"Val\", AppContext.gameConfiguration.AutoplayCounts[i] + \"\");\n                        }\n                        item.dataset[\"test\"] = `AUTOPLAY_CNT_${i + 1}`;\n                        item.appendChild(itemValue);\n                        item.onclick = this.onCountClick.bind(this);\n                        element.instance.appendChild(item);\n                        this._autoplayDialogCounts.push(item);\n                    }\n                }\n            }\n        }\n    }\n\n    private createLossLimits(): void {\n        if (HtmlController.ContainerElementsById[\"autoplayDialogLossLimit\"] != null) {\n            let element: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplayDialogLossLimit\"];\n            if (element != null && element.instance != null) {\n                if (\n                    AppContext.gameConfiguration.AutoplayLossLimit != null &&\n                    AppContext.gameConfiguration.AutoplayLossLimit.length > 0\n                ) {\n                    for (let i: number = 0; i < AppContext.gameConfiguration.AutoplayLossLimit.length; i++) {\n                        let item: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                        let itemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"span\");\n                        item.classList.add(\"settingItem\");\n                        itemValue.classList.add(\"settingValue\");\n                        if (AppContext.gameConfiguration.AutoplayLossLimit[i] == -1) {\n                            itemValue.innerText = \"∞\";\n                            item.setAttribute(\"Val\", \"∞\");\n                        } else {\n                            itemValue.innerText = \"x\" + AppContext.gameConfiguration.AutoplayLossLimit[i] + \"\";\n                            item.setAttribute(\"Val\", AppContext.gameConfiguration.AutoplayLossLimit[i] + \"\");\n                        }\n                        item.dataset[\"test\"] = `AUTOPLAY_LOSS_CNT_${i + 1}`;\n                        item.appendChild(itemValue);\n                        item.onclick = this.onLossClick.bind(this);\n                        element.instance.appendChild(item);\n                        this._autoplayDialogLossLimit.push(item);\n                    }\n                }\n            }\n        }\n    }\n\n    private createWinLimits(): void {\n        if (HtmlController.ContainerElementsById[\"autoplayDialogWinLimit\"] != null) {\n            let element: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplayDialogWinLimit\"];\n            if (element != null && element.instance != null) {\n                if (\n                    AppContext.gameConfiguration.AutoplaySingleWinLimit != null &&\n                    AppContext.gameConfiguration.AutoplaySingleWinLimit.length > 0\n                ) {\n                    for (let i: number = 0; i < AppContext.gameConfiguration.AutoplaySingleWinLimit.length; i++) {\n                        let item: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n                        let itemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"span\");\n                        item.classList.add(\"settingItem\");\n                        itemValue.classList.add(\"settingValue\");\n                        if (AppContext.gameConfiguration.AutoplaySingleWinLimit[i] == -1) {\n                            itemValue.innerText = \"∞\";\n                            item.setAttribute(\"Val\", \"∞\");\n                        } else {\n                            itemValue.innerText = \"x\" + AppContext.gameConfiguration.AutoplaySingleWinLimit[i] + \"\";\n                            item.setAttribute(\"Val\", AppContext.gameConfiguration.AutoplaySingleWinLimit[i] + \"\");\n                        }\n                        item.dataset[\"test\"] = `AUTOPLAY_WIN_CNT_${i + 1}`;\n                        item.appendChild(itemValue);\n                        item.onclick = this.onWinClick.bind(this);\n                        element.instance.appendChild(item);\n                        this._autoplayDialogWinLimit.push(item);\n                    }\n                }\n            }\n        }\n    }\n\n    reset(): void {\n        this.resetCounts();\n        this.resetLossLimits();\n        this.resetWinLimits();\n        this.enableCounts();\n        if (this._lossValueElement != null) {\n            this._lossValueElement.innerText = \"\";\n        }\n        if (this._winValueElement != null) {\n            this._winValueElement.innerText = \"\";\n        }\n        if (this._button != null && !this._button.classList.contains(\"_disabled\")) {\n            this._button.classList.add(\"_disabled\");\n        }\n        this._count = \"∞\";\n        this._loss = \"∞\";\n        this._win = \"∞\";\n\n        DataManager.AutoplayCount = \"∞\";\n        DataManager.AutoplayLossLimit = \"∞\";\n        DataManager.AutoplayWinLimit = \"∞\";\n    }\n\n    private resetCounts(): void {\n        if (this._autoplayDialogCounts != null && this._autoplayDialogCounts.length > 0) {\n            for (let i: number = 0; i < this._autoplayDialogCounts.length; i++) {\n                if (this._autoplayDialogCounts[i].classList.contains(\"_active\")) {\n                    this._autoplayDialogCounts[i].classList.remove(\"_active\");\n                }\n                if (!this._autoplayDialogCounts[i].classList.contains(\"_disabled\")) {\n                    this._autoplayDialogCounts[i].classList.add(\"_disabled\");\n                }\n            }\n        }\n    }\n\n    private resetLossLimits(): void {\n        if (this._autoplayDialogLossLimit != null && this._autoplayDialogLossLimit.length > 0) {\n            for (let i: number = 0; i < this._autoplayDialogLossLimit.length; i++) {\n                if (this._autoplayDialogLossLimit[i].classList.contains(\"_active\")) {\n                    this._autoplayDialogLossLimit[i].classList.remove(\"_active\");\n                }\n                if (!this._autoplayDialogLossLimit[i].classList.contains(\"_disabled\")) {\n                    this._autoplayDialogLossLimit[i].classList.add(\"_disabled\");\n                }\n            }\n        }\n    }\n\n    private resetWinLimits(): void {\n        if (this._autoplayDialogWinLimit != null && this._autoplayDialogWinLimit.length > 0) {\n            for (let i: number = 0; i < this._autoplayDialogWinLimit.length; i++) {\n                if (this._autoplayDialogWinLimit[i].classList.contains(\"_active\")) {\n                    this._autoplayDialogWinLimit[i].classList.remove(\"_active\");\n                }\n                if (!this._autoplayDialogWinLimit[i].classList.contains(\"_disabled\")) {\n                    this._autoplayDialogWinLimit[i].classList.add(\"_disabled\");\n                }\n            }\n        }\n    }\n\n    private enableCounts(): void {\n        if (this._autoplayDialogCounts != null && this._autoplayDialogCounts.length > 0) {\n            for (let i: number = 0; i < this._autoplayDialogCounts.length; i++) {\n                if (this._autoplayDialogCounts[i].classList.contains(\"_disabled\")) {\n                    this._autoplayDialogCounts[i].classList.remove(\"_disabled\");\n                }\n            }\n        }\n    }\n\n    private enableLossLimits(): void {\n        if (this._autoplayDialogLossLimit != null && this._autoplayDialogLossLimit.length > 0) {\n            for (let i: number = 0; i < this._autoplayDialogLossLimit.length; i++) {\n                if (this._autoplayDialogLossLimit[i].classList.contains(\"_disabled\")) {\n                    this._autoplayDialogLossLimit[i].classList.remove(\"_disabled\");\n                }\n            }\n        }\n    }\n\n    private enableWinLimits(removeNoLimit: boolean = false): void {\n        let enabledNoLimit: boolean = true;\n        let noLimit: HTMLElement;\n\n        if (this._autoplayDialogWinLimit != null && this._autoplayDialogWinLimit.length > 0) {\n            for (let i: number = 0; i < this._autoplayDialogWinLimit.length; i++) {\n                if (this._autoplayDialogWinLimit[i].classList.contains(\"_active\")) {\n                    enabledNoLimit = false;\n                }\n\n                if (this._autoplayDialogWinLimit[i].getAttribute(\"Val\") == \"∞\") {\n                    noLimit = this._autoplayDialogWinLimit[i];\n                }\n\n                if (this._autoplayDialogWinLimit[i].classList.contains(\"_disabled\")) {\n                    this._autoplayDialogWinLimit[i].classList.remove(\"_disabled\");\n                }\n            }\n        }\n\n        if (enabledNoLimit && !removeNoLimit) {\n            if (noLimit != null) {\n                if (!noLimit.classList.contains(\"_active\")) {\n                    noLimit.classList.add(\"_active\");\n                    if (this._winValueElement != null) {\n                        this._winValueElement.innerText = \"∞\";\n                    }\n                }\n            }\n        }\n\n        if (removeNoLimit) {\n            if (noLimit != null) {\n                if (noLimit.classList.contains(\"_active\")) {\n                    noLimit.classList.remove(\"_active\");\n                }\n            }\n        }\n    }\n\n    private onCountClick(e: any): void {\n        if (\n            e != null &&\n            e.currentTarget != null &&\n            e.currentTarget.hasAttribute(\"Val\") &&\n            !e.currentTarget.classList.contains(\"_disabled\")\n        ) {\n            PlayList.play(\"SND_Click\");\n            let val: string = e.currentTarget.getAttribute(\"Val\");\n            this.resetCounts();\n            this.enableCounts();\n            if (!e.currentTarget.classList.contains(\"_active\")) {\n                e.currentTarget.classList.add(\"_active\");\n            }\n            if (e.currentTarget.classList.contains(\"_disabled\")) {\n                e.currentTarget.classList.remove(\"_disabled\");\n            }\n            this._count = val;\n            this.enableLossLimits();\n            if (document.getElementById(\"autoplayDialogLossLimitView\") != null) {\n                document.getElementById(\"autoplayDialogLossLimitView\").scrollIntoView(true);\n\n                if (AppContext.gameDefinition.ClientHostType === \"Mobile\") {\n                    document.getElementById(\"screen\").scrollTop = 0;\n                    document.getElementById(\"root\").scrollTop = 0;\n                }\n            }\n        }\n    }\n\n    private onLossClick(e: any): void {\n        if (\n            e != null &&\n            e.currentTarget != null &&\n            e.currentTarget.hasAttribute(\"Val\") &&\n            !e.currentTarget.classList.contains(\"_disabled\")\n        ) {\n            PlayList.play(\"SND_Click\");\n            let val: string = e.currentTarget.getAttribute(\"Val\");\n            if (this._lossValueElement != null) {\n                if (val != \"∞\" && BetManager.Bet != null) {\n                    let calculatedValue: string = NumberUtils.multiply(val, BetManager.Bet);\n                    this._lossValueElement.innerText =\n                        calculatedValue + \" \" + DataManager.getDataById(GameData.DataCurrency);\n                } else {\n                    this._lossValueElement.innerText = \"∞\";\n                }\n            }\n\n            this.resetLossLimits();\n            this.enableLossLimits();\n            if (!e.currentTarget.classList.contains(\"_active\")) {\n                e.currentTarget.classList.add(\"_active\");\n            }\n            if (e.currentTarget.classList.contains(\"_disabled\")) {\n                e.currentTarget.classList.remove(\"_disabled\");\n            }\n            if (this._button != null && this._button.classList.contains(\"_disabled\")) {\n                this._button.classList.remove(\"_disabled\");\n            }\n            this._loss = val;\n            this.enableWinLimits();\n            if (document.getElementById(\"autoplayDialogWinLimitView\") != null) {\n                document.getElementById(\"autoplayDialogWinLimitView\").scrollIntoView(true);\n            }\n\n            if (AppContext.gameDefinition.ClientHostType === \"Mobile\") {\n                document.getElementById(\"screen\").scrollTop = 0;\n                document.getElementById(\"root\").scrollTop = 0;\n            }\n        }\n    }\n\n    private onWinClick(e: any): void {\n        if (\n            e != null &&\n            e.currentTarget != null &&\n            e.currentTarget.hasAttribute(\"Val\") &&\n            !e.currentTarget.classList.contains(\"_disabled\")\n        ) {\n            PlayList.play(\"SND_Click\");\n            let val: string = e.currentTarget.getAttribute(\"Val\");\n            if (this._winValueElement != null) {\n                if (val != \"∞\" && BetManager.Bet != null) {\n                    let calculatedValue: string = NumberUtils.multiply(val, BetManager.Bet);\n                    this._winValueElement.innerText =\n                        calculatedValue + \" \" + DataManager.getDataById(GameData.DataCurrency);\n                } else {\n                    this._winValueElement.innerText = \"∞\";\n                }\n            }\n            this.resetWinLimits();\n            this.enableWinLimits(true);\n            if (!e.currentTarget.classList.contains(\"_active\")) {\n                e.currentTarget.classList.add(\"_active\");\n            }\n            if (e.currentTarget.classList.contains(\"_disabled\")) {\n                e.currentTarget.classList.remove(\"_disabled\");\n            }\n            this._win = val;\n\n            if (AppContext.gameDefinition.ClientHostType === \"Mobile\") {\n                if (document.getElementById(\"autoplayDialogButton\") != null) {\n                    document.getElementById(\"autoplayDialogButton\").scrollIntoView(true);\n                    document.getElementById(\"screen\").scrollTop = 0;\n                    document.getElementById(\"root\").scrollTop = 0;\n                }\n            }\n        }\n    }\n\n    private runAutoplay(e: any): void {\n        if (e != null && e.currentTarget != null && !e.currentTarget.classList.contains(\"_disabled\")) {\n            if (document.getElementById(\"autoPlayDialogTop\") != null) {\n                document.getElementById(\"autoPlayDialogTop\").scrollTop = 0;\n            }\n            if (this._count != null) {\n                DataManager.AutoplayCount = this._count;\n            }\n            if (this._loss != null && BetManager.Bet != null) {\n                if (this._loss == \"∞\") {\n                    DataManager.AutoplayLossLimit = this._loss;\n                } else {\n                    DataManager.AutoplayLossLimit = NumberUtils.multiply(this._loss, BetManager.Bet);\n                }\n            }\n            if (this._win != null && BetManager.Bet != null) {\n                if (this._win == \"∞\") {\n                    DataManager.AutoplayWinLimit = this._win;\n                } else {\n                    DataManager.AutoplayWinLimit = NumberUtils.multiply(this._win, BetManager.Bet);\n                }\n            }\n            HtmlController.dispatchAction(\"AUTOPLAY\");\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlAutoplayDialogContainerElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { HtmlElement } from \"./HtmlElement\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\n\n/**\n * HtmlCanvasElement is used for replacing existing canvas to right layer in dom structure.\n * Example:\n * <HtmlCanvasElement CanvasId=\"canvas\" Class=\"HtmlCanvasElement\" />\n *\n * @class HtmlCanvasElement\n * @extends HtmlElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlCanvasElement extends HtmlElement {\n    constructor() {\n        // dont create instance. Instance will be attach with id from node\n        super(\"\");\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        /*\n         * CanvasId is id in html document of targeting canvas.\n         * @property CanvasId\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"CanvasId\")) {\n            this.instance = document.getElementById(node.getAttribute(\"CanvasId\"));\n            if (this.instance == null) {\n                if (DEBUG) {\n                    this.log(\"ERROR no element with id: \" + node.getAttribute(\"CanvasId\"));\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no CanvasId\");\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlCanvasElement.ts\n **/","import { HtmlButtonElement } from \"./HtmlButtonElement\";\nimport { engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"./HtmlContainerElement\";\nimport { HtmlController } from \"../HtmlController\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlCheckboxElement extends HtmlButtonElement {\n    private checkbox: HTMLInputElement = null;\n\n    constructor() {\n        super();\n    }\n\n    create(node: Element): void {\n        super.create(node);\n        this.createCheckBox();\n    }\n\n    private createCheckBox(): void {\n        this.checkbox = <HTMLInputElement>document.createElement(\"input\");\n        this.checkbox.type = \"checkbox\";\n        this.checkbox.classList.add(\"checkbox\");\n        this.checkbox.addEventListener(\"input\", this.onCheckbox.bind(this));\n\n        if (this.instance != null) {\n            this.instance.appendChild(this.checkbox);\n        }\n\n        this.instance.classList.add(\"checkboxButton\");\n    }\n\n    onClick(): void {\n        //remove implementation and move it to onCheckBox\n    }\n\n    onCheckbox(): void {\n        if (DEBUG) {\n            this.log(\"onClick action: \" + this.action + \" uiaction: \" + this.uiaction);\n        }\n\n        if (this.instance != null && !this.instance.classList.contains(HtmlController.DisabledClass)) {\n            if (this.action != null) {\n                HtmlController.dispatchAction(this.action);\n            }\n\n            if (this.uiaction != null) {\n                for (var i: number = 0; i < this.uiaction.length; i++) {\n                    HtmlController.dispatchUiAction(this.uiaction[i]);\n                }\n            }\n        }\n    }\n\n    setText(value?: string): void {\n        if (value === undefined || value === null) {\n            this.checkbox.checked = !this.checkbox.checked;\n            return;\n        }\n        if (value == \"true\") {\n            if (this.checkbox.checked) {\n                return;\n            }\n            this.checkbox.checked = true;\n        } else {\n            if (!this.checkbox.checked) {\n                return;\n            }\n            this.checkbox.checked = false;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlCheckboxElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { HtmlController } from \"../HtmlController\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlContainerElement } from \"./HtmlContainerElement\";\nimport { AppContext } from \"../../../Common/AppContext\";\nimport { DataManager } from \"../../Managers/DataManager\";\n\n/**\n *\n * @class HtmlCustomContainerElement\n * @extends HtmlContainerElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlCustomContainerElement extends HtmlContainerElement {\n    private _withGamble: HTMLElement;\n    private _withoutGamble: HTMLElement;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @return void\n     */\n    create(node: Element): void {\n        super.create(node);\n    }\n\n    changeState(value: boolean): void {\n        if (this._withGamble == null) {\n            this._withGamble = document.getElementById(\"withGamble\");\n        }\n        if (this._withoutGamble == null) {\n            this._withoutGamble = document.getElementById(\"withoutGamble\");\n        }\n\n        if (this.instance != null) {\n            if (value && DataManager.Autoplay) {\n                this.instance.classList.remove(HtmlController.DisabledClass);\n                if (AppContext.gameDefinition.Gamble) {\n                    if (this._withGamble != null) {\n                        this._withGamble.style.display = \"block\";\n                    }\n                    if (this._withoutGamble != null) {\n                        this._withoutGamble.style.display = \"none\";\n                    }\n                } else {\n                    if (this._withGamble != null) {\n                        this._withGamble.style.display = \"none\";\n                    }\n                    if (this._withoutGamble != null) {\n                        this._withoutGamble.style.display = \"block\";\n                    }\n                }\n            } else {\n                if (!this.instance.classList.contains(HtmlController.DisabledClass)) {\n                    this.instance.classList.add(HtmlController.DisabledClass);\n                }\n            }\n        } else {\n            if (DEBUG) {\n                this.log(\"ERROR no instance\");\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlCustomContainerElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { HtmlElement } from \"./HtmlElement\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\n\n/**\n * HtmlDataSliderElement is used for data representing in bar or slider.\n * @class HtmlDataSliderElement\n * @extends HtmlElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlDataSliderElement extends HtmlElement {\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    create(node: Element): void {\n        super.create(node);\n    }\n\n    /**\n     * Set text or data for this element.\n     * @method setText\n     * @param text string\n     * @return void\n     */\n    setText(value?: string): void {\n        if (value != null) {\n            var parsedValue: Array<string> = value.split(\"/\");\n            if (this.instance != null && parsedValue.length === 2) {\n                this.instance.style.width = (parseInt(parsedValue[0]) / parseInt(parsedValue[1])) * 100 + \"%\";\n            }\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlDataSliderElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\nimport { HtmlElement } from \"./HtmlElement\";\nimport { Languages } from \"../../Utils/Languages\";\nimport { HtmlController } from \"../HtmlController\";\n\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlLabelElement extends HtmlElement {\n    for: string;\n    text: string;\n\n    constructor() {\n        super();\n    }\n\n    create(node: Element): void {\n        super.create(node);\n\n        if (node.hasAttribute(\"For\")) {\n            this.for = node.getAttribute(\"For\");\n        }\n\n        this.createLabel();\n\n        if (this.instance != null) {\n            this.instance.parentElement.removeChild(this.instance);\n        }\n    }\n\n    private createLabel(): void {\n        let holder = this.instance.parentElement;\n        let toggleSwitch: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\n        let label: HTMLLabelElement = <HTMLLabelElement>document.createElement(\"label\");\n        toggleSwitch.classList.add(\"toggleSwitch\");\n        label.htmlFor = this.for;\n        label.innerHTML = this.instance.innerHTML;\n        toggleSwitch.appendChild(label);\n\n        if (this.instance != null) {\n            holder.firstChild.appendChild(toggleSwitch);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlLabelElement.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { HtmlElement } from \"./HtmlElement\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\n\n/**\n * The html text is used for render text in html.\n * Example:\n *   <span Class=\"HtmlText\">Text</span>\n *\n * @class HtmlText\n * @extends HtmlElement\n */\n@engineComponent(ComponentTypes.HtmlElement)\nexport class HtmlText extends HtmlElement {\n    private _prefix: string;\n\n    constructor() {\n        super(\"\");\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    create(node: Element): void {\n        this.instance = document.createElement(node.nodeName);\n\n        if (node.textContent != null) {\n            this.instance.textContent = node.textContent;\n        }\n\n        if (node.hasAttribute(\"Prefix\")) {\n            this._prefix = node.getAttribute(\"Prefix\");\n        }\n\n        /*\n         * Test is html data attribute for automated testing support.\n         * @property Test\n         * @type string\n         * @default null\n         */\n        if (node.hasAttribute(\"Test\")) {\n            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\n        }\n\n        super.create(node);\n    }\n\n    setText(value?: string): void {\n        super.setText(value);\n\n        if (this._prefix != null && this.instance.innerHTML != null && this.instance.innerHTML != \"\") {\n            this.instance.innerHTML = \"+\" + this.instance.innerHTML;\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlText.ts\n **/","import { engineComponent } from \"neo-common\";\nimport { HtmlStyle } from \"./HtmlStyle\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\n\n/**\n * HtmlContainerStyle only holds xml node for html container elements.\n * Example:\n *   <HtmlContainerStyle Class=\"HtmlContainerStyle\">\n *       <Child1 />\n *       <Child1 />\n *       ...\n *   </HtmlContainerStyle>\n * @class HtmlContainerStyle\n */\n@engineComponent(ComponentTypes.HtmlStyle)\nexport class HtmlContainerStyle extends HtmlStyle {\n    node: Element;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    create(node: Element): void {\n        super.create(node);\n\n        // store node for container elements\n        this.node = node;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Styles/HtmlContainerStyle.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\n\n/**\n * HtmlStyle holds basic properties for all kind of html styles.\n * @class HtmlStyle\n */\n@engineComponent(ComponentTypes.HtmlStyle)\nexport class HtmlStyle {\n    /**\n     * Get attributes from xml and set up supported properties.\n     * @method create\n     * @param node is Element from xml\n     * @retutn void\n     */\n    create(node: Element): void {}\n\n    /**\n     * Trace to browser console.\n     * @method log\n     * @param s string\n     * @retutn void\n     */\n    protected log(s: string): void {\n        if (DEBUG) {\n            var compName = (this as any).__componentName__;\n            Logger.debugGroup(compName, s);\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Styles/HtmlStyle.ts\n **/","console.log(\"pixiInitialize\");\n// TODO device manager\nvar ios = !!navigator.platform && /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\nif (ios) {\n    PIXI.settings.PRECISION = PIXI.PRECISION.HIGH;\n}\nPIXI.settings.GC_MODE = PIXI.GC_MODES.AUTO;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/PixiSettings.ts\n **/"],"sourceRoot":""}