\";\n var CSSVendorPrefix = getCSSVendorPrefix();\n var jWin = $(win);\n var doc = $(document);\n\n var TOUCHSTART = \"touchstart\";\n var TOUCHMOVE = \"touchmove\";\n var TOUCHCANCEL = \"touchcancel\";\n var TOUCHEND = \"touchend\";\n var MOUSEDOWN = \"mousedown\";\n var MOUSEMOVE = \"mousemove\";\n var MOUSEUP = \"mouseup\";\n var SLIDES_CONTAINER = \"slidesContainer\";\n var SUDO_DRAGGING_CLASS = \"sudoSlider-dragging\";\n\n $.fn.sudoSlider = function (optionsOrg) {\n \/\/ Defining the base element.\n var baseSlider = this;\n\n optionsOrg = $.extend(objectToLowercase(getDefaultOptions()), objectToLowercase(optionsOrg));\n if (CSSVendorPrefix === FALSE || !minJQueryVersion([1, 8, 0])) {\n optionsOrg.usecss = FALSE;\n }\n\n return this.each(function () {\n var init,\n fullyInitialized = FALSE,\n isSlideContainerUl,\n slidesContainer,\n slides,\n imagesInSlidesLoaded,\n totalSlides,\n currentSlide,\n previousSlide,\n clickable,\n currentlyAnimatingTowards,\n numericControls,\n numericContainer,\n destroyed,\n slideNumberBeforeDestroy = FALSE,\n controls,\n nextbutton,\n prevbutton,\n autoTimeout,\n autoOn,\n numberOfVisibleSlides,\n asyncDelayedSlideLoadTimeout,\n obj = $(this),\n finishedAdjustingTo = FALSE, \/\/ This variable tells if the slider is currently adjusted (height and width) to any specific slide. This is usefull when ajax-loading stuff.\n adjustingTo, \/\/ This one tells what slide we are adjusting to, to make sure that we do not adjust to something we shouldn't.\n adjustTargetTime = 0, \/\/ This one holds the time that the autoadjust animation should complete.\n currentlyAnimating = FALSE,\n currentAnimation,\n currentAnimationCallback,\n currentAnimationObject,\n runAfterAnimationCallbacks,\n awaitingAjaxCallbacks,\n startedAjaxLoads,\n finishedAjaxLoads,\n animateToAfterCompletion = FALSE,\n animateToAfterCompletionClicked,\n animateToAfterCompletionSpeed,\n slideContainerCreated = FALSE,\n option = [],\n options = $.extend(TRUE, {}, optionsOrg),\n currentSliderPositionTop,\n currentSliderPositionLeft,\n unBindCallbacks = [],\n autoStartedWithPause = FALSE,\n animationWasInterrupted = FALSE;\n\n \/\/ The call to the init function is after the definition of all the functions.\n function initSudoSlider() {\n \/\/ Storing the public options in an array.\n var optionIndex = 0;\n for (var key in options) {\n option[optionIndex] = options[key];\n optionIndex++;\n }\n\n init = TRUE;\n fullyInitialized = FALSE;\n\n imagesInSlidesLoaded = [];\n runAfterAnimationCallbacks = [];\n awaitingAjaxCallbacks = [];\n startedAjaxLoads = [];\n finishedAjaxLoads = [];\n\n \/\/ Fix for nested list items\n slidesContainer = childrenNotAnimationClones(obj);\n\n \/\/ Is the ul element there?\n var ulLength = slidesContainer.length;\n var newUl = $(DIV_TAG);\n if (!ulLength) {\n obj.append(slidesContainer = newUl);\n isSlideContainerUl = FALSE;\n } else if (!((isSlideContainerUl = slidesContainer.is(\"ul\")) || slidesContainer.hasClass(SLIDES_CONTAINER)) && !slideContainerCreated) {\n newUl.append(slidesContainer);\n obj.append(slidesContainer = newUl);\n }\n slideContainerCreated = TRUE;\n\n var slidesJquery = childrenNotAnimationClones(slidesContainer);\n\n slides = [];\n\n totalSlides = slidesJquery.length;\n\n slidesJquery.each(function autofunction(index, elem) {\n var that = $(elem);\n slides[index] = that;\n that.css({position: RELATIVE_STRING});\n if (that.css(\"display\") == \"none\") {\n that.css(\"display\", \"inline\");\n }\n });\n\n \/\/ Adding CSS classes.\n slidesContainer.addClass(SLIDES_CONTAINER);\n\n slidesJquery.addClass(\"slide\");\n\n slidesJquery.each(function (index, elem) {\n $(elem).attr(\"data-slide\", index + 1);\n });\n\n \/\/ Now we are going to fix the document, if it's 'broken'. (No
).\n \/\/ I assume that it's can only be broken, if ajax is enabled. If it's broken without Ajax being enabled, the script doesn't have anything to fill the holes.\n if (option[30]\/*ajax*\/) {\n \/\/ Do we have enough list elements to fill out all the ajax documents.\n var numerOfAjaxUrls = option[30]\/*ajax*\/.length;\n if (numerOfAjaxUrls > totalSlides) {\n for (var a = 1; a <= numerOfAjaxUrls - totalSlides; a++) {\n var tag;\n if (isSlideContainerUl) {\n tag = \"li\";\n } else {\n tag = \"div\";\n }\n var slide = $(\"<\" + tag + \">\" + option[32]\/*loadingtext*\/ + \"<\/\" + tag + \">\");\n slidesContainer.append(slide);\n slides[totalSlides + (a - 1)] = slide;\n }\n slidesJquery = childrenNotAnimationClones(slidesContainer);\n totalSlides = numerOfAjaxUrls;\n }\n }\n\n slidesJquery.each(function (index, elem) {\n imagesInSlidesLoaded[index] = FALSE;\n runOnImagesLoaded($(elem), TRUE, function () {\n imagesInSlidesLoaded[index] = TRUE;\n });\n });\n\n if (slideNumberBeforeDestroy === FALSE) {\n currentSlide = 0;\n } else {\n currentSlide = slideNumberBeforeDestroy;\n }\n currentSlide = currentSlide || 0;\n\n previousSlide = currentSlide;\n\n clickable = TRUE;\n numericControls = [];\n destroyed = FALSE;\n\n \/\/ Set obj overflow to hidden (and position to relative , if fade is enabled. <\/strike>).\n obj.css({overflow: HIDDEN_STRING});\n if (obj.css(\"position\") == \"static\") obj.css({position: RELATIVE_STRING}); \/\/ Fixed a lot of IE6 + IE7 bugs.\n\n \/\/ Float items to the left, and make sure that all elements are shown.\n slidesJquery.css({\"float\": \"left\", listStyle: \"none\"});\n \/\/ The last CSS to make it work.\n slidesContainer.add(slidesJquery).css({display: \"block\", position: RELATIVE_STRING, margin: \"0\"});\n\n adjustPositionToPosition(0, 0, TRUE);\n\n option[7]\/*slidecount*\/ = parseInt10(option[7]\/*slidecount*\/);\n\n \/\/ Lets just redefine slidecount\n numberOfVisibleSlides = option[7]\/*slidecount*\/;\n\n option[7]\/*slidecount*\/ += option[8]\/*movecount*\/ - 1;\n\n \/\/ Startslide can only be a number (and not 0). Converting from 1 index to 0 index.\n \/\/ Unless it is the string \"random\".\n if (typeof option[9]\/*startslide*\/ == \"string\" && option[9]\/*startslide*\/.toLowerCase() == \"random\") {\n option[9]\/*startslide*\/ = (Math.random() * totalSlides) | 0;\n }\n option[9]\/*startslide*\/ = parseInt10(option[9]\/*startslide*\/) - 1 || 0;\n\n option[0]\/*effect*\/ = getEffectMethod(option[0]\/*effect*\/);\n\n \/\/ Cloning numericText, so the array same array can be modifed outside SudoSlider without doing weird things.\n option[18]\/*numerictext*\/ = option[18]\/*numerictext*\/.slice(0);\n\n for (var a = 0; a < totalSlides; a++) {\n if (!option[18]\/*numerictext*\/[a] && option[18]\/*numerictext*\/[a] != \"\") {\n option[18]\/*numerictext*\/[a] = (a + 1);\n }\n if (option[30]\/*ajax*\/) {\n option[30]\/*ajax*\/[a] = option[30]\/*ajax*\/[a] || FALSE;\n }\n }\n\n option[4]\/*controlsfade*\/ = option[4]\/*controlsfade*\/ && !option[15];\/*continuous*\/\n\n if (option[10]\/*responsive*\/) {\n adjustResponsiveLayout(TRUE);\n }\n\n \/\/ Making sure that i have enough room in the (Through testing, i found out that the max supported size (height or width) in Firefox is 17895697px, Chrome supports up to 134217726px, and i didn't find any limits in IE (6\/7\/8\/9)).\n \/\/ 9000000px gives room for about 12500 slides of 700px each (and works in every browser i tested). Down to 9000000 from 10000000 because the later might not work perfectly in FireFox on OSX.\n slidesContainer[option[6]\/*vertical*\/ ? \"height\" : \"width\"](9000000)[option[6]\/*vertical*\/ ? \"width\" : \"height\"](\"100%\");\n\n \/\/ If responsive is turned on, autowidth doesn't work.\n option[28]\/*autowidth*\/ = option[28]\/*autowidth*\/ && !option[10];\/*responsive*\/\n\n if (option[10]\/*responsive*\/) {\n bindAndRegisterOff(jWin, \"resize focus\", adjustResponsiveLayout, \"\");\n }\n\n if (option[17]\/*numeric*\/ || option[16]\/*prevnext*\/) {\n controls = $(\"<\/span>\");\n obj[option[5]\/*insertafter*\/ ? \"after\" : \"before\"](controls);\n\n if (option[17]\/*numeric*\/) {\n numericContainer = $(\"<\/ol>\");\n controls.prepend(numericContainer);\n var usePages = option[17]\/*numeric*\/ == PAGES_MARKER_STRING;\n var distanceBetweenPages = usePages ? numberOfVisibleSlides : 1;\n for (var a = 0; a < totalSlides - ((option[15]\/*continuous*\/ || usePages) ? 1 : numberOfVisibleSlides) + 1; a += distanceBetweenPages) {\n numericControls[a] = $(\"- \" + option[18]\/*numerictext*\/[a] + \"<\/span><\/a><\/li>\")\n .appendTo(numericContainer)\n .click(function () {\n enqueueAnimation(getTargetAttribute(this) - 1, TRUE);\n return FALSE;\n });\n }\n }\n if (option[16]\/*prevnext*\/) {\n nextbutton = makecontrol(option[34]\/*nexthtml*\/, NEXT_STRING);\n prevbutton = makecontrol(option[33]\/*prevhtml*\/, PREV_STRING);\n }\n if (option[4]\/*controlsfade*\/) {\n fadeControls(currentSlide, 0);\n }\n }\n\n \/\/ Lets make those fast\/normal\/fast into some numbers we can make calculations with.\n var optionsToConvert = [4\/*controlsfadespeed*\/, 1\/*speed*\/, 14\/*pause*\/];\n for (var i = 0; i < optionsToConvert.length; i++) {\n option[optionsToConvert[i]] = textSpeedToNumber(option[optionsToConvert[i]]);\n }\n\n if (option[2]\/*customlink*\/) {\n var filter = stringTrim(option[2]\/*customlink*\/);\n if (filter.charAt(0) == \">\") {\n bindAndRegisterOff(obj, \"click\", customLinkClickHandler, filter.substr(1, filter.length));\n } else {\n bindAndRegisterOff(doc, \"click\", customLinkClickHandler, filter);\n }\n }\n\n runOnImagesLoaded(getSlides(option[9]\/*startslide*\/, option[7]\/*slidecount*\/), TRUE, function () {\n if (slideNumberBeforeDestroy !== FALSE) {\n goToSlide(slideNumberBeforeDestroy, FALSE);\n } else if (option[26]\/*history*\/) {\n \/\/ I support the jquery.address plugin, Ben Alman's hashchange plugin and Ben Alman's jQuery.BBQ.\n var hashPlugin;\n if (hashPlugin = jWin.hashchange) {\n hashPlugin(URLChange);\n } else if (hashPlugin = $.address) {\n hashPlugin.change(URLChange);\n } else {\n \/\/ This assumes that jQuery BBQ is included. If not, stuff won't work in old browsers.\n bindAndRegisterOff(jWin, \"hashchange\", URLChange);\n }\n URLChange();\n\n } else {\n goToSlide(option[9]\/*startslide*\/, FALSE);\n }\n\n setCurrent(currentSlide);\n });\n if (option[30]\/*ajax*\/[option[9]\/*startslide*\/]) {\n ajaxLoad(option[9]\/*startslide*\/);\n }\n if (option[31]\/*preloadajax*\/ === TRUE) {\n for (var i = 0; i < totalSlides; i++) {\n if (option[30]\/*ajax*\/[i] && option[9]\/*startslide*\/ != i) {\n ajaxLoad(i);\n }\n }\n } else {\n startAsyncDelayedLoad();\n }\n }\n\n \/*\n * The functions do the magic.\n *\/\n\n function customLinkClickHandler() {\n var target;\n if (target = getTargetAttribute(this)) {\n if (target == 'stop') {\n option[12]\/*auto*\/ = FALSE;\n stopAuto();\n } else if (target == \"start\") {\n startAuto();\n option[12]\/*auto*\/ = TRUE;\n } else if (target == 'block') {\n clickable = FALSE;\n } else if (target == 'unblock') {\n clickable = TRUE;\n } else {\n enqueueAnimation((target == parseInt10(target)) ? target - 1 : target, TRUE);\n }\n }\n return FALSE;\n }\n\n \/\/ Adjusts the slider when a change in layout has happened.\n var previousAdjustedResponsiveWidth = -1;\n\n function adjustResponsiveLayout(forced) {\n function doTheAdjustment() {\n if ((cantDoAdjustments() && !(forced === TRUE)) || totalSlides == 0) {\n return;\n }\n\n var subPixelNewWidth = getResponsiveWidth();\n var newWidth = parseInt10(subPixelNewWidth);\n var addAPixelEvery = 1 \/ (subPixelNewWidth - newWidth);\n\n if (previousAdjustedResponsiveWidth !== subPixelNewWidth || (forced === TRUE)) {\n previousAdjustedResponsiveWidth = subPixelNewWidth;\n\n var slideCounter = 1;\n for (var i = 0; i < totalSlides; i++) {\n slideCounter++;\n if (slideCounter >= addAPixelEvery) {\n slideCounter = 0;\n slides[i].width(newWidth + 1);\n } else {\n slides[i].width(newWidth);\n }\n }\n if (autoStartedWithPause !== FALSE) {\n startAuto(autoStartedWithPause);\n }\n\n stopAnimation();\n ensureSliderContainerCSSDurationReset();\n adjustPositionTo(currentSlide);\n autoadjust(currentSlide, 0);\n }\n }\n\n doTheAdjustment();\n callAsync(doTheAdjustment); \/\/ Fixing invisible scrollbar.\n schedule(doTheAdjustment, 20);\n }\n\n \/\/ Returns the width of a single
- if the page layout is responsive.\n function getResponsiveWidth() {\n var width = obj.width();\n if (option[6]\/*vertical*\/) {\n return width;\n } else {\n return width \/ numberOfVisibleSlides;\n }\n }\n\n \/\/ For backwards compability, the rel attribute is used as a fallback.\n function getTargetAttribute(that) {\n that = $(that);\n return that.attr(\"data-target\") || that.attr(\"rel\");\n }\n\n \/\/ Triggered when the URL changes.\n function URLChange() {\n var target = getUrlHashTarget();\n if (init) {\n goToSlide(target, FALSE);\n } else {\n enqueueAnimation(target, FALSE);\n }\n }\n\n function startAsyncDelayedLoad() {\n if (option[31]\/*preloadajax*\/ !== FALSE) {\n var preloadAjaxTime = parseInt10(option[31]\/*preloadajax*\/);\n if (option[30]\/*ajax*\/) {\n for (var i = 0; i < option[30]\/*ajax*\/.length; i++) {\n if (option[30]\/*ajax*\/[i]) {\n clearTimeout(asyncDelayedSlideLoadTimeout);\n asyncDelayedSlideLoadTimeout = schedule(function () {\n if (option[30]\/*ajax*\/[i]) {\n ajaxLoad(i);\n } else {\n startAsyncDelayedLoad();\n }\n }, preloadAjaxTime);\n\n break;\n }\n }\n }\n }\n }\n\n function startAuto(pause) {\n if (pause === undefined) {\n var dataPause = slides[currentSlide].attr(\"data-pause\");\n if (dataPause !== undefined) {\n pause = parseInt10(dataPause);\n } else {\n pause = option[13]\/*pause*\/;\n }\n }\n if (animationWasInterrupted) {\n pause = mathMax(pause, 100);\n }\n stopAuto();\n autoOn = TRUE;\n autoStartedWithPause = pause;\n autoTimeout = schedule(function () {\n if (autoOn && !currentlyAnimating) {\n enqueueAnimation(NEXT_STRING, FALSE);\n autoStartedWithPause = FALSE;\n }\n }, pause);\n }\n\n function stopAuto(autoPossibleStillOn) {\n if (autoTimeout) {\n clearTimeout(autoTimeout);\n }\n if (!autoPossibleStillOn) autoOn = FALSE;\n }\n\n function textSpeedToNumber(speed) {\n if (parseInt10(speed) || speed == 0) {\n return parseInt10(speed);\n }\n if (speed == \"fast\") {\n return 200;\n }\n if (speed == \"normal\" || speed == \"medium\") {\n return 400;\n }\n if (speed == \"slow\") {\n return 600;\n }\n return 600;\n }\n\n function makecontrol(html, action) {\n return $(html).prependTo(controls).click(function () {\n enqueueAnimation(action, TRUE);\n return FALSE;\n });\n }\n\n function enqueueAnimation(direction, clicked, speed) {\n if (clickable && !init) {\n \/\/ Stopping, because if its needed then its restarted after the end of the animation.\n stopAuto(TRUE);\n\n if (!destroyed) {\n loadSlidesAndAnimate(direction, clicked, speed);\n }\n } else {\n if (option[37]\/*interruptible*\/ && currentlyAnimating) {\n if (getRealPos(filterDir(direction)) !== currentlyAnimatingTowards) {\n stopAnimation();\n enqueueAnimation(direction, clicked, speed);\n }\n } else {\n animateToAfterCompletion = direction;\n animateToAfterCompletionClicked = clicked;\n animateToAfterCompletionSpeed = speed;\n\n \/\/ I can just as well start the ajax loads\n if (option[30]\/*ajax*\/) {\n var targetSlide = filterDir(direction);\n for (var loadSlide = targetSlide; loadSlide < targetSlide + numberOfVisibleSlides; loadSlide++) {\n if (option[30]\/*ajax*\/[loadSlide]) {\n ajaxLoad(getRealPos(loadSlide));\n }\n }\n }\n }\n }\n }\n\n \/\/ It may not sound like it, but the variable fadeOpacity is only for TRUE\/FALSE.\n function fadeControl(fadeOpacity, fadetime, nextcontrol) {\n fadeOpacity = fadeOpacity ? 1 : 0;\n var fadeElement = $();\n\n if (option[16]\/*prevnext*\/) {\n fadeElement = nextcontrol ? nextbutton : prevbutton;\n }\n\n if (option[2]\/*customlink*\/) {\n var customLink = $(option[2]\/*customlink*\/);\n var filterString = \"=\\\"\" + (nextcontrol ? NEXT_STRING : PREV_STRING) + \"\\\"]\";\n var filtered = customLink.filter(\"[rel\" + filterString + \", [data-target\" + filterString + \"\");\n fadeElement = fadeElement.add(filtered);\n }\n\n var adjustObject = {opacity: fadeOpacity};\n\n function callback() {\n if (!fadeOpacity && fadeElement.css(\"opacity\") == 0) {\n fadeElement.css({visibility: HIDDEN_STRING});\n }\n }\n\n if (fadeOpacity) {\n fadeElement.css({visibility: \"visible\"});\n }\n\n if (option[38]\/*useCSS*\/) {\n animate(fadeElement, adjustObject, fadetime, option[46]\/*CSSease*\/, callback);\n } else {\n fadeElement.animate(\n adjustObject,\n {\n queue: FALSE,\n duration: fadetime,\n easing: option[11]\/*ease*\/,\n callback: callback\n }\n );\n }\n }\n\n \/\/ Fade the controls, if we are at the end of the slide.\n \/\/ It's all the different kind of controls.\n function fadeControls(slide, fadetime) {\n fadeControl(slide, fadetime, FALSE); \/\/ abusing that the number 0 == FALSE.\n \/\/ The new way of doing it.\n fadeControl(slide < totalSlides - numberOfVisibleSlides, fadetime, TRUE);\n }\n\n \/\/ Updating the 'current' class.\n function setCurrent(i) {\n i = getRealPos(i) + 1;\n\n \/\/ Fixing that the last numeric control isn't marked when we are at the last possible position.\n if (option[17]\/*numeric*\/ == PAGES_MARKER_STRING && i == totalSlides - numberOfVisibleSlides + 1 && !option[15]\/*continuous*\/) {\n i = totalSlides;\n }\n\n if (option[17]\/*numeric*\/) {\n for (var control = 0; control < numericControls.length; ++control) {\n var element = numericControls[control];\n setCurrentElement(element, i)\n }\n }\n if (option[2]\/*customlink*\/) setCurrentElement($(option[2]\/*customlink*\/), i);\n }\n\n function setCurrentElement(element, i) {\n if (element && element.filter) {\n element\n .filter(\".current\")\n .removeClass(\"current\");\n\n element\n .filter(function () {\n var elementTarget = getTargetAttribute(this);\n if (option[17]\/*numeric*\/ == PAGES_MARKER_STRING) {\n for (var a = numberOfVisibleSlides - 1; a >= 0; a--) {\n if (elementTarget == i - a) {\n return TRUE;\n }\n }\n } else {\n return elementTarget == i;\n }\n return FALSE;\n })\n .addClass(\"current\");\n }\n }\n\n function getUrlHashTarget() {\n var hashString = location.hash.substr(1)\n for (var i = 0; i < option[18]\/*numerictext*\/.length; i++) {\n if (option[18]\/*numerictext*\/[i] == hashString) {\n return i;\n }\n }\n if (hashString && !init) {\n return currentSlide;\n } else {\n return option[9]\/*startslide*\/;\n }\n }\n\n function autoadjust(i, speed) {\n i = getRealPos(i); \/\/ I assume that the continuous clones, and the original element is the same height. So i always adjust according to the original element.\n\n adjustingTo = i;\n adjustTargetTime = getTimeInMillis() + speed;\n\n if (speed == 0) {\n finishedAdjustingTo = i;\n } else {\n finishedAdjustingTo = FALSE;\n }\n\n if (option[27]\/*autoheight*\/ || option[28]\/*autowidth*\/) {\n autoHeightWidth(i);\n }\n }\n\n function autoHeightWidth(i) {\n obj.ready(function () {\n adjustHeightWidth(i);\n runOnImagesLoaded(slides[i], FALSE, makeCallback(adjustHeightWidth, [i]));\n });\n }\n\n \/\/ Axis: TRUE == height, FALSE == width.\n function getSliderDimensions(fromSlide, vertical) {\n var pixels = 0;\n for (var slide = fromSlide; slide < fromSlide + numberOfVisibleSlides; slide++) {\n var targetSlide = slides[getRealPos(slide)];\n if (targetSlide) {\n var targetPixels = targetSlide['outer' + (vertical ? \"Height\" : \"Width\")](TRUE);\n if (vertical == option[6]\/*vertical*\/) {\n pixels += targetPixels;\n } else {\n pixels = mathMax(targetPixels, pixels);\n }\n }\n }\n return pixels;\n }\n\n var prevHeightWidthAdjustObject = {};\n\n function adjustHeightWidth(i) {\n if (i != adjustingTo || cantDoAdjustments()) {\n return;\n }\n\n var speed = adjustTargetTime - getTimeInMillis();\n speed = mathMax(speed, 0);\n var adjustObject = {};\n if (option[27]\/*autoheight*\/) {\n adjustObject.height = getSliderDimensions(i, TRUE) || 1; \/\/ Making it completely invisible gives trouble.\n }\n if (option[28]\/*autowidth*\/) {\n adjustObject.width = getSliderDimensions(i, FALSE) || 1;\n }\n\n if (simpleObjectEquals(prevHeightWidthAdjustObject, adjustObject)) {\n return;\n } else {\n prevHeightWidthAdjustObject = adjustObject;\n }\n\n if (option[38]\/*useCSS*\/) {\n animate(obj, adjustObject, speed, option[46]\/*CSSease*\/)\n } else {\n if (speed == 0) {\n \/\/ Doing CSS if speed == 0, 1: its faster. 2: it fixes bugs.\n obj.stop().css(adjustObject);\n } else {\n obj.animate(\n adjustObject,\n {\n queue: FALSE,\n duration: speed,\n easing: option[11]\/*ease*\/\n }\n );\n }\n }\n }\n\n function adjustPositionTo(slide) {\n var left = getSlidePosition(slide, FALSE);\n var top = getSlidePosition(slide, TRUE);\n\n adjustPositionToPosition(left, top);\n }\n\n function adjustPositionToPosition(left, top, both) {\n currentSliderPositionLeft = left;\n currentSliderPositionTop = top;\n\n if (option[38]\/*useCSS*\/ || both) {\n slidesContainer.css({transform: \"translate(\" + left + \"px, \" + top + \"px)\"});\n }\n if (!option[38]\/*useCSS*\/ || both) {\n function setMargins(left, top) {\n slidesContainer.css({\n marginLeft: left,\n marginTop: top\n });\n }\n\n setMargins(0, 0);\n setMargins(left, top);\n }\n }\n\n function getSlidePosition(slide, vertical) {\n if (vertical == undefined) {\n vertical = option[6]\/*vertical*\/;\n }\n var targetSlide = slides[getRealPos(slide)];\n return (targetSlide && targetSlide.length) ? -targetSlide.position()[vertical ? \"top\" : \"left\"] : 0;\n }\n\n function callQueuedAnimation() {\n if (animateToAfterCompletion !== FALSE) {\n var animateTo = animateToAfterCompletion;\n animateToAfterCompletion = FALSE;\n callAsync(makeCallback(enqueueAnimation, [animateTo, animateToAfterCompletionClicked, animateToAfterCompletionSpeed]));\n }\n }\n\n function adjust(clicked) {\n ensureSliderContainerCSSDurationReset();\n\n autoadjust(currentSlide, 0);\n currentSlide = getRealPos(currentSlide); \/\/ Going to the real slide, away from the clone.\n if (!option[29]\/*updateBefore*\/) setCurrent(currentSlide);\n adjustPositionTo(currentSlide);\n clickable = TRUE;\n currentlyAnimatingTowards = FALSE;\n\n if (option[12]\/*auto*\/) {\n \/\/ Stopping auto if clicked. And also continuing after X seconds of inactivity.\n if (clicked) {\n stopAuto();\n if (option[14]\/*resumepause*\/) startAuto(option[14]\/*resumepause*\/);\n } else if (!init) {\n startAuto();\n }\n }\n\n callQueuedAnimation();\n }\n\n \/\/ This function is called when i need a callback on the current element and it's continuous clones (if they are there).\n \/\/ after: TRUE == afteranimation : FALSE == beforeanimation;\n function aniCall(i, after, synchronous, speed) {\n i = getRealPos(i);\n \/\/ Wierd fix to let IE accept the existance of the sudoSlider object.\n var func = makeCallback(after ? afterAniCall : beforeAniCall, [slides[i], i + 1, speed]);\n if (synchronous) {\n func();\n } else {\n callAsync(func);\n }\n }\n\n function afterAniCall(el, a) {\n option[25]\/*afteranimation*\/.call(el, a, baseSlider);\n }\n\n function beforeAniCall(el, a, speed) {\n option[24]\/*beforeanimation*\/.call(el, a, baseSlider, speed);\n }\n\n \/\/ Convert the direction into a usefull number.\n function filterDir(dir) {\n if (dir == NEXT_STRING) {\n return limitDir(currentSlide + option[8]\/*movecount*\/, dir);\n } else if (dir == PREV_STRING) {\n return limitDir(currentSlide - option[8]\/*movecount*\/, dir);\n } else if (dir == FIRST_STRING) {\n return 0;\n } else if (dir == LAST_STRING) {\n return totalSlides - 1;\n } else {\n return limitDir(parseInt10(dir), dir);\n }\n }\n\n \/\/ If continuous is off, we sometimes do not want to move to far.\n \/\/ This method was added in 2.1.8, se the changelog as to why.\n function limitDir(i, dir) {\n if (option[15]\/*continuous*\/) {\n if (dir == NEXT_STRING || dir == PREV_STRING) {\n return i;\n } else {\n return getRealPos(i);\n }\n } else {\n var maxSlide = totalSlides - numberOfVisibleSlides;\n if (i > maxSlide) {\n if (currentSlide == maxSlide && dir == NEXT_STRING) {\n return 0;\n } else {\n return maxSlide;\n }\n } else if (i < 0) {\n if (currentSlide == 0 && dir == PREV_STRING) {\n return maxSlide;\n } else {\n return 0;\n }\n } else {\n return i;\n }\n }\n }\n\n \/\/ Load a ajax document (or image) into a slide.\n \/\/ If testing this locally (loading everything from a harddisk instead of the internet), it may not work.\n \/\/ But then try to upload it to a server, and see it shine.\n function ajaxLoad(slide, ajaxCallBack) {\n if (ajaxCallBack) {\n var callbackList = awaitingAjaxCallbacks[slide];\n if (!callbackList) {\n callbackList = awaitingAjaxCallbacks[slide] = [];\n }\n callbackList.push(ajaxCallBack);\n }\n\n if (finishedAjaxLoads[slide]) {\n if (ajaxCallBack) {\n runOnImagesLoaded(slides[slide], TRUE, makeCallback(callAsync, [ajaxCallBack]));\n }\n return;\n }\n\n if (startedAjaxLoads[slide]) {\n return;\n }\n startedAjaxLoads[slide] = TRUE;\n\n var target = option[30]\/*ajax*\/[slide];\n if (!target) {\n callAsync(ajaxCallBack);\n return;\n }\n\n if (asyncDelayedSlideLoadTimeout) clearTimeout(asyncDelayedSlideLoadTimeout);\/\/ I dont want it to run to often.\n\n var targetslide = slides[slide];\n\n \/\/ Loads the url as an image, either if it is an image, or if everything else failed.\n function loadImage() {\n var image = new Image();\n image.src = target;\n var thatImage = $(image);\n runOnImagesLoaded(thatImage, TRUE, function () {\n targetslide.empty().append(image);\n\n ajaxAdjust(slide, TRUE);\n });\n }\n\n \/\/ It is loaded, we dont need to do that again.\n option[30]\/*ajax*\/[slide] = FALSE;\n \/\/ It is the only option that i need to change for good.\n options.ajax[slide] = FALSE;\n\n if (option[47]\/*AjaxHasHTML*\/) {\n var succesRan = FALSE;\n $.ajax({\n url: target,\n success: function (data, textStatus, jqXHR) {\n succesRan = TRUE;\n runWhenNotAnimating(function () {\n var type = jqXHR.getResponseHeader('Content-Type');\n if (type && type.substr(0, 1) != \"i\") {\n targetslide.html(data);\n ajaxAdjust(slide, FALSE);\n } else {\n loadImage();\n }\n });\n },\n complete: function () {\n \/\/ Some browsers wont load images this way, so i treat an error as an image.\n \/\/ There is no stable way of determining if it's a real error or if i tried to load an image in a old browser, so i do it this way.\n if (!succesRan) {\n loadImage();\n }\n }\n });\n } else {\n loadImage();\n }\n }\n\n \/\/ Performs the callback immediately if no animation is running.\n \/\/ Otherwise waits for the animation to complete in a FIFO queue.\n function runWhenNotAnimating(completeFunction) {\n if (currentlyAnimating) {\n runAfterAnimationCallbacks.push(completeFunction);\n } else {\n callAsync(completeFunction);\n }\n }\n\n function ajaxAdjust(i, img) {\n var target = slides[i];\n\n if (!currentlyAnimating) {\n adjustPositionTo(currentSlide);\n autoadjust(currentSlide, 0);\n }\n\n runOnImagesLoaded(target, TRUE, makeCallback(runWhenNotAnimating, [\n function () {\n adjustPositionTo(currentSlide);\n autoadjust(currentSlide, 0);\n\n finishedAjaxLoads[i] = TRUE;\n\n performCallbacks(awaitingAjaxCallbacks[i]);\n\n startAsyncDelayedLoad();\n\n callAsync(function () {\n option[23]\/*ajaxload*\/.call(slides[i], i + 1, img, baseSlider);\n });\n\n if (init) {\n init = FALSE;\n callAsync(performInitCallback);\n }\n }\n ]));\n }\n\n function performInitCallback() {\n fullyInitialized = TRUE;\n if (option[15]\/*continuous*\/) {\n centerTargetSlideAfter(currentSlide);\n }\n\n autoadjust(currentSlide, 0);\n adjustPositionTo(currentSlide);\n callQueuedAnimation();\n if (option[10]\/*responsive*\/) {\n adjustResponsiveLayout();\n }\n if (option[12]\/*auto*\/) {\n startAuto();\n }\n option[22]\/*initCallback*\/.call(baseSlider);\n\n if (option[41]\/*touch*\/) {\n setUpTouch();\n }\n\n \/\/ Fixing once and for all that the wrong slide is shown on init.\n runOnImagesLoaded(getSlides(currentSlide, totalSlides), FALSE, makeCallback(runWhenNotAnimating, [\n function () {\n autoadjust(currentSlide, 0);\n adjustPositionTo(currentSlide);\n }\n ]));\n }\n\n function setUpTouch() {\n var body = $(\"body\");\n var easingToUse;\n var runningTouchEffect = FALSE;\n\n var prevEffect = option[0]\/*effect*\/;\n\n option[0]\/*effect*\/ = function (obj) {\n if (runningTouchEffect) {\n runningTouchEffect = FALSE;\n var options = obj.options;\n options.ease = easingToUse;\n options.cssease = easingToUse;\n return slide(obj);\n } else {\n return prevEffect(obj);\n }\n };\n var initialOffsetLeft;\n var initialOffsetTop;\n\n var startTime;\n var lastTime;\n var lastDistance;\n\n var bufferSize = 3;\n var positionsBuffer = [];\n var timeBuffer = [];\n var bufferIndex = 0;\n\n var currentTouchSlide;\n var baseDistance;\n\n function touchStart(x, y) {\n body.addClass(SUDO_DRAGGING_CLASS);\n currentTouchSlide = currentSlide;\n baseDistance = 0;\n\n currentlyAnimating = TRUE;\n ensureSliderContainerCSSDurationReset();\n initialOffsetTop = currentSliderPositionTop;\n initialOffsetLeft = currentSliderPositionLeft;\n\n var distance;\n if (option[6]\/*vertical*\/) {\n distance = mathAbs(y);\n } else {\n distance = mathAbs(x);\n }\n\n lastDistance = distance;\n startTime = getTimeInMillis();\n lastTime = startTime;\n\n var currentSlidePosition = getSlidePosition(currentTouchSlide);\n distanceToRightSlide = getSlidePosition(currentTouchSlide + 1) - currentSlidePosition;\n\n correctionWhenCalculatingWhereToMoveTouchDistance = FALSE;\n }\n\n var distanceToRightSlide;\n var correctionWhenCalculatingWhereToMoveTouchDistance;\n\n function touchMove(x, y) {\n var distance;\n if (option[6]\/*vertical*\/) {\n distance = y;\n } else {\n distance = x;\n }\n var distanceAbs = mathAbs(distance);\n positionsBuffer[bufferIndex] = distanceAbs - lastDistance;\n var newTime = getTimeInMillis();\n timeBuffer[bufferIndex] = newTime - lastTime;\n bufferIndex = (bufferIndex + 1) % bufferSize;\n\n lastTime = newTime;\n lastDistance = distanceAbs;\n\n if (option[15]\/*continuous*\/ && totalSlides >= numberOfVisibleSlides + 1) {\n \/\/ Moving everything to the right.\n var direction = 0;\n if ((distance - baseDistance) < distanceToRightSlide) {\n correctionWhenCalculatingWhereToMoveTouchDistance = FALSE;\n\n baseDistance += distanceToRightSlide;\n direction = 1;\n\n var rightSlidePositionBefore = getSlidePosition(currentTouchSlide + direction);\n\n centerTargetSlideAfter(currentTouchSlide + direction);\n var rightSlidePositionAfter = getSlidePosition(currentTouchSlide + direction);\n\n }\n\n \/\/ Moving everything to the left.\n if ((distance - baseDistance) > 0) {\n direction = -1;\n\n var rightSlidePositionBefore = getSlidePosition(currentTouchSlide);\n\n centerTargetSlideAfter(currentTouchSlide + direction);\n rightSlidePositionAfter = getSlidePosition(currentTouchSlide);\n\n var moveBaseDistance = getSlidePosition(currentTouchSlide - 1) - rightSlidePositionAfter;\n baseDistance += moveBaseDistance;\n\n correctionWhenCalculatingWhereToMoveTouchDistance = -moveBaseDistance;\n }\n\n if (direction != 0) {\n currentTouchSlide += direction;\n\n if (option[6]\/*vertical*\/) {\n initialOffsetTop -= rightSlidePositionBefore - rightSlidePositionAfter;\n } else {\n initialOffsetLeft -= rightSlidePositionBefore - rightSlidePositionAfter;\n }\n\n distanceToRightSlide = getSlidePosition(currentTouchSlide + 1) - getSlidePosition(currentTouchSlide);\n }\n }\n\n if (option[6]\/*vertical*\/) {\n x = 0;\n } else {\n y = 0;\n }\n adjustPositionToPosition(initialOffsetLeft + x, initialOffsetTop + y);\n }\n\n function touchEnd(x, y) {\n body.removeClass(SUDO_DRAGGING_CLASS);\n var distance;\n if (option[6]\/*vertical*\/) {\n distance = y;\n } else {\n distance = x;\n }\n distance -= baseDistance;\n\n if (correctionWhenCalculatingWhereToMoveTouchDistance) {\n distance -= correctionWhenCalculatingWhereToMoveTouchDistance;\n currentTouchSlide++;\n }\n\n var distanceAbs = mathAbs(distance);\n var currentTime = getTimeInMillis();\n var time = 0;\n var bufferDistance = 0;\n for (var i = 0; i < bufferSize; i++) {\n var thisTime = timeBuffer[i];\n if (thisTime + 100 < currentTime) {\n time += thisTime;\n bufferDistance += positionsBuffer[i];\n }\n }\n var slideDimensions;\n if (option[6]\/*vertical*\/) {\n slideDimensions = obj.height();\n } else {\n slideDimensions = obj.width();\n }\n \/\/ This is in pixels pr. ms.\n var speed = mathAbs(bufferDistance) \/ time;\n\n var goToAnotherSlide = speed >= 0.2 || distanceAbs >= slideDimensions \/ 2;\n\n if ((bufferDistance > 0 && distanceAbs < 0) || (bufferDistance < 0 && distanceAbs > 0) || distanceAbs <= 10) {\n goToAnotherSlide = FALSE;\n }\n\n var direction = distance < 0 ? NEXT_STRING : PREV_STRING;\n\n if (!option[15]\/*continuous*\/) {\n if (currentSlide + 1 == totalSlides) {\n if (direction == NEXT_STRING) {\n goToAnotherSlide = FALSE;\n }\n } else if (currentSlide == 0) {\n if (direction == PREV_STRING) {\n goToAnotherSlide = FALSE;\n }\n }\n }\n\n direction = direction == NEXT_STRING ? currentTouchSlide + 1 : currentTouchSlide - 1;\n direction = mod(direction, totalSlides);\n\n var distanceLeft;\n if (goToAnotherSlide) {\n distanceLeft = slideDimensions - distanceAbs;\n } else {\n distanceLeft = distanceAbs;\n }\n\n var timeFromSpeed = (distanceLeft \/ speed) * 1.3;\n var timeFromDistance = mathMax((option[1]\/*speed*\/) * (slideDimensions \/ distanceLeft), (option[1]\/*speed*\/) \/ 4);\n\n var timeLeft;\n if (timeFromSpeed < timeFromDistance) {\n timeLeft = mathMin(timeFromSpeed, (option[1]\/*speed*\/));\n } else {\n timeLeft = mathMin(timeFromDistance, (option[1]\/*speed*\/));\n }\n\n var cubicBezierY = (speed * timeLeft) \/ (distanceLeft + speed * timeLeft);\n var cubicBezierX = 1 - cubicBezierY;\/\/distanceLeft\/(distanceLeft + speed*timeLeft);\n\n if (option[38]\/*useCSS*\/) {\n easingToUse = \"cubic-bezier(\" + cubicBezierX + \",\" + cubicBezierY + \",0.3,1)\";\n } else {\n easingToUse = makeBezier([cubicBezierX || 0, cubicBezierY || 0, 0.3, 1]);\n }\n\n clickable = FALSE;\n runningTouchEffect = TRUE;\n if (goToAnotherSlide) {\n performAnimation(direction, timeLeft, TRUE, TRUE, TRUE);\n } else {\n performAnimation(currentTouchSlide, timeLeft, TRUE, TRUE, TRUE);\n }\n }\n\n {\n var startedTouch = FALSE;\n var startX = 0;\n var startY = 0;\n var prevX = 0;\n var prevY = 0;\n\n var dragFunction = function (event) {\n if (!clickable) {\n return;\n }\n var type = event.type;\n var startEvent;\n var endEvent1;\n var endEvent2;\n var isMouseEvent = type.substr(0, 1) == \"m\";\n if (isMouseEvent) {\n startEvent = MOUSEDOWN;\n endEvent1 = MOUSEUP;\n endEvent2 = \"\";\n } else {\n startEvent = TOUCHSTART;\n endEvent1 = TOUCHEND;\n endEvent2 = TOUCHCANCEL;\n event = event.originalEvent;\n }\n\n if (!startedTouch) {\n if (type != startEvent) {\n return;\n }\n\n var eventTarget = event.target;\n var target = $(eventTarget);\n if (!option[42]\/*touchHandle*\/) {\n target = target.parents().add(eventTarget);\n }\n var filter = option[42]\/*touchHandle*\/ || obj;\n if (typeof filter === \"string\") {\n filter = stringTrim(filter);\n if (filter.charAt(0) == \">\") {\n filter = $(filter.substr(1, filter.length), obj);\n }\n }\n\n var isTarget = target.filter(filter).length;\n\n if (!isTarget) {\n return;\n } else {\n startedTouch = TRUE;\n }\n }\n\n if (type != endEvent1 && type != endEvent2) {\n var x;\n var y;\n if (isMouseEvent) {\n x = event.pageX;\n y = event.pageY;\n } else {\n var touch = event.touches[0];\n x = touch.pageX;\n y = touch.pageY;\n }\n\n if (type == startEvent) {\n startX = x;\n startY = y;\n\n touchStart(x - startX, y - startY);\n if (isMouseEvent || !option[45]\/*allowScroll*\/) {\n event.preventDefault();\n }\n } else {\n touchMove(x - startX, y - startY);\n\n if (!allowScroll(isMouseEvent, x - startX, y - startY)) {\n event.preventDefault();\n }\n }\n\n prevX = x - startX;\n prevY = y - startY;\n } else {\n touchEnd(prevX, prevY);\n startedTouch = FALSE;\n }\n };\n bindAndRegisterOff(doc, [TOUCHSTART, TOUCHMOVE, TOUCHEND, TOUCHCANCEL].join(\" \"), dragFunction);\n if (option[44]\/*mouseTouch*\/) {\n bindAndRegisterOff(doc, [MOUSEDOWN, MOUSEMOVE, MOUSEUP].join(\" \"), dragFunction);\n }\n }\n\n function allowScroll(isMouseEvent, x, y) {\n var isGeneralDirectionVertical = mathAbs(y) > mathAbs(x);\n if (isMouseEvent) {\n \/\/ If the user drags vertically, prevent the (horizontal) scroll event\n return FALSE;\n }\n if (!option[45]\/*allowScroll*\/) {\n return FALSE;\n }\n if (option[6]\/*vertical*\/) {\n return !isGeneralDirectionVertical;\n } else {\n return isGeneralDirectionVertical;\n }\n }\n }\n\n function performCallbacks(callbacks) {\n while (callbacks && callbacks.length) {\n \/\/ Removing and running the first, so we maintain FIFO.\n callbacks.splice(0, 1)[0]();\n }\n }\n\n function isContentInSlideReady(slide) {\n if (!imagesInSlidesLoaded[slide]) {\n return FALSE;\n }\n if (!option[30]\/*ajax*\/) {\n return TRUE;\n } else {\n if (option[30]\/*ajax*\/[slide]) {\n return FALSE;\n }\n return !(startedAjaxLoads[slide] && !finishedAjaxLoads[slide]);\n }\n }\n\n function loadSlidesAndAnimate(i, clicked, speed) {\n var dir = filterDir(i);\n var prevNext = i == NEXT_STRING || i == PREV_STRING;\n\n var targetSlide = getRealPos(dir);\n if (targetSlide == currentSlide) {\n return;\n }\n clickable = FALSE;\n currentlyAnimatingTowards = targetSlide;\n\n if (option[30]\/*ajax*\/) {\n var waitCounter = 0;\n for (var loadSlide = targetSlide; loadSlide < targetSlide + numberOfVisibleSlides; loadSlide++) {\n var realLoadSlide = getRealPos(loadSlide);\n if (!isContentInSlideReady(realLoadSlide)) {\n waitCounter++;\n ajaxLoad(realLoadSlide, function () {\n \/\/ This runs aync, so every callback is placed before the first is run. Therefore this works.\n waitCounter--;\n if (waitCounter == 0) {\n option[40]\/*loadFinish*\/.call(baseSlider, dir + 1);\n performAnimation(dir, speed, clicked, prevNext);\n }\n });\n }\n }\n if (waitCounter == 0) {\n performAnimation(dir, speed, clicked, prevNext);\n } else {\n option[39]\/*loadStart*\/.call(baseSlider, dir + 1);\n }\n } else {\n performAnimation(dir, speed, clicked, prevNext);\n }\n }\n\n function ensureSliderContainerCSSDurationReset() {\n if (option[38]\/*useCSS*\/) {\n slidesContainer.css(CSSVendorPrefix + \"transition-duration\", \"\");\n }\n }\n\n var reorderedSlidesToStartFromSlide = 0;\n\n function reorderSlides(slide) {\n slide = getRealPos(slide);\n if (slide == reorderedSlidesToStartFromSlide) {\n return;\n }\n reorderedSlidesToStartFromSlide = slide;\n ensureSliderContainerCSSDurationReset();\n for (var i = 0; i < totalSlides; i++) {\n var slideToInsert = slides[getRealPos((slide + i))];\n slidesContainer.append(slideToInsert);\n }\n adjustPositionTo(currentSlide);\n }\n\n function centerTargetSlideAdjusted(targetSlide, extraSpace) {\n var offset = mathMax(parseInt10((totalSlides - extraSpace - numberOfVisibleSlides) \/ 2), 0);\n targetSlide = mod(targetSlide - offset, totalSlides);\n reorderSlides(targetSlide);\n }\n\n function centerTargetSlideAfter(targetSlide) {\n centerTargetSlideAdjusted(targetSlide, 0);\n }\n\n function centerTargetSlideBefore(targetSlide) {\n var startSlide = mathMin(targetSlide, currentSlide);\n var adjustment = mathAbs(targetSlide - currentSlide);\n\n centerTargetSlideAdjusted(startSlide, adjustment);\n }\n\n function performAnimation(dir, speed, clicked, prevNext, skipPreCenterTargetSlide) {\n if (option[29]\/*updateBefore*\/) setCurrent(dir);\n\n if (option[26]\/*history*\/ && clicked) win.location.hash = option[18]\/*numerictext*\/[dir];\n\n if (option[4]\/*controlsfade*\/) fadeControls(dir, option[3]\/*controlsfadespeed*\/);\n\n var fromSlides = $();\n var toSlides = $();\n for (var a = 0; a < numberOfVisibleSlides; a++) {\n fromSlides = fromSlides.add(slides[getRealPos(currentSlide + a)]);\n toSlides = toSlides.add(slides[getRealPos(dir + a)]);\n }\n\n \/\/ Finding a \"shortcut\", used for calculating the offsets.\n var diff = dir - currentSlide;\n var targetSlide;\n if (option[15]\/*continuous*\/ && !prevNext) {\n var diffAbs = mathAbs(diff);\n targetSlide = dir;\n\n var newDiff = -currentSlide + dir + totalSlides;\n if (mathAbs(newDiff) < diffAbs) {\n targetSlide = dir + totalSlides;\n diff = newDiff;\n diffAbs = mathAbs(diff);\n }\n\n newDiff = -currentSlide + dir - totalSlides;\n if (mathAbs(newDiff) < diffAbs) {\n targetSlide = dir - totalSlides;\n diff = newDiff;\n }\n } else {\n targetSlide = dir;\n }\n\n if (option[15]\/*continuous*\/ && !skipPreCenterTargetSlide) {\n centerTargetSlideBefore(targetSlide);\n }\n\n var leftTarget = getSlidePosition(targetSlide, FALSE);\n var topTarget = getSlidePosition(targetSlide, TRUE);\n\n var targetLi = slides[getRealPos(dir)];\n var callOptions = $.extend(TRUE, {}, options); \/\/ Making a copy, to enforce read-only.\n var overwritingSpeed = option[1]\/*speed*\/;\n var attributeSpeed = targetLi.attr(\"data-speed\");\n if (attributeSpeed != undefined) {\n overwritingSpeed = parseInt10(attributeSpeed);\n }\n if (speed != undefined) {\n overwritingSpeed = parseInt10(speed);\n }\n callOptions.speed = overwritingSpeed;\n\n var effect = option[0]\/*effect*\/;\n\n var specificEffectAttrName = \"data-effect\";\n var slideSpecificEffect = targetLi.attr(specificEffectAttrName);\n if (slideSpecificEffect) {\n effect = getEffectMethod(slideSpecificEffect);\n }\n\n var slideOutSlide = slides[currentSlide];\n if (slideOutSlide) {\n var slideOutSpecificEffect = slides[currentSlide].attr(specificEffectAttrName + \"out\")\n if (slideOutSpecificEffect) {\n effect = getEffectMethod(slideOutSpecificEffect);\n }\n }\n\n currentlyAnimating = TRUE;\n currentAnimation = effect;\n\n var callbackHasYetToRun = TRUE;\n currentAnimationCallback = function () {\n currentlyAnimating = FALSE;\n callbackHasYetToRun = FALSE;\n\n goToSlide(dir, clicked);\n fixClearType(toSlides);\n\n if (option[15]\/*continuous*\/) {\n centerTargetSlideAfter(targetSlide);\n }\n\n \/\/ Afteranimation.\n aniCall(dir, TRUE);\n if (option[10]\/*responsive*\/) {\n adjustResponsiveLayout();\n }\n\n performCallbacks(runAfterAnimationCallbacks);\n };\n currentAnimationObject = {\n fromSlides: fromSlides,\n toSlides: toSlides,\n slider: obj,\n container: slidesContainer,\n options: callOptions,\n to: dir + 1,\n from: currentSlide + 1,\n diff: diff,\n target: {\n left: leftTarget,\n top: topTarget\n },\n stopCallbacks: [],\n callback: function () {\n if (callbackHasYetToRun) {\n callbackHasYetToRun = FALSE;\n stopAnimation();\n }\n },\n goToNext: function () {\n if (callbackHasYetToRun) {\n \/\/ Only moving after there is content ready to replace the previous.\n runOnImagesLoaded($(\".\" + ANIMATION_CLONE_MARKER_CLASS, obj), TRUE, makeCallback(adjustPositionTo, [dir]));\n }\n }\n };\n\n autoadjust(dir, overwritingSpeed);\n callAsync(function () {\n \/\/ Beforeanimation.\n aniCall(dir, FALSE, TRUE, overwritingSpeed);\n\n effect.call(baseSlider, currentAnimationObject);\n });\n }\n\n function stopAnimation() {\n if (currentlyAnimating) {\n \/\/ Noinspection JSUnusedAssignment.\n animationWasInterrupted = TRUE;\n \/\/ Doing it in this order isn't a problem in relation to the user-callbacks, since they are run in a setTimeout(callback, 0) anyway.\n if (currentAnimationCallback) {\n currentAnimationCallback();\n }\n\n performCallbacks(currentAnimationObject.stopCallbacks);\n\n var stopFunction = currentAnimation.stop;\n if (stopFunction) {\n stopFunction();\n } else {\n defaultStopFunction();\n }\n autoadjust(currentSlide, 0);\n adjustPositionTo(currentSlide);\n animationWasInterrupted = FALSE;\n }\n }\n\n function bindAndRegisterOff(element, events, handler, selector) {\n element.on(events, selector, handler);\n unBindCallbacks.push(function () {\n element.off(events, selector, handler);\n });\n }\n\n function cantDoAdjustments() {\n return !obj.is(\":visible\") || init || destroyed;\n }\n\n function defaultStopFunction() {\n $(\".\" + ANIMATION_CLONE_MARKER_CLASS, obj).remove();\n slidesContainer.stop();\n }\n\n function goToSlide(slide, clicked) {\n clickable = !clicked && !option[12]\/*auto*\/;\n previousSlide = currentSlide;\n currentSlide = slide;\n\n adjust(clicked);\n\n if (option[4]\/*controlsfade*\/ && init) {\n fadeControls(currentSlide, 0);\n }\n \/\/ This is handles in AjaxAdjust, if something is loading.\n if (init && !option[30]\/*ajax*\/[currentSlide] && !startedAjaxLoads[currentSlide]) {\n init = FALSE;\n callAsync(performInitCallback);\n }\n }\n\n function getSlides(from, count) {\n var visibleSlides = $();\n for (var i = 0; i < count; i++) {\n visibleSlides = visibleSlides.add(slides[getRealPos(from + i)]);\n }\n return visibleSlides;\n }\n\n function getRealPos(a) {\n return mod(a, totalSlides);\n }\n\n function fixClearType(element) {\n if (screen.fontSmoothingEnabled && element.style) {\n try {\n element.style.removeAttribute(\"filter\"); \/\/ Fix cleartype\n } catch (ignored) { }\n }\n }\n\n \/*\n * Public methods.\n *\/\n\n \/\/ First i just define those i use more than one. Then i just add the others as anonymous functions.\n function publicDestroy() {\n stopAuto();\n stopAnimation();\n autoadjust(currentSlide, 0);\n destroyed = TRUE;\n\n slideNumberBeforeDestroy = currentSlide;\n\n performCallbacks(unBindCallbacks);\n\n ensureSliderContainerCSSDurationReset();\n if (controls) {\n controls.remove();\n }\n\n reorderSlides(0);\n adjustPositionTo(currentSlide);\n\n option[43]\/*destroyCallback*\/.call(baseSlider);\n }\n\n baseSlider.destroy = publicDestroy;\n\n function publicInit() {\n if (destroyed) {\n initSudoSlider();\n }\n }\n\n function runOnDestroyedSlider(func) {\n return function foo() {\n var reinit = !destroyed;\n if (!init && !fullyInitialized) {\n var args = arguments;\n callAsync(function () {\n foo.apply(undefined, args);\n }); \/\/ Fixing a very special, special case.\n return;\n }\n publicDestroy();\n\n func.apply(this, arguments);\n\n if (reinit) {\n publicInit();\n }\n }\n }\n\n baseSlider.init = publicInit;\n\n baseSlider.getOption = function (a) {\n return options[a.toLowerCase()];\n };\n\n baseSlider.setOption = runOnDestroyedSlider(function (key, val) {\n options[key.toLowerCase()] = val;\n });\n\n baseSlider.setOptions = runOnDestroyedSlider(function (newOptions) {\n for (var key in newOptions) {\n options[key.toLowerCase()] = newOptions[key];\n }\n });\n\n baseSlider.runWhenNotAnimating = runWhenNotAnimating;\n\n baseSlider.insertSlide = runOnDestroyedSlider(function (html, pos, numtext, goToSlide) {\n \/\/ pos = 0 means before everything else.\n \/\/ pos = 1 means after the first slide.\n \/\/ if pos is negative, then we count from the right instead.\n if (pos < 0) {\n pos = totalSlides - mod(-pos - 1, totalSlides + 1);\n } else {\n pos = mod(pos, totalSlides + 1);\n }\n\n html = $(html || DIV_TAG);\n if (isSlideContainerUl) {\n html = $(\"
- \").prepend(html);\n } else {\n if (html.length != 1) {\n html = $(DIV_TAG).prepend(html);\n } else {\n \/\/ Inserting as is.\n }\n }\n\n if (!pos || pos == 0) {\n slidesContainer.prepend(html);\n } else {\n slides[pos - 1].after(html);\n }\n\n \/\/ Finally, we make it work again.\n if (goToSlide) {\n slideNumberBeforeDestroy = goToSlide - 1;\n } else if (pos <= slideNumberBeforeDestroy || (!pos || pos == 0)) {\n slideNumberBeforeDestroy++;\n }\n\n if (option[18]\/*numerictext*\/.length < pos) {\n option[18]\/*numerictext*\/.length = pos;\n }\n\n option[18]\/*numerictext*\/.splice(pos, 0, numtext || parseInt10(pos) + 1);\n });\n\n baseSlider.removeSlide = runOnDestroyedSlider(function (pos) {\n pos = mathMax(0, parseInt10(pos) - 1); \/\/ 1 == the first.\n\n slides[mathMin(pos, totalSlides - 1)].remove();\n option[18]\/*numerictext*\/.splice(pos, 1);\n if (pos < slideNumberBeforeDestroy) {\n slideNumberBeforeDestroy--;\n }\n });\n\n baseSlider.goToSlide = function (a, speed) {\n var parsedDirection = (a == parseInt10(a)) ? a - 1 : a;\n callAsync(makeCallback(enqueueAnimation, [parsedDirection, TRUE, speed]));\n };\n\n baseSlider.block = function () {\n clickable = FALSE;\n };\n\n baseSlider.unblock = function () {\n clickable = TRUE;\n };\n\n baseSlider.startAuto = function () {\n option[12]\/*auto*\/ = TRUE;\n startAuto();\n };\n\n baseSlider.stopAuto = function () {\n option[12]\/*auto*\/ = FALSE;\n stopAuto();\n };\n\n baseSlider.adjust = function adjustMethod(repeat) {\n var autoAdjustSpeed = mathMax(adjustTargetTime - getTimeInMillis(), 0);\n autoadjust(currentSlide, autoAdjustSpeed);\n if (!currentlyAnimating) {\n adjustPositionTo(currentSlide);\n }\n if (!repeat) {\n callAsync(makeCallback(adjustMethod, [true]));\n }\n };\n\n baseSlider.getValue = function (a) {\n return {\n currentslide: currentSlide + 1,\n totalslides: totalSlides,\n clickable: clickable,\n destroyed: destroyed,\n autoanimation: autoOn\n }[a.toLowerCase()];\n };\n\n baseSlider.getSlide = function (number) {\n return slides[getRealPos(parseInt10(number) - 1)];\n };\n\n baseSlider.stopAnimation = stopAnimation;\n\n \/\/ Done, now initialize.\n initSudoSlider();\n });\n };\n\n \/*\n * End generic slider.\n * Factory method for default options (no accidental writes!).\n *\/\n function getDefaultOptions() {\n return {\n effect: \"slide\", \/*option[0]\/*effect*\/\n speed: 1500, \/* option[1]\/*speed*\/\n customLink: FALSE, \/* option[2]\/*customlink*\/\n controlsFadeSpeed: 400, \/* option[3]\/*controlsfadespeed*\/\n controlsFade: TRUE, \/* option[4]\/*controlsfade*\/\n insertAfter: TRUE, \/* option[5]\/*insertafter*\/\n vertical: FALSE, \/* option[6]\/*vertical*\/\n slideCount: 1, \/* option[7]\/*slidecount*\/\n moveCount: 1, \/* option[8]\/*movecount*\/\n startSlide: 1, \/* option[9]\/*startslide*\/\n responsive: TRUE, \/* option[10]\/*responsive*\/\n ease: SWING, \/* option[11]\/*ease*\/\n auto: FALSE, \/* option[12]\/*auto*\/\n pause: 2000, \/* option[13]\/*pause*\/\n resumePause: FALSE, \/* option[14]\/*resumepause*\/\n continuous: FALSE, \/* option[15]\/*continuous*\/\n prevNext: TRUE, \/* option[16]\/*prevnext*\/\n numeric: FALSE, \/* option[17]\/*numeric*\/\n numericText: [], \/* option[18]\/*numerictext*\/\n slices: 15, \/* option[19]\/*slices*\/\n boxCols: 8, \/* option[20]\/*boxCols*\/\n boxRows: 4, \/* option[21]\/*boxRows*\/\n initCallback: EMPTY_FUNCTION, \/* option[22]\/*initCallback*\/\n ajaxLoad: EMPTY_FUNCTION, \/* option[23]\/*ajaxload*\/\n beforeAnimation: EMPTY_FUNCTION, \/* option[24]\/*beforeanimation*\/\n afterAnimation: EMPTY_FUNCTION, \/* option[25]\/*afteranimation*\/\n history: FALSE, \/* option[26]\/*history*\/\n autoHeight: TRUE, \/* option[27]\/*autoheight*\/\n autoWidth: TRUE, \/* option[28]\/*autowidth*\/\n updateBefore: FALSE, \/* option[29]\/*updateBefore*\/\n ajax: FALSE, \/* option[30]\/*ajax*\/\n preloadAjax: 100, \/* option[31]\/*preloadajax*\/\n loadingText: \"\", \/* option[32]\/*loadingtext*\/\n prevHtml: ' previous <\/a>', \/* option[33]\/*prevhtml*\/\n nextHtml: ' next <\/a>', \/* option[34]\/*nexthtml*\/\n controlsAttr: 'class=\"controls\"', \/* option[35]\/*controlsattr*\/\n numericAttr: 'class=\"numericControls\"', \/* option[36]\/*numericattr*\/\n interruptible: FALSE, \/* option[37]\/*interruptible*\/\n useCSS: TRUE, \/* option[38]\/*useCSS*\/\n loadStart: EMPTY_FUNCTION, \/* option[39]\/*loadStart*\/\n loadFinish: EMPTY_FUNCTION, \/* option[40]\/*loadFinish*\/\n touch: FALSE, \/* option[41]\/*touch*\/\n touchHandle: FALSE, \/* option[42]\/*touchHandle*\/\n destroyCallback: EMPTY_FUNCTION, \/* option[43]\/*destroyCallback*\/\n mouseTouch: TRUE, \/* option[44]\/*mouseTouch*\/\n allowScroll: TRUE, \/* option[45]\/*allowScroll*\/\n CSSease: SWING, \/* option[46]\/*CSSease*\/\n ajaxHasHTML: FALSE \/* option[47]\/*AjaxHasHTML*\/\n\n };\n }\n $.fn.sudoSlider.getDefaultOptions = getDefaultOptions;\n\n \/* Start animations.\n * A lot of the code here is an if-else-elseif nightmare. This is because it is smaller in JavaScript, and this thing needs to be small (when minimized).\n *\/\n var GROW_IN = \"GrowIn\";\n var GROW_OUT = \"GrowOut\";\n var ROUNDED = \"Rounded\";\n var FLY_IN = \"FlyIn\";\n var FLY_OUT = \"FlyOut\";\n\n \/\/ Start by defining everything, the implementations are below.\n var normalEffectsPrefixObject = {\n \/*box: {\n Random: [\n \"\",\n GROW_IN,\n GROW_IN + ROUNDED,\n GROW_OUT,\n GROW_OUT + ROUNDED,\n FLY_IN,\n FLY_OUT,\n boxRandomTemplate\n ],\n Rain: [\n \"\",\n GROW_IN,\n GROW_IN + ROUNDED,\n GROW_OUT,\n GROW_OUT + ROUNDED,\n FLY_IN,\n FLY_OUT,\n [\n \"UpLeft\",\n \"DownLeft\",\n \"DownRight\",\n \"UpRight\",\n boxRainTemplate\n ]\n ],\n Spiral: [\n \"InWards\",\n \"OutWards\",\n {\n \"\": boxSpiralTemplate,\n Grow: [\n \"In\",\n \"Out\",\n [\n \"\",\n \"Rounded\",\n boxSpiralGrowTemplate\n ]\n ]\n }\n ]\n },*\/\n fade: {\n \"\": fade,\n OutIn: fadeOutIn\n },\n foldRandom: [\n \"Horizontal\",\n \"Vertical\",\n foldRandom\n ],\n slide: slide,\n stack: [\n \"Up\",\n \"Right\",\n \"Down\",\n \"Left\",\n [\n \"\",\n \"Reverse\",\n stackTemplate\n ]\n ]\n \/\/ TODO: Name!\n \/*unnamed: [\n \"\",\n \"Reveal\",\n [\n \"\",\n \"Vertical\",\n [\n \"\",\n \"Reverse\",\n \"Random\",\n testAnimation\n ]\n ]\n ]*\/\n };\n\n \/\/ Generic effects needs to have a \"dir\" attribute as their last argument.\n var genericEffectsPrefixObject = {\n blinds: [\n \"1\",\n \"2\",\n blinds\n ],\n fold: fold,\n push: [\n \"Out\",\n \"In\",\n pushTemplate\n ],\n reveal: revealTemplate,\n slice: {\n \"\": [\n \"\",\n \"Reveal\",\n [\n \"\",\n \"Reverse\",\n \"Random\",\n slice\n ]\n ],\n Fade: slicesFade\n },\n zip: zip,\n unzip: unzip\n };\n\n function parsePrefixedEffects(resultObject, effectsObject, prefix, generic, argumentsStack) {\n if (isFunction(effectsObject)) {\n if (generic) {\n \/\/ Parsing the value 0, as a hack to make generic effects work, see the below else case.\n parsePrefixedEffects(resultObject, [\"\", \"Up\", \"Right\", \"Down\", \"Left\", effectsObject], prefix, 0, argumentsStack);\n } else {\n resultObject[prefix] = function (obj) {\n var argumentArray = [obj].concat(argumentsStack);\n\n \/\/ Ugly hack, to make \"generic\" functions to work.\n var genericArgumentIndex = argumentArray.length - 1;\n if (generic === 0 && argumentArray[genericArgumentIndex] == 0) {\n argumentArray[genericArgumentIndex] = getDirFromAnimationObject(obj);\n }\n\n effectsObject.apply(this, argumentArray);\n }\n }\n } else if (isArray(effectsObject)) {\n var effectIndex = effectsObject.length - 1;\n var effect = effectsObject[effectIndex];\n for (var i = 0; i < effectIndex; i++) {\n var newArgumentStack = cloneArray(argumentsStack);\n newArgumentStack.push(i);\n var name = effectsObject[i];\n parsePrefixedEffects(resultObject, effect, prefix + name, generic, newArgumentStack);\n }\n } else {\n $.each(effectsObject, function (name, effect) {\n parsePrefixedEffects(resultObject, effect, prefix + name, generic, argumentsStack);\n });\n }\n }\n\n var allEffects = {};\n parsePrefixedEffects(allEffects, genericEffectsPrefixObject, \"\", TRUE, []);\n parsePrefixedEffects(allEffects, normalEffectsPrefixObject, \"\", FALSE, []);\n\n allEffects.random = makeRandomEffect(allEffects);\n\n \/\/ Saving it.\n $.fn.sudoSlider.effects = allEffects;\n\n \/\/ The implementations\n \/\/ dir: 0: UpRight, 1: DownRight: 2: DownLeft, 3: UpLeft\n \/\/ effect: 0: none, 1: growIn, 2: growRoundedIn, 3: growOut, 4: growRoundedOut, 5: flyIn, 6: flyOut\n function boxRainTemplate(obj, effect, dir) {\n var reverseRows = dir == 1 || dir == 3;\n var reverse = dir == 0 || dir == 3;\n var grow = effect >= 1 && effect <= 4;\n var flyIn = effect == 5 || effect == 6;\n var reveal = effect == 6 || effect == 3 || effect == 4;\n var roundedGrow = effect == 2 || effect == 4;\n boxTemplate(obj, reverse, reverseRows, grow, FALSE, 1, flyIn, reveal, roundedGrow);\n }\n\n function boxSpiralTemplate(obj, direction) {\n boxTemplate(obj, direction, FALSE, FALSE, FALSE, 2, FALSE, FALSE, FALSE);\n }\n\n function boxSpiralGrowTemplate(obj, direction, reveal, rounded) {\n boxTemplate(obj, direction, FALSE, TRUE, FALSE, 2, FALSE, reveal, rounded);\n }\n\n \/\/ effect: 0: no grow, 1: growIn: 2: growInRounded, 3: growOut, 4: growOutRounded, 5: flyIn, 6: flyOut.\n function boxRandomTemplate(obj, effect) {\n var reveal = effect == 3 || effect == 4 || effect == 6;\n var roundedGrow = effect == 2 || effect == 4;\n var flyIn = effect == 5 || effect == 6;\n boxTemplate(obj, FALSE, FALSE, effect > 0 && effect < 5, TRUE, 0, flyIn, reveal, roundedGrow);\n }\n\n \/\/ SelectionAlgorithm: 0: Standard selection, 1: rain, 2: spiral.\n function boxTemplate(obj, reverse, reverseRows, grow, randomize, selectionAlgorithm, flyIn, reveal, roundedGrow) {\n var options = obj.options;\n var boxRows = options.boxrows;\n var boxCols = options.boxcols;\n var totalBoxes = boxRows * boxCols;\n var speed = options.speed \/ (totalBoxes == 1 ? 1 : 2.5); \/\/ To make the actual time spent equal to options.speed.\n var boxes = createLazyBoxes(obj, boxCols, boxRows, !reveal);\n var timeBuff = 0;\n var rowIndex = 0;\n var colIndex = 0;\n var box2DArr = [];\n box2DArr[rowIndex] = [];\n if (reverse) {\n reverseArray(boxes);\n }\n if (randomize) {\n shuffle(boxes);\n }\n\n for (var i = 0; i < boxes.length; i++) {\n var element = boxes[i];\n box2DArr[rowIndex][colIndex] = element;\n colIndex++;\n if (colIndex == boxCols) {\n if (reverseRows) {\n reverseArray(box2DArr[rowIndex]);\n }\n rowIndex++;\n colIndex = 0;\n box2DArr[rowIndex] = [];\n }\n }\n\n var boxesResult = [];\n if (selectionAlgorithm == 1) {\n \/\/ Rain.\n for (var cols = 0; cols < (boxCols * 2) + 1; cols++) {\n var prevCol = cols;\n var boxesResultLine = [];\n for (var rows = 0; rows < boxRows; rows++) {\n if (prevCol >= 0 && prevCol < boxCols) {\n var rawBox = box2DArr[rows][prevCol];\n if (!rawBox) {\n return;\n }\n boxesResultLine.push(rawBox);\n }\n prevCol--;\n }\n if (boxesResultLine.length != 0) {\n boxesResult.push(boxesResultLine);\n }\n }\n } else if (selectionAlgorithm == 2) {\n \/\/ Spiral\n \/\/ Algorithm borrowed from the Camera plugin by Pixedelic.com.\n var rows2 = boxRows \/ 2, x, y, z, n = reverse ? totalBoxes : -1;\n var negative = reverse ? -1 : 1;\n for (z = 0; z < rows2; z++) {\n y = z;\n for (x = z; x < boxCols - z - 1; x++) {\n boxesResult[n += negative] = boxes[y * boxCols + x];\n }\n x = boxCols - z - 1;\n for (y = z; y < boxRows - z - 1; y++) {\n boxesResult[n += negative] = boxes[y * boxCols + x];\n }\n y = boxRows - z - 1;\n for (x = boxCols - z - 1; x > z; x--) {\n boxesResult[n += negative] = boxes[y * boxCols + x];\n }\n x = z;\n for (y = boxRows - z - 1; y > z; y--) {\n boxesResult[n += negative] = boxes[y * boxCols + x];\n }\n }\n } else {\n for (var row = 0; row < boxRows; row++) {\n for (var col = 0; col < boxCols; col++) {\n boxesResult.push([box2DArr[row][col]]);\n }\n }\n }\n\n if (reveal) {\n obj.goToNext();\n }\n\n var count = 0;\n for (var i = 0; i < boxesResult.length; i++) {\n var boxLine = boxesResult[i];\n\n if (!isArray(boxLine)) {\n boxLine = [boxLine];\n }\n\n for (var j = 0; j < boxLine.length; j++) {\n var lazyBox = boxLine[j];\n (function (lazyBox, delay) {\n function boxAnimationFunction(delay) {\n var box = lazyBox();\n var boxChildren = box.children();\n var orgWidth = box.width();\n var orgHeight = box.height();\n var goToWidth = orgWidth;\n var goToHeight = orgHeight;\n var orgLeft = parseNumber(box.css(\"left\"));\n var orgTop = parseNumber(box.css(\"top\"));\n var goToLeft = orgLeft;\n var goToTop = orgTop;\n\n var childOrgLeft = parseNumber(boxChildren.css(\"left\"));\n var childOrgTop = parseNumber(boxChildren.css(\"top\"));\n var childGoToLeft = childOrgLeft;\n var childGoToTop = childOrgTop;\n\n if (flyIn) {\n var adjustTop;\n var adjustLeft;\n\n if (randomize) {\n adjustLeft = pickRandomValue([-goToWidth, goToWidth]);\n adjustTop = pickRandomValue([-goToHeight, goToHeight]);\n } else {\n adjustLeft = reverse != reverseRows ? -goToWidth : goToWidth;\n adjustTop = reverse ? -goToHeight : goToHeight;\n }\n\n var flyDistanceFactor = 1.5;\n\n if (reveal) {\n goToLeft -= adjustLeft * flyDistanceFactor;\n goToTop -= adjustTop * flyDistanceFactor;\n } else {\n box.css({\n left: orgLeft + adjustLeft * flyDistanceFactor,\n top: orgTop + adjustTop * flyDistanceFactor\n });\n }\n }\n\n if (grow) {\n if (reveal) {\n childGoToLeft -= goToWidth \/ 2;\n goToLeft += goToWidth \/ 2;\n childGoToTop -= goToHeight \/ 2;\n goToTop += goToHeight \/ 2;\n\n goToHeight = goToWidth = 0;\n } else {\n box.css({left: orgLeft + (goToWidth \/ 2), top: orgTop + (goToHeight \/ 2)});\n boxChildren.css({\n left: childOrgLeft - goToWidth \/ 2,\n top: childOrgTop - goToHeight \/ 2\n });\n\n box.width(0).height(0);\n if (roundedGrow) {\n box.css({borderRadius: mathMax(orgHeight, orgWidth)});\n }\n }\n }\n\n if (reveal) {\n box.css({opacity: 1});\n }\n count++;\n schedule(function () {\n doc.ready(function () {\n animate(boxChildren, {left: childGoToLeft, top: childGoToTop}, speed, FALSE, FALSE, obj);\n animate(box, {\n opacity: reveal ? 0 : 1,\n width: goToWidth,\n height: goToHeight,\n left: goToLeft,\n top: goToTop,\n borderRadius: grow && reveal && roundedGrow ? mathMax(orgHeight, orgWidth) : 0\n }, speed, FALSE, function () {\n count--;\n if (count == 0) {\n obj.callback();\n }\n }, obj);\n })\n }, delay);\n }\n\n var minWaitTime = 150;\n if (reveal || delay < minWaitTime) {\n boxAnimationFunction(delay);\n } else {\n schedule(makeCallback(boxAnimationFunction, [minWaitTime]), delay - minWaitTime);\n }\n })(lazyBox, timeBuff);\n }\n timeBuff += (speed \/ boxesResult.length) * 1.5;\n }\n }\n\n function slicesFade(obj, dir) {\n var vertical = dir == 2 || dir == 4;\n var negative = dir == 1 || dir == 4;\n foldTemplate(obj, vertical, negative, FALSE, TRUE);\n }\n\n function fold(obj, dir) {\n var vertical = dir == 2 || dir == 4;\n var negative = dir == 1 || dir == 4;\n foldTemplate(obj, vertical, negative);\n }\n\n function foldRandom(obj, vertical) {\n foldTemplate(obj, vertical, FALSE, TRUE);\n }\n\n function blinds(obj, blindsEffect, dir) {\n blindsEffect++;\n var vertical = dir == 2 || dir == 4;\n var negative = dir == 1 || dir == 4;\n foldTemplate(obj, vertical, negative, FALSE, FALSE, blindsEffect);\n }\n\n function slice(obj, reveal, reverse, dir) {\n var random = reverse == 2;\n var vertical = dir == 1 || dir == 3;\n var negative = dir == 1 || dir == 4;\n foldTemplate(obj, vertical, reverse, random, FALSE, 0, negative ? 1 : 2, reveal);\n }\n\n function testAnimation(obj, reveal, vertical, reverseArg) {\n var reverse = reverseArg == 1;\n var random = reverseArg == 2;\n\n foldTemplate(obj, vertical, reverse, random, FALSE, 0, 1, reveal);\n foldTemplate(obj, vertical, reverse, random, FALSE, 0, 2, reveal);\n }\n\n function zip(obj, dir) {\n var vertical = dir == 2 || dir == 4;\n var negative = dir == 1 || dir == 4;\n foldTemplate(obj, vertical, negative, FALSE, FALSE, 0, 3);\n }\n\n function unzip(obj, dir) {\n var vertical = dir == 2 || dir == 4;\n var negative = dir == 1 || dir == 4;\n foldTemplate(obj, vertical, negative, FALSE, FALSE, 0, 3, TRUE);\n }\n\n function foldTemplate(obj, vertical, reverse, randomize, onlyFade, curtainEffect, upDownEffect, reveal) {\n var options = obj.options;\n var slides = options.slices;\n var speed = options.speed \/ 2; \/\/ To make the actual time spent be equal to options.speed.\n var objSlider = obj.slider;\n var lazySlides = createLazyBoxes(obj, vertical ? slides : 1, vertical ? 1 : slides, !reveal);\n var slicesElement = $();\n for (var i = 0; i < lazySlides.length; i++) {\n slicesElement = slicesElement.add(lazySlides[i]());\n }\n var count = 0;\n var upDownAlternator = FALSE;\n if (reverse) {\n reverseArray(slicesElement);\n } else {\n $(reverseArray(slicesElement.get())).appendTo(objSlider);\n }\n if (randomize) {\n shuffle(slicesElement);\n }\n slicesElement.each(function (i) {\n var timeout = ((speed \/ slides) * i);\n var slice = $(this);\n var orgWidth = slice.width();\n var orgHeight = slice.height();\n var goToLeft = slice.css(\"left\");\n var goToTop = slice.css(\"top\");\n var startPosition = vertical ? goToLeft : goToTop;\n\n var innerBox = slice.children();\n var startAdjustment = innerBox[vertical ? \"width\" : \"height\"]();\n if (curtainEffect == 1) {\n startPosition = 0\n } else if (curtainEffect == 2) {\n startPosition = startAdjustment \/ 2;\n }\n if (reverse) {\n startPosition = startAdjustment - startPosition;\n }\n if (vertical) {\n slice.css({\n width: (onlyFade || upDownEffect ? orgWidth : 0),\n left: startPosition\n });\n } else {\n slice.css({\n height: (onlyFade || upDownEffect ? orgHeight : 0),\n top: startPosition\n });\n }\n\n if (reveal) {\n var negative = upDownEffect == 1 ? -1 : 1;\n slice.css({\n top: goToTop,\n left: goToLeft,\n width: orgWidth,\n height: orgHeight,\n opacity: 1\n });\n if (vertical) {\n goToTop = negative * orgHeight;\n } else {\n goToLeft = negative * orgWidth;\n }\n }\n\n if (upDownEffect) {\n var bottom = TRUE;\n if (upDownEffect == 3) {\n if (upDownAlternator) {\n bottom = FALSE;\n upDownAlternator = FALSE;\n } else {\n upDownAlternator = TRUE;\n }\n } else if (upDownEffect == 2) {\n bottom = FALSE;\n }\n if (vertical) {\n if (reveal) {\n goToTop = (bottom ? -1 : 1) * orgHeight;\n } else {\n slice.css({\n bottom: bottom ? 0 : orgHeight,\n top: bottom ? orgHeight : 0,\n height: reveal ? orgHeight : 0\n });\n }\n } else {\n if (reveal) {\n goToLeft = (bottom ? -1 : 1) * orgWidth;\n } else {\n slice.css({\n right: bottom ? 0 : orgWidth,\n left: bottom ? orgWidth : 0,\n width: reveal ? orgWidth : 0\n });\n }\n }\n }\n\n count++;\n schedule(makeCallback(animate, [\n slice, {\n width: orgWidth,\n height: orgHeight,\n opacity: reveal ? 0 : 1,\n left: goToLeft,\n top: goToTop\n }, speed, FALSE, function () {\n count--;\n if (count == 0) {\n obj.callback();\n }\n }, obj])\n , timeout);\n });\n if (reveal) {\n obj.goToNext();\n }\n }\n\n function stackTemplate(obj, dir, reverse) {\n var pushIn = obj.diff > 0;\n if (reverse) {\n pushIn = !pushIn;\n }\n\n pushTemplate(obj, pushIn, ++dir);\n }\n\n \/\/ 1: up, 2: right, 3: down, 4, left:\n function pushTemplate(obj, pushIn, dir) {\n var vertical = dir == 2 || dir == 4;\n var negative = (dir == 2 || dir == 3) ? 1 : -1;\n var options = obj.options;\n var speed = options.speed;\n var callback = obj.callback;\n if (pushIn) {\n var fromSlides = obj.fromSlides;\n var toSlides = makeClone(obj, TRUE).hide();\n obj.slider.append(toSlides);\n var height = mathMax(toSlides.height(), fromSlides.height());\n var width = mathMax(toSlides.width(), fromSlides.width());\n toSlides.css(vertical ? {left: negative * width} : {top: negative * height}).show();\n animate(toSlides, {left: 0, top: 0}, speed, FALSE, callback, obj);\n } else {\n var fromSlides = makeClone(obj, FALSE);\n obj.slider.append(fromSlides);\n obj.goToNext();\n var toSlides = obj.toSlides;\n\n var measurementSlides = negative == -1 ? fromSlides : toSlides;\n var height = measurementSlides.height();\n var width = measurementSlides.width();\n\n animate(fromSlides, vertical ? {left: negative * width} : {top: negative * height}, speed, FALSE, callback, obj);\n }\n }\n\n function revealTemplate(obj, dir) {\n var vertical = dir == 1 || dir == 3;\n var options = obj.options;\n var speed = options.speed;\n var innerBox = makeClone(obj, TRUE);\n var width = innerBox.width();\n var height = innerBox.height();\n var box = createBox(innerBox, 0, 0, 0, 0)\n .css({opacity: 1})\n .appendTo(obj.slider);\n var both = box.add(innerBox);\n both.hide(); \/\/ FF css animation fix.\n if (vertical) {\n box.css({width: width});\n if (dir == 1) {\n innerBox.css({top: -height});\n box.css({bottom: 0, top: \"auto\"});\n }\n } else {\n box.css({height: height});\n if (dir == 4) {\n innerBox.css({left: -width});\n box.css({right: 0, left: \"auto\"});\n }\n }\n \/\/ \n both.show();\n if (vertical) {\n both.width(width);\n } else {\n both.height(height);\n }\n \/\/ <\/FF css animation fix>\n animate(innerBox, {left: 0, top: 0}, speed, FALSE, EMPTY_FUNCTION, obj);\n animate(box, {width: width, height: height}, speed, FALSE, obj.callback, obj);\n }\n\n function slide(obj) {\n var ul = childrenNotAnimationClones(obj.slider);\n var options = obj.options;\n var speed = options.speed;\n var target = obj.target;\n\n var left = target.left;\n var top = target.top;\n\n if (obj.options.usecss) {\n animate(ul, {transform: \"translate(\" + left + \"px, \" + top + \"px)\"}, speed, FALSE, obj.callback, obj, TRUE);\n } else {\n animate(ul, {marginTop: top, marginLeft: left}, speed, FALSE, obj.callback, obj);\n }\n }\n\n function animate(elem, properties, speed, ease, callback, obj, doNotResetCss) {\n var usecss = !obj || obj.options.usecss;\n if (CSSVendorPrefix === FALSE || !usecss) {\n if (!ease) {\n ease = obj.options.ease;\n }\n elem.animate(properties, speed, ease, callback);\n return;\n }\n if (!ease) {\n ease = obj.options.cssease;\n }\n\n var CSSObject = {};\n var transitionProperty = CSSVendorPrefix + \"transition\";\n var keys = getKeys(properties);\n \/\/ Adding vendor prefix, because sometimes it's needed.\n CSSObject[transitionProperty] = keys.join(\" \") + (CSSVendorPrefix == \"\" ? \"\" : \" \" + CSSVendorPrefix + keys.join(\" \" + CSSVendorPrefix));\n\n var transitionTiming = transitionProperty + \"-duration\";\n CSSObject[transitionTiming] = speed + \"ms\";\n\n var transitionEase = transitionProperty + \"-timing-function\";\n if (ease == SWING) {\n ease = \"ease-in-out\";\n }\n CSSObject[transitionEase] = ease;\n\n function resetCSS() {\n if (!doNotResetCss) {\n var cssObject = {};\n cssObject[transitionTiming] = \"0s\";\n cssObject[transitionEase] = \"\";\n cssObject[transitionProperty] = \"\";\n elem.css(cssObject);\n }\n }\n\n if (obj) {\n obj.stopCallbacks.push(resetCSS);\n }\n\n var eventsVendorPrefix = CSSVendorPrefix.replace(\/\\-\/g, \"\"); \/\/ replaces all \"-\" with \"\";\n var eventsSuffix = (eventsVendorPrefix ? \"T\" : \"t\") + \"ransitionend\";\n var events = eventsVendorPrefix + eventsSuffix + \" t\" + \"ransitionend\";\n\n var called = FALSE;\n var callbackFunction = function () {\n if (!called) {\n called = TRUE;\n elem.unbind(events);\n resetCSS();\n if (callback) {\n callback();\n }\n }\n };\n\n if (speed < 20) { \/\/ If instant animation.\n elem.css(properties);\n callbackFunction();\n return;\n }\n\n callAsync(function () {\n elem.css(CSSObject);\n callAsync(function () {\n elem.css(properties);\n var startTime = getTimeInMillis();\n\n elem.on(events, function eventHandler(event) {\n if (elem.is(event.target) && (getTimeInMillis() - startTime) - speed > -100) {\n elem.off(events, eventHandler);\n callbackFunction();\n }\n });\n \/\/ If the animation doesn't do anything, the bind will never be triggered, so this is a fallback.\n schedule(callbackFunction, speed + 100);\n });\n });\n return callbackFunction\n }\n\n function fadeOutIn(obj) {\n var options = obj.options;\n var fadeSpeed = options.speed;\n\n var fadeinspeed = parseInt10(fadeSpeed * (3 \/ 5));\n var fadeoutspeed = fadeSpeed - fadeinspeed;\n\n obj.stopCallbacks.push(function () {\n obj.fromSlides.stop().css({opacity: 1});\n });\n\n animate(obj.fromSlides, {opacity: 0.0001}, fadeoutspeed, FALSE, makeCallback(finishFadeAnimation, [obj, fadeSpeed]), obj);\n }\n\n function fade(obj) {\n finishFadeAnimation(obj, obj.options.speed);\n }\n\n function finishFadeAnimation(obj, speed) {\n var options = obj.options;\n options.boxcols = 1;\n options.boxrows = 1;\n options.speed = speed;\n boxTemplate(obj, FALSE);\n }\n\n \/\/ 1: up, 2: right, 3: down, 4, left:\n function getDirFromAnimationObject(obj) {\n var vertical = obj.options.vertical;\n var diff = obj.diff;\n var dir;\n if (vertical) {\n if (diff < 0) {\n dir = 1;\n } else {\n dir = 3;\n }\n } else {\n if (diff < 0) {\n dir = 2;\n } else {\n dir = 4;\n }\n }\n return dir;\n }\n\n function createLazyBoxes(obj, numberOfCols, numberOfRows, useToSlides) {\n var slider = obj.slider;\n var vertical = obj.options.vertical;\n var result = [];\n var width;\n if (!vertical) {\n width = 0;\n } else {\n if (useToSlides) {\n width = obj.toSlides.width();\n } else {\n width = obj.slider.width();\n }\n }\n\n var height;\n if (vertical) {\n height = 0;\n } else {\n if (useToSlides) {\n height = obj.toSlides.height();\n } else {\n height = obj.slider.height();\n }\n }\n\n obj.toSlides.each(function () {\n var that = $(this);\n if (vertical) {\n height += that.height();\n } else {\n width += that.width();\n }\n });\n\n var boxWidth = Math.ceil(width \/ numberOfCols);\n var boxHeight = Math.ceil(height \/ numberOfRows);\n for (var row = 0; row < numberOfRows; row++) {\n for (var col = 0; col < numberOfCols; col++) {\n doStuff(row, col);\n }\n }\n function doStuff(row, col) {\n result.push(function () {\n var innerBox = makeClone(obj, useToSlides);\n\n var box = createBox(innerBox, boxHeight * row, boxWidth * col, boxHeight, boxWidth);\n slider.append(box);\n return box;\n });\n }\n return result;\n }\n\n function createBox(innerBox, top, left, height, width) {\n innerBox.css({\n width: innerBox.width(),\n height: innerBox.height(),\n display: \"block\",\n top: -top,\n left: -left\n });\n return $(DIV_TAG).css({\n left: left,\n top: top,\n width: width,\n height: height,\n opacity: 0,\n overflow: HIDDEN_STRING,\n position: ABSOLUTE_STRING\n }).append(innerBox).addClass(ANIMATION_CLONE_MARKER_CLASS);\n }\n\n \/\/ Makes a single box that contains clones of the toSlides\/fromSlides. Positioned correctly relative to each other. And the returned box has the correct height and width.\n function makeClone(obj, useToSlides) {\n var slides = useToSlides ? obj.toSlides : obj.fromSlides;\n var firstSlidePosition = slides.eq(0).position();\n var orgLeft = firstSlidePosition.left;\n var orgTop = firstSlidePosition.top;\n var height = 0;\n var width = 0;\n var result = $(DIV_TAG).css({\n position: ABSOLUTE_STRING,\n top: 0,\n left: 0\n }).addClass(ANIMATION_CLONE_MARKER_CLASS);\n slides.each(function (index, elem) {\n var that = $(elem);\n var cloneWidth = that.outerWidth(TRUE);\n var cloneHeight = that.outerHeight(TRUE);\n var clone = that.clone();\n var position = that.position();\n var left = position.left - orgLeft;\n var top = position.top - orgTop;\n clone.css({position: ABSOLUTE_STRING, left: left, top: top, opacity: 1});\n height = mathMax(height, top + cloneHeight);\n width = mathMax(width, left + cloneWidth);\n result.append(clone);\n });\n result.width(width).height(height);\n return result;\n }\n\n \/*\n * Util scripts.\n *\/\n\n \/\/ This is not deep equals, and only using ==\n function simpleObjectEquals(a, b) {\n if (getKeys(a).length != getKeys(b).length) {\n return FALSE;\n }\n for (var key in a) {\n if (a[key] != b[key]) {\n return FALSE;\n }\n }\n return TRUE;\n }\n\n function makeCallback(func, args) {\n return function () {\n func.apply(undefined, args);\n }\n }\n\n function runOnImagesLoaded(target, waitForAllImages, callback) {\n if (!target) {\n callback();\n return;\n }\n var elems = target.add(target.find(\"img\")).filter(\"img\");\n var numberOfRemainingImages = elems.length;\n if (!numberOfRemainingImages) {\n callback();\n return;\n }\n\n elems.each(function () {\n var that = this;\n var jQueryThat = $(that);\n var events = \"load error\";\n var loadFunction = function () {\n jQueryThat.off(events, loadFunction);\n numberOfRemainingImages--;\n if (waitForAllImages) {\n if (numberOfRemainingImages == 0) {\n callback();\n }\n } else {\n callback();\n }\n };\n jQueryThat.on(events, loadFunction);\n \/*\n * Start ugly working IE fix.\n *\/\n if (that.readyState == \"complete\") {\n jQueryThat.trigger(\"load\");\n } else if (that.readyState) {\n \/\/ Sometimes IE doesn't fire the readystatechange, even though the readystate has been changed to complete. AARRGHH!! I HATE IE, I HATE IT, I HATE IE!\n that.src = that.src; \/\/ Do not ask me why this works, ask the IE team!\n }\n \/*\n * End ugly working IE fix.\n *\/\n else if (that.complete) {\n jQueryThat.trigger(\"load\");\n }\n else if (that.complete === undefined) {\n var src = that.src;\n \/\/ Webkit hack from http:\/\/groups.google.com\/group\/jquery-dev\/browse_thread\/thread\/eee6ab7b2da50e1f.\n \/\/ Data uri bypasses webkit log warning (thx doug jones).\n that.src = \"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/ywAAAAAAQABAAACAUwAOw==\";\n that.src = src;\n }\n });\n }\n\n \/\/ The minVersion is specified in an array, like [1, 8, 0] for 1.8.\n \/\/ Partially copy-pasted from: https:\/\/gist.github.com\/dshaw\/652870.\n function minJQueryVersion(minVersion) {\n var version = $.fn.jquery.split(\".\");\n var length = version.length\n for (var a = 0; a < length; a++) {\n if (minVersion[a] && +version[a] < +minVersion[a]) {\n return FALSE;\n }\n }\n return TRUE;\n }\n\n function getVendorPrefixedProperty(property, searchElement) {\n for (var name in searchElement) {\n if (endsWith(name.toLowerCase(), property.toLowerCase())) {\n return name;\n }\n }\n return FALSE;\n }\n\n function getCSSVendorPrefix() {\n var property = \"transition\";\n var styleName = getVendorPrefixedProperty(property, $(DIV_TAG)[0].style);\n if (styleName === FALSE) {\n return FALSE;\n }\n var prefix = styleName.slice(0, styleName.length - property.length);\n if (prefix.length != 0) {\n return \"-\" + prefix + \"-\";\n }\n return \"\";\n }\n\n function stringTrim(str) {\n return str.replace(\/^\\s+|\\s+$\/g, '');\n }\n\n function endsWith(string, suffix) {\n return string.indexOf(suffix, string.length - suffix.length) !== -1;\n }\n\n function getKeys(obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }\n return keys;\n }\n\n \/\/ Puts the specified function in a setTimeout([function], 0);\n function callAsync(func) {\n schedule(func, 0);\n }\n\n function schedule(func, time) {\n return setTimeout(func, time);\n }\n\n function matches(string, patternWithWildCards) {\n return !!string.match(new RegExp(\"^\" + patternWithWildCards.split(\"*\").join(\".*\") + \"$\", \"g\"));\n }\n\n function startsWith(string, prefix) {\n return string.indexOf(prefix) == 0;\n }\n\n function cloneArray(arrayToClone) {\n return arrayToClone.slice();\n }\n\n \/\/ This mutates the given array, so that it is reversed.\n \/\/ It also returns it.\n function reverseArray(array) {\n return [].reverse.call(array);\n }\n\n function childrenNotAnimationClones(obj) {\n return obj.children().not(\".\" + ANIMATION_CLONE_MARKER_CLASS);\n }\n\n function objectToLowercase(obj) {\n var ret = {};\n for (var key in obj)\n ret[key.toLowerCase()] = obj[key];\n return ret;\n }\n\n \/\/ Mutates and returns the array.\n function shuffle(array) {\n for (var j, x, i = array.length; i; j = (Math.random() * i) | 0, x = array[--i], array[i] = array[j], array[j] = x) {\n }\n return array;\n }\n\n function isFunction(func) {\n return $.isFunction(func);\n }\n\n function isArray(object) {\n return $.isArray(object);\n }\n\n function parseInt10(num) {\n return parseInt(num, 10);\n }\n\n function parseNumber(num) {\n return parseFloat(num);\n }\n\n function getTimeInMillis() {\n return +new Date();\n }\n\n \/\/ Actual modulo, not remainder. From here: http:\/\/stackoverflow.com\/questions\/4467539\/javascript-modulo-not-behaving\n \/\/ Added a or zero, to ensure it returns a number.\n function mod(a, n) {\n return (((a % n) + n) % n) || 0;\n }\n\n function mathAbs(number) {\n return number < 0 ? -number : number;\n }\n\n function mathMax(a, b) {\n return a > b ? a : b;\n }\n\n function mathMin(a, b) {\n return a < b ? a : b;\n }\n\n function getEffectMethod(inputEffect) {\n if (isArray(inputEffect)) {\n return makeRandomEffect(inputEffect);\n } else if (isFunction(inputEffect)) {\n return inputEffect\n } else \/* if (typeof inputEffect === \"string\") *\/{\n inputEffect = stringTrim(inputEffect);\n if (inputEffect.indexOf(\",\") != -1) {\n var array = inputEffect.split(\",\");\n return makeRandomEffect(array);\n } else {\n var effects = objectToLowercase(allEffects);\n var effectName = stringTrim(inputEffect.toLowerCase());\n var result = effects[effectName];\n if (result) {\n return result;\n } else {\n var array = [];\n for (var name in effects) {\n if (matches(name, effectName)) {\n array.push(effects[name]);\n }\n }\n if (!array.length) {\n return slide;\n }\n return makeRandomEffect(array);\n }\n }\n }\n }\n\n function makeRandomEffect(array) {\n return function (obj) {\n var effect = pickRandomValue(array);\n return getEffectMethod(effect)(obj);\n }\n }\n\n function pickRandomValue(obj) {\n return obj[shuffle(getKeys(obj))[0]];\n }\n\n var requestAnimationFrame = function(callback, frameCount){\n var equestAnimationFrame = \"equestAnimationFrame\";\n var requestWindow = win[\"r\" + equestAnimationFrame] ||\n win[\"webkitR\" + equestAnimationFrame] ||\n win[\"mozR\" + equestAnimationFrame] ||\n win[\"oR\" + equestAnimationFrame] ||\n win[\"msR\" + equestAnimationFrame] ||\n function (callback) {\n schedule(callback, 1000 \/ 60);\n };\n if (frameCount) {\n requestWindow(makeCallback(recursive, [callback, frameCount - 1]));\n } else {\n requestWindow(callback);\n }\n };\n\n \/\/ From this guy: https:\/\/github.com\/rdallasgray\/bez.\n \/\/ Inlined into my own script to make it shorter.\n function makeBezier(coOrdArray) {\n var encodedFuncName = \"bez_\" + coOrdArray.join(\"_\").replace(\/\\.\/g, \"p\");\n var jqueryEasing = $.easing;\n if (!isFunction(jqueryEasing[encodedFuncName])) {\n var polyBez = function (p1, p2) {\n var A = [0, 0];\n var B = [0, 0];\n var C = [0, 0];\n\n function bezCoOrd(t, ax) {\n C[ax] = 3 * p1[ax], B[ax] = 3 * (p2[ax] - p1[ax]) - C[ax], A[ax] = 1 - C[ax] - B[ax];\n return t * (C[ax] + t * (B[ax] + t * A[ax]));\n }\n\n function xDeriv(t) {\n return C[0] + t * (2 * B[0] + 3 * A[0] * t);\n }\n\n function xForT(t) {\n var x = t, i = 0, z;\n while (++i < 14) {\n z = bezCoOrd(x, 0) - t;\n if (mathAbs(z) < 1e-3) break;\n x -= z \/ xDeriv(x);\n }\n return x;\n }\n\n return function (t) {\n return bezCoOrd(xForT(t), 1);\n }\n };\n jqueryEasing[encodedFuncName] = function (x, t, b, c, d) {\n return c * polyBez([coOrdArray[0], coOrdArray[1]], [coOrdArray[2], coOrdArray[3]])(t \/ d) + b;\n }\n }\n return encodedFuncName;\n }\n});\n\/\/ If you did just read the entire code, congrats.\n\/\/ Did you find a bug? I didn't, so plz tell me if you did. (https:\/\/github.com\/webbiesdk\/SudoSlider\/issues).\n\/\/ You can use this fiddle: http:\/\/jsfiddle.net\/32m7bhtn\/ as a starting point if you want to create a snall test-case for me."],"names":["factory","root","self","global","define","amd","$","exports","require","jQuery","win","EMPTY_FUNCTION","CSSVendorPrefix","styleName","property","searchElement","name","endsWith","toLowerCase","getVendorPrefixedProperty","style","prefix","slice","length","getCSSVendorPrefix","jWin","doc","document","TOUCHSTART","TOUCHMOVE","TOUCHCANCEL","TOUCHEND","MOUSEDOWN","MOUSEMOVE","MOUSEUP","getDefaultOptions","effect","speed","customLink","controlsFadeSpeed","controlsFade","insertAfter","vertical","slideCount","moveCount","startSlide","responsive","ease","auto","pause","resumePause","continuous","prevNext","numeric","numericText","slices","boxCols","boxRows","initCallback","ajaxLoad","beforeAnimation","afterAnimation","history","autoHeight","autoWidth","updateBefore","ajax","preloadAjax","loadingText","prevHtml","nextHtml","controlsAttr","numericAttr","interruptible","useCSS","loadStart","loadFinish","touch","touchHandle","destroyCallback","mouseTouch","allowScroll","CSSease","ajaxHasHTML","fn","sudoSlider","optionsOrg","baseSlider","this","extend","objectToLowercase","minVersion","version","jquery","split","a","minJQueryVersion","usecss","each","init","isSlideContainerUl","slidesContainer","slides","imagesInSlidesLoaded","totalSlides","currentSlide","clickable","currentlyAnimatingTowards","numericControls","numericContainer","destroyed","controls","nextbutton","prevbutton","autoTimeout","autoOn","numberOfVisibleSlides","asyncDelayedSlideLoadTimeout","adjustingTo","currentAnimation","currentAnimationCallback","currentAnimationObject","runAfterAnimationCallbacks","awaitingAjaxCallbacks","startedAjaxLoads","finishedAjaxLoads","animateToAfterCompletionClicked","animateToAfterCompletionSpeed","currentSliderPositionTop","currentSliderPositionLeft","fullyInitialized","slideNumberBeforeDestroy","obj","adjustTargetTime","currentlyAnimating","animateToAfterCompletion","slideContainerCreated","option","options","unBindCallbacks","autoStartedWithPause","animationWasInterrupted","initSudoSlider","optionIndex","key","ulLength","childrenNotAnimationClones","newUl","is","hasClass","append","slidesJquery","index","elem","that","css","position","addClass","attr","numerOfAjaxUrls","tag","slide","runOnImagesLoaded","overflow","listStyle","add","display","margin","adjustPositionToPosition","parseInt10","Math","random","getEffectMethod","adjustResponsiveLayout","bindAndRegisterOff","prepend","usePages","distanceBetweenPages","appendTo","click","enqueueAnimation","getTargetAttribute","makecontrol","fadeControls","optionsToConvert","i","textSpeedToNumber","filter","stringTrim","charAt","customLinkClickHandler","substr","getSlides","goToSlide","hashPlugin","hashchange","URLChange","address","change","setCurrent","startAsyncDelayedLoad","target","stopAuto","startAuto","previousAdjustedResponsiveWidth","forced","doTheAdjustment","cantDoAdjustments","width","subPixelNewWidth","newWidth","addAPixelEvery","slideCounter","stopAnimation","ensureSliderContainerCSSDurationReset","adjustPositionTo","autoadjust","callAsync","schedule","hashString","location","hash","getUrlHashTarget","preloadAjaxTime","clearTimeout","undefined","dataPause","mathMax","autoPossibleStillOn","html","action","prependTo","direction","clicked","dir","filterDir","targetSlide","getRealPos","waitCounter","loadSlide","realLoadSlide","isContentInSlideReady","call","performAnimation","loadSlidesAndAnimate","fadeControl","fadeOpacity","fadetime","nextcontrol","fadeElement","filterString","filtered","adjustObject","opacity","callback","visibility","animate","queue","duration","easing","control","setCurrentElement","element","removeClass","elementTarget","getTimeInMillis","ready","adjustHeightWidth","makeCallback","autoHeightWidth","getSliderDimensions","fromSlide","pixels","targetPixels","prevHeightWidthAdjustObject","height","b","getKeys","simpleObjectEquals","stop","getSlidePosition","left","top","both","transform","setMargins","marginLeft","marginTop","callQueuedAnimation","animateTo","aniCall","after","synchronous","func","afterAniCall","beforeAniCall","el","limitDir","maxSlide","ajaxCallBack","callbackList","push","targetslide","succesRan","url","success","data","textStatus","jqXHR","runWhenNotAnimating","type","getResponseHeader","ajaxAdjust","loadImage","complete","image","Image","src","empty","completeFunction","img","performCallbacks","performInitCallback","centerTargetSlideAfter","easingToUse","initialOffsetLeft","initialOffsetTop","startTime","lastTime","lastDistance","body","runningTouchEffect","prevEffect","cssease","currentTouchSlide","baseDistance","distanceToRightSlide","correctionWhenCalculatingWhereToMoveTouchDistance","bufferSize","positionsBuffer","timeBuffer","bufferIndex","touchStart","x","y","distance","mathAbs","currentSlidePosition","touchMove","distanceAbs","newTime","rightSlidePositionBefore","rightSlidePositionAfter","moveBaseDistance","touchEnd","slideDimensions","currentTime","time","bufferDistance","thisTime","goToAnotherSlide","distanceLeft","mod","timeLeft","timeFromSpeed","timeFromDistance","cubicBezierY","mathMin","cubicBezierX","coOrdArray","encodedFuncName","join","replace","jqueryEasing","isFunction","polyBez","p1","p2","A","B","C","bezCoOrd","t","ax","xDeriv","xForT","z","c","d","makeBezier","startedTouch","startX","startY","prevX","prevY","dragFunction","event","startEvent","endEvent1","endEvent2","isMouseEvent","originalEvent","eventTarget","parents","pageX","pageY","touches","preventDefault","isGeneralDirectionVertical","setUpTouch","callbacks","splice","reorderedSlidesToStartFromSlide","reorderSlides","slideToInsert","centerTargetSlideAdjusted","extraSpace","skipPreCenterTargetSlide","fromSlides","toSlides","diff","diffAbs","newDiff","centerTargetSlideBefore","leftTarget","topTarget","targetLi","callOptions","overwritingSpeed","attributeSpeed","slideSpecificEffect","slideOutSpecificEffect","specificEffectAttrName","callbackHasYetToRun","screen","fontSmoothingEnabled","removeAttribute","ignored","fixClearType","slider","container","to","from","stopCallbacks","goToNext","stopFunction","remove","events","handler","selector","on","off","adjust","count","visibleSlides","publicDestroy","publicInit","runOnDestroyedSlider","foo","reinit","apply","arguments","args","destroy","getOption","setOption","val","setOptions","newOptions","insertSlide","pos","numtext","removeSlide","block","unblock","adjustMethod","repeat","autoAdjustSpeed","getValue","currentslide","totalslides","autoanimation","getSlide","number","normalEffectsPrefixObject","fade","finishFadeAnimation","OutIn","fadeSpeed","fadeinspeed","fadeoutspeed","foldRandom","foldTemplate","stack","reverse","pushIn","pushTemplate","parsePrefixedEffects","resultObject","effectsObject","generic","argumentsStack","argumentArray","concat","genericArgumentIndex","getDirFromAnimationObject","isArray","effectIndex","newArgumentStack","allEffects","boxTemplate","reverseRows","grow","randomize","selectionAlgorithm","flyIn","reveal","roundedGrow","boxrows","boxcols","totalBoxes","boxes","createLazyBoxes","timeBuff","rowIndex","colIndex","box2DArr","reverseArray","shuffle","boxesResult","cols","prevCol","boxesResultLine","rows","rawBox","rows2","n","negative","row","col","boxLine","j","lazyBox","delay","boxAnimationFunction","box","boxChildren","children","orgWidth","orgHeight","goToWidth","goToHeight","orgLeft","parseNumber","orgTop","goToLeft","goToTop","childOrgLeft","childOrgTop","childGoToLeft","childGoToTop","adjustTop","adjustLeft","pickRandomValue","borderRadius","onlyFade","curtainEffect","upDownEffect","objSlider","lazySlides","slicesElement","upDownAlternator","get","timeout","startPosition","startAdjustment","bottom","right","makeClone","hide","show","measurementSlides","ul","properties","doNotResetCss","CSSObject","transitionProperty","keys","transitionTiming","transitionEase","resetCSS","cssObject","eventsVendorPrefix","called","callbackFunction","unbind","eventHandler","numberOfCols","numberOfRows","useToSlides","result","boxWidth","ceil","boxHeight","doStuff","createBox","innerBox","firstSlidePosition","eq","cloneWidth","outerWidth","cloneHeight","outerHeight","clone","waitForAllImages","elems","find","numberOfRemainingImages","jQueryThat","loadFunction","readyState","trigger","str","string","suffix","indexOf","setTimeout","array","not","ret","object","num","parseInt","parseFloat","Date","inputEffect","makeRandomEffect","effects","effectName","patternWithWildCards","match","RegExp","blinds","blindsEffect","fold","Fade","zip","unzip"],"mappings":"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\/KD,WAgLmB,UAAvB\/B,IAAIuB,IAAI,aAAyBvB,IAAIuB,IAAI,CAACC,SAjLpC,aAoLVL,aAAaI,IAAI,OAAU,OAAQS,UAAW,SAE9C\/D,gBAAgBgE,IAAId,cAAcI,IAAI,CAACW,QAAS,QAASV,SAtL\/C,WAsL0EW,OAAQ,MAE5FC,yBAAyB,EAAG,EAjM7B,MAmMC\/B,OAAO,GAAmBgC,WAAWhC,OAAO,IAG5CrB,sBAAwBqB,OAAO,GAE\/BA,OAAO,IAAoBA,OAAO,GAAkB,EAId,iBAA3BA,OAAO,IAAyE,UAAzCA,OAAO,GAAiBvH,gBACtEuH,OAAO,GAAoBiC,KAAKC,SAAWnE,YAAe,GAE9DiC,OAAO,GAAmBgC,WAAWhC,OAAO,IAAoB,GAAK,EAErEA,OAAO,GAAemC,gBAAgBnC,OAAO,IAG7CA,OAAO,IAAqBA,OAAO,IAAmBnH,MAAM,OAEnDyE,EAAI,EAAGA,EAAIS,YAAaT,IACxB0C,OAAO,IAAmB1C,IAAsC,IAAhC0C,OAAO,IAAmB1C,KAC3D0C,OAAO,IAAmB1C,GAAMA,EAAI,GAEpC0C,OAAO,MACPA,OAAO,IAAY1C,GAAK0C,OAAO,IAAY1C,IA5NnD,UAgOA0C,OAAO,GAAqBA,OAAO,KAAuBA,OAAO,IAE7DA,OAAO,KACPoC,uBAlOL,MAuOCxE,gBAAgBoC,OAAO,GAAiB,SAAW,SAAS,KAASA,OAAO,GAAiB,QAAU,UAAU,QAGjHA,OAAO,IAAmBA,OAAO,MAAqBA,OAAO,IAEzDA,OAAO,KACPqC,mBAAmBrJ,KAAM,eAAgBoJ,uBAAwB,IAGjEpC,OAAO,KAAkBA,OAAO,IAAiB,IACjD1B,SAAWzG,EAAE,SAAWmI,OAAO,IAAsB,YACrDL,IAAIK,OAAO,GAAoB,QAAU,UAAU1B,UAE\/C0B,OAAO,IAAgB,CACvB5B,iBAAmBvG,EAAE,OAASmI,OAAO,IAAqB,UAC1D1B,SAASgE,QAAQlE,sBACbmE,SApPE,SAoPSvC,OAAO,IAClBwC,qBAAuBD,SAAW5D,sBAAwB,MACrDrB,EAAI,EAAGA,EAAIS,aAAgBiC,OAAO,KAAqBuC,SAAY,EAAI5D,uBAAyB,EAAGrB,GAAKkF,qBAC7GrE,gBAAgBb,GAAKzF,EAAE,qBAAwByF,EAAI,GAAK,uBAA4B0C,OAAO,IAAmB1C,GAAK,oBAC9GmF,SAASrE,kBACTsE,OAAM,kBACHC,iBAAiBC,mBAAmB7F,MAAQ,EA7PjE,MADC,SAmQQiD,OAAO,MACPzB,WAAasE,YAAY7C,OAAO,IA\/PlC,QAgQExB,WAAaqE,YAAY7C,OAAO,IA\/PlC,SAiQEA,OAAO,IACP8C,aAAa9E,aAAc,WAK\/B+E,iBAAmB,CAAC,EAAwB,EAAY,IACnDC,EAAI,EAAGA,EAAID,iBAAiBjK,OAAQkK,IACzChD,OAAO+C,iBAAiBC,IAAMC,kBAAkBjD,OAAO+C,iBAAiBC,QAGxEhD,OAAO,GAAkB,KACrBkD,OAASC,WAAWnD,OAAO,IACP,KAApBkD,OAAOE,OAAO,GACdf,mBAAmB1C,IAAK,QAAS0D,uBAAwBH,OAAOI,OAAO,EAAGJ,OAAOpK,SAEjFuJ,mBAAmBpJ,IAAK,QAASoK,uBAAwBH,WAIjEzB,kBAAkB8B,UAAUvD,OAAO,GAAkBA,OAAO,IA1R7D,MA0RsF,cA3RrF,QA4RQN,yBACA8D,UAAU9D,yBA7RlB,YA8RW,GAAIM,OAAO,IAAgB,KAE1ByD,YACAA,WAAazK,KAAK0K,YAClBD,WAAWE,YACJF,WAAa5L,EAAE+L,SACtBH,WAAWI,OAAOF,WAGlBtB,mBAAmBrJ,KAAM,aAAc2K,WAE3CA,iBAGAH,UAAUxD,OAAO,GA5SzB,OA+SI8D,WAAW9F,iBAEXgC,OAAO,IAAYA,OAAO,KAC1B9E,SAAS8E,OAAO,IAjTrB,OAmTKA,OAAO,QACEgD,EAAI,EAAGA,EAAIjF,YAAaiF,IACzBhD,OAAO,IAAYgD,IAAMhD,OAAO,IAAoBgD,GACpD9H,SAAS8H,QAIjBe,iCAQCV,6BACDW,cACAA,OAASpB,mBAAmB7F,SACd,QAAViH,QACAhE,OAAO,IAvUf,MAwUQiE,YACiB,SAAVD,QACPE,YACAlE,OAAO,IA1UhB,MA2U0B,SAAVgE,OACP\/F,UA7UR,MA8UyB,WAAV+F,OACP\/F,UA9UT,KAgVS0E,iBAAkBqB,QAAUhC,WAAWgC,QAAWA,OAAS,EAAIA,OAhVxE,OADC,UAwVAG,iCAAmC,WAE9B\/B,uBAAuBgC,iBACnBC,uBACAC,qBA3VV,OA2VmCF,QAAoC,GAAfrG,kBAuCnDwG,MAnCIC,kBAmCJD,MAAQ5E,IAAI4E,QACZvE,OAAO,GACAuE,MAEAA,MAAQ5F,uBAtCX8F,SAAWzC,WAAWwC,kBACtBE,eAAiB,GAAKF,iBAAmBC,aAEzCN,kCAAoCK,kBAnW7C,OAmWkEJ,OAAkB,CAC3ED,gCAAkCK,yBAE9BG,aAAe,EACV3B,EAAI,EAAGA,EAAIjF,YAAaiF,MAC7B2B,cACoBD,gBAChBC,aAAe,EACf9G,OAAOmF,GAAGuB,MAAME,SAAW,IAE3B5G,OAAOmF,GAAGuB,MAAME,UA9WhC,QAiXYtE,sBACA+D,UAAU\/D,sBAGdyE,gBACAC,wCACAC,iBAAiB9G,cACjB+G,WAAW\/G,aAAc,KAIjCqG,kBACAW,UAAUX,iBACVY,SAASZ,gBAAiB,aAcrBzB,mBAAmB3B,aACxBA,KAAOpJ,EAAEoJ,OACGI,KAAK,gBAAkBJ,KAAKI,KAAK,gBAIxCsC,gBACDK,0BAiNAkB,WAAaC,SAASC,KAAK9B,OAAO,GAC7BN,EAAI,EAAGA,EAAIhD,OAAO,IAAmBlH,OAAQkK,OAC9ChD,OAAO,IAAmBgD,IAAMkC,kBACzBlC,SAGXkC,aAAexH,KACRM,aAEAgC,OAAO,GA1NLqF,GACT3H,KACA8F,UAAUQ,OArZd,OAuZIrB,iBAAiBqB,OAvZrB,gBA2ZKD,2BA3ZL,QA4ZI\/D,OAAO,IAA8B,KACjCsF,gBAAkBtD,WAAWhC,OAAO,QACpCA,OAAO,QACF,IAAIgD,EAAI,EAAGA,EAAIhD,OAAO,IAAYlH,OAAQkK,OACvChD,OAAO,IAAYgD,GAAI,CACvBuC,aAAa3G,8BACbA,6BAA+BqG,UAAS,WAChCjF,OAAO,IAAYgD,GACnB9H,SAAS8H,GAETe,0BAELuB,kCASdpB,UAAU1J,UAlbvBgL,YAmbYhL,MAAqB,KACjBiL,UAAY5H,OAAOG,cAAcqD,KAAK,cAEtC7G,MAtbhBgL,YAqbgBC,UACQzD,WAAWyD,WAEXzF,OAAO,IAGnBI,0BACA5F,MAAQkL,QAAQlL,MAAO,MAE3ByJ,WACAvF,OA7bD,KA8bCyB,qBAAuB3F,MACvBiE,YAAcwG,UAAS,WACfvG,SAAWmB,qBACX8C,iBA7bF,OALN,OAmcQxC,qBAncR,SAqcG3F,gBAGEyJ,SAAS0B,qBACVlH,aACA8G,aAAa9G,aAEZkH,sBAAqBjH,OA5c1B,gBA+cKuE,kBAAkBrJ,cACnBoI,WAAWpI,QAAmB,GAATA,MACdoI,WAAWpI,OAET,QAATA,MACO,IAEE,UAATA,OAA8B,UAATA,MACd,IAGA,aAKNiJ,YAAY+C,KAAMC,eAChBhO,EAAE+N,MAAME,UAAUxH,UAAUoE,OAAM,kBACrCC,iBAAiBkD,OAhetB,MADC,kBAseKlD,iBAAiBoD,UAAWC,QAASpM,UACtCqE,YAAcP,KAEduG,SAxeL,MA0eU5F,oBAw1BiB2E,EAAGgD,QAASpM,WAClCqM,IAAMC,UAAUlD,GAChBrI,SAh0CE,QAg0CSqI,GA\/zCT,QA+zC6BA,EAE\/BmD,YAAcC,WAAWH,QACzBE,aAAenI,uBAGnBC,UA30CA,MA40CAC,0BAA4BiI,YAExBnG,OAAO,IAAa,SAChBqG,YAAc,EACTC,UAAYH,YAAaG,UAAYH,YAAcxH,sBAAuB2H,YAAa,KACxFC,cAAgBH,WAAWE,WAC1BE,sBAAsBD,iBACvBF,cACAnL,SAASqL,eAAe,WAGD,KADnBF,cAEIrG,OAAO,IAAkByG,KAAK3J,WAAYmJ,IAAM,GAChDS,iBAAiBT,IAAKrM,MAAOoM,QAASrL,eAKnC,GAAf0L,YACAK,iBAAiBT,IAAKrM,MAAOoM,QAASrL,UAEtCqF,OAAO,IAAiByG,KAAK3J,WAAYmJ,IAAM,QAGnDS,iBAAiBT,IAAKrM,MAAOoM,QAASrL,UAx3BlCgM,CAAqBZ,UAAWC,QAASpM,eAGzCoG,OAAO,KAAwBH,mBAC3BuG,WAAWF,UAAUH,cAAgB7H,4BACrC0G,gBACAjC,iBAAiBoD,UAAWC,QAASpM,gBAGzCkG,yBAA2BiG,UAC3B1G,gCAAkC2G,QAClC1G,8BAAgC1F,MAG5BoG,OAAO,YACHmG,YAAcD,UAAUH,WACnBO,UAAYH,YAAaG,UAAYH,YAAcxH,sBAAuB2H,YAC3EtG,OAAO,IAAYsG,YACnBpL,SAASkL,WAAWE,qBASnCM,YAAYC,YAAaC,SAAUC,aACxCF,YAAcA,YAAc,EAAI,MAC5BG,YAAcnP,OAEdmI,OAAO,MACPgH,YAAcD,YAAcxI,WAAaC,YAGzCwB,OAAO,GAAkB,KAErBiH,aAAe,MAASF,YA5gB1B,OACA,QA2gBqE,KACnEG,SAFarP,EAAEmI,OAAO,IAEAkD,OAAO,OAAS+D,aAAe,iBAAmBA,cAC5ED,YAAcA,YAAYpF,IAAIsF,cAG9BC,aAAe,CAACC,QAASP,sBAEpBQ,WACAR,aAA6C,GAA9BG,YAAY9F,IAAI,YAChC8F,YAAY9F,IAAI,CAACoG,WA\/gBjB,WAmhBJT,aACAG,YAAY9F,IAAI,CAACoG,WAAY,YAG7BtH,OAAO,IACPuH,QAAQP,YAAaG,aAAcL,SAAU9G,OAAO,IAAgBqH,UAEpEL,YAAYO,QACRJ,aACA,CACIK,MAxiBZ,MAyiBYC,SAAUX,SACVY,OAAQ1H,OAAO,IACfqH,SAAUA,oBAQjBvE,aAAatB,MAAOsF,UACzBF,YAAYpF,MAAOsF,SApjBnB,OAsjBAF,YAAYpF,MAAQzD,YAAcY,sBAAuBmI,SArjB1D,eAyjBMhD,WAAWd,MAChBA,EAAIoD,WAAWpD,GAAK,EAvjBN,SA0jBVhD,OAAO,KAAyCgD,GAAKjF,YAAcY,sBAAwB,GAAMqB,OAAO,MACxGgD,EAAIjF,aAGJiC,OAAO,QACF,IAAI2H,QAAU,EAAGA,QAAUxJ,gBAAgBrF,SAAU6O,QAAS,CAE\/DC,kBADczJ,gBAAgBwJ,SACH3E,GAG\/BhD,OAAO,IAAkB4H,kBAAkB\/P,EAAEmI,OAAO,IAAmBgD,YAGtE4E,kBAAkBC,QAAS7E,GAC5B6E,SAAWA,QAAQ3E,SACnB2E,QACK3E,OAAO,YACP4E,YAAY,WAEjBD,QACK3E,QAAO,eACA6E,cAAgBnF,mBAAmB7F,SA\/kBrC,SAglBEiD,OAAO,WAOA+H,eAAiB\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\/F,OAAO,GACP6L,kBAAoByB,yBAA2BC,wBAE\/C3B,mBAAqB0B,yBAA2BC,wBAGpDhB,qBAAuBxD,iBAAiBsD,kBAAoB,GAAKtD,iBAAiBsD,oBAItFrM,OAAO,GACP8M,EAAI,EAEJC,EAAI,EAERhL,yBAAyB6J,kBAAoBkB,EAAGjB,iBAAmBkB,YAG9DU,SAASX,EAAGC,OAEbC,SADJf,KAAKnE,YAtkCK,uBAykCNkF,SADAhN,OAAO,GACI+M,EAEAD,EAEfE,UAAYV,aAERE,oDACAQ,UAAYR,kDACZH,6BAcAqB,gBAXAN,YAAcH,QAAQD,UACtBW,YAAc3F,kBACd4F,KAAO,EACPC,eAAiB,EACZ7K,EAAI,EAAGA,EAAIyJ,WAAYzJ,IAAK,KAC7B8K,SAAWnB,WAAW3J,GACtB8K,SAAW,IAAMH,cACjBC,MAAQE,SACRD,gBAAkBnB,gBAAgB1J,IAKtC0K,gBADA1N,OAAO,GACWL,IAAI+I,SAEJ\/I,IAAI4E,YAGtB3K,MAAQqT,QAAQY,gBAAkBD,KAElCG,iBAAmBnU,OAAS,IAAOwT,aAAeM,gBAAkB,GAEnEG,eAAiB,GAAKT,YAAc,GAAOS,eAAiB,GAAKT,YAAc,GAAMA,aAAe,MACrGW,iBAvoCR,WA2pCQC,aAjBAjI,UAAYiH,SAAW,EAroCzB,OACA,OAsoCGhN,OAAO,MACJhC,aAAe,GAAKD,YAxoC1B,QAyoCUgI,YACAgI,iBA\/oChB,OAipCmC,GAAhB\/P,cA3oCb,QA4oCU+H,YACAgI,iBAnpChB,QAypCIhI,UAAYkI,IADZlI,UAnpCE,QAmpCUA,UAA2BsG,kBAAoB,EAAIA,kBAAoB,EACxDtO,iBAYvBmQ,SAHAC,eALAH,aADAD,iBACeL,gBAAkBN,YAElBA,aAGiBxT,MAAS,IACzCwU,iBAAmB1I,QAAS1F,OAAO,IAAgB0N,gBAAkBM,cAAgBhO,OAAO,GAAe,GAS3GqO,aAAgBzU,OALhBsU,SAAWI,QADXH,cAAgBC,iBACGD,cAEAC,iBAFgBpO,OAAO,MAKLgO,aAAepU,MAAQsU,UAC5DK,aAAe,EAAIF,aAGnB1C,YADA3L,OAAO,IACO,gBAAkBuO,aAAe,IAAMF,aAAe,mBAyyDpEG,gBACZC,gBAAkB,OAASD,WAAWE,KAAK,KAAKC,QAAQ,MAAO,KAC\/DC,aAAe\/W,EAAE6P,WAChBmH,WAAWD,aAAaH,kBAAmB,KACxCK,QAAU,SAAUC,GAAIC,QACpBC,EAAI,CAAC,EAAG,GACRC,EAAI,CAAC,EAAG,GACRC,EAAI,CAAC,EAAG,YAEHC,SAASC,EAAGC,WACjBH,EAAEG,IAAM,EAAIP,GAAGO,IAAKJ,EAAEI,IAAM,GAAKN,GAAGM,IAAMP,GAAGO,KAAOH,EAAEG,IAAKL,EAAEK,IAAM,EAAIH,EAAEG,IAAMJ,EAAEI,IAC1ED,GAAKF,EAAEG,IAAMD,GAAKH,EAAEI,IAAMD,EAAIJ,EAAEK,eAGlCC,OAAOF,UACLF,EAAE,GAAKE,GAAK,EAAIH,EAAE,GAAK,EAAID,EAAE,GAAKI,YAGpCG,MAAMH,WACOI,EAAd3C,EAAIuC,EAAGrM,EAAI,IACNA,EAAI,MAELiK,QADJwC,EAAIL,SAAStC,EAAG,GAAKuC,GACJ,OACjBvC,GAAK2C,EAAIF,OAAOzC,UAEbA,SAGJ,SAAUuC,UACND,SAASI,MAAMH,GAAI,KAGlCT,aAAaH,iBAAmB,SAAU3B,EAAGuC,EAAG1G,EAAG+G,EAAGC,UAC3CD,EAAIZ,QAAQ,CAACN,WAAW,GAAIA,WAAW,IAAK,CAACA,WAAW,GAAIA,WAAW,IAAnEM,CAAwEO,EAAIM,GAAKhH,UAG7F8F,gBA30DuBmB,CAAW,CAACrB,cAAgB,EAAGF,cAAgB,EAAG,GAAK,IAGzEpQ,UArrCJ,MAsrCIiO,mBArrCL,KAurCSxF,iBADAqH,iBACiBhI,UAEAsG,kBAFW6B,SAvrCrC,KAAA,KAAA,UA8rCS2B,aA\/rCR,MAgsCQC,OAAS,EACTC,OAAS,EACTC,MAAQ,EACRC,MAAQ,EAERC,aAAe,SAAUC,UACpBlS,eAIDmS,WACAC,UACAC,UAHAzF,KAAOsF,MAAMtF,KAIb0F,aAAoC,KAArB1F,KAAKvH,OAAO,EAAG,MAC9BiN,cACAH,WAAa7W,UACb8W,UAAY5W,QACZ6W,UAAY,KAEZF,WAAajX,WACbkX,UAAY\/W,SACZgX,UAAYjX,YACZ8W,MAAQA,MAAMK,gBAGbX,aAAc,IACXhF,MAAQuF,sBAIRK,YAAcN,MAAMnM,OACpBA,OAASnM,EAAE4Y,aACVzQ,OAAO,MACRgE,OAASA,OAAO0M,UAAU9O,IAAI6O,kBAE9BvN,OAASlD,OAAO,KAAsBL,OACpB,iBAAXuD,QAEiB,MADxBA,OAASC,WAAWD,SACTE,OAAO,KACdF,OAASrL,EAAEqL,OAAOI,OAAO,EAAGJ,OAAOpK,QAAS6G,OAIrCqE,OAAOd,OAAOA,QAAQpK,cAKjC+W,aA\/uCjB,QAmvCahF,MAAQwF,WAAaxF,MAAQyF,UAAW,KACpCxD,EACAC,KACAwD,aACAzD,EAAIqD,MAAMQ,MACV5D,EAAIoD,MAAMS,UACP,KACCxU,MAAQ+T,MAAMU,QAAQ,GAC1B\/D,EAAI1Q,MAAMuU,MACV5D,EAAI3Q,MAAMwU,MAGV\/F,MAAQuF,YAIRvD,WAAWC,GAHXgD,OAAShD,GAGcC,GAFvBgD,OAAShD,KAGLwD,cAAiBvQ,OAAO,KACxBmQ,MAAMW,mBAGV3D,UAAUL,EAAIgD,OAAQ\/C,EAAIgD,QAErBvT,YAAY+T,aAAczD,EAAIgD,OAAQ\/C,EAAIgD,SAC3CI,MAAMW,kBAIdd,MAAQlD,EAAIgD,OACZG,MAAQlD,EAAIgD,YAEZtC,SAASuC,MAAOC,OAChBJ,aApxCZ,QAuxCIxN,mBAAmBpJ,IAAK,CAACE,WAAYC,UAAWE,SAAUD,aAAaqV,KAAK,KAAMwB,cAC9ElQ,OAAO,KACPqC,mBAAmBpJ,IAAK,CAACM,UAAWC,UAAWC,SAASiV,KAAK,KAAMwB,uBAIlE1T,YAAY+T,aAAczD,EAAGC,OAC9BgE,2BAA6B9D,QAAQF,GAAKE,QAAQH,UAClDyD,iBAICvQ,OAAO,MAGRA,OAAO,IACC+Q,2BAEDA,8BAvVXC,GAIJvP,kBAAkB8B,UAAUvF,aAAcD,aAt9B1C,MAs9B+DoK,aAAayC,oBAAqB,CAC7F,WACI7F,WAAW\/G,aAAc,GACzB8G,iBAAiB9G,2BAqVpBwN,iBAAiByF,gBACfA,WAAaA,UAAUnY,QAE1BmY,UAAUC,OAAO,EAAG,GAAG,cAItB1K,sBAAsBhF,eACtB1D,qBAAqB0D,UAGrBxB,OAAO,MAGJA,OAAO,IAAYwB,UAGdrC,iBAAiBqC,SAAWpC,kBAAkBoC,kBAyCtDqD,wCACD7E,OAAO,KACPpC,gBAAgBsD,IAAI\/I,gBAAkB,sBAAuB,QAIjEgZ,gCAAkC,WAE7BC,cAAc5P,WACnBA,MAAQ4E,WAAW5E,SACN2P,iCAGbA,gCAAkC3P,MAClCqD,4CACK,IAAI7B,EAAI,EAAGA,EAAIjF,YAAaiF,IAAK,KAC9BqO,cAAgBxT,OAAOuI,WAAY5E,MAAQwB,IAC\/CpF,gBAAgBiD,OAAOwQ,eAE3BvM,iBAAiB9G,wBAGZsT,0BAA0BnL,YAAaoL,YAG5CH,cADAjL,YAAc8H,IAAI9H,YADLT,QAAQ1D,YAAYjE,YAAcwT,WAAa5S,uBAAyB,GAAI,GACjDZ,uBAInC2N,uBAAuBvF,aAC5BmL,0BAA0BnL,YAAa,YAUlCO,iBAAiBT,IAAKrM,MAAOoM,QAASrL,SAAU6W,0BACjDxR,OAAO,KAAqB8D,WAAWmC,KAEvCjG,OAAO,KAAkBgG,UAAS\/N,IAAIkN,SAASC,KAAOpF,OAAO,IAAmBiG,MAEhFjG,OAAO,IAAoB8C,aAAamD,IAAKjG,OAAO,YAEpDyR,WAAa5Z,IACb6Z,SAAW7Z,IACNyF,EAAI,EAAGA,EAAIqB,sBAAuBrB,IACvCmU,WAAaA,WAAW7P,IAAI\/D,OAAOuI,WAAWpI,aAAeV,KAC7DoU,SAAWA,SAAS9P,IAAI\/D,OAAOuI,WAAWH,IAAM3I,SAKhD6I,YADAwL,KAAO1L,IAAMjI,gBAEbgC,OAAO,MAAsBrF,SAAU,KACnCiX,QAAU3E,QAAQ0E,MACtBxL,YAAcF,QAEV4L,SAAW7T,aAAeiI,IAAMlI,YAChCkP,QAAQ4E,SAAWD,UACnBzL,YAAcF,IAAMlI,YAEpB6T,QAAU3E,QADV0E,KAAOE,UAKP5E,QADJ4E,SAAW7T,aAAeiI,IAAMlI,aACT6T,UACnBzL,YAAcF,IAAMlI,YACpB4T,KAAOE,cAGX1L,YAAcF,IAGdjG,OAAO,MAAsBwR,mCA5CJrL,aAI7BmL,0BAHiBhD,QAAQnI,YAAanI,cACrBiP,QAAQ9G,YAAcnI,eA2CnC8T,CAAwB3L,iBAGxB4L,WAAahJ,iBAAiB5C,YAx7ClC,OAy7CI6L,UAAYjJ,iBAAiB5C,YAx7ClC,MA07CK8L,SAAWpU,OAAOuI,WAAWH,MAC7BiM,YAAcra,EAAEmF,OA37CrB,KA27CkC,GAAIiD,SACjCkS,iBAAmBnS,OAAO,GAC1BoS,eAAiBH,SAAS5Q,KAAK,cA\/7C3CmE,MAg8CY4M,iBACAD,iBAAmBnQ,WAAWoQ,iBAj8C1C5M,MAm8CY5L,QACAuY,iBAAmBnQ,WAAWpI,QAElCsY,YAAYtY,MAAQuY,qBAEhBxY,OAASqG,OAAO,GAGhBqS,oBAAsBJ,SAAS5Q,KADN,kBAEzBgR,sBACA1Y,OAASwI,gBAAgBkQ,sBAGTxU,OAAOG,cACR,KACXsU,uBAAyBzU,OAAOG,cAAcqD,KAAKkR,kBACnDD,yBACA3Y,OAASwI,gBAAgBmQ,yBAIjCzS,mBAt9CD,KAu9CCf,iBAAmBnF,WAEf6Y,oBAz9CL,KA09CCzT,yBAA2B,WACvBc,mBA59CJ,MA69CI2S,oBA79CJ,MA+9CIhP,UAAUyC,IAAKD,kBAwHD6B,YACd4K,OAAOC,sBAAwB7K,QAAQlP,UAEnCkP,QAAQlP,MAAMga,gBAAgB,UAChC,MAAOC,WA3HTC,CAAanB,UAET1R,OAAO,KACP0L,uBAAuBvF,aAI3BsD,QAAQxD,IAt+Cb,MAu+CSjG,OAAO,KACPoC,yBAGJoJ,iBAAiBvM,6BAErBD,uBAAyB,CACrByS,WAAYA,WACZC,SAAUA,SACVoB,OAAQnT,IACRoT,UAAWnV,gBACXqC,QAASiS,YACTc,GAAI\/M,IAAM,EACVgN,KAAMjV,aAAe,EACrB2T,KAAMA,KACN3N,OAAQ,CACJgF,KAAM+I,WACN9I,IAAK+I,WAETkB,cAAe,GACf7L,SAAU,WACFmL,sBACAA,oBA9\/CZ,MA+\/CY5N,kBAGRuO,SAAU,WACFX,qBAEA\/Q,kBAAkB5J,EAAE,YAAoC8H,KApgDrE,KAogDiFwI,aAAarD,iBAAkB,CAACmB,SAKhHlB,WAAWkB,IAAKkM,kBAChBnN,WAAU,WAENyE,QAAQxD,IA7gDZ,MACD,KA4gD+BkM,kBAE1BxY,OAAO8M,KAAK3J,WAAYkC,oCAIvB4F,mBACD\/E,mBAAoB,CAEpBO,wBArhDL,KAuhDSrB,0BACAA,2BAGJyM,iBAAiBxM,uBAAuBkU,mBAEpCE,aAAetU,iBAAiBgK,KAChCsK,aACAA,gBAsBRvb,EAAE,YAAoC8H,KAAK0T,SAC3CzV,gBAAgBkL,QAnBZ\/D,WAAW\/G,aAAc,GACzB8G,iBAAiB9G,cACjBoC,wBAtiDJ,gBA0iDKiC,mBAAmBwF,QAASyL,OAAQC,QAASC,UAClD3L,QAAQ4L,GAAGH,OAAQE,SAAUD,SAC7BrT,gBAAgBkK,MAAK,WACjBvC,QAAQ6L,IAAIJ,OAAQE,SAAUD,qBAI7BjP,2BACG3E,IAAIgB,GAAG,aAAejD,MAAQW,mBAQjCmF,UAAUhC,MAAOwE,SACtB\/H,WAAa+H,UAAYhG,OAAO,IAChBhC,aAChBA,aAAewD,eA90BHwE,SACZnB,wCAEAE,WAAW\/G,aAAc,GACzBA,aAAeoI,WAAWpI,cACrBgC,OAAO,KAAqB8D,WAAW9F,cAC5C8G,iBAAiB9G,cACjBC,WArvBD,EAsvBCC,2BAvvBA,EAyvBI8B,OAAO,MAEHgG,SACA\/B,WACIjE,OAAO,KAAoBkE,UAAUlE,OAAO,MACxCtC,MACRwG,aAIRqF,sBA4zBAoK,CAAO3N,SAEHhG,OAAO,IAAsBtC,MAC7BoF,aAAa9E,aAAc,IAG3BN,MAASsC,OAAO,IAAYhC,eAAkBmB,iBAAiBnB,gBAC\/DN,KAtkDJ,MAukDIsH,UAAUyG,+BAITlI,UAAU0P,KAAMW,eACjBC,cAAgBhc,IACXmL,EAAI,EAAGA,EAAI4Q,MAAO5Q,IACvB6Q,cAAgBA,cAAcjS,IAAI\/D,OAAOuI,WAAW6M,KAAOjQ,YAExD6Q,uBAGFzN,WAAW9I,UACT2Q,IAAI3Q,EAAGS,sBAgBT+V,gBACL7P,WACAW,gBACAG,WAAW\/G,aAAc,GACzBK,UAvmDD,KAymDCqB,yBAA2B1B,aAE3BwN,iBAAiBtL,iBAEjB2E,wCACIvG,UACAA,SAAS+U,SAGbjC,cAAc,GACdtM,iBAAiB9G,cAEjBgC,OAAO,IAAuByG,KAAK3J,qBAK9BiX,aACD1V,WACAgC,0BAIC2T,qBAAqBpK,aACnB,SAASqK,UACRC,QAAU7V,aACTX,MAAS+B,iBAOdqU,gBAEAlK,KAAKuK,MAAMpX,KAAMqX,WAEbF,QACAH,sBAXIM,KAAOD,UACXpP,WAAU,WACNiP,IAAIE,MAxoDxB3O,UAwoDyC6O,WAdrCvX,WAAWwX,QAAUR,cA4BrBhX,WAAWY,KAAOqW,WAElBjX,WAAWyX,UAAY,SAAUjX,UACtB2C,QAAQ3C,EAAE7E,gBAGrBqE,WAAW0X,UAAYR,sBAAqB,SAAUzT,IAAKkU,KACvDxU,QAAQM,IAAI9H,eAAiBgc,OAGjC3X,WAAW4X,WAAaV,sBAAqB,SAAUW,gBAC9C,IAAIpU,OAAOoU,WACZ1U,QAAQM,IAAI9H,eAAiBkc,WAAWpU,QAIhDzD,WAAW8N,oBAAsBA,oBAEjC9N,WAAW8X,YAAcZ,sBAAqB,SAAUpO,KAAMiP,IAAKC,QAAStR,WAKpEqR,IADAA,IAAM,EACA9W,YAAckQ,KAAK4G,IAAM,EAAG9W,YAAc,GAE1CkQ,IAAI4G,IAAK9W,YAAc,GAGjC6H,KAAO\/N,EAAE+N,MAlqDP,SAmqDEjI,mBACAiI,KAAO\/N,EAAE,QAAQyK,QAAQsD,MAEN,GAAfA,KAAK9M,SACL8M,KAAO\/N,EAvqDb,SAuqDwByK,QAAQsD,OAM7BiP,KAAc,GAAPA,IAGRhX,OAAOgX,IAAM,GAAGnL,MAAM9D,MAFtBhI,gBAAgB0E,QAAQsD,MAMxBpC,UACA9D,yBAA2B8D,UAAY,GAChCqR,KAAOnV,2BAA8BmV,KAAc,GAAPA,MACnDnV,2BAGAM,OAAO,IAAmBlH,OAAS+b,MACnC7U,OAAO,IAAmBlH,OAAS+b,KAGvC7U,OAAO,IAAmBkR,OAAO2D,IAAK,EAAGC,SAAW9S,WAAW6S,KAAO,MAG1E\/X,WAAWiY,YAAcf,sBAAqB,SAAUa,KACpDA,IAAMnP,QAAQ,EAAG1D,WAAW6S,KAAO,GAEnChX,OAAOyQ,QAAQuG,IAAK9W,YAAc,IAAIsV,SACtCrT,OAAO,IAAmBkR,OAAO2D,IAAK,GAClCA,IAAMnV,0BACNA,8BAIR5C,WAAW0G,UAAY,SAAUlG,EAAG1D,OAEhCoL,UAAUmD,aAAaxF,iBAAkB,CADlBrF,GAAK0E,WAAW1E,GAAMA,EAAI,EAAIA,EA1tDtD,KA2tDkE1D,UAGrEkD,WAAWkY,MAAQ,WACf\/W,UAhuDA,OAmuDJnB,WAAWmY,QAAU,WACjBhX,UAnuDD,MAsuDHnB,WAAWoH,UAAY,WACnBlE,OAAO,IAvuDR,KAwuDCkE,aAGJpH,WAAWmH,SAAW,WAClBjE,OAAO,IA7uDP,MA8uDAiE,YAGJnH,WAAW6W,OAAS,SAASuB,aAAaC,YAClCC,gBAAkB1P,QAAQ9F,iBAAmBoI,kBAAmB,GACpEjD,WAAW\/G,aAAcoX,iBACpBvV,oBACDiF,iBAAiB9G,cAEhBmX,QACDnQ,UAAUmD,aAAa+M,aAAc,EAAC,MAI9CpY,WAAWuY,SAAW,SAAU\/X,SACrB,CACHgY,aAActX,aAAe,EAC7BuX,YAAaxX,YACbE,UAAWA,UACXI,UAAWA,UACXmX,cAAe9W,QACjBpB,EAAE7E,gBAGRqE,WAAW2Y,SAAW,SAAUC,eACrB7X,OAAOuI,WAAWpE,WAAW0T,QAAU,KAGlD5Y,WAAW8H,cAAgBA,cAG3BvE,qBA6DRxI,EAAE8E,GAAGC,WAAWlD,kBAAoBA,sBAYhCic,0BAA4B,CA6C5BC,KAAM,aA8rBIjW,KACVkW,oBAAoBlW,IAAKA,IAAIM,QAAQrG,QA7rBjCkc,eA8qBWnW,SAEXoW,UADUpW,IAAIM,QACMrG,MAEpBoc,YAAchU,cAAW+T,WACzBE,aAAeF,UAAYC,YAE\/BrW,IAAIuT,cAAc9I,MAAK,WACnBzK,IAAI8R,WAAW3I,OAAO5H,IAAI,CAACkG,QAAS,OAGxCG,QAAQ5H,IAAI8R,WAAY,CAACrK,QAAS,MAAS6O,aA9jFnC,MA8jFwD9N,aAAa0N,oBAAqB,CAAClW,IAAKoW,YAAapW,OAvrBrHuW,WAAY,CACR,aACA,oBA2VYvW,IAAK1F,UACrBkc,aAAaxW,IAAK1F,SAruEV,MACD,QA24DPuH,MAAOA,MACP4U,MAAO,CACH,KACA,QACA,OACA,OACA,CACI,GACA,mBAifWzW,IAAKsG,IAAKoQ,aACzBC,OAAS3W,IAAIgS,KAAO,EACpB0E,UACAC,QAAUA,QAGdC,aAAa5W,IAAK2W,SAAUrQ,kBAncvBuQ,qBAAqBC,aAAcC,cAAe9d,OAAQ+d,QAASC,mBACpE\/H,WAAW6H,eACPC,QAEAH,qBAAqBC,aAAc,CAAC,GAAI,KAAM,QAAS,OAAQ,OAAQC,eAAgB9d,OAAQ,EAAGge,gBAElGH,aAAa7d,QAAU,SAAU+G,SACzBkX,cAAgB,CAAClX,KAAKmX,OAAOF,gBAG7BG,qBAAuBF,cAAc\/d,OAAS,EAClC,IAAZ6d,SAAwD,GAAvCE,cAAcE,wBAC\/BF,cAAcE,+BA0nBCpX,SAG3BsG,IAFAhM,SAAW0F,IAAIM,QAAQhG,SACvB0X,KAAOhS,IAAIgS,KAIP1L,IAFJhM,SACI0X,KAAO,EACD,EAEA,EAGNA,KAAO,EACD,EAEA,SAGP1L,IA3oB+C+Q,CAA0BrX,MAGpE+W,cAAcvC,MAAMpX,KAAM8Z,qBAG\/B,GAAII,QAAQP,uBACXQ,YAAcR,cAAc5d,OAAS,EACrCa,OAAS+c,cAAcQ,aAClBlU,EAAI,EAAGA,EAAIkU,YAAalU,IAAK,KAC9BmU,iBAA8BP,eA43BtB\/d,QA33BZse,iBAAiB\/M,KAAKpH,OAClBzK,KAAOme,cAAc1T,GACzBwT,qBAAqBC,aAAc9c,OAAQf,OAASL,KAAMoe,QAASQ,uBAGvEtf,EAAE4F,KAAKiZ,eAAe,SAAUne,KAAMoB,QAClC6c,qBAAqBC,aAAc9c,OAAQf,OAASL,KAAMoe,QAASC,uBAK3EQ,WAAa,YAuCRC,YAAY1X,IAAK0W,QAASiB,YAAaC,KAAMC,UAAWC,mBAAoBC,MAAOC,OAAQC,iBAC5F3X,QAAUN,IAAIM,QACdjF,QAAUiF,QAAQ4X,QAClB9c,QAAUkF,QAAQ6X,QAClBC,WAAa\/c,QAAUD,QACvBnB,MAAQqG,QAAQrG,OAAuB,GAAdme,WAAkB,EAAI,KAC\/CC,MAAQC,gBAAgBtY,IAAK5E,QAASC,SAAU2c,QAChDO,SAAW,EACXC,SAAW,EACXC,SAAW,EACXC,SAAW,GACfA,SAASF,UAAY,GACjB9B,SACAiC,aAAaN,OAEbR,WACAe,QAAQP,WAGP,IAAIhV,EAAI,EAAGA,EAAIgV,MAAMlf,OAAQkK,IAAK,KAC\/B6E,QAAUmQ,MAAMhV,GACpBqV,SAASF,UAAUC,UAAYvQ,UAC\/BuQ,UACgBrd,UACRuc,aACAgB,aAAaD,SAASF,WAG1BC,SAAW,EACXC,WAFAF,UAEqB,QAIzBK,YAAc,MACQ,GAAtBf,uBAEK,IAAIgB,KAAO,EAAGA,KAAkB,EAAV1d,QAAe,EAAG0d,OAAQ,SAC7CC,QAAUD,KACVE,gBAAkB,GACbC,KAAO,EAAGA,KAAO5d,QAAS4d,OAAQ,IACnCF,SAAW,GAAKA,QAAU3d,QAAS,KAC\/B8d,OAASR,SAASO,MAAMF,aACvBG,cAGLF,gBAAgBvO,KAAKyO,QAEzBH,UAE0B,GAA1BC,gBAAgB7f,QAChB0f,YAAYpO,KAAKuO,sBAGtB,GAA0B,GAAtBlB,mBAAyB,KAGP3K,EAAGC,EAAG0C,EAA3BqJ,MAAQ9d,QAAU,EAAY+d,EAAI1C,QAAU0B,YAAc,EAC1DiB,SAAW3C,SAAW,EAAI,MACzB5G,EAAI,EAAGA,EAAIqJ,MAAOrJ,IAAK,KACxB1C,EAAI0C,EACC3C,EAAI2C,EAAG3C,EAAI\/R,QAAU0U,EAAI,EAAG3C,IAC7B0L,YAAYO,GAAKC,UAAYhB,MAAMjL,EAAIhS,QAAU+R,OAErDA,EAAI\/R,QAAU0U,EAAI,EACb1C,EAAI0C,EAAG1C,EAAI\/R,QAAUyU,EAAI,EAAG1C,IAC7ByL,YAAYO,GAAKC,UAAYhB,MAAMjL,EAAIhS,QAAU+R,OAErDC,EAAI\/R,QAAUyU,EAAI,EACb3C,EAAI\/R,QAAU0U,EAAI,EAAG3C,EAAI2C,EAAG3C,IAC7B0L,YAAYO,GAAKC,UAAYhB,MAAMjL,EAAIhS,QAAU+R,OAErDA,EAAI2C,EACC1C,EAAI\/R,QAAUyU,EAAI,EAAG1C,EAAI0C,EAAG1C,IAC7ByL,YAAYO,GAAKC,UAAYhB,MAAMjL,EAAIhS,QAAU+R,aAIpD,IAAImM,IAAM,EAAGA,IAAMje,QAASie,UACxB,IAAIC,IAAM,EAAGA,IAAMne,QAASme,MAC7BV,YAAYpO,KAAK,CAACiO,SAASY,KAAKC,OAKxCvB,QACAhY,IAAIwT,eAGJS,MAAQ,MACH5Q,EAAI,EAAGA,EAAIwV,YAAY1f,OAAQkK,IAAK,KACrCmW,QAAUX,YAAYxV,GAErBiU,QAAQkC,WACTA,QAAU,CAACA,cAGV,IAAIC,EAAI,EAAGA,EAAID,QAAQrgB,OAAQsgB,IAAK,WAE1BC,QAASC,gBACPC,qBAAqBD,WACtBE,IAAMH,UACNI,YAAcD,IAAIE,WAClBC,SAAWH,IAAIjV,QACfqV,UAAYJ,IAAI9Q,SAChBmR,UAAYF,SACZG,WAAaF,UACbG,QAAUC,YAAYR,IAAItY,IAAI,SAC9B+Y,OAASD,YAAYR,IAAItY,IAAI,QAC7BgZ,SAAWH,QACXI,QAAUF,OAEVG,aAAeJ,YAAYP,YAAYvY,IAAI,SAC3CmZ,YAAcL,YAAYP,YAAYvY,IAAI,QAC1CoZ,cAAgBF,aAChBG,aAAeF,eAEf3C,MAAO,KACH8C,UACAC,WAEAjD,WACAiD,WAAaC,gBAAgB,EAAEb,UAAWA,YAC1CW,UAAYE,gBAAgB,EAAEZ,WAAYA,eAE1CW,WAAapE,SAAWiB,aAAeuC,UAAYA,UACnDW,UAAYnE,SAAWyD,WAAaA,YAKpCnC,QACAuC,UAHoB,IAGRO,WACZN,SAJoB,IAITK,WAEXhB,IAAItY,IAAI,CACJ8H,KAAM+Q,QAPU,IAOAU,WAChBxR,IAAKgR,OARW,IAQFO,YAKtBjD,OACII,QACA2C,eAAiBT,UAAY,EAC7BK,UAAYL,UAAY,EACxBU,cAAgBT,WAAa,EAC7BK,SAAWL,WAAa,EAExBA,WAAaD,UAAY,IAEzBL,IAAItY,IAAI,CAAC8H,KAAM+Q,QAAWF,UAAY,EAAI5Q,IAAKgR,OAAUH,WAAa,IACtEL,YAAYvY,IAAI,CACZ8H,KAAMoR,aAAeP,UAAY,EACjC5Q,IAAKoR,YAAcP,WAAa,IAGpCN,IAAIjV,MAAM,GAAGmE,OAAO,GAChBkP,aACA4B,IAAItY,IAAI,CAACyZ,aAAcjV,QAAQkU,UAAWD,cAKlDhC,QACA6B,IAAItY,IAAI,CAACkG,QAAS,IAEtBwM,QACA3O,UAAS,WACLhM,IAAIgP,OAAM,WACNV,QAAQkS,YAAa,CAACzQ,KAAMsR,cAAerR,IAAKsR,cAAe3gB,MA1rE\/E,MAAA,MA0rEoG+F,KACpF4H,QAAQiS,IAAK,CACTpS,QAASuQ,OAAS,EAAI,EACtBpT,MAAOsV,UACPnR,OAAQoR,WACR9Q,KAAMkR,SACNjR,IAAKkR,QACLQ,aAAcpD,MAAQI,QAAUC,YAAclS,QAAQkU,UAAWD,UAAY,GAC9E\/f,MAlsEnB,OAksEiC,WAEA,KADbga,OAEIjU,IAAI0H,aAET1H,UAER2Z,OAIH3B,QAAU2B,MADI,IAEdC,qBAAqBD,OAErBrU,SAASkD,aAAaoR,qBAAsB,CAJ9B,MAI8CD,MAJ9C,MA1FRH,QAAQC,GAgGVlB,UAEhBA,UAAate,MAAQ4e,YAAY1f,OAAU,cAsD1Cqd,aAAaxW,IAAK1F,SAAUoc,QAASmB,UAAWoD,SAAUC,cAAeC,aAAcnD,gBACxF1X,QAAUN,IAAIM,QACdpC,OAASoC,QAAQnF,OACjBlB,MAAQqG,QAAQrG,MAAQ,EACxBmhB,UAAYpb,IAAImT,OAChBkI,WAAa\/C,gBAAgBtY,IAAK1F,SAAW4D,OAAS,EAAG5D,SAAW,EAAI4D,QAAS8Z,QACjFsD,cAAgBpjB,IACXmL,EAAI,EAAGA,EAAIgY,WAAWliB,OAAQkK,IACnCiY,cAAgBA,cAAcrZ,IAAIoZ,WAAWhY,UAE7C4Q,MAAQ,EACRsH,iBArxEI,MAsxEJ7E,QACAiC,aAAa2C,eAEbpjB,EAAEygB,aAAa2C,cAAcE,QAAQ1Y,SAASsY,WAE9CvD,WACAe,QAAQ0C,eAEZA,cAAcxd,MAAK,SAAUuF,OACrBoY,QAAYxhB,MAAQiE,OAAUmF,EAC9BnK,MAAQhB,EAAEkF,MACV4c,SAAW9gB,MAAM0L,QACjBqV,UAAY\/gB,MAAM6P,SAClBwR,SAAWrhB,MAAMqI,IAAI,QACrBiZ,QAAUthB,MAAMqI,IAAI,OACpBma,cAAgBphB,SAAWigB,SAAWC,QAGtCmB,gBADWziB,MAAM6gB,WACUzf,SAAW,QAAU,eAC\/B,GAAjB4gB,cACAQ,cAAgB,EACQ,GAAjBR,gBACPQ,cAAgBC,gBAAkB,GAElCjF,UACAgF,cAAgBC,gBAAkBD,eAElCphB,SACApB,MAAMqI,IAAI,CACNqD,MAAQqW,UAAYE,aAAenB,SAAW,EAC9C3Q,KAAMqS,gBAGVxiB,MAAMqI,IAAI,CACNwH,OAASkS,UAAYE,aAAelB,UAAY,EAChD3Q,IAAKoS,gBAIT1D,OAAQ,KACJqB,SAA2B,GAAhB8B,cAAqB,EAAI,EACxCjiB,MAAMqI,IAAI,CACN+H,IAAKkR,QACLnR,KAAMkR,SACN3V,MAAOoV,SACPjR,OAAQkR,UACRxS,QAAS,IAETnN,SACAkgB,QAAUnB,SAAWY,UAErBM,SAAWlB,SAAWW,YAI1BmB,aAAc,KACVS,OA70EL,KA80EqB,GAAhBT,aACII,kBACAK,OAj1ER,MAk1EQL,iBAl1ER,OAo1EQA,iBAn1ET,KAq1E4B,GAAhBJ,eACPS,OAv1EJ,OAy1EIthB,SACI0d,OACAwC,SAAWoB,QAAU,EAAI,GAAK3B,UAE9B\/gB,MAAMqI,IAAI,CACNqa,OAAQA,OAAS,EAAI3B,UACrB3Q,IAAKsS,OAAS3B,UAAY,EAC1BlR,OAAQiP,OAASiC,UAAY,IAIjCjC,OACAuC,UAAYqB,QAAU,EAAI,GAAK5B,SAE\/B9gB,MAAMqI,IAAI,CACNsa,MAAOD,OAAS,EAAI5B,SACpB3Q,KAAMuS,OAAS5B,SAAW,EAC1BpV,MAAOoT,OAASgC,SAAW,IAM3C\/F,QACA3O,SAASkD,aAAaZ,QAAS,CACvB1O,MAAO,CACH0L,MAAOoV,SACPjR,OAAQkR,UACRxS,QAASuQ,OAAS,EAAI,EACtB3O,KAAMkR,SACNjR,IAAKkR,SACNvgB,MAx3EP,MAw3EqB,WAEA,KADbga,OAEIjU,IAAI0H,YAET1H,MACLyb,YAENzD,QACAhY,IAAIwT,oBAcHoD,aAAa5W,IAAK2W,OAAQrQ,SAC3BhM,SAAkB,GAAPgM,KAAmB,GAAPA,IACvB+S,SAAmB,GAAP\/S,KAAmB,GAAPA,IAAY,GAAK,EAEzCrM,MADU+F,IAAIM,QACErG,MAChByN,SAAW1H,IAAI0H,YACfiP,OAAQ,KACJ7E,WAAa9R,IAAI8R,WACjBC,SAAW+J,UAAU9b,IAt5EtB,MAs5EiC+b,OACpC\/b,IAAImT,OAAOjS,OAAO6Q,cACdhJ,OAAShD,QAAQgM,SAAShJ,SAAU+I,WAAW\/I,UAC\/CnE,MAAQmB,QAAQgM,SAASnN,QAASkN,WAAWlN,SACjDmN,SAASxQ,IAAIjH,SAAW,CAAC+O,KAAMgQ,SAAWzU,OAAS,CAAC0E,IAAK+P,SAAWtQ,SAASiT,OAC7EpU,QAAQmK,SAAU,CAAC1I,KAAM,EAAGC,IAAK,GAAIrP,MA55EjC,MA45E+CyN,SAAU1H,SAC1D,CACC8R,WAAagK,UAAU9b,IA95EvB,OA+5EJA,IAAImT,OAAOjS,OAAO4Q,YAClB9R,IAAIwT,WACAzB,SAAW\/R,IAAI+R,aAEfkK,mBAAiC,GAAb5C,SAAiBvH,WAAaC,SAClDhJ,OAASkT,kBAAkBlT,SAC3BnE,MAAQqX,kBAAkBrX,QAE9BgD,QAAQkK,WAAYxX,SAAW,CAAC+O,KAAMgQ,SAAWzU,OAAS,CAAC0E,IAAK+P,SAAWtQ,QAAS9O,MAv6EhF,MAu6E8FyN,SAAU1H,eAyC3G6B,MAAM7B,SACPkc,GAAKpb,2BAA2Bd,IAAImT,QAEpClZ,MADU+F,IAAIM,QACErG,MAChBoK,OAASrE,IAAIqE,OAEbgF,KAAOhF,OAAOgF,KACdC,IAAMjF,OAAOiF,IAEbtJ,IAAIM,QAAQzC,OACZ+J,QAAQsU,GAAI,CAAC1S,UAAW,aAAeH,KAAO,OAASC,IAAM,OAAQrP,MA19EjE,MA09E+E+F,IAAI0H,SAAU1H,IAz9E9F,MA29EH4H,QAAQsU,GAAI,CAACvS,UAAWL,IAAKI,WAAYL,MAAOpP,MA59E5C,MA49E0D+F,IAAI0H,SAAU1H,cAI3E4H,QAAQvG,KAAM8a,WAAYliB,MAAOU,KAAM+M,SAAU1H,IAAKoc,mBACvDve,QAAUmC,KAAOA,IAAIM,QAAQzC,UAj+EzB,QAk+EJrF,kBAA8BqF,cACzBlD,OACDA,KAAOqF,IAAIM,QAAQ3F,WAEvB0G,KAAKuG,QAAQuU,WAAYliB,MAAOU,KAAM+M,UAGrC\/M,OACDA,KAAOqF,IAAIM,QAAQmM,aAGnB4P,UAAY,GACZC,mBAAqB9jB,gBAAkB,aACvC+jB,KAAOtT,QAAQkT,YAEnBE,UAAUC,oBAAsBC,KAAKxN,KAAK,MAA2B,IAAnBvW,gBAAwB,GAAK,IAAMA,gBAAkB+jB,KAAKxN,KAAK,IAAMvW,sBAEnHgkB,iBAAmBF,mBAAqB,YAC5CD,UAAUG,kBAAoBviB,MAAQ,SAElCwiB,eAAiBH,mBAAqB,4BAMjCI,eACAN,cAAe,KACZO,UAAY,GAChBA,UAAUH,kBAAoB,KAC9BG,UAAUF,gBAAkB,GAC5BE,UAAUL,oBAAsB,GAChCjb,KAAKE,IAAIob,YAt\/ET,SA2+EJhiB,OACAA,KAAO,eAEX0hB,UAAUI,gBAAkB9hB,KAYxBqF,KACAA,IAAIuT,cAAc9I,KAAKiS,cAGvBE,mBAAqBpkB,gBAAgBwW,QAAQ,MAAO,IAEpD2E,OAASiJ,qBADOA,mBAAqB,IAAM,KAAO,gBACzCA,iBAETC,OA9gFI,MA+gFJC,iBAAmB,WACdD,SACDA,OAhhFD,KAihFCxb,KAAK0b,OAAOpJ,QACZ+I,WACIhV,UACAA,oBAKRzN,MAAQ,IACRoH,KAAKE,IAAI4a,iBACTW,qBAIJzX,WAAU,WACNhE,KAAKE,IAAI8a,WACThX,WAAU,WACNhE,KAAKE,IAAI4a,gBACLhQ,UAAY9D,kBAEhBhH,KAAKyS,GAAGH,QAAQ,SAASqJ,aAAaxM,OAC9BnP,KAAKL,GAAGwP,MAAMnM,SAAYgE,kBAAoB8D,UAAalS,OAAS,MACpEoH,KAAK0S,IAAIJ,OAAQqJ,cACjBF,uBAIRxX,SAASwX,iBAAkB7iB,MAAQ,WAGpC6iB,2BAqBF5G,oBAAoBlW,IAAK\/F,WAC1BqG,QAAUN,IAAIM,QAClBA,QAAQ6X,QAAU,EAClB7X,QAAQ4X,QAAU,EAClB5X,QAAQrG,MAAQA,MAChByd,YAAY1X,IA1kFJ,gBAkmFHsY,gBAAgBtY,IAAKid,aAAcC,aAAcC,iBAIlDvY,MAWAmE,OAdAoK,OAASnT,IAAImT,OACb7Y,SAAW0F,IAAIM,QAAQhG,SACvB8iB,OAAS,GAMLxY,MAJHtK,SAGG6iB,YACQnd,IAAI+R,SAASnN,QAEb5E,IAAImT,OAAOvO,QALf,EAWRmE,OADAzO,SACS,EAEL6iB,YACSnd,IAAI+R,SAAShJ,SAEb\/I,IAAImT,OAAOpK,SAI5B\/I,IAAI+R,SAASjU,MAAK,eACVwD,KAAOpJ,EAAEkF,MACT9C,SACAyO,QAAUzH,KAAKyH,SAEfnE,OAAStD,KAAKsD,mBAIlByY,SAAW\/a,KAAKgb,KAAK1Y,MAAQqY,cAC7BM,UAAYjb,KAAKgb,KAAKvU,OAASmU,cAC1B5D,IAAM,EAAGA,IAAM4D,aAAc5D,UAC7B,IAAIC,IAAM,EAAGA,IAAM0D,aAAc1D,MAClCiE,QAAQlE,IAAKC,cAGZiE,QAAQlE,IAAKC,KAClB6D,OAAO3S,MAAK,eAGJoP,IAAM4D,UAFK3B,UAAU9b,IAAKmd,aAEAI,UAAYjE,IAAK+D,SAAW9D,IAAKgE,UAAWF,iBAC1ElK,OAAOjS,OAAO2Y,KACPA,cAGRuD,gBAGFK,UAAUC,SAAUpU,IAAKD,KAAMN,OAAQnE,cAC5C8Y,SAASnc,IAAI,CACTqD,MAAO8Y,SAAS9Y,QAChBmE,OAAQ2U,SAAS3U,SACjB7G,QAAS,QACToH,KAAMA,IACND,MAAOA,OAEJnR,EAjpFG,SAipFQqJ,IAAI,CAClB8H,KAAMA,KACNC,IAAKA,IACL1E,MAAOA,MACPmE,OAAQA,OACRtB,QAAS,EACT1F,SA3pFY,SA4pFZP,SA9pFc,aA+pFfN,OAAOwc,UAAUjc,SA1pFW,qBA8pF1Bqa,UAAU9b,IAAKmd,iBAChBjf,OAASif,YAAcnd,IAAI+R,SAAW\/R,IAAI8R,WAC1C6L,mBAAqBzf,OAAO0f,GAAG,GAAGpc,WAClC4Y,QAAUuD,mBAAmBtU,KAC7BiR,OAASqD,mBAAmBrU,IAC5BP,OAAS,EACTnE,MAAQ,EACRwY,OAASllB,EApqFH,SAoqFcqJ,IAAI,CACxBC,SA3qFc,WA4qFd8H,IAAK,EACLD,KAAM,IACP5H,SAzqF4B,mBA0qF\/BvD,OAAOJ,MAAK,SAAUsD,MAAOC,UACrBC,KAAOpJ,EAAEmJ,MACTwc,WAAavc,KAAKwc,WAzrFnB,MA0rFCC,YAAczc,KAAK0c,YA1rFpB,MA2rFCC,MAAQ3c,KAAK2c,QACbzc,SAAWF,KAAKE,WAChB6H,KAAO7H,SAAS6H,KAAO+Q,QACvB9Q,IAAM9H,SAAS8H,IAAMgR,OACzB2D,MAAM1c,IAAI,CAACC,SAvrFG,WAurFwB6H,KAAMA,KAAMC,IAAKA,IAAK7B,QAAS,IACrEsB,OAAShD,QAAQgD,OAAQO,IAAMyU,aAC\/BnZ,MAAQmB,QAAQnB,MAAOyE,KAAOwU,YAC9BT,OAAOlc,OAAO+c,UAElBb,OAAOxY,MAAMA,OAAOmE,OAAOA,QACpBqU,gBAoBF5U,aAAayB,KAAMyK,aACjB,WACHzK,KAAKuK,MA7tFT3O,UA6tF0B6O,gBAIrB5S,kBAAkBuC,OAAQ6Z,iBAAkBxW,aAC5CrD,YAID8Z,MAAQ9Z,OAAOpC,IAAIoC,OAAO+Z,KAAK,QAAQ7a,OAAO,OAC9C8a,wBAA0BF,MAAMhlB,OAC\/BklB,wBAKLF,MAAMrgB,MAAK,eAEHwgB,WAAapmB,EADNkF,MAGPmhB,aAAe,WACfD,WAAWvK,IAFF,aAEcwK,cACvBF,0BACIH,iBAC+B,GAA3BG,yBACA3W,WAGJA,eAGR4W,WAAWxK,GAZE,aAYSyK,cAIC,YAlBZnhB,KAkBFohB,WACLF,WAAWG,QAAQ,aAChB,GApBIrhB,KAoBKohB,WApBLphB,KAsBFqO,IAtBErO,KAsBSqO,SAKf,GA3BMrO,KA2BGkO,SACVgT,WAAWG,QAAQ,aAElB,GA5wFT5Y,YA8uFezI,KA8BGkO,SAAwB,KAC9BG,IA\/BGrO,KA+BQqO,IA\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\/H,YAGrCvf,EAAE8E,GAAGC,WAAWwiB,QAAUhI"}